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. [correction: 2015p3q6 has been adjusted to 2015p3q5]
  • 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'.
    • Slide 226: "foo(s+y*z)" should be "foo(s + x*y)"

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