Concurrent Programming: Languages and Techniques (2021/2022) - Departamento de Informática
Description

The CU focuses on three concurrent programming approaches and their support at the level of modern languages: shared memory, supported by the linear type system of Rust (adopted, for example, by Dropbox, Mozilla and Facebook); messages, supported by the communication primitives in synchronous/asynchronous channels of Go (developed by Google and adopted, for example, by Uber, Twitch and Dropbox); and actors, supported by Erlang programming infrastructure (developed by Ericsson and used by companies such as WhatsApp and Goldman Sachs).

Objectives

The main goal of this unit is to teach the students the development techniques that are needed for the development of concurrent programs in a realistic, general purpose setting, using advanced mainstream languages such as Erlang, Go and Rust.


By the end of this unit, students will have acquired knowledge, skills and competences that will enable them to:

Syllabus

1. Concurrent programming using ownership and permissions

1.1 Models and concepts
1.2 The Rust programming language
1.3 Concurrent programming in Rust: channels and message passing; shared memory, arcs and mutexes; asynchronous event-driven programming
1.4 Tools and techniques to support message passing concurrent programming in Rust

2. Concurrent Programming using message passing
2.1 Models and concepts
2.2 The Go programming language
2.3 Concurrent programming in Go: synchronous channels; green threads (goroutines) and select; asynchrony; concurrent programming patterns
2.4 Tools and techniques to support message passing concurrent programming in Go

3. Concurrent programming using Actors
3.1 Models and concepts
3.2 The Erlang language
3.3 Concurrent programming in Erlang: processes; message passing; process design patterns (OTP); robustness (error handling, time-outs)
3.3 Tools and techniques to support concurrent programming in Erlang

Bibliography

Programming languages:

- Alan A. A. Donovan, Brian W. Kernighan. The Go Programming Language

- Steve Klabnik, Carol Nichols. The Rust Programming Language

- Joe Armstrong. Programming Erlang: Software for a Concurrent World


Foundations of concurrent programming:

- Robin Milner. Communicating and Mobile Systems: The Pi-Calculus

- Dave Clarke, Johan Ostlund, Ilya Sergey, and Tobias Wrigstad. Ownership Types: A Survey

- Ralf Jung, Jacques-Henri Jourdan, Robbert Krebbers, and Derek Dreyer. RustBelt: Securing the Foundations of the Rust Programming Language

- Gul Agha. Actors: a model of concurrent computation in distributed systems


Complementary references:

- William Kennedy with Brian Ketelsen and Erik St. Martin. Go in Action

- Fred Hebert. Learn you some Erlang for great good!

Student work
  Hours per credit 28
  Hours per week Weeks Hours
Aulas práticas e laboratoriais   28.0
Aulas teóricas   28.0
Avaliação   5.0
Self study   42.0
Orientação tutorial   28.0
Project   42.0
Total hours 173
ECTS 6.0