Date : Mon, 10 Jun 1991 02:24:53 -0400 (EDT)
From : John C Klensin <KLENSIN@INFOODS.MIT.EDU>
Subject: PL/I
I replied privately on this, but, since there seems to be some
confusion and enough interest, this is intended to be a
clarification/correction to several recent messages.
--There are two ANSI Standards for PL/I, with ISO parallels. They are,
respectively,
ANSI X3.53-1976, Reaffirmed 1987. Also known as ISO6166. This
describes "full" PL/I. Implementations claiming conformance to this
are, or were, available from PRIME and several mainframe-sized machines
of the Honeywell (Bull), Sperry (Univac), Sperry (Burroughs), etc.,
persuasion. For a number of technical reasons, the IBM compilers for
the 370-architecture machines do not conform to this Standard, but, if
one avoids certain uses of the aggregate language and programs around a
few built-in functions, the level of compatibility is reasonably good.
ANSI X3.74-1987. Also known as ISO6522. This describes "PL/I General
Purpose Subset" (USA) or "General Purpose PL/I" (ISO). This is a
language that contains most important features of X3.53, plus a few
updating extensions. It is intended to be very portable, yet large
enough to do useful applications work. The original version of this
Standard (see below) did not have the latter property, and may have
lacked the former one. It would take a relatively small number of
upward-compatible modifications to bring, either the IBM mainframe
compilers or an X3.53-conforming compiler into conformance with this.
It is inappropriate for anyone to claim conformance to any other
Standard at this point.
However, there was a previous version of X3.74, completed in 1981. It
represents a smaller subset of the language than the 1987 version, a
subset that turned out, in practice, to be much too small for practical
and portable applications work, although it was adequate for certain
systems programming tasks, such as writing PL/I (and other) compilers.
The DEC VAX/VMS and Data General compilers, at least one of the
[non-mainframe] IBM compilers, and several other things floating around
claim conformance to X3.74-1981. Almost all of these contain extensions
that bring the general size of the language to approximately that of
X3.74-1987: each vendor's customers discovered that the 1981 subset was
too small to do practical work and insisted on modifications.
Now...
>I saw an ad in PC Week (or was it Byte?) some months ago for a PL\I compiler
>for '386s. It wasn't DR or MS or IBM.
Almost certainly LPI. LPI claims conformance to X3.74 and, in their
advertising, strongly implies that the "X3.74" they are talking about is
the current (1987) version. It isn't. They have an implementation
that, at best, narrowly conforms to the obsolete 1981 version. Comments
above about the suitability of the 1981 version apply. Questions have
been raised about even that level of conformance, and LPI has
historically (I haven't called them in a year or so) not been enthused
about outside critical evaluation. I have heard from a number of
unhappy customers, but it could be a biased sample. The LPI compilers
are not in the "cheap" or "free" category, by a considerable margin.
They run under several flavors of U**X, and on an MSDOS base. If I
recall, the latter require 386s and significant memory.
>>I need to obtain a PL/I compiler (close to full implementation) for any of
Something could be "close to full implementation" if it conformed, or
nearly conformed, to one of:
ANSI X3.53-1976 / ISO6166
ANSI X.74-1997 / ISO6522
The de facto "standard" of the IBM PL/I Optimizing Compiler.
>> Microport Unix System V/386
Possibly LPI. But expensive and not nearly a "full implementation"
>> MS-DOS
Possibly LPI. Also see below.
>> CP/M (just about any soft-sector 5 1/4" format will do).
See below.
>Well, the beast compiler we used to use on our
>IBM 370 was a wee bit on the overweight side. I mean, when you
>stuff all the goodies from Algol, COBOL, FORTRAN and whatnot
>in one bag, it won't exactly be petite.
An old and interesting slander. X3.53-1976 is a smaller language
than today's Ada, which exists on several of the machine types cited.
And X3.74 (even the 1987 version) is arguably smaller than the proposed
Fortran 9X and even the current version of ANSI/ISO BASIC. One way to
view the derivation process that produced X3.74 was that the committee
went back to X3.53 and pruned everything that was not appropriate for
wide implementation, everything that was really not needed for any good
purpose or that had been proven to be error-prone, and everything that
could not be done in a way that permitted widely-available and accepted
implementations to conform. It is really a nice way to work on a
standard or anything else, and, if done well, produces a great deal of
cleanliness as distinct from the appearance of warts on cancerous
growths that is often associated with stuffing several generations of
"modern" features into languages that were never intended to accomodate
them. How do I know? I chaired the committee during most of the
critical period.
Keep in mind that the first serious commercial implementations of
PL/I, the so-called IBM PL/I level F and level D compilers, ran on
machines that, by today's standards, were very small. The level D
compiler in particular ran on the System 360/Model 20, a 16 bit machine
that was typically configured with 16Kb or less of memory and that would
run only about 2/3 of the 360 instruction set.
>Digital Research Inc sold a PL/1G compiler for CP/M. "G" was supposed to be
>a relatively machine independent subset of fully bloated IBM PL/1.
>Supposedly a semi-international standard. PL/1 G was available on a lot of
>different platforms. Maybe DRI still has a few copies of it, perhaps for
>machines other than CP/M.
During its development period in circa 1975-1980, the standards
technical committee (called "X3J1", another term you will see floating
around) referred to what became X3.74-1981 as "subset G". That internal
terminology was picked up by DRI to make make "PL/I-G" and "Subset G
PL/I" terms. Neither language ever existed in the standards arena.
More important, whatever they are, they are not PL/I even though they
share syntax with it. Their implementations of a number of features
are, to put it mildly, "novel". And, has been mentioned, their
implementations are infested with bugs. My impression, from having used
all three, is that the CP/M-80 version is in better shape than the
CP/M-86 version, which is in better shape than the MSDOS version.
None of the three were ever actively and effectively maintained and
that situation got worse when DRI effectively went out of the language
business.
>Also, LPI (I think it was LPI, or maybe it was Greenhills) builds their
>compilers in PL/1, and since they have to port PL/1 first to each platform,
>there's likely to be a commercial version of their PL/1 for the platform you
>want.
It is, or was, LPI. If, by "commercial", you mean "they sell it",
then "yes". If "commercial" means "suitable for developing commercial
programs", then this is questionable.
>I pondered using PL/1G on my CP/M machine, then I discovered it didn't allow
>you to "*" array declarations in procedure argument declarations so I
>abandoned it.
Or bit strings longer than 16 bits, or many uses of BASED variables,
or the PL/I condition-handling model, or,.....
>Microsoft did have a CP/M version of PL/I.
No, Microsoft didn't. Digital Research did. The original CP/M-80
version started as a pet project of Gary Kildall's.
>I have it laying around somewhere, sans docs,
The quality of the documentation was such that you aren't missing
very much.
>but I seem to remember it was a pretty good language.
The nasty comments above relate to the relationship between what DRI
was selling and "full implementation" or "Standard" PL/I. If one viewed
it as a PL/I-like language and could work around the bugs and
idiosyncracies in that context, the code quality, optimizations, etc.,
especially of the CP/M-80 version were somewhere between "excellent" and
"outstanding".
IBM does make a compiler for OS/2. I have not tested it, but, from what
I can tell from documents and rumors, it appears to be pretty solid. I
understand IBM has announced that conformance to X3.74-1987 is a
strategic direction (or words to that effect) for this compiler.
--john klensin Klensin@INFOODS.MIT.EDU
Opinions expressed above are mine, and do not necessarily represent
those of ANSI, X3, ISO, MIT, or the various parties whose names I've
mentioned. Trademarks are the properties of their respective owners.
Despite their repeated advertising, "PL/I" is not a trademark of Digital
Research Inc.