Submitted by egdaylight on
Dated:
Something significant happened during the 1950s in the history of science & technology. By 1950, logicians and linguists had been studying “artificial languages” and “natural languages” for centuries. But, the words “programming language” were not used at all. By 1959, however, those words had become common currency. And, in today's digital world, the absence of “programming languages” is totally unthinkable.
In this post I will discuss the 1973 conference Machine Oriented Higher Level Languages. I will clarify what those words meant (to the conference attendees) in relation to a "higher level" programming language and in relation to a computing machine.
As I argue in my recent article, the advent of “programming languages” came during the 1950s; i.e., during a decade of cross fertilization between logic, linguistics, and computing [1]. John W. Carr played an important role here. By the mid-to-late 1960s, overarching technological concepts had matured and a science was born. Examples of such concepts are: a universal Turing machine, the pushdown store, and undecidability. See also my discussion with Donald Knuth [2].
During the 1960s, the concepts of “language” and “machine” became increasingly interchangeable. By the end of that decade, many programmers viewed the workings of a program “by virtue of a whole hierarchy of abstract machines extending down to the hardware machine” (cf. Koster in 1973 [3, p.117]).
Also during the 1960s, an increasing number of researchers began to view a programming language as a means to communicate between people [3, p.109]. Researchers like Carr and Dijkstra had already been doing that for years. Others, including Ichbiah, Koster, Horning, van der Poel, Wirth, and Wulf, were more hesitant. They too appreciated the virtues of “gaining expressive power” by designing a “higher level” language. But, they were also worried about the price of “losing control over how the algorithm is carried out” (cf. [3, p.359]).
Ichbiah et. al. attended the 1973 conference Machine Oriented Higher Level Languages in Trondheim, Norway to clarify the difference between “high-level languages” on the one hand and “system languages” and “MOLs” (“Machine-Oriented Languages”) on the other hand [3]. It was the latter two languages that concerned them the most.
One of the participants at the conference connected a “programming language” with “generality”. A programming language that is too specific, he said, is more a “notation” than a true language (cf. [3, p.113]). In other words, being too specific or too close to the bare machine was no good. The participants favored “language” and “generality” for the same reasons that Carr and Dijkstra did. Portability, for example, was easier to obtain with a “machine-independent” program that was expressed in a “language” [3, p.110].
But, abstracting from too many machine details was also problematic. Ichbiah et. al. wanted to program systems — later called real-time, embedded systems. Doing that meant eschewing language features “whose translation involves uncontrollable run-time mechanisms”. A “space manager” (garbage collector), for example, was problematic in a system language because it typically incurred run-time requests that were difficult to predict at compile time (cf. Ichbiah's remarks [3, p.110]).
Portability of software (cf. generalisation) versus machine efficiency (cf. specialisation) — that was the dichotomy of the conference. On the one hand, a Machine-Oriented Language “may not be very much higher level than an assembly language” [3, p.118]. Because, “to utilize a given machine up to its maximum efficiency, you must tailor the language to it” [3, p. 122]. Programmers needed to get at the machine. As a participant complained, “I cannot do that if the guys give me lots of language which gets between me and it” [3, p.403]. On the other hand, with a machine oriented language which “is designed to be portable”, it is possible to choose between “polish[ing] for a particular machine” and “retain[ing] the ability to port at lessened efficiency” [3, p.115].
Willem van der Poel actively participated in the 1973 conference and edited its proceedings. In contrast to Dijkstra, who wanted to abstract from mechanistic reasoning of program behavior, van der Poel said that “we must learn to think more mechanically and not always think that the machine can do everything, which we have in our minds” [3, p.401]. Also in contrast to Dijkstra who was fully occupied with proving the correctness of programs, van der Poel emphasized that most errors are made “in mapping our thoughts on paper” [3, p.413] and that “there is no way to prove that [this] first step is correct” [3, p.402] — this is what Dijkstra later called “the Pleasantness Problem” and which I have discussed with Peter Naur [4] and Michael A. Jackson [5]. According to van der Poel, “There is no wrong program, it is simply another program” [3, p.4].
Dijkstra and van der Poel did share one point of view. Both men did not want to abstract from the finiteness of machines and programs, even when reasoning abstractly about software. Dijkstra did this in the context of axiom-based semantics. Van der Poel did this in the context of system languages and machine oriented languages. At the conference in Trondheim, van der Poel said:
We like to talk about things as sets and integers and real numbers. But often we do not realize that within a machine, there are no real numbers. It is only a subset of them [...] There are no integers either; machine integers do not fulfill the axioms of Peano, that for every integer, there is a successor. [3, p.401] [See also p.411 for a similar comment.]
Van der Poel and the other system programmers at the Trondheim conference were positioning themselves in between the generalists (à la Carr, Dijkstra, van Wijngaarden) and the very many specialists from industry who were “still” programming in assembly language. The concern of Ichbiah, van der Poel, et. al. was “system programming”, as opposed to defining — solely on paper — a so-called elegant programming language à la ALGOL 68. Their appreciation for hierarchical program design (cf. Dijkstra's THE system) was real, as the following words by Horning partly illustrate. But their “mini-computers” were real too [3, p.8] and those were programmed in assembly.
In Horning's words:
[T]he basic concepts of system programming are not very different from some sub-set of the basic concepts of programming in general. Another thing which high-level languages do is that they remove certain flexibilities from the programmer. They specialize the machine, so that certain mistakes become impossible. [3, p.110]
These comments align well with the remark made by Liskov in a 2010 interview:
[W]henever you provide a higher level language, you take away the features of the underlying machine, because you replace that machine with a higher level and you're supposed to use the machine only through that higher level. And they were worried that the loss of expressiveness from the lower level to the higher level might be a serious problem. And, it is a problem if you think about writing low-level systems in Java today; you do sometimes dip down into C in order to accomplish a few things very efficiently. But, in general, by now we understand that you can write programs in any universal programming language. [6, p.142]
Liskov's “we now understand” in the last sentence suggests that deep, practical, implications of Turing's 1936 universal machine took time to become common knowledge. (Moreover, many computer practitioners acquired that knowledge without relying on modern logic.) I have argued that few men (Burks, Carr, Gorn, and Perlis) already began to see such connections between theory and practice in the 1950s [1].
Bibliography
[1] E.G. Daylight. Towards a Historical Notion of "Turing — the Father of Computer Science". History and Philosophy of Logic. To appear. I thank Tom Haigh and other reviewers for commenting on multiple drafts of this article, starting in February 2013.
[2] D.E. Knuth, E.G. Daylight. The Essential Knuth. Lonely Scholar, August 2013.
[3] W.L. van der Poel and L.A. Maarssen, editors. Machine Oriented Higher Level Languages (MOHL), IFIP Working Conference on MOHL, Trondheim (Norway), 1973.
[4] E.G. Daylight. Pluralism in Software Engineering: Turing Award Winner Peter Naur Explains. Lonely Scholar, 2011.
[5] A forthcoming interview with Michael A. Jackson.
[6] E.G. Daylight. The Dawn of Software Engineering: from Turing to Dijkstra. Lonely Scholar, 2012.