Practical assignments

There are three practical assignments. The first is an individual assignment while the second and third may be completed in pairs. Check the schedule for the deadlines.

Follow the instructions to set up your development environment.

The concurrency and parallelism concepts taught in this course apply to almost any programming language. In this course, we have chosen Haskell as the language to use for the practical assignments, and as such we require solutions using the Haskell starting template.

However, to show that the concepts apply to other languages as well, we make an exception for P1 (IBAN), for which we also accept submissions in Rust. Using this option is at your own risk, and you should take it only if you already know Rust. If you are interested in learning Rust using this assignment, please still do the Haskell version first, and only when finished turn to Rust.

Note that the precise types used in Haskell and Rust differ slightly; for P1 specifically, you should translate IORef Int to AtomicU32, and MVar to either Mutex or OnceLock, depending on the use-case. See the Rust template for more details.

Working group exercise sets

See the schedule. Completing the working group questions will help you prepare for the exams as well as the practical assignments!

Exams

There are two exams, each counting for half of the theory mark. The basis for the course are the slides discussed in the lectures and any indicated reading material. In addition, anything that comes up during the exercises and lab assignments should be considered as part of the course.

The questions on the exams are in English. You may answer in English or Dutch.

The working group exercises are a good preparation for the exam. These consist of previous exam questions as well as novel questions not (yet) seen on the exams.

Here are a sample of past exam papers: