PL/I
Computing in the early 1960s resembled an archipelago of isolated communities. On one side, scientists operated their IBM 7090s, coded in FORTRAN, and gathered at SHARE meetings—a user group for IBM mainframes. On the other, the business world worked on IBM 7080s, swore by COBOL, and organized its own circles within G.U.I.D.E—another IBM computer user group. A few specialized machines like the IBM 7750 had their dedicated languages, such as JOVIAL (Jules’ Own Version of the International Algorithmic Language).
This geographical partition of computing territory was beginning to show its limits. Researchers no longer wanted to wait hours at their terminals to retrieve a simple numerical value; they demanded structured, readable reports worthy of their work. Their data files were swelling and now rivaled the volumes handled by businesses. On the commercial side, marketing departments were discovering the joys of statistical analysis and demanding floating-point calculations on their sales data. IT managers found themselves juggling two operating systems, two teams of programmers who literally didn’t speak the same language, and budgets that were spiraling out of control.
IBM had already laid the groundwork for a solution with the System/360 and OS/360, this family of machines and operating systems designed to unify everyone’s needs. What remained was to create a programming language that would follow the same philosophy. In October 1963, IBM and SHARE created the Advanced Language Development committee. Its mission was to define a universal language that would end this computing Tower of Babel.
The assembled team blended backgrounds and skills. Hans Berg from Lockheed brought his training expertise, Jim Cox from Union Carbide knew FORTRAN inside and out, Bruce Rosenblatt from Standard Oil chaired the discussions. On the IBM side, C. W. Medlock was the expert in optimized FORTRAN compilers, Bernice Weitzenhoffer moved effortlessly between FORTRAN and COBOL, George Radin led the project with his scientific programming experience. Meetings followed one after another every two weeks, three or four days at a stretch, mainly between New York and Los Angeles. Members outside IBM kept their full-time positions, with this new language remaining a side mission. Originally planned for December 1963, the specifications freeze ultimately slipped to February 1964. Deadlines were tight.
The idea of extending FORTRAN was abandoned. Its syntax didn’t fit modern terminals, its declarations organized by type rather than by identifier clashed with conventions, its column-major array storage puzzled business application programmers. The necessary extensions would have so transformed FORTRAN that maintaining any compatibility lost its meaning.
The language was initially called NPL—New Programming Language—in the grand tradition of descriptive acronyms. In 1965, a conflict with the British National Physical Laboratory forced IBM to rename it PL/I (sometimes written PL/1). The first official presentation took place in March 1964 in San Francisco, before the SHARE assembly. Reactions were mixed. Some praised its comprehensiveness and attention to programmers of all levels. Others pointed to its complexity and redundancies. One SHARE member compared it to “a Swiss Army knife with a hundred blades,” a metaphor that spoke volumes about the project’s ambitions.
Compiler development landed in IBM’s Hursley laboratories in England. John Fairclough’s team took charge of stabilizing the language and making it practically usable. Without the Hursley programmers, PL/I would have remained a beautiful theory. They built its compilers, participated in its standardization, and transformed an ambitious specification into an everyday working tool.
PL/I shook up established conventions. It introduced asynchronous tasks, defined ON conditions to specify code blocks to execute during particular events, authorized recursive procedures with static and automatic storage. Its palette of data types was impressive: arithmetic or character strings, decimal or binary, fixed or floating, real or complex. Arrays accepted arbitrary dimensions with freely chosen bounds. Input-output received particular care, representing more than 10% of the language definition. PL/I married FORTRAN’s formatting capabilities with certain COBOL functionalities for record processing, while exploiting OS/360’s new possibilities like asynchronous input-output.
One of PL/I’s most controversial peculiarities resided in its declaration handling. The language didn’t require all attributes to be explicitly declared. In case of omission, implicit types were assigned according to variable usage in the program. Missing attributes received default values depending on those explicitly mentioned. This flexibility responded to the constraints of an era when each program submission involved waiting and delays.
PL/I’s evolution testifies to a constant formalization effort. The first 1964 documents left numerous gray areas and ambiguities. Ray Larner and John Nicholls developed an initial formal semantic definition called Universal Language Definition II. The Vienna laboratory then took over with an even more rigorous definition. PL/I thus joined the select circle of the best-defined languages of its time.
Success was forthcoming. In the 1970s, IBM sold more PL/I compiler licenses than FORTRAN for System/370. COBOL certainly kept first place for business applications, but PL/I had found its niche. The language and its variants were used to program entire operating systems like MULTICS and OS/VS2 Release 2, as well as numerous compilers. Educational subsets facilitated its teaching in universities.
PL/I favored object code efficiency and ease of use over theoretical elegance. Its development relied on programmers’ concrete experience rather than abstract mathematical considerations. This philosophy contrasts with current concerns like extensibility or formal program verification.