Skip to main content

Principles of Programming Languages:  2021-2022

Lecturer

Degrees

Schedule S1(CS&P)(3rd years)Computer Science and Philosophy

Schedule A2(CS&P)Computer Science and Philosophy

Schedule B1 (CS&P)Computer Science and Philosophy

Schedule S1(3rd years)Computer Science

Schedule A2Computer Science

Schedule B1Computer Science

Schedule S1(M&CS)(3rd years)Mathematics and Computer Science

Schedule A2(M&CS)Mathematics and Computer Science

Schedule B1(M&CS)Mathematics and Computer Science

Schedule IMSc in Advanced Computer Science

Michaelmas TermMSc in Advanced Computer Science

Term

Overview

The lectures for this course will be pre-recorded and available on Panopto (click Recorded Lectures>2021-22>Principles of Programming Languages)

The lectures will be supported by discussion sessions in-person.

 

This course use interpreters written in Haskell as a vehicle for exploring various kinds of programming languages.

PRACTICALS

  1. Translation between recursive and iterative algorithms in a simple functional language.
  2. 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

  1. Introducing Fun, with familiar examples rewritten in the language.
  2. The concrete and abstract syntax of Fun.
  3. A definitional interpreter for Fun. Examples of evaluation.
  4. Defunctionalization and closures
  5. State passing style
  6. Changing the interpreter to support assignable variables, with references as expressible values (like ML).
  7. Monads and interpreters in monadic form.
  8. A language with exceptions.
  9. Call by value and call by name.
  10. Continuations and continuation passing style
  11. Abstract machines.
  12. Inductive definitions
  13. Simple types, and proofs by induction
  14. 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

Taking our courses

This form is not to be used by students studying for a degree in the Department of Computer Science, or for Visiting Students who are registered for Computer Science courses

Other matriculated University of Oxford students who are interested in taking this, or other, courses in the Department of Computer Science, must complete this online form by 17.00 on Friday of 0th week of term in which the course is taught. Late requests, and requests sent by email, will not be considered. All requests must be approved by the relevant Computer Science departmental committee and can only be submitted using this form.