Implementação da linguagem de programação - Programming language implementation

Uma implementação de linguagem de programação é um sistema para executar programas de computador . Existem duas abordagens gerais para a implementação da linguagem de programação: interpretação e compilação .

A interpretação é um método de execução de um programa. O programa é lido como entrada por um intérprete , que executa as ações escritas no programa.

A compilação é um processo diferente, onde um compilador lê um programa, mas em vez de executar o programa, o compilador o traduz para alguma outra linguagem, como bytecode ou código de máquina . O código traduzido pode ser executado diretamente por hardware ou servir como entrada para outro interpretador ou outro compilador.

Intérprete

Um intérprete é composto de duas partes: um analisador e um avaliador . Depois que um programa é lido como entrada por um interpretador, ele é processado pelo analisador. O analisador divide o programa em componentes de linguagem para formar uma árvore de análise . O avaliador então usa a árvore de análise para executar o programa.

Máquina virtual

Uma máquina virtual é um tipo especial de interpretador que interpreta bytecode. Bytecode é um código portátil de baixo nível semelhante ao código de máquina, embora seja geralmente executado em uma máquina virtual em vez de uma máquina física. Para melhorar sua eficiência, muitas linguagens de programação como Java , Python e C # são compiladas em bytecode antes de serem interpretadas.

Compilador just-in-time

Algumas máquinas virtuais incluem um compilador just-in-time (JIT) para melhorar a eficiência da execução de bytecode. Enquanto o bytecode está sendo executado pela máquina virtual, se o compilador JIT determinar que uma parte do bytecode será usada repetidamente, ele compilará essa parte específica para o código de máquina. O compilador JIT então armazena o código de máquina na memória para que possa ser usado pela máquina virtual. Os compiladores JIT tentam encontrar um equilíbrio entre um tempo de compilação mais longo e um tempo de execução mais rápido.

Compilador

Um compilador traduz um programa escrito em uma linguagem para outra. A maioria dos compiladores é organizada em três estágios: um front end , um otimizador e um back end . O front end é responsável por entender o programa. Ele garante que o programa é válido e o transforma em uma representação intermediária , uma estrutura de dados usada pelo compilador para representar o programa. O otimizador melhora a representação intermediária para aumentar a velocidade ou reduzir o tamanho do executável que é finalmente produzido pelo compilador. O back end converte a representação intermediária otimizada na linguagem de saída do compilador.

Se um compilador de uma determinada linguagem de alto nível produz outra linguagem de alto nível, é chamado de transpilador . Transpiladores podem ser usados ​​para estender linguagens existentes ou para simplificar o desenvolvimento do compilador, explorando implementações portáteis e bem otimizadas de outras linguagens (como C ).

Muitas combinações de interpretação e compilação são possíveis, e muitas implementações de linguagens de programação modernas incluem elementos de ambas. Por exemplo, a linguagem de programação Smalltalk é convencionalmente implementada por compilação em bytecode , que é então interpretado ou compilado por uma máquina virtual . Como o bytecode Smalltalk é executado em uma máquina virtual, ele é portátil em diferentes plataformas de hardware.

Múltiplas implementações

As linguagens de programação podem ter várias implementações. Implementações diferentes podem ser escritas em linguagens diferentes e podem usar métodos diferentes para compilar ou interpretar o código. Por exemplo, as implementações de Python incluem:

Referências

links externos