<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Why IL?</title><link>http://blogs.msdn.com/b/ericlippert/archive/2011/11/18/why-il.aspx</link><description>One of the earliest and most frequently-asked questions we got when we announced the Roslyn project was "is this like LLVM for .NET?" No, Roslyn is not anything like LLVM for .NET. LLVM stands for Low-Level Virtual Machine ; as I understand it (admittedly</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>re: Why IL?</title><link>http://blogs.msdn.com/b/ericlippert/archive/2011/11/18/why-il.aspx#10239951</link><pubDate>Tue, 22 Nov 2011 18:44:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10239951</guid><dc:creator>Kunal Pathak</dc:creator><description>&lt;p&gt;The concept of introducing intermediate language in middle is few years older than last 1960s. It was evolved with UNCOL&lt;/p&gt;
&lt;p&gt;by Melvin E. Conway in 1958. Here is the interesting link &lt;a rel="nofollow" target="_new" href="http://homepage.ntlworld.com/michael.harley/uncol.html"&gt;homepage.ntlworld.com/.../uncol.html&lt;/a&gt;.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10239951" width="1" height="1"&gt;</description></item><item><title>re: Why IL?</title><link>http://blogs.msdn.com/b/ericlippert/archive/2011/11/18/why-il.aspx#10239624</link><pubDate>Tue, 22 Nov 2011 15:54:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10239624</guid><dc:creator>Andrey</dc:creator><description>&lt;p&gt;The CIL is all good, but there is one problem with it - can it evolve? I guess it should evolve for 2 reasons. First, to allow for more optimizations preserving more of the higher language code structure. Second, to move things like WeakReference into CIL itself an make it native higher languages feature.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10239624" width="1" height="1"&gt;</description></item><item><title>re: Why IL?</title><link>http://blogs.msdn.com/b/ericlippert/archive/2011/11/18/why-il.aspx#10239172</link><pubDate>Mon, 21 Nov 2011 16:44:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10239172</guid><dc:creator>Bob</dc:creator><description>&lt;p&gt;Looks like I was a victim of the invisible blog posting timeout, so I&amp;#39;ll try again.&lt;/p&gt;
&lt;p&gt;In the late 80&amp;#39;s, DEC (Digital Equipment Corporation) had compilers for almost a dozen languages on its CISC-based VAX architecture and was about to run into the m x n problem as it was developing it&amp;#39;s RISC-based Alpha architecture. It developed a CIL for its compilers and turned it into a 12 + 2 problem.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10239172" width="1" height="1"&gt;</description></item><item><title>re: Why IL?</title><link>http://blogs.msdn.com/b/ericlippert/archive/2011/11/18/why-il.aspx#10238930</link><pubDate>Sun, 20 Nov 2011 17:31:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10238930</guid><dc:creator>CodeInChaos</dc:creator><description>&lt;p&gt;The LLVM language is at a much lower level than the .net IL. It isn&amp;#39;t a replacement for the CIL, but could rather be used as a common backend for .net, java and low level(c like) languages. A common backend and optimizer for VC++ and .net would sure be nice.&lt;/p&gt;
&lt;p&gt;This way compilers for different source and target platforms can share large parts of the optimizer and code generator, it&amp;#39;s possible to add additional optimization passes or backends as a third party,...&lt;/p&gt;
&lt;p&gt;In fact mono uses it as one of its backends which leads to very fast code (but I think it&amp;#39;s traded for a higher JIT time).&lt;/p&gt;
&lt;p&gt;I think Microsoft&amp;#39;s equivalent of LLVM would be part of Phönix, and not the traditional .net stack. I remember a talk about Phönix mentioning such a low level intermediate language.&lt;/p&gt;
&lt;p&gt;The equivalent of Roslyn would be something like MonoDevelop&amp;#39;s NRefactory.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10238930" width="1" height="1"&gt;</description></item><item><title>re: Why IL?</title><link>http://blogs.msdn.com/b/ericlippert/archive/2011/11/18/why-il.aspx#10238798</link><pubDate>Sat, 19 Nov 2011 15:44:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10238798</guid><dc:creator>Estevan Cruz </dc:creator><description>&lt;p&gt;Its all in the name isn&amp;#39;t it? &amp;quot;Common Language Runtime&amp;quot; tells you all about the &amp;quot;why&amp;quot; and the benefits :D . &lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10238798" width="1" height="1"&gt;</description></item><item><title>re: Why IL?</title><link>http://blogs.msdn.com/b/ericlippert/archive/2011/11/18/why-il.aspx#10238758</link><pubDate>Sat, 19 Nov 2011 09:02:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10238758</guid><dc:creator>Tanveer Badar</dc:creator><description>&lt;p&gt;Eric, I guess you are going to bring a nitpicker&amp;#39;s corner very soon, much like Raymond Chen. Imagine some random tech site posting this tomorrow&lt;/p&gt;
&lt;p&gt;&amp;quot;Eric Lippert&amp;#39;s Claim to Fame!&lt;/p&gt;
&lt;p&gt;In a recent blog post over the newest hot potato Roslyn, Eric discloses that he is &amp;quot;the&amp;quot; expert on C# language&amp;#39;s semantic analysis.&lt;/p&gt;
&lt;p&gt;Anders Hejlsberg declined to comment on the said post. You can find Mads Torgensen&amp;#39;s counter post here &amp;lt;link&amp;gt;.&amp;quot;&lt;/p&gt;
&lt;p&gt;To add my 2 cents, imagine Reflection giving you complete semantic knowledge of which symbol means what in source code. And more importantly, running as you type, refactor, bring up immediate window, go to definition or find all references. Roslyn is to an IDE what is reflection + type verifier to runtime, but obviously the services offered and needed in each case are different.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10238758" width="1" height="1"&gt;</description></item><item><title>re: Why IL?</title><link>http://blogs.msdn.com/b/ericlippert/archive/2011/11/18/why-il.aspx#10238713</link><pubDate>Sat, 19 Nov 2011 00:17:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10238713</guid><dc:creator>CarlD</dc:creator><description>&lt;p&gt;Even the native VC++ compiler has used this architecture since inception. &amp;nbsp;If you look at the components of VC++, there&amp;#39;s c1.dll (C front-end, c1xx.dll (C++ front-end) and c2.dll (backend). &amp;nbsp;The front-ends produce an intermediate language (historically also known as CIL - C Intermediate Language) which the backends consume to produce native machine code. &amp;nbsp;As Eric mentioned, this design is not new - it goes back decades and has been used on many, many compilers.&lt;/p&gt;
&lt;p&gt;Perhaps the most important PC-based compiler that did not use this pattern was Turbo Pascal, which was a one-pass compiler that went directly to native machine language and which was, itself, written in assembler (by the one and only Anders Heilsberg of C# fame).&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10238713" width="1" height="1"&gt;</description></item><item><title>re: Why IL?</title><link>http://blogs.msdn.com/b/ericlippert/archive/2011/11/18/why-il.aspx#10238705</link><pubDate>Fri, 18 Nov 2011 23:19:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10238705</guid><dc:creator>Rick C</dc:creator><description>&lt;p&gt;If I&amp;#39;m not mistaken, GCC does more or less the same thing: &amp;nbsp;All the compilers generate an intermediate code, and the backend generates machine code.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10238705" width="1" height="1"&gt;</description></item><item><title>re: Why IL?</title><link>http://blogs.msdn.com/b/ericlippert/archive/2011/11/18/why-il.aspx#10238697</link><pubDate>Fri, 18 Nov 2011 22:34:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10238697</guid><dc:creator>Brent M. Spell</dc:creator><description>&lt;p&gt;Another benefit for application developers is that they don&amp;#39;t have to build and distribute binaries for each target machine architecture. Instead, there is a single set of IL-compiled binaries to distribute. This simplifies ALM and deployment significantly. In addition, users don&amp;#39;t have to know which architecture they are running in order to download/run the application.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10238697" width="1" height="1"&gt;</description></item><item><title>re: Why IL?</title><link>http://blogs.msdn.com/b/ericlippert/archive/2011/11/18/why-il.aspx#10238685</link><pubDate>Fri, 18 Nov 2011 21:40:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10238685</guid><dc:creator>Gabe</dc:creator><description>&lt;p&gt;PaulTDessci: Imagine you wanted to write your own IDE (like Visual Studio) for C#: you want syntax highlighting, IntelliSense, refactoring, squiggly lines to show up under syntax errors, the &amp;quot;go to definition&amp;quot; feature, an immediate mode window, and so on. Right now, creating all of these features essentially requires you to write almost a complete C# compiler because there&amp;#39;s no way to get anything out of the current C# compiler other than assemblies or error messages. You have to write a parser to do syntax highlighting, a semantic analyzer to be able to go to definitions, etc.&lt;/p&gt;
&lt;p&gt;What Roslyn is intended to do is allow you to create these features without having to write your own compiler. It will give you a syntax tree, perform semantic analysis, and more. You can simply give Roslyn the source code and ask it for a syntax tree or what symbol the user&amp;#39;s hovering their cursor over. Of course, there&amp;#39;s no need to restrict its features to code editors; it&amp;#39;s also intended for use by static analysis tools, and obviously it will be used for actually compiling source code to assemblies (whether to compile your project to an EXE or to compile ASPX files in memory).&lt;/p&gt;
&lt;p&gt;What Roslyn is not intended to do is allow you to create new languages on top of C#, whether it&amp;#39;s macros, metaprogramming, aspects, or whatever. Just because it&amp;#39;s not intended for such things, though, doesn&amp;#39;t mean you can&amp;#39;t or shouldn&amp;#39;t do it.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10238685" width="1" height="1"&gt;</description></item></channel></rss>