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).
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:
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
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!
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 |