lunes, 21 de octubre de 2013

GCC (GNU Compiler Collection)


Hoy escuché un podcast titulado “Internals of GCC” de un sitio dedicado a la ingeniería de software, este podcast dirigido por Arno es acerca de una entrevista realizada a Morgan Deters, él cual platica acerca de los pasos que realiza un compilador para generar código binario. 

Como sé que alguien más puede llegar a leer esto, GCC se refiere a la colección de compiladores de GNU. Para los que recuerdan y para los que no, GNU es un sistema operativo totalmente libre, es así como también sus compiladores lo son. 

Hay muchos compiladores como lo es el de C/C++, Java o Fortran. No había pensado en la importancia de un compilador, o bueno, al menos en la manera en que se refería el podcast, ya que un compilador es la herramienta para hacer que los programas que creamos funcionen, además de aprovechar los recursos de hardware que tiene disponibles. 
Hablando de GCC este tiene grandes cantidades de compiladores para cada lenguaje además de que son totalmente portables, todo posible gracias a su estructura arquitectónica de 3 capas, principalmente, aunque también se menciona que la arquitectura seguida es totalmente modular. Debo aclarar que me sorprendió que estos compiladores contarán con una estructura como tal, por un momento creí que alguien se había sentado frente a su monitor y solo había codificado todo, sin pensar en arquitectura, portabilidad o flexibilidad. 
Hablando un poco de las tres capas que se mencionan, estas son FrontEnd, Middle-End y BackEnd. Las cuales me recuerdan mucho al diseño Web. Usando esta analogía, claro el FrontEnd es todo lo que nosotros como usuarios vemos, en el caso del compilador es la parte donde se obtiene el Abstract Syntax Tree, para esto, como ya es conocido para algunos, se realizan los análisis léxico y sintáctico.
En web no existe algo similar al Middle-End, pero pensando en otras cosas de la vida común, el Middle-End se parece a una sastrería. Si ahí venden un elegante traje, pero a veces por alguna razón no nos queda, así que hay que realizarle optimizaciones y algunos ajustes para que este nos luzca. Exactamente eso hace el Middle-End en el compilador, optimiza y repara.
Por último tenemos el Back-End, en la web aquí se llevan a cabo toda la lógica de algún sitio en base a la arquitectura (hardware) que tengamos, y así también es en el compilador. 
Es interesante conocer las estructuras detrás de estos componentes que sin duda ayudan a que las personas que creamos soluciones a partir de las computadoras podamos realizarlo de una manera más sencilla. Creo que a veces no hay personas que se interesen por el tópico, siendo así que a lo mejor no es importante conocer a fondo como el compilador realiza cierto trabajo por nosotros pero si al menos tener una noción general para así aprovechar al máximo su uso.
Para escuchar el podcast al que me refiero puedes entrar a 

http://www.se-radio.net/2007/07/episode-61-internals-of-gcc/

Espero tus comentarios