¿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.
Actualizado el 24 de septiembre de 2026
- 1print("Hello")
- 2total = 2 + 3
- 3print(total)
- 4print("Done")
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:
| Compilador | Intérprete | |
|---|---|---|
| Cuándo se hace el trabajo | Una vez, antes de ejecutar el programa | Cada vez que se ejecuta el programa |
| Resultado | Un archivo aparte (ejecutable o bytecode) | Ningún archivo de programa aparte |
| Qué entregas a los usuarios | El programa compilado | El código fuente, más el intérprete instalado en su máquina |
| Detección de errores | Sintaxis y, en lenguajes tipados, errores de tipos de todo el programa antes de ejecutarlo | La sintaxis suele comprobarse primero; los demás errores aparecen cuando se ejecuta la línea defectuosa |
| Editar y ejecutar | Recompilar después de cada cambio | Guardar y volver a ejecutar |
| Velocidad | Más rápido, la CPU ejecuta el código máquina directamente | Más lento, cada instrucción se decodifica mientras el programa se ejecuta |
| Portabilidad | Recompilar para cada CPU y sistema operativo | El mismo código fuente funciona allí donde exista el intérprete |
| Lenguajes típicos | C, C++, Rust, Go | Python, 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.
javaccompila 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.javaejecuta 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?
¿C++ es un intérprete o un compilador?
¿Qué es más rápido, un intérprete o un compilador?
¿Qué es un REPL?
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?
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.