[Info-vax] VAX VMS going forward
John Reagan
xyzzy1959 at gmail.com
Tue Jul 28 18:12:02 EDT 2020
On Tuesday, July 28, 2020 at 1:36:24 PM UTC-4, Simon Clubley wrote:
> On 2020-07-28, Arne Vajhøj <arne at vajhoej.dk> wrote:
> > On 7/28/2020 8:51 AM, Simon Clubley wrote:
> >>
> >> You tell the compiler whether you want a 32-bit or 64-bit executable
> >> and it, the linker, and OS support libraries takes care of most of
> >> the work for you (if not all the work).
> >>
> >> I wish it was that simple on VMS.
> >
> > Other environments are not doing this at all.
> >
> > Many other environments has 32 bit mode and 64 bit mode. Different
> > instruction sets and address size in the CPU. Two sets of
> > libraries. Etc..
> >
>
> They do solve the same problem in a different way.
>
> And they give you tools which makes it easy to switch between both
> environments when compiling your code.
>
> > But that is completely different from what VMS has.
> >
>
> _Very_ true.
>
> > VMS Alpha/Itanium only has 64 bit mode and 64 bit addresses in the
> > CPU, single instruction set and one set of libraries. That single set
> > of libraries just have a lot of API's only passing lower half of
> > addresses and a few passing full addresses.
> >
> > Totally apples and oranges.
> >
>
> But if the lowest-level supported language on VMS was C, then you
> could still do this in the compilers and linker along with suitably
> modified system headers without having to make major changes to your
> code. You would tell the compiler what you wanted via qualifiers just
> like you do in other operating systems.
>
> There's enough information available in C code, along with enough
> abstracted implementation details (such as pointer size) that the
> code doesn't care about unless you go looking for it, that it would
> be quite viable to do in software what other environments do in hardware.
>
> The same is true for the other high-level languages which VMS supports.
>
I'm not sure how I can do it for Fortran COMMON blocks or EQUIVALENCE
statements. COBOL levels and their implicit "union" might be interesting too.
BTW, besides OpenVMS, NonStop is a dual-sized pointer environment.
Microsoft has been adding dual-sized pointer support into clang/LLVM at this
very moment (I've been reviewing their code to make sure we can leverage it
for OpenVMS).
> Unfortunately, VMS supports assembly language as an application
> programming language. That made perfect sense 40 years ago, but
> in 2020, it's a major weakness in VMS.
>
> It's also the reason why we have a hybrid 32-bit/64-bit API interface
> instead of a flat 64-bit mode in addition to the traditional 32-bit API
> interface mode.
Yes. No argument that the vast amount of Macro-32 (and BLISS-32) in the OS
greatly influenced the choice that was made. Lots of money and time was
spent looking for the magic converter for Macro-32 to anything. Nothing was
going to do the trick. The Macro compiler itself has some latent infrastructure
for converting Macro-32 to C. I guess VEST too given that we allow a mixing
of native and translated code.
More information about the Info-vax
mailing list