The PL/I Family

Language classifications:

| ACME | ALECS | Apple | CPL | EPL | ESPL-1 | GPL | HAL/S | LSD | MPL | NICOL | PARSEC | PEARL | PL/C | PL/DS | PL/M | PL/P | PL/PROPHET | PL/S | PL/zero | PLAGO | PLUM | PLUS | PLUTO | PL/6 | PL.8 | REXX | SabreTalk | SL/I | SP/k | SPL | SPL/I | TACPOL | XPL | PL/I extensions | Non related | Pending |

ACME ACME, or PL/ACME is an incremental compiler for a PL/I dialect from Stanford University. The main omission from standard PL/I is nested block structure and scoping. Extensions to RECORD I/O allow ACME programs to communicate directly with laboratory instruments. ACME ran on System/360 computers.

Breitbard, Gary Y, and Wiederhold, Gio, "The ACME Compiler".

ALECS ALECS (Ames Laboratory Experimental Control System) is PL/I subset developed at the Ames Laboratory of the US Department of Energy (at that time the Atomic Energy Commission).

Campbell, J.H. ; Covert, G.F. ; Helland, B.J. ALECS language reference manual

Apple Apple A PL/I subset developed at General Motors Research Laboratories. Apple was the primary application language for the MCTS timesharing system. Both Apple and MCTS were written in a more restricted PL/I subset called MALUS (Latin for "Apple"), originally bootstrapped using XPL, and then made self-hosting.

Marcotty, M. and Schutz, H., "The Systems Progranming Language MALUS", Software - Practice and Experience, 4, No. 1 79-90 (1974).

CPL CPL (Conversational Programming Language) was an interactive PL/I subset that ran on DEC PDP-10, Decsystem-10, and Decsystem-20 computers.

Another (or possibly the same) CPL was developed by Allen-Babcock Computing for IBM as the application language for their "Conversational Programming System."

decsystem10/20 Conversational Programming Language User's Manual. Digital Equipment Corporation DEC-10-LCPLA-B-D; 1976.

EPL EPL (Early PL/I) was a subset of PL/I used to build the Multics Operating System until a full PL/I compiler became available. An even more restricted subset REPL (Restricted EPL) was defined excluding PL/I features for which EPL generated inefficient code. has information on EPL and Multics.

ESPL-1 ESPL-1 (or ESPL/1) "an offshoot of PL/I called ESPL-1 (Electronic Switching PL/1) which was basically PL/I with some variations for extra-easy bit handling and so-on. ... it was - I believe - a joint venture between IBM and ITT" (now Alcatel).

[posted to usenet:comp.lang.pl1 Mon, 7 Oct 2002].

GPL GPL(General Programming Language) is the implementation language for Honeywell GCOS7. Formerly HPL, the language was renamed GPL in the 1980s. HPL was originally developed as a cross-compiler on Multics, written in PL/I.

Other Honeywell implementation languages were MLP, a PL/I-like language used to develop GCOS 64, implemented as a macro processor on the GE-635 which generated NAL assembler, PL/8, developed by Toshiba and used by Honeywell to develop GCOS8, and BPL developed by Honeywell and NEC.

HAL/S HAL/S is a realtime language developed for NASA by Intermetrics (now part of L-3 Communications) in the 1970s for programming embedded systems for the Space Shuttle program. The initial HAL/S compiler was developed using XPL.

HAL/S Language Specification.
Ryer, Michael J. Programming in HAL/S. NASA, 1979.

LSD LSD(Language for System Development), also called LSyD, is a portable systems-programming PL/I subset from Brown University. "Improvements of LSD over PL/I have been made to include pointer chasing methods, structure definitions, character facilities, debugging and program linking."

Ulicky, Chris, Magel, Ken The Language for Systems Development, version 4
Bergeron, R. Daniel, Gannon, John D., and van Dam, Andries. "Language for System Development." Proceedings of the SIGPLAN symposium on Languages for system implementation (1971):50-72.

1. "Motorola Programming Language", a PL/M-like language for Motorola 68XX processors.
2. "Microdata Programming Language", a similar language for the Microdata 32/S minicomputer.
MPL Reference Manual
3. An IBM language for microprogramming various models of System/370.
MPL/145: A Language and Compiler for System/370 Model 145 Microprogamming
MPL/135: A Language and Compiler for System/370 Model 135 Microprogamming
These MPLs are not necessarily the same as Richard Eckhouse's microprogramming language MPL.
Nicol NICOL "A small, limited, and modified subset called NICOL 1 was implemented by Massachusetts Computer Associates in the fall of 1965 on the IBM 7094." Sammet, Jean; Programming Languages: History and Fundamentals; Englewood Cliffs, NJ; Prentice-Hall, Inc., 1969; p.542.

NICOL is one of the earliest PL/I implementations.

Christensen, C., and Mitchell, R. Reference Manual for the NICOL 1 Programming Language, 3rd ed.; Wakefield, MA; Computer Associates, CA-6511-3011; 1965.
Christensen, C., and Mitchell, R. Reference Manual for the NICOL 2 Programming Language; Wakefield, MA; Computer Associates, CA-6701-2611; 1967.

Brian Spoor reports that ICL developed a language also called NICOL (NIneteen hundred COmercial Langauage) for the 1900 series. This language was a subset of PL/1 designed as an easy step to a computer from a tabulator. "From what I remember it was similar to RPG-II."

PARSEC PARSEC is an extensible language with PL/I-like syntax derived from PROTEUS.

PARSEC reference at FOLDOC.

PEARL PEARL (Process and Experiment Automation Real-Time Language) is a process-control language deleloped between 1968 and 1973 in Germany by a working group from industry and universities. Pearl has extensive real-time and parallel-processing facilities, but originally lacked pointers, recursive procedures, and a fixed-point data type. PEARL is widely used in Europe.

Pearl 90 Language Report.

PL/C PL/C (Programming Language/Cornell) is a large subset of the full PL/I language designed by Cornell University in the early 1970s as a teaching language. PL/C generated several versions, including PL/CT for interactive terminal use, and PL/CS, a subset used by the Cornell Program Synthesizer.

Major PL/I features missing from PL/C are the preprocessor (all), and the BASED and CONTROLLED storage attributes. PL/C adds extensive debugging and error recovery facilities.

Several PL/C-based cross compilers were developed at the University of North Carolina-Charlotte: PLCD generated code for the DEC PDP-11, PLCI for Interdata computers, and PLCV for Varian systems.

Conway, Richard W., and Wilcox, Thomas R.; "Design and implementation of a diagnostic compiler for PL/I"; CACM 16(1973); 169-179.

PL/DS PL/DS (Programming Language for Distributed Systems) "provides PL/I-like coding power and is very similar to the Programming Language/Systems (PL/S) and Programming Language/Advanced Systems (PL/AS) languages used internally by IBM to produce other System/370 operating systems and control programs."

PL/DS was used by IBM to develop the DPPX operating system for the IBM 8100 system. It was ported to System/370 architecture (PL/DS2) and used to port DPPX to the 9370 processor.

Abraham, R., and Goodrich, B.F., "Porting DPPX from the IBM 8100 to the IBM ES/9370: Feasibility and Overview"; IBM Systems Journal, 29(1); 1990; 90-140.

PL/M PL/M (Programming Language/Microcomputers) is a language devised by Digital Research for Intel in 1972. PL/M was the implementation language for CP/M. Versions include PL/M-80, PL/M-86, PL/M-386.

INTEL MCS-8: A Guide to PL/M Programming Rev.1, Sep 1973 (PDF), at
PL/M-86 Programming manual for 8080/8085-based Development Systems Rev.3, 1978 (PDF), at
PL/M-386 Programmer's Guide (PDF).

The FORTRAN source for PL/M-80 and the C version generated by F2C can be found at Hobbes.

Related languages MPL (Motorola Programming Language) and SPL/M (Small Programming Language for Microprocessors) generate code for the Motorola 6800.

PL/P PL/P (Programming Language for PR1ME) is a high-level systems language used for the implementation of the PRIMOS operating system. PL/P was used primarily for the kernel. A related, though slightly different subset, SPL, was used to write external commands.
[Thanks to Dennis Boone for the distinction between PL/P and SPL]
PL/PROPHET PL/PROPHET is a programming language for the PROPHET system used by Pharmacologists.

Castleman, P.A., et al; "The Implementation of the PROPHET System"; NCC 43, AFIPS (1974).

PL/S PL/S is an IBM systems programming language for S/360, S/370, and z/Server systems. Versions of PL/S are PL/S-II, PL/S-III, and PL/AS. An early (late 60's) version of PL/S was also known as BSL (Basic Systems Language).

IBM Corporation; Guide to PL/S II; International Business Machines Corp., 1974. GC28-6794-0.

Wiederhold, Gio, and Ehrman, John; "Inferred SYNTAX and SEMANTICS of PL/S"; Proceedings of the SIGPLAN symposium on Languages for system implementation New York, ACM, Inc., October, 1971; p.111-121.

PL/zero PL/zero is a minimal subset of PL/I designed for teaching introductory programming.
Compare to SP/k(Contrast with PL/0.)

At least one actual PL/zero compiler was built. Otherwise It was implemented as a notional subset of PL/C or other PL/I compilers.

Kennedy, Michael, and Solomon, Martin B.; Structured PL/zero plus PL/one; Englewood Cliffs, NJ, Prentice-Hall, 1977.

PLAGO PLAGO (Polytechnic Load And GO translator) is an interactive interpreted PL/I subset for teaching developed at Brooklyn Polytechnic Institute.

Lawson, H.W., Habib, S.,; "PLAGO/360 A PL/I Machine Implementation", Polytechnic Institute of Brooklyn Report PIBEE 71-001, 1971.

PLUM PLUM (Programming Language for the University of Maryland) was a load and go compiler for Univac 1100 series computers developed by Marvin Zelkowitz. PLUM development began about 1971, it was operational around 1975, and was used until 1980 at the University of Maryland. About 40 copies were distributed to other Univac sites.

PLUM was a load and go compiler. Typical compile times were about 1 second or less. Major limitation was size of about 2000 PL/1 source statements.

One of the interesting features of Plum is that its implemention of "safe pointers." No lost memory, dangling references, or other pointer violations were possible.

The PLUM source and documentation is available as zipped plain-text files from here,
or (in EXEC8-specific format) from the UUSIG library.

Zelkowitz, M. V.; PLUM: The University of Maryland PL/1 System; University of Maryland Technical Report TR-318; College Park, MD, Univ. of Maryland, 1974. (PDF version online)
Zelkowitz, M. V.; PL/I Programming with PLUM; Geneva, IL, Paladin House Publishers, 1976.

  1. Programming Language for UNIVAC Systems; a language designed by Sperry for systems programming.
  2. PL/1 Universität Stuttgart; a PL/I dialect similar to PLAGO.
PLUTO PLUTO Teaching-oriented PL/I compiler from the University of Toronto. PL/I Made More Useful Teaching Tool (Computerworld).
PL-6 PL-6 is a high-level systems language used by Honeywell for CP-6.

Here is a small sample of PL-6 code.

CP-6 Introduction to PL-6

PL.8 PL.8 (or PL8) is a high-level systems language used by IBM for the 801 RISC computer, later used for the RS/6000 and microcode for various mainframe models. The name derives from the idea that the languge is 8/10 of PL/I. A PL8 front-end has recently been developed for the Gnu Compiler Collection (GCC).

Auslander,M.,, "An overview of the PL.8 Compiler", Proceedings of the SIGPLAN'82 Symposium on Compiler Writing.
Gellerich,W., "The GNU 64-bit PL8 compiler: Toward an open standard environment for firmware development." IBM Journal of Research and Development 48(2004); 543-556.

REXX REXX is an interpreted command language based on PL/I. REXX is the primary command language for IBM VM, TSO, and OS/2 systems and is available for DOS, Windows, and Unix.

REXX has no variable declarations; all variables are character strings. A notable REXX feature is associative arrays, known as stems.

"Programming Language - REXX" ANSI standard X3.274-1996.

See The Rexx Language Association for additional information on Rexx.

RUSH RUSH (Remote Users of Shared Hardware) was a conversational dialect of PL/I developed by Allen-Babcock Computing for their timesharing service in 1964.

Allen-Babcock Computing. RUSH Reference. Los Angeles, Allen-Babcock. 1968


SabreTalk SabreTalk is a PL/I subset developed by American Airlines for their SABRE system. The Sabretalk compiler ran on MVS (zOS) and generated 360 assembler code which was then assembled to produce the executable program. Because of this SabreTalk supported imbedded assembler code. At some point it it's life Sabretalk was renamed PL/TPF.
SabreTalk Reference Guide

SL/1 SL/I (Student Language/One) is an interpreter for a PL/I subset that ran on the IBM 1130 minicomputer.

Jackson, M., Boulton, P., and Lee, E.S.; "SL1 on the IBM 1130"; Proceedings of the Joint Meeting of Canadian and Midwestern Regions of COMMON; Chicago, 1967.

SP/k SP/k is a series of PL/I subsets (k=1:8) for instructional use in teaching introductory computer programming. Compare to PL/zero.

Holt, R.C. et. al., "SP/k: A System for Teaching Computer Programming", CACM 20(1977); 301-309.

There is also CSP/k (Concurrent SP/k).

  1. A systems programming language for PR1ME computers (see PL/P).
  2. Student Programming Language: An interpreted instructional PL/I subset for the IBM 360 programmed in XPL.

SPL/I SPL/I is a language similar to HAL/S developed between 1972 and 1976 by the US Naval Research Laboratory (NRL) aned Intermetrics as a signal processing language.

Amoroso,Serafino, and Wegner, Peter. Report to the High Order Language Working Group 32-33.

TACPOL TACPOL (TACtical Procedure Oriented Language) is a PL/I subset "Command and Control" (C&C) language developed by Litton for the U.S. Army in 1967. TACPOL was originally used in programming the "TACFIRE" (tactical fire direction) system for field artillery fire-control.

Hess, Herman, and Martin, Charles. "TACPOL-A Tactical C & C Subset of PL/I", Datamation, April 1970. 151-157.

By 1995, TACPOL had been largely superseded, presumably by Ada.

Hook, Audrey A., A survey of Computer Programming Languages Currently Used in the Department of Defense. Alexandria, VA: Institute for Defense Analyses, 1995. (PostScript document)

Data Systems Division, Litton Systems, Inc. TACPOL, a procedure-oriented language for tactical commmand and control applications. Document MS 2866, 1968.

TACPOL Reference Manual (USACSCS-TF-4-1)

XPL XPL was designed in the sixties by McKeeman, Horning, and Wortman as a small subset of PL/I plus extensions intended for compiler writing.

McKeeman, William M., Horning, James J., and Wortman, David B.; A Compiler Generator; Englewood Cliffs, NJ, Prentice-Hall, 1970.

See the XPL website for additional information.

Extensions PL/I Extensions:
(A Parse Request Language) a PL/I extension to add BNF parsing routines.
(Graph Algorithm and Software Package) a PL/I extension for programming graph algorithms.
(Graph Programming Language/One) a PL/I extension for handling graphs as a fundamental datatype.
a PL/I-like language for microprogramming. Eckhouse, Richard H.; SUNY/Buffalo Department report 1-71-MU, June, 1971.
(Partial Differential Equation Language) a PL/I preprocesor for solving partial differential equations.
(Formula Manipulation Compiler) a PL/I extension for symbolic mathematics.
(Programming Language for Allocation and Network Scheduling) a PL/I preprocesor for developing scheduling algorithms.
is a simulation language implemented as a PL/I preprocessor.
Unrelated Languages not  related to PL/I:
APL an algorithmic language designed by Ken Iverson.
PL/0 a simplified Pascal-like language. (contrast with PL/zero).
PL/360 a high-level assembler language for IBM systems.
PL/B (Programming Language for Business), the language formerly named DataBus.
PL/SQL an Oracle database retrieval language resembling Ada.
PL/Z A programming language for Zilog microprocessors.
PL-11 a high-level assembler for PDP-11 systems resembling PL/360.
PL-516 a high-level assembler for DDP-516 systems resembling PL/360.
Pending Pending additions to list:

This table is an attempt to gather in one place information regarding languages in the PL/I family. The distinction between a language and a dialect or implementation is somewhat arbitrary, affecting the selection of what's included. If anyone has additional information or pointers to web pages for any of these or other PL/I-related languages, please contact me.

I am particularly interested in the following:
  1. Sources or source listings for PL/C, Sabretalk, PLUTO, or SL/1.
  2. Language reference or sources for Malus or Apple.

Free Online Dictionary of computing, Denis Howe, editor.
The Language List, Bill Kinnersley, maintainer.
Interactive historical roster of computer languages, Diarmuid Pigott, author. maintains a library of scanned original manuals for a collection of older software.

Dennis Boone, Tim Challenger, Bernd Oppolzer, Clay Phipps, Diarmuid Pigott, Robin Vowels, Brian Spoor, Marvin Zelkowitz.

Last modified 16 Dec 20212.
(deleted BRUIN)