Compilador
Un programa que traduce el código que escribes a otro lenguaje que el ordenador ejecuta, normalmente código máquina o bytecode, antes de ejecutarlo.
El compilador lee todo el código, comprueba que es correcto y genera un programa listo para ejecutar. Si encuentra errores (de sintaxis o de tipos), los avisa antes de que el programa llegue a funcionar.
C, C++, Rust y Go compilan a código máquina; Java y Kotlin compilan a bytecode para la JVM, C# al lenguaje intermedio de .NET y TypeScript a JavaScript.
Un ejemplo
gcc main.c -o main compila un programa en C y genera el ejecutable main.
Por qué importa
El compilador traduce todo el programa antes de ejecutarlo, y eso tiene consecuencias prácticas: detecta errores de sintaxis y de tipos antes de que el usuario llegue a usar el programa, y el resultado suele ejecutarse más rápido porque ya está en lenguaje máquina o en un formato cercano a él.
También explica por qué en lenguajes como C, C++, Rust o Go existe un paso de «compilar» entre escribir y ejecutar, y por qué un ejecutable compilado para un sistema operativo no funciona tal cual en otro. Entender esto ayuda a interpretar los mensajes de error de compilación, que a veces apuntan a una línea distinta de la causa real.
Confusiones frecuentes
Compilar no es lo mismo que ejecutar. Un programa puede compilar sin errores y fallar después en ejecución, por ejemplo al dividir entre cero. Tampoco hay una frontera tan nítida entre compilado e interpretado: Java compila a bytecode que luego ejecuta una máquina virtual, y JavaScript moderno se compila al vuelo mientras se ejecuta. Es una característica de la implementación y no del lenguaje en sí.
Preguntas frecuentes
¿Qué diferencia hay entre error de compilación y de ejecución?
El de compilación aparece antes de ejecutar y el programa no se genera. El de ejecución aparece con el programa en marcha, según los datos o el estado en ese momento.
¿Qué son las opciones de optimización?
Parámetros como -O2 en gcc que le piden al compilador generar código más rápido o más pequeño, a cambio de tardar más en compilar.
Fuentes consultadas
- javac (Oracle)