En el podcast Internal of gcc
se entrevista a Morgan Deters, quien trabajó por un tiempo con su asesor de PhD
Ron Cytron en Washington University en St. Louis. Durante la entrevista, el tema
principal es la colección de compiladores GNU, conocida como GCC. GCC inició
como un compilador de C, por lo cual recibió el acrónimo partir de “GNU C
Compiler”.
Morgan describe tres de las fases que lleva a cabo el compilador: front-end, middle-end y back-end. En la
frase de front-end, el compilador realiza un parseo de un archivo de texto para
obtener un AST (árbol de sintaxis abstracta). GCC empezó utilizando parsers LALR
generados en Bison. Es importante mencionar que existe un front-end para cada
lenguaje de programación. Debido a las diferencias en la estructura de cada
lenguaje, el formato generado del AST puede variar.
En la fase de middle-end después de haber obtenido el AST, el árbol es
convertido a otra representación denominada GIMPLE. En esta etapa se lleva a
cabo el análisis y la optimización. Algunas
de las optimizaciones que se suelen llevar a cabo son la eliminación de
expresiones comunes, la optimización de los bucles de procesamiento y la
eliminación de redundancia.
La tercera y última fase es el back-end, la cual depende de la
arquitectura que se utilice. Esta etapa no me quedo muy clara y lo que entendí
fue que se genera un código a un nivel aún más bajo.
En resumen se podría mencionar que la principal representación del
front-end es el AST, del middle-end el RTL (Register Transfer Language) y
finalmente del back-end la representación en ensamblador.
El podcast me resultó bastante interesante debido a que pude entender
algunos conceptos con los temas que hemos estado viendo en la clase y es
gratificante el poder comprender temas que personalmente considero algo
avanzados y únicamente alguien que estudie una carrera relacionada con ciencias
computacionales podría entender. Por último es importante resaltar que el
proyecto GCC está relacionado con el software libre y es portable y flexible,
por lo cual se puede ejecutar en diferentes sistemas operativos.
Muchas gracias Héctor por tu participación a través de este blog. Espero te haya parecido interesante la materia.
ReplyDelete