Artigo original: Interpreted vs Compiled Programming Languages: What's the Difference?
Traduzido e adaptado por Daniel Rosa

Todo programa é um conjunto de instruções, seja um programa que some dois números, seja um envio de solicitação pela internet. Compiladores e interpretadores recebem código legível por seres humanos e convertem-no para código de máquina, legível pelo computador.

Em uma linguagem compilada, a máquina de destino traduz o programa diretamente. Em uma linguagem interpretada, o código fonte não é traduzido diretamente pela máquina de destino. Em vez disso, um programa diferente, o interpretador, lê e executa o código.

Certomas o que isso significa de fato?

Imagine que você tem uma receita de molho que você quer fazer, mas que esteja escrito em grego antigo. Existem duas maneiras para você, que não fala grego antigo, seguir as instruções.

A primeira é se alguém já a traduziu para o seu idioma. Você (e qualquer outra pessoa que fale seu idioma) pode ler a versão da receita e fazer o molho. Pense nessa receita traduzida como a versão compilada.

A segunda maneira é ter um amigo que fale grego antigo. Quando estiver pronto para fazer o molho, seu amigo sentará ao seu lado e traduzirá a receita para você, linha por linha. Neste caso, seu amigo é o interpretador da versão interpretada da receita.

Linguagens compiladas

As linguagens compiladas são convertidas diretamente na máquina em um código de máquina que o processador pode executar. Como resultado, elas tendem a ser mais rápidas e mais eficientes em sua execução do que as linguagens interpretadas. Elas também dão ao desenvolvedor mais controle sobre alguns aspectos do hardware, como o gerenciamento da memória e o uso da CPU.

As linguagens compiladas necessitam de uma etapa de "build" (montagem) – elas precisam, primeiramente, ser compiladas manualmente. Você precisa "remontar" o programa sempre que precisar fazer uma alteração. Em nosso exemplo do molho, toda a tradução já está escrita antes de chegar até você. Se o autor original decidir usar um tipo diferente de óleo de oliva, a receita inteira precisaria ser traduzida novamente e reenviada a você.

Exemplos de linguagens compiladas puras são o C, o C++, o Erlang, o Haskell, o Rust e o Go.

Linguagens interpretadas

Os interpretadores passam por um programa linha por linha e executam cada comando. Aqui, se o autor decidir que quer usar um tipo diferente de óleo de oliva, só precisaria remover o antigo e adicionar o novo. Seu amigo tradutor poderia informar isso a você quando a mudança acontecesse.

Linguagens interpretadas, antigamente, eram significativamente mais lentas do que as linguagens compiladas. Porém, com o desenvolvimento da compilação just-in-time, essa distância vem diminuindo.

Exemplos de linguagens interpretadas comuns são o PHP, o Ruby, o Python e o JavaScript.

Um pequeno detalhe

A maioria das linguagens de programação pode ter implementações compiladas e interpretadas – a linguagem em si não é necessariamente compilada ou interpretada. Porém, para fins de simplicidade, elas são normalmente referidas deste modo.

Python, por exemplo, pode ser executado como um programa compilado ou como uma linguagem interpretada em modo interativo. Por outro lado, a maioria das ferramentas de linha de comando, ou CLIs, e shells podem, em teoria, ser classificadas como linguagens interpretadas.

Vantagens e desvantagens

Vantagens das linguagens compiladas

Os programas compilados em código de máquina nativo tendem a ser mais rápidos que o código interpretado. Isso ocorre porque o processo de traduzir o código em tempo de execução aumenta o tempo do processo, podendo fazer com que o programa seja, em geral, mais lento.

Desvantagens das linguagens compiladas

As desvantagens mais notáveis são:

  • Tempo adicional necessário para concluir toda a etapa de compilação antes dos testes
  • Dependência da plataforma do código binário gerado

Vantagens das linguagens interpretadas

As linguagens interpretadas tendem a ser mais flexíveis, geralmente oferecendo recursos como digitação dinâmica e tamanho reduzido de programa. Além disso, como os interpretadores executam o código fonte do programa por conta própria, o código não depende da plataforma.

Desvantagens das linguagens interpretadas

A desvantagem mais notável é a velocidade típica de execução em comparação com as linguagens compiladas.