This module shows students what trade-offs are involved in designing a programming language, and how those trade-offs ultimately influence programmer productivity. The module starts with a quick, example-based introduction to the basics of programming languages. It then continues with a series of problems involved in the design of several programming languages.
As an example, the students will be shown the design difference between imperative languages with state and functional programming languages with types and general recursion. These will form the basis to construct more involved programming languages and realistic, e.g. non-determinism, polymorphism, effects and exceptions.
Also, they will be taught how to translate the mathematical description of a programming language into its corresponding implementation.
Indicative examples are:
- Implementation of interpreters for C-like and Haskell-like languages.
- Problem solving. The problems will involve concepts such as parsing, evaluation, trees, graphs, memoization, randomization.
- Adding Language features: first order functions, polymorphism, effects, exceptions, types, algebraic data types.
Total contact hours: 32 hours
Private study hours: 118 hours
Total study hours: 150 hours
Method of assessment
Programming assignment A1 — 30%
Programming assignment A2 — 30%
Class exercises — 10%
Examination 2 hours - 30%
Winskel, G. (1993) The Formal Semantics of Programming Languages: An Introduction. MIT Press
Bird, R., Gibbons J. (2020). Algorithm Design with Haskell. Cambridge University Press
Bird, R. (2014). Thinking Functionally with Haskell, Cambridge University Press.
Hutton, G. (2016) Programming in Haskell, 2nd edition. Cambridge University Press
Krishnamurthi, S. (2015) [available for free online]. Programming Languages: Application and Interpretation.
Streicher, T. (2006) Domain-Theoretic Foundations of Functional Programming. World Scientific Publishing Company
See the library reading list for this module (Canterbury)
The intended subject specific learning outcomes.
On successfully completing the module students will be able to:
1. Describe the behaviour of programs written in a small imperative and functional programming language using operational semantics
2. Translate these ideas from theory to practice by implementing an interpreter for the language
3. Adding basic features to a base language.
4. Writing algorithms using imperative (while loops) and functional (recursive operators) languages.
Back to top
Credit level 6. Higher level module usually taken in Stage 3 of an undergraduate degree.
- ECTS credits are recognised throughout the EU and allow you to transfer credit easily from one university to another.
- The named convenor is the convenor for the current academic session.
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.