Click here to load reader
Click here to load reader
Jul 11, 2020
Programming Languages: History and Future Jean E. Sammet IBM Corporation
This paper discusses both the history and future of programming languages (= higher level languages). Some of the difficulties in writing such a history are indicated. A key part of the paper is a tree showing the chronological development of languages and their interrelationships. Reasons for the prolifera- tion of languages are given. The major languages are listed with the reasons for their importance. A section on chronology indicates the happenings of the significant previous time periods and the major topics of 1972. Key concepts other than specific languages are discussed.
Key Words and Phrases: programming languages, higher level languages, languages, history, future directions, language interrelationships, programming language tree, programming language history, programming language future
CR Categories: 1.2, 4.2
Copyright (~ 1972, Association for Computing Machinery, Inc. General permission to republish, but not for profit, all or part
of the text of this article is granted, provided that reference is made to this publication, to its date of issue, and to the fact that reprinting privileges were granted by permission of the Association for Computing Machinery. This paper, which includes the Language History Chart, in substance will form part of the 2nd edition of the book, Programming Languages: History and Fundamentals by Jean E. Sammet, which is currently in preparation and is expected to be published by Prentice-Hall, Inc.
Author's address: IBM Corporation, 545 Technology Square, Cambridge, MA 02139. All comments and opinions in this paper represent (only) the personal views of the author.
References have been kept to a minimum to save space. Any language for which no reference is given in this paper has the cita- tions in either Sammet  or ; almost all are in the former.
1.1 Definition of Programming Languages It is well known by now that there is no general
agreement on the meaning of the term "programming languages." In this paper the term is used interchange- ably with "higher level languages," but even that does not solve the definition problem. Hence it is necessary to specify that a programming language is considered to be a set of characters and rules for combining them which have the following characteristics: ( l ) machine code knowledge is unnecessary; (2) there is good poten- tial for conversion to other computers; (3) there is an instruction explosion (from one to many) ; and (4) there is a notation which is closer to the original prob- lem than assembly language would be.
1.2 Purpose and Scope of Paper Programming languages are almost as old as ACM,
since the latter started in 1947 while the former started in 1952 with Short Code for UNIVAC. Since then, some efforts--although relatively few--have been made to record certain historical aspects of this field, e.g. Rosen [12, 13], Bemer , Sammet . 1 Every author, includ- ing this one, takes a different point of view of what is important, how to define and interpret dates, etc. In this paper I hope to indicate some of the problems in actually writing about the history of programming languages, and then make my own attempt to provide perspective. This latter seems extremely important be- cause there are over 170 languages in use just in the United States in 1972. While about half of these fall into the category of "languages for specialized applica- tion areas" and are discussed in more detail elsewhere , another 85 still remain to be accounted for in some way. What is it about this field that causes such pro- liferation? Is there any sense to what has happened?
Communications July 1972 of Volume 15 the ACM Number 7
What--if any--are the interrelationships among the hundreds of languages which have been developed since 1952? Finally, and perhaps most important, what does this portend? Answers to these questions must be limited because of space and time constraints.
There are three facets of programming language history which this paper does not discuss. One is the development of any individual language; this has been done in considerable detail by the author . A second is the set of specific concepts in individual languages. The third omission is any discussion of implementation.
1.3 Problems in Discussing History of Programming Languages
There are several problems in writing about the history of programming languages. For example, in considering programming languages there are a number of phases, each of which is important in the overall development, but which is almost impossible in retro- spect to pinpoint to an exact time. We--as a profession and an industry--tend to toss around dates without being very specific about what they mean. Thus various people would define "the earliest date" for COBOL as 1959, 1960, or 1961, and yet COBOL has one of the clearest and best-documented histories. In order to de- fine the problem of establishing dates, note that at least the following phases exist for programming languages (and in fact most of these apply to any program). Some phases may occur in parallel. 1. Initial idea. 2. First documentation of initial idea. 3. Preliminary specifications. 4. "Final" specifications (i.e. those which will be implemented ). 5. "Prototype" running (i.e. as thoroughly debugged as the state of the art will permit, but perhaps not all of the features are included). 6. "Full language" compiler (or interpreter) is running. 7. Usage on real problems by the developers. 8. Users (on real problems) other than the developers. 9. Documentation, e. g. manuals and tutorials. 10. Paper in professional journal or conference. (Some- times this appears as early as step 3.) 11. Extension, modification, or new version. Note that a formal definition might appear at steps 3, 4, and 9. Also note that some of these steps may occur simultaneously or be so combined that they are in- distinguishable. Furthermore, step I 1 allows recycling to any lower number and repeating the cycle for a new version. In only a few instances are dates easily available for each of these phases.
Another aspect of the problem in writing a history of programming languages pertains to the definition of a language and variations of it. This makes establishing accurate counts impossible. Even if we assume that we can recognize a higher level language when we see one, we don't have a rigorous (or even weak) way of know- ing whether we merely have a dialect or whether we
really have a new language. This point is discussed by the author in much greater length in . As one ex- ample among many languages with similar situations, note the existence of SIMSCRn'T I, 1.5, II, 11.5, and II Plus. It is clear that these languages are related and yet different. Are they five separate languages, or only one?
2. Historical Development of Languages
This section shows the historical development and interrelationship of languages by means of a chart. Reasons for the proliferation of languages and for the importance of languages are given. Finally, there is a listing--with justification--of the most important lan- guages.
2.1 Development by Dates and Interrelationships There are three major ways to describe the historical
development of programming languages: first, events for each language, second, events within a given year, and third, the relationships and descendants of lan- guages. As previously stated, the first has already been done by this author, so only the second and third are needed here to provide a (hopefully) solid foundation of facts. The chart covers the second and third ways by providing a tree depicting yearly information at a glance, but it also shows the influence and the descend- ants of the languages. Such a chart is of course subject to space and graphic constraints; an enlargement of almost any portion would provide useful information.
Only separate version numbers for fairly significant languages (e.g. FORTRAN) have been shown. The legend on the chart indicates that the reader can determine the earliest date known to the author pertaining to a given language or, alternatively, the particular phase of de- velopment (see Section 1.3) for which information is clearly identified. Languages for specialized application areas (e.g. simulation, machine tool control, civil engineering) are not included on the chart because the number of them would have doubled the complexity.
The lists of languages shown on the back of the chart represent snapshots at three points in time. Only ten languages, namely ALGOL 60, APT, COBOL, COMIT, FORTRAN, IPL-V, LISP 1.5, MAD, MADCAP, and NELIAC appear on all three lists and thus indicate continuous usage.
2.2 Reasons for Language Proliferation The incredible proliferation of higher level languages
appears to be caused by one or more of the following: 1. A really new language concept has been developed and/or a new application area is deemed worthy of having its own language. 2. After experience with a particular language, its deficiencies are clear enough that a complete new lan- guage is needed--and justifiably created--to correct them. 3. Facilities of several languages are best combined into a single new language.
602 Communications July 1972 of Volume 15 the ACM Number 7
4. It is felt to be easier to get additional capability or changes in style with a new language rather than to extend or modify an existing one. 5. It is fun to de