This course covers advanced programming language concepts and techniques, with a special accent to concurrent programming.  The course is a successor to LINFO1104 Programming Language Concepts.  The course first gives a brief refresher of the concepts seen in LINFO1104 (in particular, higher-order programming, symbolic programming, deterministic dataflow and message-passing concurrency, language semantics).  Then the course will cover the following topics:

  • Lazy evaluation and programming techniques, combining lazy evaluation and concurrency.
  • Foundation of declarative concurrency, formal definition of declarative concurrency.
  • Advanced declarative algorithm design, using single-assignment variables, lazy evaluation, and concurrency.  This covers both ephemeral and persistent data structures, and both amortized and worst-case time complexity.
  • Secure data abstraction.  How to build data abstractions (objects and abstract data types) that are language secure, i.e., it is not possible to break the abstraction within the language.
  • Message-passing concurrency, including formal foundations (ability to express nondeterminism in the language) and advanced programming techniques.
  • Advanced message-passing techniques with Erlang, using behaviors and supervisor trees.
  • Foundations of mutable state.  Formal definitions and reasons for mutable state, theoretical presentation based on lambda calculus, interaction with the real world.
  • Shared-state concurrency, including tuple spaces, locks, monitors, and transactions.  Reentrancy and deadlock.
The course is taught in the third year of the bachelor of applied science program in the Louvain Engineering School at UCLouvain.  Prerequisite of the course is LINFO1104 or equivalent (first course on programming language concepts and semantics).  The main course textbook is "Concepts, Techniques, and Models of Computer Programming" by Peter Van Roy and Seif Haridi, MIT Press, 2004.  Documentation on Erlang/OTP will be distributed during the course.  A supplementary textbook is "Purely Functional Data Structures" by Chris Okasaki.

The course uses two programming platforms for practical programming, namely the Mozart Programming System version 2 and Erlang/OTP 23.0.  Most of the exercises can be done with Mozart's emacs interface and Erlang's command line interface.  MacOS users have to manually change their PATH variable so that ozc and ozengine commands are accessible.

Teaching assistant for the course is Damien Sprockeels (damien.sprockeels@uclouvain.be).