Compilação e interpretação

            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.


  • C
  • C++
  • Cobol
  • Basic
  • Delphi
  • Fortran
  • Pascal
  • C#
  • Haskell
  • Rust
Processo de compilação


  • Python
  • PHP
  • JavaScript
  • Ruby
  • Lua
  • Smalltalk
Processo de interpretação


Obs.: Está escrito acima que são linguagens tipicamente compiladas ou interpretadas porque esses conceitos não são particulares das linguagens de programação; uma linguagem compilada pode ser implementada para ser interpretada e o contrário também é verdade. Todas as linguagens podem ser compiladas e/ou interpretadas (salvo alguma característica própria ou se a especificação da linguagem impossibilita outras abordagens). Por exemplo, o Ch e o Cling são interpretadores interativos para, respectivamente, C/C++ e C++.


Diferenças entre compilação e interpretaçã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).

Página anterior

Próxima página