Implementação de Linguagens
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Ciência de Computadores |
Ocorrência: 2024/2025 - 2S 
Ciclos de Estudo/Cursos
Docência - Responsabilidades
Língua de trabalho
Português - Suitable for English-speaking students
Objetivos
Fornecer aos alunos fundamentos teóricos e técnicas práticas de implementação de linguagens de programação funcionais e imperativas.
Resultados de aprendizagem e competências
Os alunos deverão adquirir as seguintes competências: (a) compreender os princípios utilizados para a implementação de linguagens funcionais com avaliação lazy (como Haskell) em arquiteturas convencionais,os problemas tecnológicos associados ao seu desenvolvimento e as soluções existentes; (b) saber desenhar e implementar um "runtime" para uma linguagem de programação imperativa (ou componentes como um "garbage collector" ou um interpretador).
Modo de trabalho
Presencial
Pré-requisitos (conhecimentos prévios) e co-requisitos (conhecimentos simultâneos)
Conhecimentos de programação funcional e imperative (e.g. em Haskell, C, Java); conhecimentos de programação de baixo-nível (e.g. em C).
Programa
Módulo sobre linguagens funcionais
Definição de uma linguagem funcional mínima baseada no cálculo-lambda. Semântica estrita vs. não estrita. Estratégias de redução call-by-value e call-by-name. Implementação de funções de ordem superior usando "closures". A máquina abstracta SECD. Estratégia call-by-need e redução de grafos. Arquitetura do Glasgow Haskell Compiler: Tradução para Linguagem Core. Implementação de classes de tipos usando dicionários. Otimização de código por meio de transformações de programa. A máquina abstracta STG. Semântica operacional da STG.
Módulo sobre linguagens imperativas
Introdução à gestão de memória em tempo de execução. "Reference Counting". Introdução à técnica de "Garbage Collection". Algoritmos para "garbage collection" - Mark and Sweep, Mark and Compact, Copy Collection, Generational Garbage Collection - e as suas complexidades espaciais e temporais. Caso de estudo - Java.
Bibliografia Obrigatória
S.L. Peyton Jones;
The implementation of functional programming languages. ISBN: 0-13-453325-9
S.L. Peyton Jones;
Implementing functional languages. ISBN: 0-13-721952-0
Richard Jones;
Garbage collection. ISBN: 978-0-471-94148-4
Benjamin J. Evans, James Gough, Chris Newland; Optimizing Java, O'Reilly Media, 2018. ISBN: 1492025798
Métodos de ensino e atividades de aprendizagem
Aulas de exposição, discussão e resolução de exercícios ilustrativos dos conceitos fundamentais da teoria e prática do desenho e implementação de linguagens.
Tipo de avaliação
Avaliação distribuída sem exame final
Componentes de Avaliação
Designação |
Peso (%) |
Teste |
40,00 |
Trabalho prático ou de projeto |
60,00 |
Total: |
100,00 |
Componentes de Ocupação
Designação |
Tempo (Horas) |
Estudo autónomo |
60,00 |
Frequência das aulas |
42,00 |
Elaboração de projeto |
60,00 |
Total: |
162,00 |
Obtenção de frequência
N/A
Fórmula de cálculo da classificação final
A avaliação dos alunos faz-se por realização de 2 trabalhos práticos e de dois testes escritos.
Cada trabalho prático terá um peso total de 6 em 20 valores na classificação final da disciplina e cada teste escrito terá um peso de 4 em 20 valores na classificação final da disciplina. A classificação mínima nos testes escritos é de 40%.
As regras acima aplicam-se igualmente para melhoria de classificação e avaliações especiais.
Avaliação especial (TE, DA, ...)
Aplicam-se as mesmas regras de cálculo da classificação final.
Melhoria de classificação
Aplicam-se as mesmas regras de cálculo da classificação final.
Observações
O exame de recurso segue os mesmos moldes dos dois testes. A classificação dos trabalhos não pode ser melhorada em época de recurso.