Diccionario

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.