skip to primary navigationskip to content

Course pages 2021–22

Concepts in Programming Languages

This is a new version of this page (17 May 2022)

Here is the original (27 April 2022) version.

Covid-19 effects on 2021/22 course

Due to Covid-19 the core material of the course is available by videos on the Recordings tab. However, assuming the rate of Covid-19 infections continues to drop then physical lectures will start Thu 12 May 2022 at 10:00 in LT1, starting at slide 131 (Topic VIII). These will mainly cover the same material as on the slides and videos, but perhaps with alternative lecturer words.

The only planned difference is Lecture 8 where there will be some non-examinable material briefly introducing two up-and-coming topics: "type-managed storage" as found in Rust, and "resumable exceptions" [a.k.a. (algebraic) effect handlers] as found in Eff and Koka, and recently proposed for OCaml.

Handouts

  • Lecture slides (as PDF, 1-up)
  • Lecture slides (as PDF, 4-up)
  • 2021/22 Revision Guide.
  • Lecture 8: additional slides also available as 4-up.
  • Errata/Lacunae:
    • Slide 199 wrongly says "static int k = 10; // note free variables copied, not aliased". This is untrue -- Java statics (even local statics) are effectively aliased, so reading them in a lambda reflects any writes to them after the execution reached the lambda. This only affects the detail of slide 201, not the general principles. However, C++ now offers a fuller explanation of the idea of variable capture, since lambda in C++ (written []) can specify whether a closure captures free variables by value or by address.
      See for example this code.

Some additional background and code examples

Core Exercises

The exercises have not changed in this version of the web page, but have been re-ordered.

There are also two sets of supervision exercises below; doing them all is perhaps overkeen, but supervisors should select from them.

Supervision exercises by Andrej Ivašković

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.
      Supplementary reading material:

    Books

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