Please read our student and staff community guidance on COVID-19
Skip to main content Skip to navigation

CS349 Principles of Programming Languages

Academic Aims

The module introduces students to fundamental concepts underpinning programming languages and to reasoning about program behaviour.

Learning Outcomes

By the end of the module the student should be able to:

  • Understand a variety of concepts underpinning modern programming languages.
  • Distinguish type disciplines in various programming languages.
  • Use formal semantics to reason aboutprogram behaviour.

  • Implement program interpreters and type inference algorithms.


Scope and binding, untyped programming, type systems, type inference, evaluation relations, higher-order types, references, control operators, subtyping, recursive types, polymorphism.

15 CATS (7.5 ECTS)
Term 2

Dr Sara Kalvala


Online material