Algol programming language
There were three main official versions of Algol: Algol 58, Algol 60, and Algol 68. Of these, Algol 60 was by far the most influential. (Algol 60 produced Algol W, which was used by Niklaus Wirth to develop Pascal.) Each of the official Algol versions is named after the year in which it was published.
Algol was developed jointly by a committee of European and American computer scientists. It had at least three different syntaxes: a reference syntax, a publication syntax, and an implementation syntax. The different syntaxes permitted it to use different keyword names, conventions for decimal points (commas vs. periods) for different languages.
Algol 60 was released in 1960. John Backus and Peter Naur both served on the committee which created it. Algol 60 inspired many languages that followed it; the canonical quote in this regard is C. A. R. Hoare's "Algol was a great improvement on its successors." The full quote is "Here is a language so far ahead of its time, that it was not only an improvement on its predecessors, but also on nearly all its successors", but the aphoristic version is far more known. It is sometimes erroneously attributed to Edsger Dijkstra, which is understandable, as he served on the design committee as well and is equally known for pointed remarks.
The Burroughs Corporation's B5000 and its successors were and are stack machines designed to be programmed in an extended Algol; indeed their operating system, or MCP (Master Control Program) as they are called, is written in an extended Algol back in 1961. The Unisys Corporation still markets machines descended from the B5000 today, running the MCP and supporting several extended Algol compilers.
Algol 60 as officially defined had no I/O facilities; implementations necessarily had to add some, but they varied from one implementation to another. Algol 68 perhaps went overboard with its I/O (or "transput") facilities in reaction.
Algol 60 allowed for two types of parameter passing: call-by-value, and the innovation of call-by-name, which was later abandoned by its successor languages. Call-by-name had certain limitations in contrast to call-by-reference, making it an undesirable feature in language design. For example, it is impossible in Algol 60 to develop a procedure that will swap the values of two parameters if the actual parameters that are passed in are an integer variable and an array that is indexed by that same integer variable.
John Backus developed the Backus normal form method of describing programming languages specifically for Algol 58. It was revised and expanded by Peter Naur to the Backus-Naur form for Algol 60. Algol 68 was defined using a two-level grammar of the sort invented by Adriaan van Wijngaarden and which bears his name. The van Wijngaarden grammar uses a context-free grammar to generate an infinite set of productions that will recognize a particular Algol 68 program; it is able to express the kind of requirements that in many other programming language standards are labelled "semantics", expressed in often-ambiguous natural language prose, and implemented in compilers in ad hoc code attached to the formal language parser.
Code Sample (Hello World)
% the main program (this is a comment)
BEGIN FILE F (KIND=REMOTE); EBCDIC ARRAY E [0:11]; REPLACE E BY "HELLO WORLD!"; WHILE TRUE DO WRITE (F, *, E) END.
- For more info about Algol 68, see http://vestein.arb-phys.uni-dortmund.de/~wb/RR/rrTOC.html.
- Charles Lindsey's wonderful and bittersweet paper on the development of Algol 68 in the second History of Programming Languages proceedings is well worth reading, and perhaps dispels some of the common myths about the language.
- A syntax summary of Algol-60 in BNF (Backus Normal Form).