Menu
Coddy logo textTech

¿Qué es un intérprete?

Un intérprete es un programa que ejecuta el código fuente directamente, llevando a cabo sus instrucciones sobre la marcha, en lugar de traducir primero todo el programa a un archivo de código máquina aparte. Las implementaciones estándar de Python y Ruby son intérpretes.

Por Kevin Spektor, Cofundador y CTO

Actualizado el 24 de septiembre de 2026

Código fuente
  1. 1print("Hello")
  2. 2total = 2 + 3
  3. 3print(total)
  4. 4print("Done")
Salida
Líneas traducidas0
Ejecuciones0

Cada ejecución vuelve a traducir las líneas. Activa la errata y el intérprete aún imprime "Hello" antes de llegar a la línea 3 y detenerse.

Escribe python3 hello.py y aparece la salida, pero mira la carpeta después: no se creó ningún archivo de programa nuevo. El programa que realmente se ejecutó fue el propio python3, el intérprete de Python. Leyó hello.py, averiguó qué significa cada instrucción y la llevó a cabo. Ejecuta el script otra vez mañana y el intérprete vuelve a leer el código fuente desde el principio.

Cómo funciona un intérprete

Un intérprete repite un ciclo hasta que el programa termina: toma la siguiente instrucción, averigua qué significa, la ejecuta y pasa a la siguiente. Mientras trabaja guarda las variables del programa en su propia memoria, por eso total = price * 3 puede usar un price asignado unas líneas antes.

La forma más clara de verlo es el modo interactivo, llamado REPL (leer, evaluar, imprimir, repetir). Escribe python3 sin nombre de archivo y cada línea se ejecuta en el momento en que pulsas Enter:

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

Los intérpretes reales añaden un paso de preparación. CPython, el intérprete estándar de Python, primero compila todo tu archivo a bytecode, una lista compacta de instrucciones simples, y después ejecuta un bucle que lleva a cabo ese bytecode instrucción por instrucción. Puedes imprimir el bytecode de una línea:

Python 3.12 imprime lo siguiente (otras versiones cambian en los detalles):

  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 una de esas líneas es un paso del bucle del intérprete: obtener el valor de price, obtener la constante 3, multiplicarlos y guardar el resultado en total. Nada de eso es código máquina; el intérprete, que a su vez es un programa en C compilado, ejecuta cada paso.

Los errores aparecen cuando se ejecuta la línea

Como un intérprete ejecuta sobre la marcha, un programa puede hacer trabajo real antes de encontrarse con un error. Ejecuta esto y las dos primeras líneas se imprimen antes del fallo:

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

Un error de sintaxis se comporta de otra manera, porque CPython compila todo el archivo a bytecode antes de ejecutar nada. Cambia la línea 3 por print("Step 3:" 10) (falta la coma) y no se imprime nada, ni siquiera Step 1:

SyntaxError: invalid syntax. Perhaps you forgot a comma?

Así que "un intérprete ejecuta el código línea por línea" es solo una verdad a medias. La gramática se comprueba primero para todo el archivo; todo lo demás, como dividir por cero o usar un nombre que no existe, se detecta solo cuando se ejecuta esa línea. Consulta error de sintaxis para el primer tipo.

Compilador vs intérprete

Un compilador traduce todo el programa a un archivo aparte antes de que se ejecute. Un intérprete ejecuta el propio programa, cada vez. Las diferencias prácticas se derivan de eso:

CompiladorIntérprete
Cuándo se hace el trabajoUna vez, antes de ejecutar el programaCada vez que se ejecuta el programa
ResultadoUn archivo aparte (ejecutable o bytecode)Ningún archivo de programa aparte
Qué entregas a los usuariosEl programa compiladoEl código fuente, más el intérprete instalado en su máquina
Detección de erroresSintaxis y, en lenguajes tipados, errores de tipos de todo el programa antes de ejecutarloLa sintaxis suele comprobarse primero; los demás errores aparecen cuando se ejecuta la línea defectuosa
Editar y ejecutarRecompilar después de cada cambioGuardar y volver a ejecutar
VelocidadMás rápido, la CPU ejecuta el código máquina directamenteMás lento, cada instrucción se decodifica mientras el programa se ejecuta
PortabilidadRecompilar para cada CPU y sistema operativoEl mismo código fuente funciona allí donde exista el intérprete
Lenguajes típicosC, C++, Rust, GoPython, Ruby, PHP, Bash

La diferencia de velocidad es real en bucles ajustados de cálculo: el mismo bucle puede ejecutarse muchas veces más rápido en C compilado que en CPython. En programas que pasan la mayor parte del tiempo esperando a la red, al disco o al usuario, la diferencia suele ser demasiado pequeña para notarse.

Compilado o interpretado no es una propiedad del lenguaje

Un lenguaje es un conjunto de reglas; el compilador o el intérprete es un programa que las implementa. El mismo lenguaje se puede ejecutar de las dos formas, y la mayoría de los lenguajes populares combinan ambas:

  • Python. CPython compila a bytecode y lo interpreta. PyPy, otra implementación, añade un compilador just-in-time (JIT) que convierte en código máquina el código que se ejecuta con frecuencia mientras el programa está en marcha.
  • Java. javac compila el código fuente a bytecode por adelantado. Después la Máquina Virtual de Java interpreta ese bytecode y compila con JIT a código máquina los métodos más usados. Desde Java 11, java Main.java ejecuta directamente un único archivo fuente compilándolo primero en memoria.
  • JavaScript. Los navegadores y Node.js usan motores como V8, que empiezan interpretando el código y compilan a código máquina las partes más usadas mientras el programa se ejecuta.
  • C y C++. Casi siempre se compilan por adelantado con GCC, Clang o 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

Sea cual sea el caso, el intérprete o la máquina virtual forma parte del entorno de ejecución del programa: tiene que estar instalado allí donde se ejecute el programa.

Ideas equivocadas frecuentes

  • "Un intérprete traduce cada línea a código máquina." Un intérprete clásico nunca genera código máquina para tu programa. Lee una instrucción y la ejecuta usando código que ya estaba compilado dentro del intérprete. Generar código máquina en tiempo de ejecución es lo que hace un compilador JIT.
  • "Los lenguajes interpretados no tienen paso de compilación." CPython, YARV de Ruby y PHP compilan primero a bytecode. El paso es automático e invisible, así que es fácil pasarlo por alto.
  • "Interpretado significa lento." La compilación JIT redujo gran parte de la diferencia. V8 ejecuta JavaScript lo bastante rápido para aplicaciones grandes como VS Code, que está hecho con Electron.
  • "Python es el intérprete." Python es el lenguaje. CPython, PyPy y MicroPython son intérpretes distintos para él, y pueden diferir en velocidad y en qué bibliotecas admiten.

Qué leer después

Para la otra mitad de la comparación, lee qué es un compilador y cómo convierte el código fuente en código máquina. La página entorno de ejecución explica qué más trae consigo el intérprete. Para probar un intérprete tú mismo, ejecuta un script de Python o abre el playground de Python.

Preguntas frecuentes

¿Python es un compilador o un intérprete?
Python es un lenguaje; el programa que lo ejecuta suele ser CPython, que es un intérprete. CPython primero compila tu código a bytecode de forma automática y después interpreta ese bytecode. Existen otras implementaciones, como PyPy, que añade un compilador JIT.
¿C++ es un intérprete o un compilador?
C++ es un lenguaje, y casi siempre se compila por adelantado con un compilador como GCC, Clang o MSVC. El resultado es un ejecutable nativo para una CPU y un sistema operativo concretos. Existen herramientas interactivas para C++, pero compilan cada fragmento de código por detrás.
¿Qué es más rápido, un intérprete o un compilador?
Un programa compilado suele ejecutarse más rápido, porque la CPU ejecuta el código máquina directamente en lugar de que un intérprete decodifique cada paso. Un intérprete arranca antes, porque no hay una compilación aparte. Los compiladores JIT, que usan la JVM y V8, reducen la diferencia compilando el código más usado mientras el programa se ejecuta.
¿Qué es un REPL?
Un REPL (leer, evaluar, imprimir, repetir) es un prompt interactivo en el que un intérprete ejecuta cada línea en cuanto la escribes y muestra el resultado. Escribir python3 o node sin nombre de archivo abre uno. Sirve para probar una idea pequeña sin crear un archivo.
¿Un lenguaje puede ser compilado e interpretado a la vez?
Sí. Compilado o interpretado describe una implementación, no el lenguaje. Java se compila a bytecode con javac y después la JVM lo interpreta y lo compila con JIT, y existen tanto intérpretes como compiladores para lenguajes como Python y JavaScript.
Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR