Monday, 21 October 2013

Internals of GC


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.  

1 comment:

  1. Muchas gracias Héctor por tu participación a través de este blog. Espero te haya parecido interesante la materia.

    ReplyDelete