Skip to content

Latest commit

 

History

History
132 lines (112 loc) · 4.28 KB

implementacao.org

File metadata and controls

132 lines (112 loc) · 4.28 KB

Implementação: Compilação e Interpretação

1 Definição de Linguagem de Programação

  • Meio de comunicação usuário/computador
    • Notação para especificar ao computador o que fazer

./img/pensamento_humano-computador.png

  • <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

2 Máquinas reais

  • 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

3 Modelo de camadas

./img/modelo_de_camadas.png

4 Implementação de Linguagens

  • 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

5 Implementação de LP por Compilação

  • 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

6 As fases da compilação

./img/fases_compilacao.png

7 Dificuldades por compilação

  • 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

8 Implementação de LP por Interpretação

  • 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

9 Compilação versus Interpretação

  • 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

10 Abordagem Híbrida

  • 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)