Version 14 of Algol

Updated 2008-04-24 06:55:50 by LarrySmith

A family of computing languages [L1 ] in the ancestry of nearly all others, but with little discernible direct relation to Tcl.

Algol has

  • block structure with nested scopes
  • dynamic memory allocation
  • call by name parameter passing
  • call by value parameter passing
  • recursion

Algol does not have

  • record structures
  • case or switch statements
  • standard input/output statements

Algol is not in the ancestry of Fortran (at least the early versions), LISP, Cobol, or SNOBOL.

But Algol is in the ancestry of C, and the list of things above that Algol "has" is a strong subset of the things that make C what it is. So I think the relation to Tcl is discernible after all.

AM (24 april 2008) I can't resist commenting on this one: if I interpret some publications by Tony Hoare correctly, Algol was deliberately designed to not be related to the Fortran version of the time. (And as far as dynamic memory allocation is concerned, at that time, computers did not commonly have dynamic memory allocation facilities, so for a language like Fortran that was to run on as large a set of machines as possible, that was not an option).

Algol may have call by name parameter passing, but C does not. Call by name is a very difficult to implement feature, if I understand it correctly.


I believe it was Dijkstra who observed that Algol was a great improvement on many of it's successors. Larry Smith


AMG: Algol is also the name of the solar system that is the setting for the 1987 Sega Master System video game Phantasy Star [L2 ].


WJP: Algol is also the subject of one of the great literary works of computer science: C. H. Lindsey's "Informal Introduction to Algol 68". Not only is it beautifully written, it is perhaps the only book ever published that is organizationally two-dimensional: it can be read either column-wise (chapter 1, section 1 -> chapter 1, section 2-> ...) or row-wise (chapter 1, section 1 -> chapter 2, section 1 ->...).


Larry Smith Algol-68 is another critter entirely. It extended Algol (more correctly known as Algol-60) with record types and case statements, complex numbers, and input and output, as well as a lot of clean-up work to make it more orthogonal and easier to compile. It anticipated Oberon and Component Pascal allowing a case to type cast (treating the same variable as real, int or whatever according to the type currently assigned to it), and so on. It anticipated Modula with full control statement bracketing, but rather than just using END (Modula: IF...THEN...ELSIF...ELSE...END) it made the unfortunate choice to use reversal of the keyword (Algol-68: IF...THEN...ELIF...ELSE...FI, and CASE...ESAC - this same scheme was used in Bliss, the programming language designed to allow programmers the means to hurt themselves and others to a degree that not even C could aspire to). Algol-68 even anticipated C with computed assignments ( a +:= 1 ). [L3 ].

Wirth, who was on the committee, felt it was all too complicated for its expressive power, and disliked the ability to redefine operators and the dependence on APL characters. Wirth had proposed the language later called Algol-W [L4 ] for Algol-68. When it was not accepted, he built on Algol-W to design Pascal, which first saw the light of day in 1970.