lunes, 21 de octubre de 2013

Podcast Episodio 61: Internals of GCC

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/

viernes, 30 de agosto de 2013

MAKING COMPILER DESIGN REVELANT FOR STUDENT WHO WILL (MOST LIKELY) NEVER DESIGN A COMPILER



Este artículo escrito por Saumya Debray del Departmento Ciencias Computacionales de la Universidad de Tucson Arizona, como su nombre lo dice, habla sobre lo importante que es el curso de compiladores en las carreras de sistemas. La verdad concuerdo con ello, ya que probablemente no me dedique a hacer compiladores, como lo indica el artículo, la habilidad que se puede obtener de la lógica y de la práctica es de gran importancia. De hecho, muchos de los problemas computacionales pueden ser resueltos pensando como si fuera o con metodología de un compilador. Se presentan dos ejemplos de los cuáles no son compiladores pero usan la misma metodología. El primero es una herramienta que dibuja grafos y el otro es LaTeX, que proceden de manera similar a la de un compilador.

Un compilador tiene tres fases principales, en este artículo se pone una cuarta y de lo que sabía se incluye la primera y la segunda en una misma. La primera es el análisis léxico la cual básicamente separa la cadena de caracteres que se lee y la separa en “tokens”, que son pedazos que se componen por reglas indicadas dependiendo el compilador, lenguaje o programa. Junto en esta fase se realiza el análisis semántico que toma esos tokens, los analiza y da como resultado un árbol de parseo. La tercera fase o análisis es la sintáctica y que eventualmente se busca la coherencia de lo que se ha escrito hasta el momento. La última es la generación de código que lo que se busca en un compilador es pasar de un lenguaje que es fácil para el ser humano a uno entendible de mejor manera para la máquina. En cualquier otro caso es pasar de un lenguaje a otro. Hay otra fase que se menciona en el artículo que es la optimización, de tiempo, de recursos, de tamaño de código, y de lo que se pueda.

Este artículo me ayudo a reafirmar que el curso de compiladores me ayudará para resolver problemas que no se pensaba que fueran a ser resueltos con este tipo de conocimiento. Más aún que se aprende de un lenguaje a programar para interpretar otro. Y como se mostró con los dos ejemplos, las técnicas y las fases de la compilación se usan en muchas otras situaciones.

martes, 13 de agosto de 2013

¿Quién soy?


Mi nombre es Juan Manuel Fernández Pérez pero desde siempre me han llamado Manolo. Tengo 24 años y es mi último semestre de la carrera ISC09 del ITESM CEM. 
  • Del curso de compiladores espero el entender cómo es que los compiladores funcionan. Conocer mejor cómo es que de cierto lenguaje en el que se escribe un programa es entendido por la computadora y me gusta mucho la idea que el lenguaje que estaremos usando sea C# para también aprenderlo mejor.
  • Me encanta trabajar en la empresa que estoy desarrollando software en Java, soy un gran fanático de los deportes. Ahorita lo único que hago es nadar y jugar tocho bandera. Me encanta escuchar música y salir con mi novia.
  • No creo que sea una serie de TV pero lo que más disfruto ver es SportsCenter, pero The Walking Dead es una serie que también me gusta ver. La última película que vi fue la de Titanes del Pacífico y la verdad que me gustó mucho. Y para terminar les dejo una de mis canciones favoritas