Computer Laboratory

Course pages 2016–17

Concepts in Programming Languages


  • Lecture slides (as PDF, 1-up)
  • Lecture slides (as PDF, 4-up)
  • 2016/17 Revision Guide.
  • Note: the course has been updated for 2016/17. There is new material on scripting languages (now Topic VII) and the `functional programming meets object-orientation section' (Java and Scala, Topic X) has been rewritten.
  • Errata/Lacunae:
    • Here is a slightly edited set of lecture slides incorporating minor clarifications and bug fixes.
      Semantically significant ones are listed below. If you find a bug which is still in these updated notes then please let me know.
    • Slide 46: myTextIf is misparenthesised, its body should be "(cond (x (eval y)) (T (eval z))))".
    • Slide 121: Missing braces {...} around the body of Person.
    • Slide 144: Last line should say "opaque signature constraint" [not transparent].
    • Slide 197: "Predicate<Boolean>" should be "Predicate<Integer>"
      Also the Java primitive for Boolean is spelt 'boolean' not 'bool'.

Some additional background and code examples

Some additional exercises

Supervision question sets courtesy of Andrew Rice

(Note that topics VII, X and XI have been added/re-written since these questions were written.)

Slides by topic and pointers to further reading material

  1. Introduction and motivation.
    Supplementary reading material:
  2. The first procedural language: FORTRAN (1954-58).
    Supplementary reading material:
  3. The first declarative language: LISP (1958-62).
    Supplementary reading material:
  4. Block-structured procedural languages: Algol (1958-68) and Pascal (1970).
    Supplementary reading material:
  5. Object-oriented languages --- Concepts and origins: SIMULA (1964-67) and Smalltalk (1971-80).
    Programming language: Squeak.
    Supplementary reading material:
  6. Types in programming languages: ML (1973-1978).
    Supplementary reading material:
  7. Scripting Languages and Dynamic Typing.
  8. Data abstraction and modularity: SML Modules (1984-97).
    Supplementary reading material:
  9. Languages for concurrency and parallelism
    • Functional-style programming meets object-orientation
      Programming language: Scala.
      Supplementary reading material:
    • Miscellaneous concepts.


    Further reading material (due to Marcelo Fiore); not needed for examination purpose