Compilador é um software intermediário cujo objetivo é converter um código codificado em uma linguagem de alto nível para um código de máquina compreendido pelo computador. O processo de compilação acontece anterior à execução do programa, ou seja, primeiramente o programa é compilado por completo para então gerar o executável e ser propriamente executado. Caso um erro seja identificado na compilação do programa, o mesmo nem chega a ser executado e mensagens de erros são apresentadas ao programador. Resumidamente, o processo de compilação consiste em converter um código escrito em uma linguagem A para o código de uma linguagem B, por exemplo, traduzir um código-fonte escrito em C para o nativo do processador.
O processo de compilação contrasta com o processo de interpretação, onde um interpretador é responsável pela transformação de um código em alto nível para uma linguagem intermediária que será interpretada em tempo de execução por um software de máquina virtual (próprio da linguagem). Nesse processo, a máquina virtual simula um sistema computacional e o código-fonte é convertido para os códigos determinados no "conjunto de instruções" desse sistema em questão e não à arquitetura de hardware real do computador utilizado. Essa técnica provê uma maior portabilidade em relação às linguagens que utilizam um compilador que gera código nativo, pois o programa pode rodar em qualquer arquitetura que contenha uma máquina virtual instalada, já que a mesma é independente de plataforma. Diferente da compilação, o interpretador lê e executa linha a linha, portanto, ao ler uma instrução, imediatamente já a executa. Erros são identificados enquanto o programa está sendo executado e, ao encontrar algum, uma mensagem é informada e o programa pode encerrar sua execução.
|
|
Compilação | Interpretação |
---|---|
O compilador analisa todo o programa como uma entrada | O interpretador analisa uma única instrução como uma entrada |
Execução mais rápida | Execução mais lenta |
Várias etapas de tradução | Resultado imediato do programa |
O programa necessita ser compilado uma única vez | O programa é convertido para "código de máquina" a cada execução |
Menor portabilidade | Maior portabilidade |
Produz código de máquina nativo | Produz "código de máquina" para uma máquina virtual |
Necessário possuir o código-fonte para compilação | Não é necessário possuir o código-fonte para interpretação |
Menor segurança em relação à propriedade intelectual do códido-fonte | Maior segurança em relação à propriedade intelectual do códido-fonte |
Consome mais memória (já que um código objeto é gerado) | Consome menos memória |
Erros são apresentados depois que o programa inteiro for analisado | Erros são apresentados para cada instrução interpretada (se houver) |
Compiladores são maiores em tamanho | Interpretadores são menores em tamanho |
Algumas linguagens se beneficiam de uma abordagem híbrida entre compilação e interpretação, um exemplo é a linguagem Java, que produz uma espécie de código intermediário denominado bytecode a partir do processo de compilação e interpreta-o em tempo de execução através de sua máquina virtual JVM (Java Virtual Machine).