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.
- Soft real-time programming. How to use delay constructs to build timing, ticking, and synchronization circuits.
- 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.