# Compilador

> Un programa que traduce código fuente a instrucciones que la computadora corre directo.

- Nivel: Intermedio
- Temas: Software
- URL: https://tidbit.legios.com.ar/es/compiler/
- En inglés: [Compiler](https://tidbit.legios.com.ar/compiler/)

Un **compilador** es un programa que lee código fuente escrito en un lenguaje como C, Rust, Go o Swift y lo traduce entero, de antemano, a **código máquina**: las instrucciones de bajo nivel que ejecuta un tipo específico de CPU. El resultado es un archivo que corre por sí solo, como la app a la que le hacés doble clic, sin necesitar el código fuente original ni el compilador.

En el camino, el compilador revisa el código. Si llamás a algo que no existe, pasás texto donde va un número u olvidás cerrar un paréntesis, se niega a terminar y te marca la línea. También optimiza: reordena y simplifica las instrucciones para que el programa corra más rápido que una traducción literal. Esa es una de las razones por las que los programas compilados suelen ser veloces.

La alternativa es un **intérprete**, que lee el código y lo ejecuta en el momento, como hacen tradicionalmente Python y JavaScript. En la práctica la frontera es difusa. Java y C# se compilan a una forma intermedia que corre una máquina virtual, y los navegadores compilan JavaScript a código máquina mientras la página está abierta (**compilación just-in-time**). Como el código máquina depende de la familia de procesador, el mismo programa se tiene que compilar por separado para, por ejemplo, chips Intel y Arm.

## Una analogía

Un traductor que recibe un libro entero, lo traduce con cuidado, lo revisa y te entrega una edición terminada. Un intérprete se parece más a un intérprete simultáneo, que traduce frase por frase mientras habla el orador.

## Para quedarse

- Traduce el código fuente a código máquina antes de que el programa corra.
- Atrapa muchos errores temprano y no arma código roto.
- Optimiza el resultado, por eso los programas compilados suelen ser rápidos.
- El código máquina depende de la CPU: se compila distinto para Intel y para Arm.

## Para seguir leyendo

- [Compilar (glosario de MDN)](https://developer.mozilla.org/es/docs/Glossary/Compile)
- [Compilador en Wikipedia](https://es.wikipedia.org/wiki/Compilador)
- [Intérprete (informática) en Wikipedia](https://es.wikipedia.org/wiki/Intérprete_(informática))

## Términos relacionados

- [Código fuente](https://tidbit.legios.com.ar/es/source-code/): El texto legible que escriben quienes programan y a partir del cual se arma un programa.
- [CPU](https://tidbit.legios.com.ar/es/cpu/): El chip que ejecuta tus programas, una instrucción tras otra, muy rápido.
- [Python](https://tidbit.legios.com.ar/es/python/): Un lenguaje de programación muy usado, conocido por ser fácil de leer y de escribir.
- [JavaScript](https://tidbit.legios.com.ar/es/javascript/): El lenguaje de programación que corre en las páginas web y las vuelve interactivas.
- [Máquina virtual](https://tidbit.legios.com.ar/es/virtual-machine/): Una computadora completa hecha de software, que corre adentro de una real.
- [Navegador web](https://tidbit.legios.com.ar/es/web-browser/): La app que trae páginas web desde internet y las dibuja en tu pantalla.
- [Chip](https://tidbit.legios.com.ar/es/semiconductor-chip/): Un pedacito de silicio con miles de millones de interruptores que calculan y recuerdan.
- [Intel](https://tidbit.legios.com.ar/es/intel/): La empresa estadounidense detrás de la mayoría de los procesadores de PC y servidores.
