Encyclopedia > Algol programming language

  Article Content

Algol programming language

Algol is a computer programming language originally developed in 1958, which was named for the algorithmic process of definition of a programming problem. It is short for Algorithmic Language. In some ways, it was a reaction to Fortran and was a precursor to Pascal. It uses words to bracket blocks and was the first to use begin end pairs.

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 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.

External links

Charles Lindsey (http://www.cs.man.ac.uk/~chl/index)'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.



All Wikipedia text is available under the terms of the GNU Free Documentation License

 
  Search Encyclopedia

Search over one million articles, find something about almost anything!
 
 
  
  Featured Article
Autocracy

...     Contents Autocracy Autocracy is a form of government which resides in the absolute power of a single individual. The term can b ...

 
 
 
This page was created in 33.8 ms