Este podcast, que resulta de la entrevista a Morgan Deters, estudiante
de doctorado de la Universidad de Washington en St. Louis, Estados Unidos, me
pareció muy interesante para aquellos amantes de lo que es el compilador de gcc
y lo que realiza. También describe las partes que utiliza se utilizan para
realizar la compilación. Algo que en verdad disfruté al escuchar fue que Morgan habla maravillas de lo que es el
compilador de gcc. Yo sólo lo he usado para compilar C y Fortran77, flex y
bison pero este compilador es más poderoso de lo que parece. Soporta una gran
cantidad de lenguajes e incluso se usa para sistemas embebidos. Se escucha que
es un gran conocedor de lo que hace gcc y describe un poco las diferentes
partes del este proceso o mejor llamadas fases. Hay muchas fases para que la
compilación se lleve a cabo pero hay tres partes principales que son el
front-end, back-end y middle-end lo que se explica.
Primero que nada Morgan establece que los compiladores son
interesantes. A través de ellos se busca desarrollar que el trabajo escrito en
programas pueda correr más eficientemente y buscar una optimización. Se dice
que no tienes que saber lo interno del compilador, pero que el conocer lo que
son puede ser de importancia. Básicamente el proceso y solución de un
compilador es leer de un archivo fuente, entender lo que tiene y lo que quieres
hacer con ese archivo fuente. Para esto hay que entender la semántica y el
contexto de lo que está escrito y verificar que este sintáctica y semánticamente
correcto para al final producir “object code” para la plataforma en que se
quiere que se corra.
Gcc en particular la forma en que lo hace es a través de un
front-end que transforma lo que se
lee de un archivo fuente escrito en un lenguaje específico y regresa un árbol “ast”
que no es más que la representación de la estructura sintáctica
abstracta. Esta salida la recibe el middle-end que
es más como una optimización del árbol anterior en cuanto a código y finalmente
el back-end toma esa salida como entrada
y lo transforma a Register Transfer Language (RTL) que es código intermedio de
bajo nivel dependiente de la plataforma en que se corra.
En conclusión
me gustó conocer un poco más de este gran proyecto que es gcc y de su
collection de compilación. Es una gran herramienta para los que programamos y
una gran ventaja que se menciona es su flexibilidad gracias a que es muy
modular. Otra de las ventajas es que permite que se encargue de todo y tú solo
disfrutes de las salida, me refiero a que tiene su propio ensamblador, su
propio “driver” y su propio “linker” entre otras cosas que solito se encarga de
ellas automáticamente.
Podcast:
http://www.se-radio.net/2007/07/episode-61-internals-of-gcc/