200 likes | 292 Vues
Explore the inception and impact of Algol 58, known for its elegant design and innovative features like block structure, explicit type declaration, and dynamic lifetimes. Learn about its influence on subsequent programming languages and its pivotal role in shaping modern coding practices.
E N D
CS 415: Programming Languages Algol Aaron Bloomfield Fall 2005
Historical perspective • By mid/late 50’s a lot of PLs were out there • Interest in universal language • European and American groups got together in Zurich • Result was Algol 58 • 8 people spent 8 days working on the language
Algol goals • To be as close as possible to standard math notation • Also very readable without much more explanation • Should be possible to use it to describe algorithms in publications • A form of it is still used today • Should be mechanically translatable into machine language programs
3 language versions • Reference language • Used by the committee, described in the report, and used in official Algol publications • Publication language • Allowed for differences in the character set for different languages • Europeans and Americans couldn’t decide on which character to use for the decimal point! • Hardware representations • Condensed languages for machine input
More history • Was first to use BNF (Backus-Naur Form) • Same Backus that created Fortran • He also was one of the main creators of Algol • And he created functional programming • And won the Turing award in ’77 • Right. Back to BNF • BNF example: • <value> := <number> | <variable> | <expression> • <number> := <integer> | <float> • <integer> := <integer><digit> | <digit> • <digit> := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 • Language was designed by committee • Report is a “paradigm of brevity and clarity” • Most languages today require 1000’s of pages • Brevity and clarity contributed to reputation as simple, elegant language
Algol language features • Block structure • And scope of variables within those blocks • Explicit type declaration for variables • Scope rules for local variables • Dynamic lifetimes for variables • Nested if-then-else expressions and statements • Call by value and call by name • Recursive subroutines • Arrays with dynamic bounds • User defined data types
Gotos • Algol did include them • But with (recursive) procedures and blocks, they weren’t needed as much • Gotos were going out of vogue • People were realizing that it was a poor way to program • Dijkstra’s 1968 letter to the ACM on the subjetct
Syntax and style • Free format • Indentation style • Algol defined the style of most successors • Hierarchical structure • Nesting of environments and control structures • Identifiers could be more than 6 characters
Variables and types • Data types: integer, real, boolean • No implicit declarations • No double precision types • No complex number types • Arrays could have more than three dimensions • Could have dynamic bounds • Can start at something other than 0/1
Binding • Binding of names to locations is done on entry to a block • Not at compile time, as in Fortran • Stack is central run-time data structure
Blocks • Can use a block of statements anywhere a single statement is needed begin declarations; statements; end
Blocks support structured programming • Algol 60 if x = 3 then begin y := 9; k := 10; end; • Fortran IF (X .NEQ. 3) GOTO 100 Y = 9 K = 10 100 ...
Blocks allow nested scopes begin integer x; procedure squid; begin integer x; ... end; end;
Blocks for efficient storage management begin ... begin real array x[1:1000]; ... end; ... begin real array y[1:2000]; ... end; end;
Control structures • Goto • If-then-else • For loop • Switch
Call by name vs. by value • Call by name is default • Call by name: re-evaluate the actual parameter on every use • For actual parameters that are simple variables, it’s the same as call by reference • For actual parameters that are expressions, the expression is re-evaluated on each access • No other language ever used call by name…
begin integer n; procedure p (k: integer) begin print (k); n := n+1; print (k); end; n := 0; p (n+10); end; parameter is n+10 (not just 10) n is set to 0 prints n+10, which is 10 n is still 0; thus, n becomes 1 prints n+10, which is 11 parameter is n+10 (not just 10) Call by name
Problems with Algol • Didn’t include a I/O library • Thus, each implementation had a different means for I/O • This caused compatibility problems • And no standard way to write a Hello World program
Algol 68 • Successor to Algol 60 • Included may new features • Unions • Operator overloading • Casting • Standardized input and output • Parallel processing • Rarely implemented by the compilers, though
Life of Algol 60 • Didn’t achieve widespread use • Extremely important in the history of PLs • Successors: Pascal, Modula, Ada, others • Produced important work on: • Lexical analysis • Parsing • Compilation techniques for block-structured languages