- Meio de comunicação usuário/computador
- Notação para especificar ao computador o que fazer
- <2-> Definição quanto a sintaxe
→ Uma notação para especificar ações a serem executadas - <2-> Quanto a semântica
→ Conjunto de conceitos para resolver problemas de programação
- Executam um conjunto de instruções em linguagem de máquina
- Uma linguagem de programação de alto nível poderia ser diretamente executável nelas?
- <2-> Complexidade e custo de implementação desta máquina?
- <2-> Flexibilidade reduzida
\vfill
- <3-> Exemplo clássico: Java Processor (picoJava / Sun Microsystems)
- Arquitetura de computador com instruções de linguagem de alto nível
\vfill
- <4-> Modelo atual possui diversas camadas
- Hardware
- Macro-instruções
- Sistema Operacional
- Linguagens de Alto Nível
- Como se dá a execução de programas nesse contexto?
- A LP de alto nível é incompatível com as instruções executáveis
- Como resolver esta incompatibilidade?
- <2-> Tradutores de código (ou processadores de linguagem)
- <3-> Três abordagens
- Compilação
- Interpretação
- Abordagem Híbrida
- Noção de código executável permanente, diretamente executável na plataforma destino
- Características
- Gera um código eficiente (em tempo e espaço)
- Maiores verificações do código fonte → Confiabilidade
- Processo em fases (análise e síntese)
\vfill
- Portabilidade através da compilação
- Mesmo código, diferentes plataformas
- Vinculação tardia de
- Nomes a objetos → regras de escopo
- Tipos a objetos/nomes → regras de tipo
- Programas a código
- Classes dinâmicas em Java
- Novas funções criadas durante a execução em Scheme
- A linguagem é interpretada, linha por linha
- Capaz de “executar” código de alto nível
- Ausência de um processo de tradução (como na compilação)
- Ausência de código executável permanente
- Vantagens
- Simplicidade
- Portabilidade através da interpretação
- Depuração
- Flexibilidade
- Compilação
- Geração de código executável
- Depende da plataforma de execução
- Tradução lenta versus execução rápida
- Transformação mais apurada do código
- Código intermediário diferente do código fonte
- Menor flexibilidade, maior eficiência
- Interpretação pura
- Não gera código executável
- Independente de plataforma
- Execução lenta
- Transformação puramente mecânica
- Oferece mais flexibilidade e melhor diagnóstico
- Compilação - Interpretação
- Feita em duas etapas
- Código fonte é compilado → código intermediário
- Execução do código intermediário por interpretação
- Python e Perl
- Versões iniciais de Java (geração de bytecode)