The year was 1966 and Niklaus Wirth had a problem. He wanted to have a compiler written for his new Algol-style language and the choices of programming language with which to write the compiler were FORTRAN and assembler language (although I don't believe that Wirth called it this at the time, I'm going to call his Algol-style language by the name that it came to have later - Algol W). FORTRAN didn't seem like a reasonable alternative and Wirth wasn't very keen on using assembler language to write a compiler for a language as complex as Algol W.

In the end, Wirth set aside the Algol W project temporarily and developed a programming language which was specifically designed for writing system-level software on an IBM 360 system. This systems programming language, the very first systems programming language other than assembler language, came to be known as PL360 (the name is sometimes written as PL/360 although it seems pretty clear that Wirth called it PL360 - I'm not 100% sure of this so please correct me if I'm wrong).

In practical terms, PL360 isn't much more than an assembly language dressed up in fancy clothes (strictly speaking, it's actually called a structured assembly language). Although a reasonable set of operators are defined, expression evaluation is strictly left to right and the programmer is responsible for managing the use of the machine registers and most aspects of memory management. In fact, it really wasn't possible to write a PL360 program without quite intimate knowledge of the System/360 architecture.

The result is a language which requires considerable care and attention on the part of the programmer. Although friendlier than an actual assembler language, the inattentive programmer is provided with plenty of potential learning opportunities (i.e. pitfalls). For example, consider the following two statements:

R1 := R1 + R2;
R1 := R2 + R1;
Although these may appear to be equivalent, they are actually VERY different. The first statement adds machine register R2 to the contents of register R1 and stores the result in R1 (i.e. it adds R1 and R2 together and stores the result in R1). The second statement is actually equivalent to:
R1 := R2; R1 := R1 + R1;
i.e. it effectively computes 2*R2 and stores the result in R1.

PL360 ends up looking pretty sad if it is considered as a high-level programming language. On the other hand, if viewed as a mid to low-level language (i.e. an assembler language in fancy clothes) then it was actually quite respectable for the era. In fact, since the goal was to create a language which could be used to do systems programming, the necessity to understand the underlying architecture in detail was arguably a language feature rather than a failing.

By 1968, a compiler had been written for the PL360 language and Wirth was able to get on with the task of getting an Algol W compiler written. The ability to write systems programming level software using reasonably conventional looking statements and expressions turned out to be quite useful and PL360 went on to be used for a variety of projects.

PL360 wasn't the only systems programming language of the era as languages like BCPL were also being developed. BCPL lead to B which lead to C and the rest, as they say, is history.


PL360 was still being used as recently as the early 1980s. I'm not sure if it is still in use today. Although I was reasonably familiar with the language during the late 1970s and early 1980s, I never used the language for anything substantial.

It has to be considered a success if measured by the original goal - to be an implementation language for an Algol W compiler. I'm really not prepared to judge it in the greater scheme of things although it clearly wasn't a failure in any sense and being the world's first systems programming language other than assembly language has to be considered a significant contribution to computing science.


Sources

  • the web page titled Summary of projects by N. Wirth at http://www.inf.ethz.ch/~wirth/projects.html (last accessed 2002/10/24)
  • the PL360 reference manual (available as a PDF file on the 'net via a hyperlink on a page titled historic documents in computer science and engineering located at http://www.fh-jena.de/~kleine/history/ (last accessed 2002/10/24))
  • personal recollections