A UC foca-se em três abordagens de programação concorrente e no seu suporte ao nível de linguagens modernas: memória partilhada, suportada pelo sistema de tipos linear da linguagem Rust (adoptada, por exemplo, pela Dropbox, Mozilla e Facebook); troca de mensagens, suportada pelas primitivas de comunicação em canais síncronos/assíncronos da linguagem Go (desenvolvida pela Google e adoptada, por exemplo, pela Uber, Twitch e Dropbox); e actores, suportados pela infra-estrutura de programação da linguagem Erlang (desenvolvida pela Ericsson e usada por empresas como a WhatsApp e a Goldman Sachs).
O objectivo central da UC é ensinar a desenvolver programas concorrentes para construir aplicações realistas, usando linguagens mainstream avançadas como Erlang, Go e Rust.
No final desta unidade curricular o estudante terá adquirido conhecimentos, aptidões e competências que lhe permitam:
1. Programação Concorrente por controle de permissões
1.1 Conceitos e modelos
1.2 A linguagem Rust
1.3 Programação concorrente em Rust
1.3.1 Canais e troca de mensagens
1.3.3 Memória partilhada, Arcs e Mutexes
1.3.4 Programação com eventos assíncronos
1.4 Ferramentas de apoio ao desenvolvimento em Rust
2. Programação Concorrente por troca de mensagens
2.1 Conceitos e modelos
2.2 A linguagem Go
2.3 Programação concorrente em Go
2.3.1 Canais síncronos
2.3.2 Threads verdes (goroutines) e Select
2.3.3 Asincronia
2.3.4 Padrões de programação concorrentes
2.4 Ferramentas de apoio ao desenvolvimento de aplicações por troca de mensagens em Go
3. Programação concorrente com actores
3.1 Conceitos e modelos
3.2 A linguagem Erlang
3.3 Programação concorrente em Erlang
3.3.1 Processos
3.3.3 Troca de mensagens
3.3.4 Padrões de desenho de processos (OTP)
3.3.5 Robustez (tratamento de erros, time-outs)
3.4 Ferramentas de apoio ao desenvolvimento em Erlang
Linguagens de programação:
- 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
Fundamentos de programação concorrente:
- 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
Referências complementares:
- William Kennedy with Brian Ketelsen and Erik St. Martin. Go in Action
- Fred Hebert. Learn you some Erlang for great good!
Horas por crédito | 28 | ||
Horas p/ semana | Semanas | Horas | |
Aulas práticas e laboratoriais | 28.0 | ||
Aulas teóricas | 28.0 | ||
Avaliação | 5.0 | ||
Estudo | 42.0 | ||
Orientação tutorial | 28.0 | ||
Projectos e trabalhos | 42.0 | ||
Total de Horas | 173 | ||
ECTS | 6.0 |