Diferenças entre linguagem compilada e linguagem interpretada

Com a popularização de linguagens como Java e C#, e sua forte adoção no mercado de TI, é comum nos depararmos com debates sobre as diferenças entre linguagens interpretadas e linguagens compiladas. Mas na hora de classificar uma linguagem como interpretada ou compilada, a coisa esquenta e ninguém entra em acordo! Mas afinal, o que é uma linguagem interpretada e o que é uma linguagem compilada?
Antes de mais nada, vamos definir nosso glossário:
O dicionário da língua portuguesa define Compilar:

do Latim compilare
v. tr.
reunir; ajuntar

Enquanto a definição de Interpretar, é:

do Latim interpretare
v. tr.
tornar claro o sentido de; explicar; traduzir; fazer juízo a respeito de.

Pelas definições desses dois verbos, já podemos perceber que seus significados não se opõe, mas se complementam. Então como classificar uma linguagem de programação como sendo de um jeito ou de outro? Bem, a resposta é simples, definindo o contexto ou ponto de vista! E como estamos analisando linguagens de programação, nosso contexto é arquitetura de linguagens de programação.
Na computação, a compilação é o processo que reúne o código fonte e o transforma em algo que faça mais sentido para o computador. Do ponto de vista do código fonte, toda linguagem de programação é compilada.
O produto final do processo de compilação de uma linguagem diz muito sobre seu design. Linguagens como C e C++ são compiladas estaticamente, e seus códigos fontes são transformados diretamente em linguagem de máquina. Enquanto as linguagens mais modernas como Java, C# e Python têm seus códigos fontes transformados em uma linguagem intermediária (específica de cada linguagem), que será interpretada pela máquina virtual da linguagem quando o programa for executado.
Este processo de interpretação da linguagem intermediária durante a execução do programa, consiste na tradução dos comandos da linguagem intermediária para linguagem de máquina. Sendo assim, em tempo de execução, o código intermediário pode ser encarado como um “código fonte” que será compilado dinamicamente pelo interpretador da linguagem em código de máquina.
Obviamente, ter este processo de compilação embutido na execução do programa tem um custo. E esse custo não é barato! Por isso, nos últimos anos muito foi investido para otimizar este processo, resultando em todas as técnicas de Just In Time Compiling e Ahead of Time Compiling que permitem as linguagens interpretadas alcançarem performance excepcionais.
Finalmente, com base nestas definições, podemos dizer que C e C++ são linguagens compiladas. Enquanto Java, C# e Python, mesmo com as técnicas de JIT e AOT, são linguagens interpretadas, afinal, esta é uma definição da arquitetura da linguagem de programação.

COMPARTILHE ESTE ARTIGO

Share on facebook
Share on linkedin
Share on twitter
Share on email

26 respostas

  1. Bom artigo!
    Bem explicativo e bastante claro. =)
    Para complementar, poderia ter comentado tecnologias intermediárias, como a interpilação, ou a carga de código embarcado.
    A interpilação é uma varição de interpretação/compilação onde o código é todo compilado de uma só vez no início da execução para um objeto executável existente apenas na memória principal, então esse objeto é executado, mas não persiste em disco. Perl faz uso dessa tecnologia.
    Também a linguagem Lua pode ser embarcada em um código C ou C++, que é compilado, mas o código Lua não.
    O código Lua é carregado em tempo de execução em um «estado Lua», como uma compilação para bytecode, mas executada por bibliotecas ligadas no próprio programa.
    São tecnologias intermediárias. =)
    Parabéns pelo artigo!
    []’s
    Cacilhas, La Batalema

  2. @Cacilhas! Muito boa observação! A tendência com relação as diferenças destes dois conceitos é desenvolver técnicas que possibilitem unir ao máximo, o melhor dos dois mundos. Valeu a visita!
    @Rafael E vamos continuar à lá Romário… rumo ao milésimo post! 😀

  3. Artigo muito bom, bastante esclareceredor e bem escrito de forma direta.
    Obrigado pela ajuda.
    Abs.
    Anamim Silva.

  4. Bom artigo!
    Bastante exclarecedor e muito bem complementado pelo #1 por Rodrigo Cacilhas.
    também me ajudou…
    grata!

  5. O texto me lembra aquelas definições de dicionário, do tipo: “JAVA is a 4 letter word that starts with J.” Apenas faz referencia a Wikipedia.

  6. Meu professor nunca me explicou isso dessa maneira.
    Tive que ler umas 3 vezes para entender bem…mas pelo menos entendii
    valeu

  7. “n. Linguagens como C e C++ são compiladas estaticamente, ” é incorreto. Elas podem ser compiladas dinamicamente.

    1. Roberto, não sei se compreendi corretamente o que você quis dizer. Poderia esclarecer?
      A compilação do C e C++ ocorrem previamente e explicitamente, gerando o código objeto que então será linkado, resultando no programa executável.
      Apesar da linkagem poder ser dinâmica, como ocorre quando o programa tem DLLs, por exemplo, a compilação e a resolução de tipos é estática.

  8. Pingback: Linguagem compilada X linguagem interpretada | Algblue
  9. Fale Henrique, tudo jóia?
    Pra você o que quer dizer quando alguém diz que uma linguagem é uma linguagem de script? O que classifica uma linguagem como de script?
    Abs

  10. Fale Henrique, tudo jóia?
    Pra você o que quer dizer quando alguém diz que uma linguagem é uma linguagem de script? O que classifica uma linguagem como de script?
    Abs

  11. Caro Henrique, poderia me tirar algumas dúvidas?
    No texto, na parte que tem escrito: “a compilação é o processo que reúne o código fonte e o transforma em algo que faça mais sentido para o computador.”
    Transformar em algo que faça mais sentido para o computador não é traduzir-lo para a linguagem de baixo nível? Porquê é a única linguagem que o computador compreende. Se for, compilar é reunir e traduzir.
    Mas na questão da Interpretação apenas se aplica no caso de Linguagens Intermediárias?
    Necessito de sua resposta.
    Obrigado por compartilhar seu conhecimento e parabêns, fez um ótimo trabalho.

  12. Caro Henrique, poderia me tirar algumas dúvidas?
    No texto, na parte que tem escrito: “a compilação é o processo que reúne o código fonte e o transforma em algo que faça mais sentido para o computador.”
    Transformar em algo que faça mais sentido para o computador não é traduzir-lo para a linguagem de baixo nível? Porquê é a única linguagem que o computador compreende. Se for, compilar é reunir e traduzir.
    Mas na questão da Interpretação apenas se aplica no caso de Linguagens Intermediárias?
    Necessito de sua resposta.
    Obrigado por compartilhar seu conhecimento e parabêns, fez um ótimo trabalho.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *