Posts

Chapter 8: 101 guide to hate JVM environment.

Hello everyone, I´m Steve, your host, and in this chapter, we will give the ultimate guide on why the JVM is not the best execution environment (at least, according to Erik Meijer and Jim Miller) There are several assets people investigate when searching for an alternative implementation path; Portability, Compactness, Efficiency, Security, Interoperability, and Flexibility. Portability stands for using n+m translators instead of n*m translators (Where n equals languages, and m platforms.). Compactness is an important property in the dynamically downloaded code context. Efficiency is delaying the commitment to a specific native platform as much as possible, Security relates to higher level intermediate code. Interoperability to sharing common type system and high-level execution environment. Finally, Flexibility is combining high level intermediate code with metadata. Meijer explains how JVM excels at anything Java related, but as a multi-language execution environment it lacks...

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...