MSDN Magazine - February 2008 - (Page 62) Joel Pobar roll Create A Language Compiler For The .NET Framework ompiler hackers are celebrities in the world of computer science. I’ve seen Anders Hejlsberg deliver a presentation at the Professional Developers Conference and then walk off stage to a herd of men and women asking him to sign books and pose for photographs. There’s a certain intellectual mystique about individuals who dedicate their time to learning and understanding the ins and outs of lambda expressions, type systems, and assembly languages. Now, you too can share some of this glory by writing your own compiler for the Microsoft® .NET Framework. There are hundreds of compilers for dozens of languages that target the .NET Framework. The .NET CLR wrangles these languages into the same sandpit to play and interact together peacefully. A ninja developer can take advantage of this when building large software systems, adding a bit of C# and a dabble of Python. Sure, these developers are impressive, but they don’t compare to the true masters—the compiler hackers, for it is they who have a deep understanding of virtual machines, language design, and the nuts and bolts of these languages and compilers. In this article, I will walk you through the code for a compiler written in C# (aptly called the “Good for Nothing” compiler), and along the way I will introduce you to the high-level architecture, theory, and .NET Framework APIs that are required to build your own .NET compiler. I will start with a language definition, explore compiler architecture, and then walk you through the code genera62 msdnmagazine tion subsystem that spits out a .NET assembly. The goal is for you to understand the foundations of compiler development and get a firm, high-level understanding of how languages target the CLR efficiently. I won’t be developing the equivalent of a C# 4.0 or an IronRuby, but this discussion will still offer enough meat to ignite your passion for the art of compiler development. your own Language Definition Software languages begin with a specific purpose. This purpose can be anything from expressiveness (such as Visual Basic®), to pro- This article uses the following technologies: .NET Framework This article discusses: Language definition The phases of a compiler ✥The CLR abstract stack ✥ Tools for getting your IL right ✥ ✥ Code download available at: msdn.microsoft.com/msdnmag/code08.aspx Joel Pobar is a former Program Manager on the CLR team at Microsoft. He now hangs out at the Gold Coast in Australia, hacking away on compilers, languages, and other fun stuff. Check out his latest .NET ramblings at callvirt.net/blog. http://msdn.microsoft.com/msdnmag/code08.aspx http://callvirt.net/blog
Table of Contents Feed for the Digital Edition of MSDN Magazine - February 2008 MSDN Magazine - February 2008 Contents Toolbox CLR Inside Out Basic Instincts Data Points Cutting Edge Office Space Roll Your Own WinUnit Silverlight PIAB And WCF WF How-To Test Run Foundations .NET Matters {End Bracket} MSDN Magazine - February 2008 MSDN Magazine - February 2008 - Contents (Page Cover1) MSDN Magazine - February 2008 - Contents (Page Cover2) MSDN Magazine - February 2008 - Contents (Page 1) MSDN Magazine - February 2008 - Contents (Page 2) MSDN Magazine - February 2008 - Contents (Page 3) MSDN Magazine - February 2008 - Contents (Page 4) MSDN Magazine - February 2008 - Contents (Page 5) MSDN Magazine - February 2008 - Contents (Page 6) MSDN Magazine - February 2008 - Contents (Page 7) MSDN Magazine - February 2008 - Contents (Page 8) MSDN Magazine - February 2008 - Contents (Page 9) MSDN Magazine - February 2008 - Contents (Page 10) MSDN Magazine - February 2008 - Toolbox (Page 11) MSDN Magazine - February 2008 - Toolbox (Page 12) MSDN Magazine - February 2008 - Toolbox (Page 13) MSDN Magazine - February 2008 - Toolbox (Page 14) MSDN Magazine - February 2008 - Toolbox (Page 15) MSDN Magazine - February 2008 - Toolbox (Page 16) MSDN Magazine - February 2008 - Toolbox (Page 17) MSDN Magazine - February 2008 - Toolbox (Page 18) MSDN Magazine - February 2008 - CLR Inside Out (Page 19) MSDN Magazine - February 2008 - CLR Inside Out (Page 20) MSDN Magazine - February 2008 - CLR Inside Out (Page 21) MSDN Magazine - February 2008 - CLR Inside Out (Page 22) MSDN Magazine - February 2008 - CLR Inside Out (Page 23) MSDN Magazine - February 2008 - CLR Inside Out (Page 24) MSDN Magazine - February 2008 - Basic Instincts (Page 25) MSDN Magazine - February 2008 - Basic Instincts (Page 26) MSDN Magazine - February 2008 - Basic Instincts (Page 27) MSDN Magazine - February 2008 - Basic Instincts (Page 28) MSDN Magazine - February 2008 - Basic Instincts (Page 29) MSDN Magazine - February 2008 - Basic Instincts (Page 30) MSDN Magazine - February 2008 - Data Points (Page 31) MSDN Magazine - February 2008 - Data Points (Page 32) MSDN Magazine - February 2008 - Data Points (Page 33) MSDN Magazine - February 2008 - Data Points (Page 34) MSDN Magazine - February 2008 - Data Points (Page 35) MSDN Magazine - February 2008 - Data Points (Page 36) MSDN Magazine - February 2008 - Data Points (Page 37) MSDN Magazine - February 2008 - Data Points (Page 38) MSDN Magazine - February 2008 - Data Points (Page 39) MSDN Magazine - February 2008 - Data Points (Page 40) MSDN Magazine - February 2008 - Data Points (Page 41) MSDN Magazine - February 2008 - Data Points (Page 42) MSDN Magazine - February 2008 - Cutting Edge (Page 43) MSDN Magazine - February 2008 - Cutting Edge (Page 44) MSDN Magazine - February 2008 - Cutting Edge (Page 45) MSDN Magazine - February 2008 - Cutting Edge (Page 46) MSDN Magazine - February 2008 - Cutting Edge (Page 47) MSDN Magazine - February 2008 - Cutting Edge (Page 48) MSDN Magazine - February 2008 - Cutting Edge (Page 49) MSDN Magazine - February 2008 - Cutting Edge (Page 50) MSDN Magazine - February 2008 - Cutting Edge (Page 51) MSDN Magazine - February 2008 - Cutting Edge (Page 52) MSDN Magazine - February 2008 - Office Space (Page 53) MSDN Magazine - February 2008 - Office Space (Page 54) MSDN Magazine - February 2008 - Office Space (Page 55) MSDN Magazine - February 2008 - Office Space (Page 56) MSDN Magazine - February 2008 - Office Space (Page 57) MSDN Magazine - February 2008 - Office Space (Page 58) MSDN Magazine - February 2008 - Office Space (Page 59) MSDN Magazine - February 2008 - Office Space (Page 60) MSDN Magazine - February 2008 - Office Space (Page 61) MSDN Magazine - February 2008 - Roll Your Own (Page 62) MSDN Magazine - February 2008 - Roll Your Own (Page 63) MSDN Magazine - February 2008 - Roll Your Own (Page 64) MSDN Magazine - February 2008 - Roll Your Own (Page 65) MSDN Magazine - February 2008 - Roll Your Own (Page 66) MSDN Magazine - February 2008 - Roll Your Own (Page 67) MSDN Magazine - February 2008 - Roll Your Own (Page 68) MSDN Magazine - February 2008 - Roll Your Own (Page 69) MSDN Magazine - February 2008 - Roll Your Own (Page 70) MSDN Magazine - February 2008 - Roll Your Own (Page 71) MSDN Magazine - February 2008 - Roll Your Own (Page 72) MSDN Magazine - February 2008 - Roll Your Own (Page 73) MSDN Magazine - February 2008 - WinUnit (Page 74) MSDN Magazine - February 2008 - WinUnit (Page 75) MSDN Magazine - February 2008 - WinUnit (Page 76) MSDN Magazine - February 2008 - WinUnit (Page 77) MSDN Magazine - February 2008 - WinUnit (Page 78) MSDN Magazine - February 2008 - WinUnit (Page 79) MSDN Magazine - February 2008 - WinUnit (Page 80) MSDN Magazine - February 2008 - WinUnit (Page 81) MSDN Magazine - February 2008 - WinUnit (Page 82) MSDN Magazine - February 2008 - WinUnit (Page 83) MSDN Magazine - February 2008 - WinUnit (Page 84) MSDN Magazine - February 2008 - WinUnit (Page 85) MSDN Magazine - February 2008 - Silverlight (Page 86) MSDN Magazine - February 2008 - Silverlight (Page 87) MSDN Magazine - February 2008 - Silverlight (Page 88) MSDN Magazine - February 2008 - Silverlight (Page 89) MSDN Magazine - February 2008 - Silverlight (Page 90) MSDN Magazine - February 2008 - Silverlight (Page 91) MSDN Magazine - February 2008 - Silverlight (Page 92) MSDN Magazine - February 2008 - PIAB And WCF (Page 93) MSDN Magazine - February 2008 - PIAB And WCF (Page 94) MSDN Magazine - February 2008 - PIAB And WCF (Page 95) MSDN Magazine - February 2008 - PIAB And WCF (Page 96) MSDN Magazine - February 2008 - PIAB And WCF (Page 97) MSDN Magazine - February 2008 - PIAB And WCF (Page 98) MSDN Magazine - February 2008 - PIAB And WCF (Page 99) MSDN Magazine - February 2008 - PIAB And WCF (Page 100) MSDN Magazine - February 2008 - WF How-To (Page 101) MSDN Magazine - February 2008 - WF How-To (Page 102) MSDN Magazine - February 2008 - WF How-To (Page 103) MSDN Magazine - February 2008 - WF How-To (Page 104) MSDN Magazine - February 2008 - WF How-To (Page 105) MSDN Magazine - February 2008 - WF How-To (Page 106) MSDN Magazine - February 2008 - WF How-To (Page 107) MSDN Magazine - February 2008 - WF How-To (Page 108) MSDN Magazine - February 2008 - WF How-To (Page 109) MSDN Magazine - February 2008 - WF How-To (Page 110) MSDN Magazine - February 2008 - WF How-To (Page 111) MSDN Magazine - February 2008 - WF How-To (Page 112) MSDN Magazine - February 2008 - WF How-To (Page 113) MSDN Magazine - February 2008 - WF How-To (Page 114) MSDN Magazine - February 2008 - Test Run (Page 115) MSDN Magazine - February 2008 - Test Run (Page 116) MSDN Magazine - February 2008 - Test Run (Page 117) MSDN Magazine - February 2008 - Test Run (Page 118) MSDN Magazine - February 2008 - Test Run (Page 119) MSDN Magazine - February 2008 - Test Run (Page 120) MSDN Magazine - February 2008 - Test Run (Page 121) MSDN Magazine - February 2008 - Test Run (Page 122) MSDN Magazine - February 2008 - Foundations (Page 123) MSDN Magazine - February 2008 - Foundations (Page 124) MSDN Magazine - February 2008 - Foundations (Page 125) MSDN Magazine - February 2008 - Foundations (Page 126) MSDN Magazine - February 2008 - Foundations (Page 127) MSDN Magazine - February 2008 - Foundations (Page 128) MSDN Magazine - February 2008 - Foundations (Page 129) MSDN Magazine - February 2008 - Foundations (Page 130) MSDN Magazine - February 2008 - Foundations (Page 131) MSDN Magazine - February 2008 - Foundations (Page 132) MSDN Magazine - February 2008 - .NET Matters (Page 133) MSDN Magazine - February 2008 - .NET Matters (Page 134) MSDN Magazine - February 2008 - .NET Matters (Page 135) MSDN Magazine - February 2008 - .NET Matters (Page 136) MSDN Magazine - February 2008 - .NET Matters (Page 137) MSDN Magazine - February 2008 - .NET Matters (Page 138) MSDN Magazine - February 2008 - .NET Matters (Page 139) MSDN Magazine - February 2008 - {End Bracket} (Page 140) MSDN Magazine - February 2008 - {End Bracket} (Page Cover3) MSDN Magazine - February 2008 - {End Bracket} (Page Cover4)
For optimal viewing of this digital publication, please enable JavaScript and then refresh the page. If you would like to try to load the digital publication without using Flash Player detection, please click here.