The 50,000 foot view of PLs: history and features
At this point in the course we have covered some of the most key features of modern languages. In this lecture we step back a bit to look at the historical evolution of features, and include some more features we did not get a chance to cover earlier.The Influential PLs list
There are many important PLs, but a few are arguably more important than others. Here is the main list we will focus on.- Machine / Assembly language
- FORTRAN
- Lisp (and its successor, Scheme)
- Algol
- Simula and Smalltalk
- Modula
- C
- C++
- ML (and the related Haskell)
- Java
- Modern scripting languages (Python, Javascript, and Ruby)
The Main Features list
Here is an historical list of key features that we will discuss. The key language(s) introducing it are in parens after.- Sequences of statements (Machine)
- Memory read and write, including indirect read/write (primitive pointers) (Machine)
- Basic arithmetical operations (not expressions, just direct on two locations) (Machine)
- (un)Conditional branching (Machine)
- Basic data types of ints, floats and arrays and typechecking them (FORTRAN)
- For loops and (non-reentrant or non-recursive) subroutines (FORTRAN)
- Structured data a la C structs and dynamic allocation thereof (Algol)
- Structured control a la C while and if (Algol)
- Objects, classes, messages, and inheritance (Simula/Smalltalk)
- Recursive and nested function defns (Pascal)
- Modules that are not just files (Modula)
- Higher-order functions (Lisp)
- Dynamic typing (Lisp)
- Implicit dynamic memory allocation and de-allocation (Lisp)
- Type generics (parametric polymorphism) (ML)
- Type inference (ML)
- Nonlocal exception handling (ML perhaps)