Programação Concorrente: Linguagens e Técnicas (2021/2022) - Departamento de Informática
Descrição

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

Objectivos

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:

Programa

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

Bibliografia Principal

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!

Esforço do Aluno
  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