PL/I (Programming Language One, pronounced "P-L-one") was defined in 1964 by IBM together with its user group SHARE. It was meant to be the single language for IBM's new System/360, serving engineers, business programmers and systems programmers alike. To understand why IBM designed PL/I to replace Fortran and COBOL, you have to look at what System/360 promised: one compatible family of machines for every kind of customer.

Why IBM designed PL/I to replace Fortran and COBOL

Before System/360, IBM sold separate machine lines for scientific and commercial work, and customers used separate languages to match: FORTRAN for calculation, COBOL for records and reports. By the early 1960s, the line between the two was blurring. Scientific users needed file handling and character data; business users wanted floating point and more expressive control structures. Systems programmers were still writing in assembly.

In 1963, IBM and SHARE formed a committee, often called the "3 by 3 committee", with members from IBM and from customer sites. Its first report in 1964 described a language called NPL (New Programming Language). Because the National Physical Laboratory in the UK already used those initials, it was renamed PL/I. The goal was explicit: combine the numerical strengths of Fortran, the record and decimal handling of COBOL, and the block structure of ALGOL 60 in one language for one architecture.

Design and key features

PL/I was large by the standards of its time, and many of its features were new to mainstream programming:

  • Exception handling with ON conditions such as ON ENDFILE, ON ZERODIVIDE and ON CONVERSION.
  • Pointers and based variables, which made linked data structures and systems programming possible.
  • Structures (records) borrowed from COBOL, plus arrays, bit strings and character strings.
  • Fixed decimal arithmetic for money, alongside binary and floating point.
  • Multitasking and a macro preprocessor.
  • No reserved words, so keywords could also be used as variable names.

The language also defaulted aggressively: undeclared variables got types based on their first letter, and values converted between types implicitly. That made small programs short, but it also produced surprising results, and later style guides recommended declaring everything.

A short PL/I example

TOTALS: PROCEDURE OPTIONS(MAIN);
   DECLARE TOTAL FIXED DECIMAL(7,2) INITIAL(0);
   DECLARE I     FIXED BINARY(15);

   DO I = 1 TO 5;
      TOTAL = TOTAL + I * 1.25;
   END;

   PUT SKIP LIST('TOTAL:', TOTAL);
END TOTALS;

The FIXED DECIMAL(7,2) declaration is very COBOL; the DO loop and block structure are closer to ALGOL.

How PL/I was used

IBM's first production compiler, PL/I F, shipped for OS/360 in 1966, later followed by the Optimizing and Checkout compilers. Adoption was steady but never the clean sweep IBM had hoped for. Fortran and COBOL users had large code bases and little reason to switch, early compilers were slow, and the language was hard to implement on smaller machines.

Still, PL/I found important homes:

  • Multics, the influential MIT, Bell Labs and General Electric time-sharing system, was written largely in PL/I, beginning with an early subset compiler called EPL.
  • Banks, insurers and government agencies built large mainframe applications in it, many of which are still running.
  • Cornell University's PL/C and the University of Toronto's SP/k made teaching subsets popular in universities in the 1970s.

ANSI standardised the language in 1976, and a smaller "Subset G" standard followed in 1981, implemented on minicomputers and microcomputers, including Digital Research's PL/I-80.

Influence and legacy

PL/I's descendants are mostly systems languages. IBM used PL/S internally for operating system work. Gary Kildall's PL/M, written for Intel microprocessors in the early 1970s, was used to write the CP/M operating system. Ideas such as structured exception handling, which PL/I pushed into the mainstream, reappear in Ada, C++ and Java. The language also became a cautionary tale about trying to be everything at once, and that lesson shaped later language design debates.

Is PL/I still used today?

Yes, mainly on IBM Z mainframes. IBM still sells and updates Enterprise PL/I for z/OS, and many financial and public-sector systems depend on PL/I code written decades ago. New projects are rare, and the main work is maintenance and modernisation. Looking back at why IBM designed PL/I to replace Fortran and COBOL helps explain both its ambition and why those two older languages outlived its plan.

Frequently asked questions

Did PL/I actually replace Fortran or COBOL?

No. Both had large installed bases and strong user communities, and both were standardised and available from many vendors, while PL/I was closely tied to IBM. PL/I became a third major mainframe language rather than a replacement for the other two.

Why was PL/I considered so complex?

It combined features from Fortran, COBOL and ALGOL, plus exception handling, multitasking and a preprocessor, all in one language. Implicit conversions and default rules added further surprises. Few programmers ever used all of it, and compilers were expensive to build.

Not directly. C descends from BCPL and B. However, Dennis Ritchie and Ken Thompson had worked on Multics, which was written in PL/I, so the Bell Labs team knew the language well before they designed Unix and C.