Bytecode
Un código intermedio, entre el código fuente y el código máquina, que ejecuta una máquina virtual como la de Java.
En lugar de traducir el programa directamente al código máquina de un procesador concreto, algunos lenguajes lo compilan a bytecode, un formato pensado para una máquina virtual.
La máquina virtual (la JVM en Java y Kotlin, el entorno de .NET en C#) ejecuta ese bytecode en cualquier sistema donde esté instalada, y suele convertir las partes más usadas a código máquina para ir más rápido.
Un ejemplo
javac Main.java genera Main.class, que contiene bytecode; ese mismo archivo funciona en Windows, macOS o Linux con Java instalado.
Por qué importa
El bytecode es la razón por la que el mismo programa puede funcionar en Windows, macOS o Linux sin recompilarlo: el código se traduce una vez a un formato intermedio y cada sistema dispone de un programa que sabe ejecutarlo. Es el mecanismo de Java con la JVM, de Python con sus archivos .pyc y de .NET con su lenguaje intermedio.
Te lo encuentras al ver archivos .class o carpetas __pycache__ que aparecen sin que los hayas creado. Saber qué son evita borrarlos con miedo o subirlos al repositorio por error: se generan automáticamente y suelen ignorarse en el control de versiones.
Confusiones frecuentes
El bytecode no es código máquina: el procesador no lo entiende directamente, necesita una máquina virtual o un intérprete que lo ejecute o lo traduzca. Tampoco es legible como el código fuente, aunque existen herramientas que lo muestran de forma textual, como javap en Java o el módulo dis en Python. Y no es un formato universal: el bytecode de Java no sirve en Python, ni al revés.
Preguntas frecuentes
¿Puedo borrar la carpeta `__pycache__`?
Sí. Python la vuelve a generar cuando haga falta. Lo normal es añadirla al .gitignore.
¿Es más rápido el bytecode que el código fuente?
Sí, porque se evita repetir el análisis del texto en cada ejecución, pero sigue siendo más lento que el código máquina nativo salvo que la máquina virtual lo compile al vuelo.
Fuentes consultadas
- Glossary: bytecode (Python Software Foundation)