Topics

• Big Picture Programming Languages • Where Scheme, , C++, Java fit in History • Fortran • Algol 60 CSE 413, Autumn 2007 11-02-2007 Donald Knuth: » Programming is the art of telling another human being what one wants the computer to do.

1 2

Programming Domains Programming Domains (2)

• Scientific Applications: • Parallel Programming: » Using The Computer As A Large Calculator » Parallel And Distributed Systems » FORTRAN, Mathematica » Ada, CSP, Modula • Artificial Intelligence: • Business Applications: » uses symbolic rather than numeric computations » Data Processing And Business Procedures » lists as main data structure, flexibility (code = data) » COBOL, Some PL/I, Spreadsheets » Lisp 1959, Prolog 1970s • Systems Programming: • Scripting Languages: » Building Operating Systems And Utilities » A list of commands to be executed » C, C++ » shell programming, awk, tcl,

3 4

Programming Domains (3) C History

• Education: • Developed in early 1970s » Languages Designed Just To Facilitate Teaching • Purpose: implementing the Unix operating » Pascal, BASIC, Logo system • The C , aka `K&R‘, for its authors & , is canonical reference (1978) • Evolution: ANSI, C99

5 6

1 Lisp & Scheme History

Lisp: • McCarthy (1958/1960) for symbolic processing • Based on Chruch’s Lambda Calculus • 2 main Dialects: Scheme & Common Lisp • Aside: Assembly language macros for the IBM 704 : car (Contents of Address Register) and cdr (Contents of Decrement Register) Scheme: • Developed by Guy Steele and Gerald Sussman in the 1970s • Smaller & cleaner than Lisp • Static scoping, tail recursion implemented efficiently

7 8

Before High Level Languages

• Early computers (40’s) programmed directly using numeric codes Fortran • Then move to assembly language (requires an assembler) • Assembly language – slightly more friendly version of machine code.

9 10

FORTRAN Quotes from John Backus:

• "Formula TRANslating system": “As far as we were aware, we simply made up • original proposal in 1954, John Backus, IBM 704 the language as we went along. We did not • based on assembly language • language design was secondary to task of writing a regard language design as a difficult problem, merely a simple prelude to the real • much skepticism about higher-level languages. problem: designing a compiler which could Fortran had to be efficient to be accepted. produce efficient programs." [hopl-1 1978] • Fortran was enormously successful; still in widespread use. (Fortran77, Fortran 90)

11 12

2 The project was to design a language for the IBM 704, NOT a general language: "Unfortunately we were hopelessly optimistic in 1954 about the problems of debugging "We certainly had no idea that languages Fortran programs (thus we find on page 2 almost identical to the one we were working of the Report: "Since Fortran should on would be used for more than one IBM virtually eliminate coding and computer, not to mention those of other debugging...") and hence syntactic error manufacturers." checking facilities were weak."

13 14

"In our naive unawareness of language design problems of course we knew nothing of many FORTRAN “Features” issues which were later thought to be important, e.g. structure, conditional expressions, type • 80 columns only declarations – it seemed to us that once one had the notions of the assignment statement, the • Implicit variable declaration subscripted variable, and the DO statement in • No reserved words hand, then the remaining problems of language • Weak typing design were trivial: either their solution was thrust • Lots of GOTOs upon one by the need to provide some machine facility such as reading input, or by some • Early: no recursion, subroutines came late. programming task which could not be done with • Independently compiled subroutines was a win. existing structures." • No records or heterogeneous data types. • Common and equivalence for sharing data – not a win.

15 16

Control Statements in Fortran Fortran GOTO Statement

• Based on IBM 704 branch instructions Unconditional GOTO: » If statements GOTO 31 » Go to statements Computed GOTO: GOTO (30,31,32,33), I • IF Statement: Assigned GOTO: IF (expression) n1, n2, n3 ASSIGN 20 TO N … GOTO N, (20,30,40) these are just comments!

17 18

3 Examples DO LOOPS

Assign 20 to N DO 100 I=1, N …. A(I) = A(I)*2 GOTO (20,30, 40,50), N 100 CONTINUE ______I = 3 … GOTO I, (20, 30, 40,50)

19 20

Parameter Passing Example

• Pass by Reference for efficiency SUBROUTINE SWITCH (N) SUBROUTINE DIST(D,X,Y) N = 3 D = X – Y RETURN IF (D .LT. 0) D= -D END RETURN END CALL SWITCH(I) CALL DIST(DIST1, X1, Y1)

21 22

Subroutines Common Blocks

• Implemented using activation records • Named or un-named • No recursion initially • A way of sharing data between subroutines • So only need one activation record per • Equivalence allowed accessing the same subprogram. memory locations through different names. • A way to “re-use” storage locations.

23 24

4 Exercise

• Implement an if then else statement

Algol 60

25 26

Pre-History of Algol 60 Algol Goals

• by mid 50's there were starting to be a proliferation of • new language should be as close as possible to programming languages/assembly languages/pseudo standard math notation and readable with little codes. further explanation. • Interest in a universal programming language. • should be possible to use it for the description • European and American groups got together in may of "computing processes" in publication . and june of 1958 in Zurich. --> result was 58. • In 8 days, 8 members basically wrote the language. • should be mechanically translatable into machine programs.

27 28

Interesting History The meetings were exhausting, interminable, and exhilarating. ... Progress was steady and the output, ALGOL 60, was more racehorse than camel. This • FORMAL GRAMMAR was used for syntactic language proved to be an object of stunning beauty. It description. BNF. IMPORTANT was sufficiently perfect and complete so that ensuing implementations were able to append necessities, • LANG was DESIGNED by COMMITTEE. 13 such as input-output, in the style of ALGOL 60 but members met for 6 days in 1960. their addition propagated no significant changes in the body of the original language. • Report is a “paradigm of brevity and clarity” -- Alan Perlis, "The American Side of the Development » Most languages today require 1000’s of pages of Algol," The History of Programming Languages » BREVITY AND CLARITY contributed to the reputation as a simple, elegant language.

29 30

5 3 Language Levels Three levels of language

• Reference Language “After two days of probing attitudes and suggestions, the meeting came to a complete deadlock with one » For use by committee, described in report and European member pounding on the table and used in official Algol publications declaring: “No! I will never use a period for a • Publication Language decimal point”. Naturally the Americans considered the use of comma as decimal point to be beneath » Variation on reference language for publication of ridicule. That evening Wegstein visited the opposing algorithms, could have Greek letters camps and proposed defining the three levels of • Hardware Representations language.” Alan Perlis, The American Side of the Development of Algol , » Condensed languages for machine input ACM SIGPLAN Noticies, August 1978.

31 32

Algol Language Features Syntax and Style

• Block Structure - Free format • Explicit type declaration for variables - Indentation style • Scope rules for local variables - Algol defined the style of most successors • Dynamic lifetimes for variables - Hierarchical structure • Nested if-then-else expressions and stmts - Nesting of environments and control structures • Call by value and call by name - Identifiers could be > 6 characters • Recursive subroutines • Arrays with dynamic bounds

33 34

Variables and Types I/O

• Data types: integer, real, boolean • No I/O • No implicit declarations • No double precision types • No complex number types • Arrays: > 3 dimensions, dynamic bounds, can start at something other than 0/1

35 36

6 Binding Time Blocks

• BINDING of names to locations is done ON • Can use a block of statements anywhere a ENTRY TO A BLOCK, not at compile time single statement is needed. (as in Fortran) begin • Stack is central run-time data structure declarations; statements end

37 38

Blocks support structured programming Blocks allow nested scopes

• Algol 60 begin if x=3 then integer x; begin y:=9; k:=10 procedure squid; end; begin • Fortran integer x; IF (X .NEQ. 3) GOTO 100 ... Y=9 K=10 end; 100 ... end;

39 40

Blocks for efficient storage management Control Structures begin • goto ... begin • if-then-else real array x[1:1000]; ... • end; • switch ... begin real array y[1:2000]; ... end; end;

41 42

7 Call by value vs. call by name Call by value vs. call by name

• Call by Name is default begin integer n; • call by name: re-evaluate the actual parameter procedure p(k: integer); on every use. begin » For actual parameters that are simple variables , print(k); this is the same as call by reference. n := n+1; print(k); » For actual parameters that are expressions , the end; expression is re-evaluated on each access. n := 0; p(n+10); end;

43 44

Fortran example Algol 60 Example

SUBROUTINE S(EL, K) procedure S (el, k); K = 2 integer el, k; EL = 0 begin k := 2; RETURN el := 0 END end; A(1) = A(2) = 1 A[1] := A[2] := 1; I=1 i := 1; CALL S (A(I),I)) S (A[i], i);

45 46

What happens here? The life of Algol 60 begin • Didn’t achieve widespread use integer n; • Extremely important in the history of PLs procedure p(k: integer); begin • Successors: Pascal, Modula-2, Ada, many print(n); more. end; • Produced important work on lexical analysis, n := 5; parsing, compilation techniques for block- p(n/0); structured languages. end;

47 48

8