Principles of Programming Languages: 2019-2020
Lecturer | |
Degrees | Schedule S1(CS&P)(3rd years) — Computer Science and Philosophy Schedule S1(3rd years) — Computer Science Schedule S1(M&CS)(3rd years) — Mathematics and Computer Science |
Term | Michaelmas Term 2019 (16 lectures) |
Overview
This course use interpreters written in Haskell as a vehicle for exploring various kinds of programming languages.
PRACTICALS
- Translation between recursive and iterative algorithms in a simple functional language.
- Semantics of a language with call-by-name and assignable variables.
Learning outcomes
After taking this course, students will be able to:
- define the semantics of a programming language using a definitional interpreter.
- investigate semantic issues in programming languages by studying implementations in an interpreter
- solve problems using a range of programming paradigms and assess the effectiveness of each paradigm for a particular problem.
Prerequisites
Functional programming.
Synopsis
- Introducing Fun, with familiar examples rewritten in the language.
- The concrete and abstract syntax of Fun.
- A definitional interpreter for Fun. Examples of evaluation.
- Defunctionalization and closures
- State passing style
- Changing the interpreter to support assignable variables, with references as expressible values (like ML).
- Monads and interpreters in monadic form.
- A language with exceptions.
- Call by value and call by name.
- Continuations and continuation passing style
- Abstract machines.
- Inductive definitions
- Simple types, and proofs by induction
- Basics of using chain complete partial orders to interpret programs with recursion
Syllabus
Abstract and concrete syntax. Definitional interpreters in direct and monadic form. Functional and imperative programming. Simple types and basic denotational semantics. Call by value and call by name. Continuations and abstract machines.Reading list
Full notes for the course will be provided on the course materials page.
The course explores many of the same themes that are covered in
- Friedman, Wand and Haynes, Essentials of Programming Languages, 2nd or 3rd ed., MIT Press.
However, that book contains interpreters written in Scheme, and we will use Haskell.
Related research
Themes |
Feedback
Students are formally asked for feedback at the end of the course. Students can also submit feedback at any point here. Feedback received here will go to the Head of Academic Administration, and will be dealt with confidentially when being passed on further. All feedback is welcome.