acm-header
Sign In

Communications of the ACM

BLOG@CACM

Did Grace Hopper Create the First Compiler?


Herbert Bruderer

Heinz Rutishauser (ETH Zurich, Switzerland) is regarded as the developer of automatic programming. This is the fundament for the compiler (program for the translation of a higher programming language to machine language) (see Heinz Rutishauser: Automatische Rechenplanfertigung bei programmgesteuerten Rechenmaschinen, Birkhäuser Verlag, Basel 1952). At that time one spoke of "automatic programming." This term is misleading, however, because the instructions were written by a person and not by the machine.

Rutishauser is also one of the fathers of the Algol programming language. Friedrich Bauer (Germany), for example, also contributed to its development. Algol served as the foundation for a series of "descendants" (algorithmic languages) such as Pascal.

With his programming language Plankalkül, Zuse was far ahead of his time. Since practically no notice was taken of this, however, its influence was naturally very limited. Grace Hopper (USA, 1952) and Corrado Böhm (Italy, 1954) were concerned with formula translators (compilers), as were Halcombe Laning and Niel Zierler (USA, 1954).

Precursors of the compiler were the Planfertigungsgeräte (programming devices) for the Z4 of Konrad Zuse (1945, also called the Programmator, not completed) and the Harvard Mark 3 of Howard Aiken (1950). The instruction tapes were coded by means of an encryption machine (see Heinz Rutishauser, Ambros Speiser; Eduard Stiefel: Programmgesteuerte digitale Rechengeräte (elektronische Rechenmaschinen), Birkhäuser Verlag, Basel 1951, pages 10 and 63).

According to the following interpretation, a program is written in a higher programming language, whereas a computation plan is written in the machine language:

In order to distinguish between the terms "program" and "instruction sequence" (also referred to as the computation plan [...]), it is emphasized once again that a program represents the still very general numerical solution of the given problem, expressed as formulas and commands, that is in fact suitable for every automatic computer. By contrast, the term instruction sequence always refers to a specific computing machine (see Heinz Rutishauser, Ambros Speiser and Eduard Stiefel: Programmgesteuerte digitale Rechengeräte (elektronische Rechenmaschinen), Birkhäuser Verlag, Basel 1951, pages 43–44).

The same authors also deplored (1951) the disparity between high computational speed on the one hand and inadequate operational reliability, together with the time-consuming preparation of the problem up to the making of the perforated tape, on the other hand.

It cannot be disputed that program controlled computers occasionally produce errors arising from their components (relays, vacuum tubes, resistances, capacitors, mechanical parts, etc.) (see Heinz Rutishauser, Ambros Speiser and Eduard Stiefel: Programmgesteuerte digitale Rechengeräte (elektronische Rechenmaschinen), Birkhäuser Verlag, Basel 1951, page 63).

The use of a program controlled computer is all the more worthwhile, the more frequently each program instruction is executed on the average, because the relatively high preparation costs are then less significant. In point of fact, the effort to set up a program is considerably greater than working once through the calculations of all instructions on an office calculator (see Heinz Rutishauser, Ambros Speiser and Eduard Stiefel: Programmgesteuerte digitale Rechengeräte (elektronische Rechenmaschinen), Birkhäuser Verlag, Basel 1951, page 45).

Konrad Zuse's Plankalkül is usually considered the first programming language. However, investigations into the emergence of the program translator, the compiler, are rather rare. There are diverging views regarding its origin. In some publications credit is given to Grace Hopper (USA), although this is debatable. In this case, the answer to the question of priority again depends on the definition.

In the beginnings of computer science, as mentioned, one spoke of automatic programming. The term "compiler" in the meaning of today came about somewhat later. Its meaning changed with time. At a symposium on the automatic programming of digital computers (May 1954), the expression was used differently depending on the particular talk.

Some so-called "compilers" were very limited in their sophistication. According to Donald Knuth, this also applies for Hopper's design. The American technical historian Paul Ceruzzi comments:

"The term "compiler" has come into common use today to mean a program that translates instructions written in a language that human beings are comfortable with, into binary codes that a computer can execute. That meaning is not what Hopper had in mind. For her, a compiler handled subroutines stored in libraries. A compiler method, according to Hopper's definition, was a program that copied the subroutine code into the proper place in the main program where a programmer wanted to use it" (see Paul E. Ceruzzi: A history of modern computing, MIT Press, Cambridge, Massachusetts, London 2003, 2nd edition, page 85).

Such subprograms calculated, for example, trigonometric functions, logarithms, and floating point notation.


Corrado Böhm (Italy)

The experiences with the Z4 Zuse machine at the ETH Zurich prompted the Italian Corrado Böhm to develop a compiler (doctoral dissertation 1954).


Alick Glennie (UK)

In their contribution "Programming for high-speed digital calculating machines" (1953), the British computer scientists J. M. Bennett and Alick E. Glennie mention the name Autocode. According to Christopher S. Strachey, this compiler was used from September 1952 with the Manchester Mark 1 computer.

Hopper published her article before Glennie. Nevertheless, Knuth considers Glennie to be the creator of the first true compiler which was actually implemented and used (see Donald E. Knuth; Luis Trabb Pardo: The early development of programming languages, in: Nicholas Constantine Metropolis; Jack Howlett; Gian-Carlo Rota (editors): A history of computing in the twentieth century, Academic Press, New York, London etc. 1980, pages 218 ff.).


Grace Hopper (USA)

A first "compiler" called A-0 of Grace Murray Hopper was in operation with the Univac computer in the spring of 1952. It was the subject of her talk "The education of a computer" at the first ACM National Conference (Pittsburgh, 1952). Improved versions which followed were the A-1 (January 1953) and the A-2 (August 1953). The A-2 became available at the end of 1953.


Halcombe Laning and Niel Zierler (USA)

J. Halcombe Laning and Niel Zierler of the Massachusetts Institute of Technology (MIT) authored the report "A program for translation of mathematical equations for Whirlwind 1" (January 1954). In the summer of 1952, Lanning introduced a provisional algebraic formula translator. By May 1953, together with Zierler, this was upgraded to a viable procedure.


Alexei Lyapunov (Soviet Union)

The first programming course "Fundamentals of programming" at a Soviet university was held in the academic year 1952/1953 at the Moscow State University. Alexei A. Lyapunov discussed the subject of automatic programming for the first time. In 1954, S. S. Kamynin and E. Z. Lubimsky of the Mathematics Department of the Academy of Sciences of the Soviet Union developed a provisional "programming program" for use with the Strela computer. The final version of the compiler was ready in 1955. Andrei Ershov, L. N. Korolev and V. M. Kurotchkin carried out a similar project for the Besm computer (see Andrei P. Ershov and Michael R. Shura-Bura: The early development of programming in the USSR, in: Nicholas Constantine Metropolis; Jack Howlett; Gian-Carlo Rota (editors): A history of computing in the twentieth century, Academic Press, New York, London etc. 1980, pages 155 ff.).

 

Conclusions

These elucidations can be summarized as follows: Heinz Rutishauser was the first to propose automatic programming (machine translation with the aid of the computer, 1951/52) and Grace Hopper developed the first utility programs for the management of subprograms (1952). Alick Glennie lays claim to the first true compiler that actually operated on a computer (1952).

 

References

Herbert Bruderer: Milestones in Analog and Digital Computing, Springer Nature Switzerland AG, Cham, 3rd edition 2020, 2 volumes, 2113 pages, 715 illustrations, 151 tables, translated from the German by John McMinn, https://www.springer.com/de/book/9783030409739

Paul E. Ceruzzi: A history of modern computing, MIT Press, Cambridge, Massachusetts, London, 2nd edition 2003

Nicholas Constantine Metropolis; Jack Howlett; Gian-Carlo Rota (editors): A history of computing in the twentieth century, Academic Press, New York, London etc. 1980

Heinz Rutishauser: Automatische Rechenplanfertigung bei programmgesteuerten Rechenmaschinen, Birkhäuser Verlag, Basel 1952

Heinz Rutishauser, Ambros Speiser; Eduard Stiefel: Programmgesteuerte digitale Rechengeräte (elektronische Rechenmaschinen), Birkhäuser Verlag, Basel 1951

 

Herbert Bruderer (herbert.bruderer@bluewin.ch; bruderer@retired.ethz.ch) is a retired lecturer in the Department of Computer Science at ETH Zurich and a historian of technology.


 

No entries found