School of Computer Science

Module 06-02552 (2011)

Principles of Programming Languages

Level 3/H

Hayo Thielecke Achim Jung Semester 2 10 credits
Co-ordinator: Achim Jung
Reviewer: Peter Breuer

The Module Description is a strict subset of this Syllabus Page.


The aims of this module are to:

  • introduce the central ideas and techniques in the theory of programming languages
  • exhibit some of the building blocks from which high-level programming languages are constructed
  • illustrate how concrete languages realise abstract programming language ideas
  • explain ways for defining the semantics of programming language constructs in a rigorous fashion

Learning Outcomes

On successful completion of this module, the student should be able to:

  • demonstrate fluency in reading, constructing, and manipulating expressions in the lambda calculus
  • execute specific evaluation strategies for lambda calculi with effects
  • relate features of concrete programming languages to abstract principles
  • assign types from various type disciplines to program expressions

Teaching methods

2 hrs of lectures and one exercise class per week, two revision lectures


  • Sessional: 1.5 hr examination (80%) and continuous assessment (20%).
  • Supplementary: By examination only.

Detailed Syllabus

  1. History and overview
  2. The lambda calculus
    • abstraction and application
    • alpha equivalence
    • substitution
    • reduction
  3. Evaluation strategies
    • Call-by-name, call-by-value, call-by-need
    • Operational semantics
    • Abstract machines
    • effects
  4. Types
    • simple types
    • polymorphic types
    • subtyping
  5. Modularity
    • data encapsulation
    • object-orientation
    • abstract data types

Programmes containing this module