Entradas

Entry #8: Lin Clark on WebAssembly

"Lin Clark on WebAssembly" is a 62 minutes long podcast produced in 2018 by Software Engineering Radio with Lin Clark as a guest. The podcast talks about WebAssembly, its goals or use cases, how it interacts with the browser, how it changes the development process, its security, and the future of it. JavaScript has been the most used programming language to develop for web browsers for the last 20 years. The browser interprets and executes code in a virtual machine that only runs JavaScript. However, JavaScript is not ideal for every task that we want to perform in a browser. WebAssembly was created to get better performance on the web and solve this problem.  WebAssembly is a binary instruction format for a stack-based virtual machine for web browsers. It is designed like a compiler of high-level languages like C, C++, or Rust. It enables deploys for client and server web applications. Web Assembly is still under development, but, more programming languages will be

Entry #7: Building Server-Side Web Language Processors

“Building Server-Side Web Language Processors” is an article written by Ariel Ortiz, who is my professor during the Compilers Design course. The article talks about the advantages of building a language processor that actually runs on the web, instead of a processor that just runs on a command-line shell. Creating a web language processor can be a great challenge, as it requires to have knowledge in: Compilers design, Web server creation, Front-end design, and Security Management. The strategy used by the author consists of programming a web server from scratch and should be able to serve static resources and host a language processor that generates dynamic content based on the input and send the result to the client.  The implementation uses JavaServer Pages, which allows the processor to use custom tags, that are evaluated and produce an output. One of the advantages of this implementation is that the language processor has access to all the facilities provided by the hostin

Entry #6: Ruby and the Interpreter Pattern

“Language Design and Implementation using Ruby and the Interpreter Pattern” is an article written in 2008 by Ariel Ortiz, who has been my professor in the Programming Languages, Compilers Design and Software Design and Architecture courses. The article talks about the framework called S-expression Interpreter Framework (SIF) which is a tool the author/professor has been using with his students in the Software Design and Architecture and Programming Languages courses. The framework is written in Ruby, the dynamically typed programming language, which makes the construction of language interpreters more simple. Ruby has hashes, garbage collection, open classes, and built-in regular expressions. The interpreter pattern is one of the Gang of Four (GoF) software architecture patterns which are used to define a language with a well-defined grammar. A compiler can be seen as an interpreter, so the interpreter pattern is a perfect approach to design a compiler. A Symbolic notation, al

Entry #5: Mother of Compilers

In this entry, I will talk about Rear Admiral Dr. Grace Brewster Murray Hopper, also known as “Amazing Grace”. If you have read previous entries from this blog, you may have noticed that I read one article, listen to a podcast or watch a video; but, for this entry, I will talk about the 2013 article titled “Grace Hopper – The Mother of Cobol” from the “I Programmer” web site and also about the 16 minutes long video documentary “The Queen Of Code”, directed by Gillian Jacobs in 2015. Grace Murray Hopper (1906-1992) was a computer scientist and Navy Rear-Admiral of the United States of America. She is considered the Queen of Code, as the people will remember her as the creator of the COBOL programming language, one of the first compiled computer languages which opened up the field of programming to people who didn’t have a high-level math degrees. Moreover, she was the first person to bring the idea of a compiler to make programs easier and more readable. She is also remembered

Entry #4: Internals of GCC

"Internals of GCC" is a 53 minutes long podcast produced in 2007 by Software Engineering Radio with Morgan Deters as guest. GCC is a set of compilers for various languages including ADA, C, C++, Fortran, Objective C and Java at one point.  GCC provides the whole infrastructure to build software in those languages mentioned before, going from Source Code to Assembly. GCC works in three main sections, each one works in a different aspect of the compiler: Front-End: In this section, the compiler acknowledges the language we are using to generate a tree structure that shows the program description and that will pass to the next section. Middle-End: In this section, the optimization of the tree passed from the Front-End section occurs. This section makes the code more efficient and makes a transformation to a more generic code, as it takes this generic form and converts it into low-level structures called Register Transfer Language (RTL). During this process, some optimi

Entry #3: The Hundred-Year Language

“The Hundred-Year Language” is an essay by Paul Graham, derived from a keynote talk at PyCon 2003. The essay explains why languages do not evolve as technology does, the author mentions that languages evolve slowly because they're not really technologies, as languages are notations.  A program is a formal description of the problem you want to solve using a computer. The rate of evolution in programming languages is more like the rate of evolution in mathematical notation than transportation or communications, because, Mathematical notation does evolve, but not as technology does. Paul Graham mentions that the fundamental operators are the most important factors in a language's long term survival so the rest of the language can be changed as it can be fixed later while operators don't. Also, many of the languages are written based on these fundamental operators.  In order to have the hundred-year programming language is that we should not only see a good langua

Entry #2: Making Compiler Design Relevant for Students

“Making Compiler Design Relevant for Students who will (Most Likely) Never Design a Compiler“ is an article written by Saumya Debray in which he invites the students to understand why the Compiler Design course is so important and explains that the professors should teach in a way that their students develop skills instead of the idea of just teaching knowledge. The article shows that a compiler can be seen as a translator or as a process that can transform data expressed in one language into the same data expressed in another language. This comparison illustrates the similarity of the behavior, but also considering all the technical translation problems that can be found in common components of a language, such as ambiguity, context, and metaphors. Based on this idea of a translator, we can better understand the phases that need to be executed to obtain a result these are: Lexical Analysis and Parsing, Semantic Analysis, Code Generation, and Code Parsing. The Lexical Anal