Entradas

Technical Overview of the Common Language Runtime

This will be the last entry in blog, this post is focussed in giving my opinion about the article titled “Technical Overview of the Common Language Runtime" by Erik Meijer and Jim Miller, I am reading this article because I am developing a compiler as a project of the compiler design course that I am studying at ITESM and at this point I have already developed with my college partner the stages of lexical,syntatic (including AST construction) and semantic analysis and finally we are developing code in order to do the Code generation using the CLI (Common Language Infrastructure) because we are using C# and the Common Language Runtime (CLR) is present in this programming language, so, in order to understand better this virtual machine and its common language infraestructure and its differences between the JVM (Java Virtual Machine), our professor (Ariel Ortiz) recommended to us this article that it does   a comparison between JVM and CLI, I must say that it is a very interestin

Building Server-Side Web Language Processors

Hello, this time I will give my opinion about the article titled: “Building Server-Side Web Language Processors” by my professor Ariel Ortiz, this article basically explains that it is possible to build a language processor (kind of a compiler, interpreter or a combination of both) in a web environment and it shows the areas that need to be considered when doing this processor. Basically, Ortiz mentions in his article that developing a language processor for a web area is not that trivial, and this is because not only you need to face challenges of making a programming language (traditional fight with the dragon compiler), but also you need to challenge with all these "obstacles" that a web development has, like handling the Hypertext Transfer Protocol, having in mind the security issues, etc. As you can see, if you have in mind to build a language processor in a web environment, you need to consider those challenges so that you need to consider having knowledge in areas of

Sif

Last semester I had the chance to use Ruby for the first time. Oddly, it felt like a combination of many languages I was used to. The fact that everything is an object was really interesting and programming with it was relatively easy. However, I was not expecting to use it in Compiler Design. I liked to see how previous concepts like the Interpreter Pattern where applied in a real case scenario. SIF offer interesting ways to define classes and call methods. It’s very impressive that you can do both Imperative and Functional Programming. I can see how many things I’ve learned in Clojure one year ago can be applied to SIF, mainly because it’s syntaxis is based on Lisp, which was the base for Clojure. Things like the use of Parenthesis, the 3 argument structures, reliance on lists and recursion are presents in this language. The way it makes easier to understand all the work that is done behind the code, how those commands are interpreted by the compiler in order to carry them ou

The Mother of Compilers

I’ve always been curious about how programming has evolved into what we know today, from zeros and ones to an actual language. So, I was immensely surprised when I discovered how much was accomplished by a single person: Grace Hopper. Her entire life is admirable in so many different ways. Being a woman who wanted to study math and science should’ve been very hard, let alone being in the navy in a high position, however she was able to fight against all odds and even got the honor of being an admiral. That said, though her fight against all women prejudices is an outstanding feat, her contributions to programming languages are what made me go from respecting her to truly admire her. She wasn’t afraid that proposing such a weird idea as writing programs using human language would make her a victim of skeptical opinions. She wanted everyone was able to write programs without needing deep knowledge in math. She knew there was a lot of potential for the new generations to create some

Internals of GCC.

It’s funny, I’ve been using gcc for like two years and there’s still hundreds of things I completely ignore about it. I wasn’t fully aware of what it did let alone how. That’s why I really found interesting this podcast, as we delve into the processes that are being carried out in order to make a set of consecutive cone lines into actual commands that the computer is able to interpret. There are three different parts that make a compiler which include: a front end, an intermediate and a back end. Each of them is separate from one another and yet the communication among them is vital for the process of compilation. This allows the programs to be portable and not hardware dependent. Also, this gives more freedom to develop different PC architectures without worrying about compatibility. At the beginning of the podcast, the invited one makes an interesting observation where he states that knowing the inner processes that take place inside a compiler might not be necessary but can be

The hundred-Year Language.

It’s always interesting to think about the future of programming languages, especially when one considers all the change they gone through in a relative short time. The fact that programmers back then were able to make compilers that translated our commands into instructions that computers could understand has always fascinated me. The author makes some interesting points when he states some language are just or will become obsolete and we should start thinking about the next big language. The part that definitely got my attention was when he said in the future hardware would be so fast and advanced that thing like compilation time would no longer be an issue. I’ve wondered quite often if technology would really get that far, to the point where the only limitation is our creativity to solve problems. If that ever comes to happen, we would have the chance to focus more in functionalities for the programs rather then performance. I also liked how he encourages us to think in a prog

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

To be honest, every time I listen about compilers, I’m very interested but also terrified. The fact that you take a program written in a relatively simple language and translating to machine language it’s quite intriguing, but then I think about how hard it must be to take few complex statements and turn them into hundreds of simple commands and I tell myself “Well, at least you’re not going to do that”. That’s why I never considered learning compilers, because I saw them as something hard to understand and with little benefit for me. That’s why I was surprised when reading this I found out compilers can be quite useful for non-compiler-related projects. Translating a high-level program into a low-level one is pretty similar to speaking another language, you just need to understand both languages and have a well-defined technique. You can also create easy-to-understand languages to perform specific tasks for people who know very little about programming. Now it makes more sense h