LLVM IR
Básicamente compilar consiste en traducir un código fuente escrito en un lenguaje de programación de alto nivel que no es directamente ejecutable, a un código de más bajo nivel como lenguaje ensamblador o el propio código máquina binario que se ejecuta en la computadora.
En el caso de la LLVM, cuando se compila un programa, se traduce inicialmente a una representación intermedia (LLVM IR) que el compilador optimizará posteriormente para generar el ejecutable final.
Es típico en muchos compiladores. Puesto que muchas técnicas de optimización son generales, se pueden aplicar directamente en el nivel IR y compartirse luego para generar el código máquina final de cualquier plataforma (por ejemplo x86).
Por eso pueden identificarse en LLVM tres componentes, cada uno con una función específica:
- front-end, se encarga de compilar el lenguaje fuente a LLVM IR;
- middle-end, aplica las optimizaciones en el IR (LLVM optimizer); y
- back-end, genera el código máquina para la plataforma destino (LLVM static compiler).
Compiladores, transpiladores e intérpretes
No todos los lenguajes de programación requieren compiladores.
También existen los intérpretes, que procesan y ejecutan el código fuente línea a línea, actuando como una interfaz entre el programa y el procesador de la máquina.
O programas que se ejecutan aplicando técnicas mixtas, como los lenguajes que se precompilan para generar un código que luego es interpretado. Perl es uno de esos lenguajes que también uso mucho para programar.
Por otro lado están los transpiladores, que traducen código entre dos lenguajes que están al mismo nivel de abstracción. Podríamos decir que un transpilador es también un compilador, pero al revés no ocurre. Por ejemplo, la traducción de Java a bytecode sería una compilación, y la traducción de TypeScript a JavaScript, muy de moda últimamente, sería una transpilación.
Dejar un comentario
¿Quieres unirte a la conversación?Siéntete libre de contribuir!