Compilação dinâmica - Dynamic compilation

A compilação dinâmica é um processo usado por algumas implementações de linguagem de programação para obter desempenho durante a execução do programa. Embora a técnica tenha se originado no Self , a linguagem mais conhecida que usa essa técnica é Java . Uma vez que o código de máquina emitido por um compilador dinâmico é construído e otimizado no tempo de execução do programa, o uso da compilação dinâmica permite otimizações para eficiência não disponíveis para programas compilados estaticamente (ou seja, aqueles compilados por um chamado "compilador em lote", conforme escrito abaixo ), exceto por meio de duplicação de código ou metaprogramação .

Os ambientes de tempo de execução que usam compilação dinâmica normalmente têm programas executados lentamente nos primeiros minutos e, depois disso, a maior parte da compilação e recompilação é feita e executada rapidamente. Devido a esse atraso de desempenho inicial, a compilação dinâmica é indesejável em certos casos. Na maioria das implementações de compilação dinâmica, algumas otimizações que poderiam ser feitas no tempo de compilação inicial são atrasadas até uma nova compilação em tempo de execução , causando mais lentidão desnecessária. A compilação just-in-time é uma forma de compilação dinâmica.

Compilação incremental

Uma técnica intimamente relacionada é a compilação incremental . Um compilador incremental é usado em POP-2 , POP-11 , Forth , algumas versões do Lisp , por exemplo, Maclisp e pelo menos uma versão do ML ( Poplog ML). Isso requer que o compilador da linguagem de programação faça parte do sistema de tempo de execução. Em consequência, o código-fonte pode ser lido a qualquer momento, a partir do terminal, de um arquivo ou possivelmente de uma estrutura de dados construída pelo programa em execução e traduzido em um bloco de código de máquina ou função (que pode substituir uma função anterior com o mesmo nome), que fica então imediatamente disponível para uso pelo programa. Devido à necessidade de velocidade de compilação durante o desenvolvimento e teste interativo, o código compilado provavelmente não será tão otimizado quanto o código produzido por um 'compilador de lote' padrão, que lê o código-fonte e produz arquivos-objeto que podem ser posteriormente vinculados e corra. No entanto, um programa compilado de forma incremental normalmente será executado muito mais rápido do que uma versão interpretada do mesmo programa. A compilação incremental, portanto, fornece uma mistura dos benefícios das linguagens interpretadas e compiladas. Para auxiliar a portabilidade, é geralmente desejável que o compilador incremental opere em dois estágios, ou seja, primeiro compilando para alguma linguagem independente de plataforma intermediária e, em seguida, compilando dessa para o código de máquina para a máquina host. Neste caso, a portabilidade requer apenas a mudança do compilador 'back end'. Ao contrário da compilação dinâmica, conforme definido acima, a compilação incremental não envolve otimizações adicionais depois que o programa é executado pela primeira vez.

Veja também

links externos