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]
Revised Report on the Algorithmic Language ALGOL 60 edited by Peter Naur. blocks, declarations and procedure statements
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]
Revised Report on the Algorithmic Language ALGOL 60 edited by Peter Naur. §4.7.3.2, Name replacement
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]
Portrait of Peter Naur
. Eriktj, via Wikimedia Commons; CC BY-SA 2.5. Source.