views:

502

answers:

2

Let us research and trace back the origins of language constructs.

For example:

Constructs Introduced from LISP

  • If-Else Block :"The ubiquitous if-then-else structure, now taken for granted as an essential element of any programming language, was invented by McCarthy for use in Lisp, where it saw its first appearance in a more general form (the cond structure). It was inherited by Algol, which popularized it. " - WikiPedia

  • Function Type : Functions as first class citizens.

  • Garbage Collection

+3  A: 

SWITCH statement - 1965 - ALGOL W

According to: http://ojs.pythonpapers.org/index.php/tpp/article/viewFile/49/45

ALGOL, the father of all procedural languages, did not have a case statement as the concept of case had not been invented yet in high level languages. Then in 1965 a rarely used language ALGOL W was released that contained switch...case statement invented by C. A. R. Hoare which allowed for non-ordered non-overlapping values and ranges.

C and Pascal both derived from this parent language, and both had a form of case : C the familiar switch (variable) case ... and Pascal using case variable begin value1: .... C++, PHP, C#, and Java syntax are derived from the C version.

ChristopheD
+17  A: 

Here is a comprehensive history of major programming language constructs that I've been able to identify so far. I've undoubtedly missed something, but I'm sure the SO community will help identify these omissions.

Plankalkül (1943-45) - Developed by Konrad Zuse, this was the first high-level, non-von Neumann programming language, according to Wikipedia and Communications of the ACM paper "The "Plankalkül" of Konrad Zuse: A Forerunner of Today's Programming Languages" by F.L. Bauer and H. Wossner. The language was originally developed for the mechanical Zuse Z1 computer, but a compiler implementation by a team at the Free University of Berlin was not developed until 2000. The language introduced the following:

  • "Assignment statements, subroutines, conditional statements, iteration, floating point arithmetic, arrays, hierarchical record structures, assertions, and exception handling" (Wikipedia:Plankalkül).

Fortran:

IPL (Information Processing Language) - recursion (later included in LISP) -- (Newell and Simon)

LISP - garbage collection, lambda expressions, and dynamic typing -- (McCarthy, 1960), (McCarthy, 1978), (Wikipedia: Garbage collection), and (Wikipedia: LISP)

ALGOL 58 - introduced code blocks (but only for control flow, not variable scope) (Backus, 1959)

ALGOL 60 - added lexical scope to code blocks, nested function definitions with lexical scope (Backus et al 1963)

ALGOL 68 - operator overloading (A. van Wijngaarden et al)

Simula - objects, classes, subclasses, virtual methods, coroutines (Dahl et al)

ML - parametric polymorphism (Cardelli and Wegner)

ISBL (Information Systems Base Language) - relational algebra (was introduced earlier here than in SQL) -- (Hall et al), (Wikipedia: Relational algebra)

Scheme - first fully-supported closures (Sussman and Steele, 1975), (Sussman and Steele, 1998)

Oddly, for four of the most commonly used modern programming languages, C, C++, Java, and C#, I was unable to identify any verifiable, fundamentally new programming language constructs. The templates in C++ are an adhoc version of polymorphism introduced in ML. The closest thing to a new language feature in Java was inclusion of support for threads. Mostly, all four languages are a combination of desirable features and concepts invented elsewhere.

Other notes: Although Prolog was one of the first logic programming languages, I could not identify any significant features not introduced previously in other languages.

Although there are some Wikipedia references, most of the features listed above have been attributed to solid sources that are referenced below. Where I've delved down to find authoritative references, the Wikipedia-based details have held up well.

The ACM paper I referenced for Plankalkül confirms most of its features. Konrad Zuse was a far-sighted genius.

REFERENCES

F.L. Bauer and H. Wössner (1972). The “Plankalkül” of Konrad Zuse: A Forerunner of Today’s Programming Languages. Communications of the ACM, 15(7):678–685.

Raúl Rojas et al. (2000). "Plankalkül: The First High-Level Programming Language and its Implementation". Institut für Informatik, Freie Universität Berlin, Technical Report B-3/2000.

J. W. Backus (1956). The Fortran Automatic Coding System for the IBM 704 EDPM. International Business Machines Corporation.

Allen Newell and Herbert A. Simon (1956). The logic theory machine: a complex information processing system. IRE Transactions on Information Theory IT-2, no. 3: 61-79.

John McCarthy (1960). Recursive functions of symbolic expressions and their computation by machine, Part I, Communications of the ACM, v.3 n.4, p.184-195, April.

John McCarthy (1978). History of LISP. In Richard L. Wexelblat, editor, History of Programming Languages: Proceedings of the ACM SIGPLAN Conference, pages 173-197. Academic Press, June 1-3.

J.W. Backus (1959). "The Syntax and Semantics of the Proposed International Algebraic Language of Zürich ACM-GAMM Conference". Proceedings of the International Conference on Information Processing. UNESCO. pp. 125–132.

J.W. Backus, F. L. Bauer, J. Green, C. Katz, J. McCarthy, P. Naur, A .J. Perlis, H. Rutishauser, K. Samelson, B. Vauquois, J. H. Wegstein, A. van Wijngaarden, M. Woodger; edited by Peter Naur (1963). Revised Report on the Algorithmic Language ALGOL 60. Communications of the ACM, Volume 6, Number 1 (January), pages 1-17.

A. van Wijngaarden, A. (Editor), Mailloux, B. J., Peck, J. E. L., Koster, C. H. A. (1969). "Report on the algorithmic language ALGOL 68", Section 10.2.2. Numer. Math. 14, 79--218.

Ole-Johan Dahl, Bjørm Myhrhaug, and Kristen Nygaard (1970). SIMULA, Common Base Language. (2nd. Edition) Oslo, Norwegian Computing Center.

Luca Cardelli and Peter Wegner (1985). On Understanding Types, Data Abstraction, and Polymorphism. Computing Surveys, Vol 17 n. 4, pp 471-522, December.

Patrick A.V. Hall, Peter Hitchcock, Stephen Todd (1975). "An algebra of relations for machine computation". Conference record of the second ACM Symposium on the Principles of Programming Languages, Palo Alto, California: ACM, pp. 225–232, January.

Gerald Jay Sussman and Guy L. Steele, Jr (1975). Scheme: An Interpreter for the Extended Lambda Calculus. AI Memo 349, December.

Gerald Jay Sussman and Guy L. Steele, Jr (1998). "Scheme: A Interpreter for Extended Lambda Calculus". Higher-Order and Symbolic Computation 11 (4): 399–404, December, Kluwer Academic Publishers, Boston.

Joel Hoff
I updated some references for Plankalkul; will probably try to track down more sources for other languages soon.
Joel Hoff
This is great. Thanks.
kunjaan
I've added IPL for its use of recursion and have backed up more details with authoritative references.
Joel Hoff
This is the most interesting thing I've read all day, thanks :) And I was reading about *dinosaurs* this morning.
detly
My thanks to SO user "fmark" for adding lambda expressions to the list of invented features for LISP. There is some discussion about this in the "History of LISP" article by John McCarthy in 1978 in connection with lambda calculus. The latter was developed by Alonzo Church in the 1930s.
Joel Hoff
Added the last of the citations needed for solid literature references.
Joel Hoff
@detly -- It's a good day when programming language history can compete with dinosaurs for interest. ;-)
Joel Hoff
That's a graphic novel I would buy twice.
detly