In the past two years, I have a great progress in the understanding of the compiler and compilation theory. Recalling that two years ago, as well as the situation of the Shangri-La Hotel to participate in the interview with the mood of the martyrdom, can not help but secretly "lucky".
At that time, I wrote the program to use Delphi or VC IDE, compile is a shortcut or click on a menu item, and the compiler is completely transparent to me. I have already passed the compilation class, but unfortunately, it is completely unblocked, so I will forget the most clean, or even better than calculating theory. I have been looking for INTERN, I have asked such a few questions when I interview:
What is the name of the executable executable of the compiler [1] using the compiler of VC ? (CL.EXE) What is the difference between VC Debug Build and RELEASE Build? (The debugging information and optimization is nothing) Generally speaking, what is the program output? (Assembler)
The answer is very unsatisfactory, indicating that our compilation class is still talking on the paper.
At the beginning, the choice of compilation as the direction of work is affected by a book - "Depth Exploration C Object Model". That is a book I mentioned during my school, I also made me understand the compiler hidden behind the IDE. It actually made such interesting things. Under the curiosity, I put all the weights on a resume, and it is a direction that I am not good at. Fortunately, the compilation level in the educational background I can't be considered, even more fortunately, it was possible to achieve the desire of compilation-related work in the time of most interviewers (including the present department manager). After joining the company, starting from scratch, from the most basic papers, the evil makes a burst. That case, let me recall the big upper C language class, the first time I use English materials, almost every word doesn't know, I have to check the dictionary, very energetic to overcome the language problem. Later, experience is also very similar, as reading is getting worse, you can concentrate more energy into the problem domain. Gradually, the control flow, data flow, dependencies, and various types of optimization are no longer unfamiliar, and have been deeply in-depth, and have a more thorough understanding in some areas, and also feel proficiency in the building.
Now, from a programmer's point of view, I have a full understanding of the compiler and can be used more efficiently. The compiler is no longer a black box with a single function, but a tool that can use different options to implement specific needs. But as a developer, my level is still very enough, the knowledge is relatively narrow, there are many places that need to be strengthened. Due to the limitations of work content, I have learned more about data stream analysis and dependencies, but the application understanding of them is limited. It is actually a good foundation because many optimizations are based on data stream analysis. And the results of dependency analysis are made.
From my personal experience, I want to be a good programmer, I have to master several tools, I am listed on the outline is some of my contact, and I am going to talk in the article behind. Skilled, this tool is no longer a black box to you, you must have a understanding of the theory based on this tool, and even have read a specific implementation. Regular expressions are the most appropriate example, only knowing that its syntax is not enough, only how high-efficiency regular expressions can be constructed in how the regular expression engine is working. So, if we can understand some optimization principles and even see if the GCC's implementation will be more conducive to us to write efficient code, these codes will also be more vivid in our eyes.
[1]. Say it accurately, it asked Driver's name.