Programming Language Implementation - CO658

Looking for a different module?

Module delivery information

Location Term Level1 Credits (ECTS)2 Current Convenor3 2020 to 2021
Canterbury
Spring 6 15 (7.5) DR S Kell checkmark-circle

Overview

A study of techniques for interpreting and compiling programming languages, implementing them in a typed functional programming language (e.g., OCaml, Haskell). The module will outline a whole compiler from source to machine code, but will focus in depth on key algorithms and techniques. Possible in-depth topics include:

• writing interpreters,
• Hindley-Milner type inference,
• register allocation,
• garbage collection,
• abstract interpretation,
• static single assignment form.

The implemented language will be based on a simple imperative (e.g., Pascal-like) language with some extensions to address advanced topics in data layout (e.g., closures, objects, pattern matching). The course will be organized around a simple, but complete, example compiler that the student will have to understand and modify.

Details

This module appears in the following module collections.

Contact hours

Total contact hours: 35 hours
Private study hours: 115 hours
Total study hours: 150 hours

Method of assessment

13.1 Main assessment methods
1 introductory assessment taking approx.. 5 hours (5%)
2 programming assessments taking approx. 25 hours each (25% and 30% respectively)
2 hour unseen written exam (40%)

13.2 Reassessment methods
Like for like.

Indicative reading

Aho, A., Lam, M., Sethi, R., and Ullman, J. (2007). Compilers: Principles, Techniques, and Tools 2nd ed., Prentice Hall.
Appel, A.W. (2004) Modern compiler implementation in ML, Cambridge University Press
Cooper, K., and Torczan, L. (2011). Engineering a compiler, Morgan Kaufmann.
Minsky, Y., Madhavapeddy, A., and Hickey, J (2013). Real world OCaml, O'Reilly Media.

See the library reading list for this module (Canterbury)

Learning outcomes

8. The intended subject specific learning outcomes.
On successfully completing the module students will be able to:
8.1 Understand how a computer program in a high-level, imperative language is translated into machine code;
8.2 Understand how a program is executed, including run-time system support;
8.3 Understand a variety of techniques that a compiler uses to improve the efficiency of its generated code;
8.4 Understand how to represent programs as data in a typed functional language
8.5 Implement basic compiler optimisation techniques;
8.6 Evaluate a program's performance; and
8.7 Work with and modify an existing code base.

9. The intended generic learning outcomes.
On successfully completing the module students will be able to:
9.1 Be able to clearly communicate the results of performance experiments;
9.2 Be able to manage their own learning and development, through self-directed study and working on continuous assessment.

Notes

  1. Credit level 6. Higher level module usually taken in Stage 3 of an undergraduate degree.
  2. ECTS credits are recognised throughout the EU and allow you to transfer credit easily from one university to another.
  3. The named convenor is the convenor for the current academic session.
Back to top

University of Kent makes every effort to ensure that module information is accurate for the relevant academic session and to provide educational services as described. However, courses, services and other matters may be subject to change. Please read our full disclaimer.