Programação Concorrente: Linguagens e Técnicas

Objetivos

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:

  • Compreender os desafios da programação concorrente e os conceitos e técnicas essenciais para desenvolver aplicações correctas;
  • Ser capaz de desenvolver soluções típicas para lidar com os desafios usuais, argumentando e/ou mostrando a sua correcção;
  • Conhecer as linguagens modernas para desenvolvimento de programas concorrentes e os padrões principais para lidar com os aspectos críticos de uma aplicação concorrente.

Caracterização geral

Código

12545

Créditos

6.0

Professor responsável

Bernardo Parente Coutinho Fernandes Toninho, Carla Maria Gonçalves Ferreira

Horas

Semanais - 4

Totais - 84

Idioma de ensino

Português

Pré-requisitos

A disponibilizar brevemente

Bibliografia

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!

Método de ensino

As aulas da disciplina consistem em duas horas e uma aula de laboratorial de duas horas.

As aulas teóricas incluem exposição teórica, ilustrada por casos de estudo e apoiada pelo uso de ferramentas de desenvolvimento. Nas sessões de laboratório, os alunos resolvem exercícios: modelação e implementação de de sistemas; análise critica de estratégias de implementação e os seus trade-offs.

A avaliação inclui três testes (possivelmente orais), três mini-projectos e três trabalhos práticos (em grupo). Nos trabalhos práticos, os alunos terão que implementar um sistema concorrente e escrever um relatório.

Condições para obter aprovação: NE> = 9.5 e NT> = 9.5, em que NE é a média das notas dos testes e NT é a nota do trabalho prático.

Método de avaliação

Avaliação Teórico-Prática

3 testes escritos individuais. Cada teste vale 10% da nota final, sendo a nota de cada arredondada às décimas. Não há nota minima nos testes. Parte de cada teste incidirá sobre o projecto entregue anteriormente.

Avaliação de Projecto

3 projectos elaborados em grupos de 2 (3 excepcionalmente, com autorização expressa dos docentes), cada um valendo 20% da nota final, sendo a nota de cada arredondada às décimas.

Avaliação Sumativa

3 mini-projectos elaborados em grupos de 2 (3 excepcionalmente, com autorização expressa dos docentes), cada um valendo 5% da nota final, sendo a nota de cada arredondada às unidades. Para a nota final contam os melhores 2 e a nota da componente é arredondada às décimas.


A UC não impõe condições para frequência.


Conteúdo

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

Cursos

Cursos onde a unidade curricular é leccionada: