Posts

Chapter 7: The Hitchhiker´s Guide to the Galaxy, The Ultimate Deluxe HD Remake Edition 2.

So yeah, we have finished reading “The Hitchhiker´s Guide to the Galaxy”, amazing read. I just discovered I have been quoting this book without ever knowing its existence (I said 42 was the answer to everything, don’t recall why, should have seen my face when I got to that part of the book). I enjoyed reading every chapter, long or short, it just compelled to my sense of humor (I have curiosity of reading the rest of the series). Not being fond of reading, I enjoyed this book (As well as Ready Player One, that I read last semester, Ariel got a great taste regarding books as far as I am concerned) The references included in this book are incredible, everyday chores, sayings, stories, myths, all taken to the extremes, things that are impossible to happen find a way to be materialized in the story. Everything felt into place in a way to see everything we know as universally improvable (I mean, we could product of the Improbability Drive and we will never know). While there is no (de...

Chapter 6: Should instructors approach Language Design and Implementation with Server-Side Web tools?

The paper I read this time was how Ariel Ortiz explains us the advantages and shortcomings of approaching language design and implementation with building Server-Side web language processors. This was brought up by the author because Compiler design courses are part in the curricula, and while there are ways and tools to explore the subject, nothing is written in stone; new technologies arise and new ways to teach stuff. Making a hybrid curriculum composed from web technology and language implementation into a single course is what was described on this article. There are many ways to implement this, either using the Common Gateway Interface, building over an existing web technology, or even programming our own Web Server. Ariel Ortiz has used this web approach in different courses, in Programming Languages, Language Translators, and Software Development Project, finally concluding that web-based approach is possible, leading to different results depending on methodology used and...

Chapter 5: S-expression Interpreter Framework.

The paper I read this time was about how the S-expression Interpreter Framework (SIF) is presented as a tool for teaching language design and implementation. The S-Expressions described in the paper are parenthesized prefix notation, that helps making code and data easily represented, making the parser easier to write, and no problems regarding operator precedence or associativity. The paper also describes what the Interpreter Pattern consists on, where the program is described as a tree, in which each element is represented by a node, which responds to a special operation called interpret. Using Ruby to build interpreters have many advantages, such as built-in regular expressions, garbage collection, built-in hashes, open classes, and first-class continuations. Another huge benefit from Ruby is that everything is treated like an object, strings, numbers, arrays, hashes, symbols, procedures, and even classes. SIF only supports integers, symbols, list and procedures, where a...

Chapter 4: This time it is Grace Bewster Murray Hopper´s time to shine

Renowned for being responsible for the development of the Cobol language and making computers and computing more accessible. One of the obstacles she overcame was the overall way people differentiated woman´s and man´s jobs. She had a really amusing background, interested in engineering since the beginning, doing well in mathematics and geometry at school, and studying math, physics and engineering in Vassar College. She also joined the US Naval Reserve during second world war, where she was assigned to the Bureau of Ships Computation project at Harvard. That was her beginning in everything she did surrounding computation; she learned subroutines, Babbage and she actually invented the term “Bug” (this originated thanks to a moth inside the Mark I, leading to incorrect results). She later developed BINAC, a small binary machine that was built in secret for the Snark Missile project, using octal representation. Then Hopper made a huge step towards a higher-level language, writi...

Chapter 3: GCC Anatomy

When writing code, people don´t usually bother to think about the compiler or whatever lies inside, but instead just codes. However, everything that happens inside a compiler (for example, GCC) is interesting. Conformed of three main parts (which are Front End, Middle End, and Back End) the compiler aims towards performance thanks to everything that those parts make. The Front End, which is language specific, outputs to the front end, which is considered like a “neutral” zone, and finally the Back End works to produce specific architecture code. Morgan Deters explains us the portability of GCC in the podcast; is one of the most widely used, for example, on Windows or Mac OS. It accepts many languages, such as C, C++, Java, Fortran, etc. The main output from the compiler is an object code for the aimed platform. The compiler works with a simple input, a plain text, and the compiler has to understand what the plain text has and what everything inside it means, usually by parsing...

Chapter 2: The century-old dialect.

“Wasting programmer time is the true inefficiency” So, this quote stuck with me during the whole article. How is this even possible?  Haven’t we aimed towards efficient and faster machine execution, than to how much time we spend writing the code? Complex and long algorithms have been written to solve problems with the sole purpose to make them optimal. So, how can programmers time be more important than machine time? Maybe we have hit bedrock here, maybe we have hit local maxima (Genetic algorithm pun?). Now the goal has shifted. One interesting example mentioned in the article was about lists and strings; “Semantically, strings are more or less a subset of lists in which the elements are characters… Having strings in a language seems to be a case of premature optimization, since speed doesn't matter in most of a program, you won't ordinarily need to bother with this sort of micromanagement. This will be more and more true as computers get faster”. This whole quote is...

Chapter 1: The usefulness of Compiler Design that will (Most Likely) never be touched again.

But don’t judge me, that’s the title of the article that we read this time. Debray explains us that Compiler Design is a highly specialized topic, and it´s difficult to know how many students are going to pursue this course on their professional career. However, this would not be the first course that faces the same dilemma: Mathematics; many loves Mathematics, others hate it. Most of us ask ourselves “Why should I even learn how to derivate or integrate if we have advanced tools that gives us the result instantly without any errors. Even worse, why should I learn that if I won´t use them anymore?”. Some have even recurred to other teachers who embraces programming and asked them if they have used integrals or some advanced trigonometric in their job. Most of them didn’t, so why should we even learn it? This same concept (hopefully) will apply to Compiler Design. It isn´t the math itself the thing we learn from the course mentioned before, but the critical thinking process that sticks...