Assembly, trees, context free language, what's going on?
Hi everyone, in this week we'll dive deep in Episode 61 of the Software Engineering Radio, where they discuss the internals of GCC. A compiler collection designed to be used for many diverse languages such as Java, C, Fortran, C++, amongst many others. It was a very dense podcast, with lots of information to process which I just think furthermore proves just how complex compiler design is. You must listen very carefully as invited guest Morgan Deters explains the main concepts. Basically there are three layers underneath the GCC compiler, the front end, middle end and back end, each in charge of a different phase of the compilation process, the frond end provides an interface for each of the languages that I've mentioned earlier, constructing an internal tree with all the reserved words and operands that are to be found in the plain text code. You could say that during this first stage, the compiler is going through the semantic analysis phase, placing a node for each of the operations and the values the programmer wishes to apply them to. After this process is complete, we are told about the middle end, which I found the most interesting out of the three. This is where we start to optimize our code, reduce it as little as possible, and transform it into a contextless code of execution. I found this concept very interesting and revealing, the modularity of the GCC compiler, and how this makes it so versatile, which also reminded me of new solutions that are being implemented in the Cloud such as Kubernetes and OpenShift for programmers to develop regardless of the language and production environment they are developing under. It's really interesting to see and relate these concepts that have been underlying in our codes for a very long time, and for them to be translated into the newer technologies such as cloud computation.
To be honest it was after this stage where thing began to become a little more blurry and difficult to understand, the use of the registers and the assembler and how the compiler communicates with the entire system architecture still seems a little bit odd to me but it was interesting to see in a more hands on and practical way how is it that my code is being understood by the computer.
Comments
Post a Comment