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, parameter accumulation, 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.
Voorkennis |Verplicht materiaal|
|StudiemateriaalCompiler Construction and Programming language technology:
Engineering a Compiler (Torczon & Cooper)|
|StudiemateriaalConcurrent Programming and Concurrent and Distributed Programming:
Java Concurrency in Practice, 1/E (Goetz, Peierls, Bloch, Bowbeer, Holmes & Lea)|
|BlackboardModulehandleiding met aanvullend materiaal|
|Functional and Logic Programming Project|
|Functional Programming Test|
|Concurrent Programming Test|
|Compiler Construction Take-Home|