Linguagens e Ambientes de Execução
Objectivos
Os estudantes que terminam com sucesso esta unidade curricular serão capazes de:
- Comparar e utilizar diferentes construções comuns em linguagens de programação modernas, enquadrando diferentes paradigmas de programação, e o seu suporte no ambiente de execução.
- Entender os principais constituintes de um ambiente de execução para linguagens de alto nível, e saber comparar diferentes abordagens de sistemas de tipos destes ambientes.
- Usar metadados em tempo de execução (reflexão) para examinar tipos e usar metaprogramação para analisar e transformar programas em tempo de execução.
- Analisar o desempenho de programas managed e usar eficientemente o suporte automático de gestão de memória (garbage collection).
Programa
- Principais construções de linguagens suportadas em ambientes de execução para linguagens de alto nível (managed runtimes) e a sua contextualização em diferentes paradigmas de programação, tendo como principal caso de estudo a máquina virtual Java.
- Principais constituintes dos ambientes de execução managed, nomeadamente: class,verifier,just-intime compiler, metadados e gestão de memória.
- Comparação de sistemas de tipos para ambientes de execução managed quanto às regras de equivalência, compatibilidade e inferência.
- API de reflexão em Java e casos práticos de metaprogramação no desenvolvimento de software.
- Modelo de pilha e registos. Análise das principais instruções bytecode Java apoiada em ferramentas de suporte à reflexão estrutural (e.g. ASM, Javassist).
- Introdução à análise de desempenho de programas Java e uso de ferramentas de monitorização da JVM (e.g. jconsole).
- Introdução aos algoritmos de garbage collection na JVM.
Resultados
Esta unidade curricular identifica os principais problemas resolvidos por um ambiente de execução para linguagens de alto nível e o suporte que fornece ao desenvolvimento de aplicações. Em particular são analisadas diferentes construções disponíveis nestas linguagens e nos sistemas de tipos, usando como principal caso de estudo a linguagem Java.
A coerência entre os conteúdos programáticos e os objetivos da unidade curricular é a seguinte:
- O objetivo 1 é alcançado através dos conteúdos I e III;
- O objetivo 2 é alcançado através dos conteúdos II, III, e IV;
- Os conteúdos IV e V contribuem para o objetivo 3;
- Os conteúdos V, VI e VII pretendem concretizar o objetivo 4.
Bibliografia
“Optimizing Java: Practical Techniques for Improving JVM Application Performance” by Chris Newland, James Gough, Benjamin J Evans. Released April 2018. Publisher(s): O’Reilly Media, Inc. ISBN: 9781492039259.
“Programming Language Pragmatics” Michael L. Scott, 2015. Publisher(s): Morgan Kaufmann Publishers.
“The Java Virtual Machine Specification” Java SE 12 Edition” by Tim Lindholm, Frank Yellin, Gilad Bracha, and Alex Buckley. Released February 2019. Publisher(s): Oracle America, Inc.