After successful completion of this module, the student is able to:
- Describe the major programming paradigms (FP, LP and CP) and their essential characteristics and differences
- Write basic programs in all major programming paradigms
- Solve non-trivial programming problems in FP and CP
- Explain the concepts and importance of typing, in terms of FP and CC
- Explain and use the typical types and data structures in FP and CP
- Explain and take advantage of the evaluation and execution mechanisms of FP (lazy evaluation) and CP (hardware-related aspects, concurrency models)
- Explain and use the following concepts of FP: recursion, list comprehension, higher order functions, function composition, lazy evaluation.
- Explain and use the following concepts of CP: interleaving, fairness, deadlock, memory models, synchronisation, locking.
- Explain and use the following concepts of CC: syntactic and semantic analysis, scanning, parsing, run-time organisation, code generation, optimisation.
- Write a compiler for a non-trivial imperative language with concurrency features generating a given (dedicated) instruction set.
Up until this point, the students have mainly learned imperative, object-oriented programming. This module will extend their awareness and ability in the following directions:
These three strands are initially taught separately and come together in the module project, where the students develop a compiler for their own language with support for parallelism, generating code that runs on an extensible hardware emulator written in a functional language.
- Non-imperative programming: in particular, the functional paradigm (extensively) and the logic paradigm (briefly)
- Programming for concurrent systems: concepts, data structures and algorithms for multi-core and GPU-based parallelism
- Programming language technology: parsing, compilation and code generation
The module presents a mixture of
- Lectures to provide an overview and motivation of the material
- Exercise sessions to get familiar with the concepts
- Laboratory exercises to practice the acquired skills
- Small projects and a larger final project.