210 likes | 314 Views
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.
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