Modelação e Validação de Sistemas Concorrentes

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:

  • 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

11560

Créditos

6.0

Professor responsável

António Maria Lobo César Alarcão Ravara, 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 estudos de caso e apoiada pelo uso de ferramentas de verificação. Nas sessões de laboratório, os alunos resolvem exercícios: modelação de sistemas; especificação e verificação das propriedades do modelo.

A avaliação inclui dois testes e dois trabalhos práticos individuais. Nas duas tarefas, o aluno terá que especificar um sistema concorrente, especificar e verificar um conjunto de propriedades 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 orais individuais. Cada teste vale 15% da nota final, sendo a nota de cada arredondada às décimas.

Avaliação de Projecto

3 projectos elaborados em grupos de 2 (3 excepcionalmente, com autorização expressa dos docentes) com discussão oral individual, cada um valendo 15% da nota final, sendo a nota de cada arredondada às décimas. As notas dos membros de cada grupo podem diferir, de acordo com a discussão.

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.


As discussões orais dos projectos e os testes serão presenciais.

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: