• 50s, 60s: Exciting Time
– Invention of: assemblers, compilers, interpreters, first high-level languages, structured programming, abstraction, formal syntax, object-oriented programming, LISP, program verification
• 70s, 80s, 90s: Boring Time
– Refinement of earlier ideas, better implementations, making theory more practical
– A few new/refined ideas: functional languages, data abstraction, concurrent languages, data flow, type theory, etc.
• Advances in Theory
– BNF Grammars ® Algol60
– Lambda Calculus ® LISP
– Type theory ® CLU, ML
• Changes in computing environment
– Analytical engine ® first programming system
– von Neumann Machines ® Procedural Languages
– Parallel Machines ® Functional Languages
– Large scale networks ® ???
• Changes in desired programs
– Calculating missile trajectories ® Assembly
– Scientific computations ® FORTRAN
– Business computations ® COBOL, PL/I
– Larger programs ® Data languages, Components
– Even larger programs ® ???
– Security requirements ® ???
• Assemblers, Macro Processors
• Pseudo-Code Interpreters
– Wilkes, Wheeler & Gill, 1951 (Appendix D)
• First Compiler: Grace Murray Hopper, 1950s
• Automatic Programming [A-2 compiler, 1953]
– Symbolic addresses, decimal numbers
• Laning and Zierler’s algebraic system
– First algebraic compiler
FORTRAN (Backus, 1954)
• Radical idea: computers were more expensive than programmers – if performance suffered, would be failure
• Experience with machine code hacking and automatic programming systems convinced programmers efficient code could not be generated automatically
• Used familiar mathematical notations
Structured Languages: Algol (also called: Procedural, Imperative, etc.)
• captured ideas of FORTRAN in an elegant way – types, conditionals, loops; still limited abstraction from machine
• Algol60:
– First language designed with principles in mind
• Explicit goal: language for publishing algorithms