<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>
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.


<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>