KLENSIN@INFOODS.MIT.EDU (John C Klensin) (06/10/91)
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.