Menu
Coddy logo textTech

O que é um interpretador?

Um interpretador é um programa que executa o código-fonte diretamente, realizando suas instruções à medida que avança, em vez de primeiro traduzir o programa inteiro para um arquivo separado de código de máquina. As implementações padrão de Python e Ruby são interpretadores.

Por Kevin Spektor, Cofundador e CTO

Atualizado em 24 de setembro de 2026

Código-fonte
  1. 1print("Hello")
  2. 2total = 2 + 3
  3. 3print(total)
  4. 4print("Done")
Saída
Linhas traduzidas0
Execuções0

Cada execução traduz as linhas de novo. Ative o erro de digitação e o interpretador ainda imprime "Hello" antes de chegar à linha 3 e parar.

Digite python3 hello.py e a saída aparece, mas olhe a pasta depois: nenhum arquivo de programa novo foi criado. O programa que realmente executou foi o próprio python3, o interpretador Python. Ele leu hello.py, descobriu o que cada instrução significa e a executou. Rode o script de novo amanhã e o interpretador lê o código-fonte outra vez desde o começo.

Como um interpretador funciona

Um interpretador repete um ciclo até o programa terminar: pega a próxima instrução, descobre o que ela significa, executa, segue em frente. Enquanto trabalha, ele guarda as variáveis do programa na sua própria memória, e é por isso que total = price * 3 pode usar um price definido algumas linhas antes.

A forma mais clara de ver isso é o modo interativo, chamado REPL (read, evaluate, print, loop: ler, avaliar, imprimir, repetir). Digite python3 sem nome de arquivo e cada linha executa no momento em que você aperta Enter:

>>> price = 4
>>> price * 3
12

Interpretadores reais acrescentam uma etapa de preparação. O CPython, o interpretador Python padrão, primeiro compila o arquivo inteiro para bytecode, uma lista compacta de instruções simples, e depois roda um loop que executa esse bytecode uma instrução de cada vez. Você pode imprimir o bytecode de uma linha:

O Python 3.12 imprime o seguinte (outras versões diferem nos detalhes):

  0           0 RESUME                   0

  1           2 LOAD_NAME                0 (price)
              4 LOAD_CONST               0 (3)
              6 BINARY_OP                5 (*)
             10 STORE_NAME               1 (total)
             12 RETURN_CONST             1 (None)

Cada uma dessas linhas é um passo do loop do interpretador: buscar o valor de price, buscar a constante 3, multiplicar os dois, guardar o resultado em total. Nada disso é código de máquina; o interpretador, que por sua vez é um programa C compilado, realiza cada passo.

Os erros aparecem quando a linha executa

Como um interpretador executa à medida que avança, um programa pode fazer trabalho real antes de chegar a um erro. Execute isto e as duas primeiras linhas são impressas antes da falha:

Step 1: starting
Step 2: still fine
Traceback (most recent call last):
  ...
ZeroDivisionError: division by zero

Um erro de sintaxe se comporta de outro jeito, porque o CPython compila o arquivo inteiro para bytecode antes de executar qualquer parte. Mude a linha 3 para print("Step 3:" 10) (falta a vírgula) e nada é impresso, nem mesmo o Step 1:

SyntaxError: invalid syntax. Perhaps you forgot a comma?

Então "um interpretador executa o código linha por linha" é só meia verdade. A gramática é verificada primeiro para o arquivo inteiro; todo o resto, como dividir por zero ou usar um nome que não existe, só é encontrado quando aquela linha executa. Veja erro de sintaxe para o primeiro tipo.

Compilador vs interpretador

Um compilador traduz o programa inteiro para um arquivo separado antes de ele executar. Um interpretador executa o próprio programa, toda vez. As diferenças práticas vêm daí:

CompiladorInterpretador
Quando o trabalho aconteceUma vez, antes de o programa executarToda vez que o programa executa
SaídaUm arquivo separado (executável ou bytecode)Nenhum arquivo de programa separado
O que você entrega aos usuáriosO programa compiladoO código-fonte, mais o interpretador instalado na máquina deles
Verificação de errosSintaxe e, em linguagens tipadas, erros de tipo do programa inteiro antes de executarA sintaxe costuma ser verificada primeiro; os outros erros aparecem quando a linha com problema executa
Editar e executarRecompilar depois de cada mudançaSalvar e executar de novo
VelocidadeMais rápido, a CPU executa código de máquina diretamenteMais lento, cada instrução é decodificada enquanto o programa executa
PortabilidadeRecompilar para cada CPU e sistema operacionalO mesmo código-fonte executa em qualquer lugar onde o interpretador exista
Linguagens típicasC, C++, Rust, GoPython, Ruby, PHP, Bash

A diferença de velocidade é real em loops apertados de aritmética: o mesmo loop pode executar muitas vezes mais rápido em C compilado do que no CPython. Em programas que passam a maior parte do tempo esperando a rede, o disco ou o usuário, a diferença muitas vezes é pequena demais para ser notada.

Compilado ou interpretado não é uma propriedade da linguagem

Uma linguagem é um conjunto de regras; o compilador ou o interpretador é um programa que as implementa. A mesma linguagem pode ser executada das duas formas, e a maioria das linguagens populares mistura as duas:

  • Python. O CPython compila para bytecode e o interpreta. O PyPy, outra implementação, adiciona um compilador just-in-time (JIT) que transforma em código de máquina o código executado com frequência enquanto o programa roda.
  • Java. O javac compila o código-fonte para bytecode antecipadamente. A Máquina Virtual Java então interpreta esse bytecode e compila por JIT os métodos mais usados para código de máquina. Desde o Java 11, java Main.java executa um único arquivo de código-fonte diretamente, compilando-o antes na memória.
  • JavaScript. Navegadores e o Node.js usam motores como o V8, que começam interpretando o código e compilam as partes mais usadas para código de máquina enquanto o programa executa.
  • C e C++. Quase sempre compilados antecipadamente com GCC, Clang ou MSVC.
python3 app.py            # Python: interpreter, bytecode behind the scenes
node app.js               # JavaScript: V8 interprets, then JIT-compiles
javac Main.java           # Java step 1: compile to Main.class
java Main                 # Java step 2: the JVM runs the bytecode

Seja qual for o caso, o interpretador ou a máquina virtual faz parte do ambiente de execução do programa: ele precisa estar instalado onde quer que o programa execute.

Equívocos comuns

  • "Um interpretador traduz cada linha para código de máquina." Um interpretador clássico nunca gera código de máquina para o seu programa. Ele lê uma instrução e a realiza usando código que já foi compilado dentro do interpretador. Gerar código de máquina em tempo de execução é o que um compilador JIT faz.
  • "Linguagens interpretadas não têm etapa de compilação." CPython, o YARV do Ruby e o PHP compilam para bytecode primeiro. A etapa é automática e invisível, por isso é fácil não perceber.
  • "Interpretado significa lento." A compilação JIT fechou boa parte da diferença. O V8 executa JavaScript rápido o bastante para aplicações grandes como o VS Code, que é construído sobre o Electron.
  • "Python é o interpretador." Python é a linguagem. CPython, PyPy e MicroPython são interpretadores diferentes para ela, e podem variar em velocidade e nas bibliotecas que suportam.

Para onde ir agora

Para a outra metade da comparação, leia o que é um compilador e como ele transforma código-fonte em código de máquina. A página ambiente de execução explica o que mais o interpretador traz com ele. Para experimentar um interpretador, execute um script Python ou abra o playground de Python.

Perguntas frequentes

Python é compilado ou interpretado?
Python é uma linguagem; o programa que a executa costuma ser o CPython, que é um interpretador. O CPython primeiro compila o seu código para bytecode automaticamente e depois interpreta esse bytecode. Existem outras implementações, como o PyPy, que adiciona um compilador JIT.
C++ usa interpretador ou compilador?
C++ é uma linguagem, e quase sempre é compilada antecipadamente com um compilador como GCC, Clang ou MSVC. O resultado é um executável nativo para uma CPU e um sistema operacional. Existem ferramentas interativas para C++, mas elas compilam cada trecho de código por baixo dos panos.
O que é mais rápido, um interpretador ou um compilador?
Um programa compilado costuma executar mais rápido, porque a CPU executa código de máquina diretamente, em vez de um interpretador decodificar cada passo. Um interpretador começa mais rápido, já que não há uma etapa de build separada. Os compiladores JIT, usados pela JVM e pelo V8, diminuem essa diferença compilando o código mais usado enquanto o programa executa.
O que é um REPL?
Um REPL (read, evaluate, print, loop: ler, avaliar, imprimir, repetir) é um prompt interativo em que o interpretador executa cada linha assim que você a digita e mostra o resultado. Digitar python3 ou node sem nome de arquivo abre um. É útil para testar uma ideia pequena sem criar um arquivo.
Uma linguagem pode ser compilada e interpretada ao mesmo tempo?
Sim. Compilado ou interpretado descreve uma implementação, não a linguagem. Java é compilado para bytecode pelo javac e depois interpretado e compilado por JIT pela JVM, e existem tanto interpretadores quanto compiladores para linguagens como Python e JavaScript.
Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR