I am fascinated about compilers and low-level programming since my undergrad when I first read the Dragon Book. To be honest, there were many theoretical concepts from the book that were not clear to me at that time. Every time I read that book, I learn something new out of it that I didn’t understand before. The theory was great, but back in my undergrad, I did not build a real compiler. I always had an urge to build a compiler of my own to see how various moving pieces come together and become the foundation of the entire computer industry. During my Master’s I did build a XML based intermediate language. It was super fun project since it gave me lot of exposure to the vast problem space a compiler developer needs to solve and think about. By the end of the project, I had good understanding of front-end and basic runtime needed for programming language to function. However, there were still crucial back-end pieces of compiler that I did not get chance to study and understand. Just-in-time (JIT), optimizations, register allocator, machine instructions encoding and garbage collector (GC) forms the backbone of compiler and can be found in any industry implementation of programming language.
When I was in Windows Live team 8~9 years back, I attended a talk by Jeffrey Richter on “CLR via C#”. I was super impressed with the concepts of CLR and spent few months reading books. I wanted to join such team, but I was not prepared for it. But after all these years, I finally got chance to join the .NET runtime’s JIT team. I am super excited about it because I always wanted to get my hands on JIT, but never got suitable opportunity to work on bigger projects. It is a privilege to be part of this team, not only because every .NET user on the planet will use the code we write, but there are lot of challenging projects to work on. For next few months, I will be evaluating the ARM64 performance of .NET 5.0 in comparison with that of x64. I hope my performance analysis skillset and expertise that I learned in the past prove useful here. I will cover some of the interesting ARM64 performance issues I find on the way in a separate blog post.