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.  

Friday, 30 August 2013

Making Compiler Design Relevant for Students

En el artículo se enfatiza que la materia de compilodares es primordial para un alumno que se desarrolla en el área de ciencias computacionales. A pesar de que el artículo describe de manera técnica los pasos en el proceso de compilación, le daré un efoque más general y más abstracto al respecto. Siempre se me hizo muy curioso cómo es que la computadora entendía las intrucciones que el usuario le mandaba y creo que esta materia será parte de la respuesta a la pregunta.

Considero que la asignatura de compiladores es un claro ejemplo en la parte final de la carrera para demostrar lo que el estudiante ha avanzado durante sus estudios y refleja el esfuerzo dedicado. A pesar de que muchos alumnos (yo me incluyo) encuentren difícil la materia, creo que es indispensable y enriquecedora. La mayoría de los retos más difíciles a los que nos enfrentamos son aquellos por los que nos sentimos más orgullosos al final del camino. Es evidente que si el resultado es satisfactorio es mayor nuestro orgullo, sin embargo en caso de no obtener lo deseado siempre es agradable recordar el esfuerzo y el tiempo dedicado. Por otro lado, me es grato el ponerme a pensar que al inicio no sabía ni como se representaba un número en binario y ahora puedo entender el proceso de compilacion.

El proceso de compilación no sólo se ve presente en las áreas relacionadas con la computación, creo que es parte de algunas actividades o situaciones de la vida diaria como puede ser el comunicarse e interpretar o traducir un lenguaje como del español al inglés. Asimismo, considero que la materia ayuda a desarrollar pensamiento estructurado y anlítico que nos podria apoyar para resolver problemas cotidianos o dentro del mundo laboral. 

Para finalizar es importante mencionar que el proceso de compilación se desarrola en cuatro pasos: análisis léxico y parseo, análisis semántico, generación de codigo y optimización de código. Dichos pasos se pueden ver presentes cada vez que estudiamos algun tema o desarrollamos alguna actividad. Primero hay que entender cómo funciona, posteriormente se ejecuta lo aprendido y al final se mejora y se pule. Creo que estos pasos pueden aplicarse a nuestra vida diaria y cada una de las cosas que queramos llevar a cabo.



Thursday, 15 August 2013

Introducción

Hola a todos, a continuación les comparto la inctroducción de mi blog para la materia de compiladores.

Lo que espero de la materia es entender los pasos intermedios que se llevan a cabo para generar un lenguaje máquina que pueda entender la computadora de un lenguaje de programación escrito por una persona. Asimismo, será interesante la creación de un compilador debido a que es algo que nunca he realizado.

Todos los deportes me apasionan pero más el basketball y cualquiera relacionado con las artes marciales. Actualmente voy a clases de basket, parkour y al gimnasio. Últimamente me ha interesado aprender a bailar. Algo que no hago muy a menudo pero es de las cosas que más me gustan es alejarme de la vida citadina y admirar paisajes donde el hombre no ha intervenido para dañar la naturaleza.

No paso mucho tiempo viendo la tele pero si me gusta mucho ir al cine y las películas en general en especial las de suspenso, ciencia-ficción y aquellas que te hacen reflexionar sobre la vida. Algunas de mis películas favoritas son Pulp Fiction, American History X, The Fight Club, Goodfellas y Good Will Hunting. En cuanto a series de TV las únicas que realmente sigo son Breaking Bad y Game of Thrones. No suelo leer muchos libros pero si me gusta leer sobre noticias del mundo, artículos de ciencia y datos curiosos de cualquier tema. A pesar de que no leo tanto me he propuesto leer lo más que pueda este semestre y apenas empecé el libro de Great Expectations de Charles Dickens.

Me agrada conocer personas de otras culturas, saber sus costumbres y compartir sus puntos de vista sobre distintos temas. Finalmente, no podría vivir sin comer quesadillas, chocolate, tomar frappes de café y hacer cosas que me hagan generar adrenalina y esa sensación de volver a nacer.