ALGOL 60 2026-11-05
ALGOL 60 is a block-structured programming language specified through a formal report, with nested declarations, procedures, typed variables and structured statements for numerical algorithms. An identifier's meaning depends on its enclosing blocks, making lexical scope explicit. The revised report also uses a precise grammar to distinguish syntactic structure from the typography of a particular printed program.[ref]
Its parameter mechanisms include call-by-value and call-by-name. The latter behaves through systematic replacement, with renaming to avoid accidental identifier capture, rather than simply copying one already evaluated value. A procedure that refers to a name parameter more than once can therefore evaluate its actual expression more than once. This matters when the expression depends on changing variables or has effects; the two calling conventions are not interchangeable.
Call-by-name 2026-11-05
Call-by-name passes a procedure argument so that each use of the formal parameter refers to the actual expression in its calling environment. In ALGOL 60, the report explains this through replacement with renaming to avoid accidental capture of identifiers. An expression can consequently be evaluated more than once.[ref]
Suppose the actual argument is a[i]. The procedure reads its name parameter, changes i, and reads the parameter again. With call-by-name, the second access can select a different array entry. With call-by-value, both accesses use the value obtained before entering the procedure. This is also different from saving the original entry's address. Call-by-name does not imply lazy evaluation with memoization: repeated evaluation can repeat both work and side effects.
Peter Naur 2026-11-05
Peter Naur helped define ALGOL 60 and edited its language report. The revised report specifies both the syntax and operational meaning of expressions, statements, blocks and procedures. Its explicit separation of formal syntax from explanatory semantics made the language definition independent of any one compiler.[ref]
A nested block, for example, can declare a local name without exposing it throughout the entire program. The definition must specify which declaration an occurrence denotes and how procedure parameters behave. Such details make scope and parameter passing part of a language's semantics rather than conventions guessed from examples. ACM's award announcement credits Naur's report editing, language-definition work and compiler contributions.[ref]
Tony Hoare Created 2026-10-18 Updated 2026-11-05
Tony Hoare is a computer scientist whose contributions include quicksort, Hoare logic and communicating sequential processes. His industrial work included an early ALGOL 60 compiler; his institutional biography also describes an unsuccessful operating system project, giving concrete context for the difficulty of reliable systems engineering.[ref]
In his 1969 paper An Axiomatic Basis for Computer Programming by Tony Hoare, he set out assignment, composition and iteration rules for reasoning directly about program text. The assignment rule reasons backward from the required result, while a loop invariant compresses arbitrarily many iterations into a preservation obligation. The paper explicitly distinguishes these partial correctness results from successful termination and discusses how arithmetic and side effects affect the model.[ref]
Figure 1.
Portrait of Tony Hoare
. Dennis Hamilton (orcmid), Flickr; File caption identifies FLoC 2006, 18 August 2006. Creative Commons Attribution 2.0 Generic., via Wikimedia Commons. Source.