lunes, 18 de febrero de 2019

Mother of Compilers

After reading the article entitled "Grace Hopper - The Mother of Cobol" and after watching the documentary called "The Queen Of Code", directed by Gillian Jacobs in 2015, I can say that I realized that Grace Hopper did a pretty job useful for humanity, and this was very useful both at that time and today.

I thought the story of how the term "bug" was popularized was very funny. I did not know the story well and I thought it was quite peculiar how that term came about when a moth was found inside the computer, and that was what prevented it from working, which is why a bug literally impeded its operation.

On the other hand, it seems incredible to me how Grace Hopper managed to be assigned to the Bureau of Ships Computation project at Harvard, especially due to the fact that at that time, a woman with a Doctorate could not aspire to do great things. It is for the above, that I found it surprising that even after all they have managed to create the first compiler and thus lay the foundations to create Cobol (And lead the developer team). At that time, computing was unique to men, and that's why I think she should have been very talented to do so much. Even in the documentary they said that it was a very common joke to say that women in computing were like unicorns, because they do not exist, however, she was very ahead of her time and demonstrated the great capacity women have in computer science and in any other job that would be considered exclusive for men.

I think that for a long time it was an obstacle for humanity to live in a society so sexist that it did not allow women to grow professionally, because probably many other women, like Grace Hopper would have managed to give much more to society if not for all impediments given only by the fact that they are women.

I think that the time in which we live now, that has changed a lot, but not enough since there are still people who think the same way they thought 100 years ago, especially people without education. It is unfortunate that she has not been as well known as Alan Turing, since history did not allow it. Fortunately, there are people who give themselves the job of making known great figures in the history of humanity, in such a way that they can recognize and give credit to those people who deserved it for their work, effort and intellect.

domingo, 10 de febrero de 2019

Internals of GCC

After listening to the podcast called "Internals of GCC" by Software Engineering Radio with Morgan Deters as guest, I can say that I was impressed by all the work done the developers of compilers. I truly think that people, or at least programmers, should be more interested in how a compiler works, because as they say in the talk, we all want our programs to run efficiently in modern computers, even when it is not necessary for a developer to worry about all the internal details involved in the compilation, it would be good in my opinion, to know at least superficially what this process does.

On the other hand, I also found interesting what was talked about the gnu compiler collection (gcc) which is basically a Collection of compiler framework, that is very portable and flexible, because it is used in Windows, MacOS and other systems operatives.

To achieve its objective, the podcast says that gcc internal is very modular, since it is composed of a language specific front end, a middle end and a back end.

The language specific front end (which can interchange between different languages ​​such as c ++ and java) acts as a black box and takes the given input in a plain text file or a source code, and so the form to a standard tree (AST) and it makes it generic. Then the middle end takes the generic tree from the front end and optimizes it to convert it into the RTL tree form (register-transfer language). Finally the backend takes the RTL and from it generates the machine code.

It seems to me a marvelous job that a single framework is compatible with so many systems and languages, and I think that the importance of knowing about compilers lies in this, because thanks to the techniques used, it is possible to translate the programming language into a Machine language on many different platforms and efficiently.

martes, 5 de febrero de 2019

The Hundred-Year Language


About the article called "The Hundred-Year Language" by Paul Graham, I can say that I found the author's observations very realistic, even though they are only assumptions. One of the statements that seemed important to me is that it says that "like species, languages ​​will form evolutionary trees, with dead ends branching off all over".

On the other hand, it is not surprising that the author considers Cobol as "an evolutionary dead-end-- to Neanderthal language." Since in spite of the fact that in his times it is said that it was a very popular language, it does not seem to have any intellectual descendants. I have heard that Cobol continues to be used but in a very forced way, it is used in systems that do not have the necessary flexibility to evolve, as it is in the case of some banks.

I found it quite consistent what the author says about Java, which predicts that the same thing will happen to Cobol, which will become to an evolutionary dead-end. And although many people may disagree, the reality is that if we compare Java with other languages, it is not as friendly or as flexible as other languages. And in my opinion, maybe it will continue to be used for many more years but in the same way as with Cobol, only in systems with many difficulties to evolve.

Something that did not make much sense to me is the objective of the author's article, because it says that "The reason I want to know what languages ​​will be like in a hundred years is that I know what branch of the tree to bet on now", and although I think it would be very good to learn a language that is a pioneer of the languages ​​of the future, I also think that maybe it would not be very useful, mainly because the because the people interested are those who want to make languages ​​or compilers. Also because normally programmers do not learn a language because it is good in its mathematical bases, but we learn it because it is one of the most used or because it is what is needed in the company in which we work.

lunes, 28 de enero de 2019

Making Compiler Design Relevant for Students who will (Most Likely) Never Design a Compiler

I found the article called "Making Compiler Design Relevant for Students who will (Most Likely) Never Design a Compiler" very interesting because it broadened my perspective on the situations in which the knowledge of a compiler course can be applied.


I could understand that if I consider compilers as an instance of translators from almost any language to almost any other language, then the topics studied acquire great relevance for solving a wide variety of computational problems.


I found the examples that were analyzed very interesting, because previously I had not thought that a directed or unmanaged graph could be represented by a context-free grammar that could use compiler techniques to convert text to a graph. Similarly, it is interesting to note that to translate between LaTeX and HTML you can apply techniques very similar to those used in compilers.


In the section in which the article refers to the lexical analysis, the author allowed me to clarify the operation of this phase thanks to the analogy he makes between this phase and the translation of the English language. In the same way, I learned that there are tools such as lex and flex that allow generating lexical analyzers with advanced techniques and in a simple way. I also managed to understand how the analysis trees can be used for syntactic analysis. Something that made this section very clear to me is that thinking about translation problems as a compiler problem (and using known tools for these problems such as lex and yaac) can make the job much easier.


In the semantic analysis I could see that a problem can become very complex if it is not given the right approach, as in the case of semantic analysis in compilers that can help to easily solve a problem such as calculating the space occupied by objects created in an html document.

Finally, for the generation of code and optimization, I can say that they seem to have a slightly more obvious relationship with the compilers since, if the compilation techniques were not used, solving these types of problems would be very difficult and messy.

miércoles, 16 de enero de 2019

About me

Welcome to my blog called "Compiler Design". My name is Luis Ángel Lucatero Villanueva and I am a student at Tecnológico de Monterrey Campus Estado de México. I am taking the course of "Compiler Design" and all the publications of this space are directed to this course.


What I expect from this course is to learn how a compiler works and how to build one, I also would like to learn a lot about the the best programming languages to build a compiler in these days. I also hope that the class is enjoyable and challenging at the same time. I hope to learn a lot of useful things for my professional life.


My favorite hobbies are go out with my family, my friends and my girlfriend, walk my dog and watch series and movies, I also enjoy watching watching videos that I find interesting on YouTube and Facebook (About the universe, environment, video games, gadgets), and also I like to learn new things in MOOC plataforms like Udemy and Edx. My favorite series are "Rick and Morty", "Avatar the last airbender", "Game of Thrones", "Mr. Robot" and "Breaking Bad".
My favourite books use to be novels that give depth to the characters, such as "The Analyst" and "Dr. Jekill and Mr. Hide".


I like many musical genres, from the rock classics, like Queen, Aerosmith, Guns and Roses, to greats of hip hop, like Eminem, 50 cents, Dr. Dre. I also like classical music, pop, jazz and a few other genres.