<?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>Is the CLR a Virtual Machine?</title><link>http://blogs.msdn.com/brada/archive/2005/01/12/351958.aspx</link><description>A reader recently asked me if the CLR is a Virtual Machine or not. An interesting question that comes up frequently enough that I think it is worth addressing here. I asked around the usual suspects on the CLR team and got some of their impressions. As</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: Is the CLR a Virtual Machine?</title><link>http://blogs.msdn.com/brada/archive/2005/01/12/351958.aspx#352078</link><pubDate>Thu, 13 Jan 2005 12:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:352078</guid><dc:creator>N</dc:creator><description>Thanks for the answer. This question seems to depend largely on how to define the term Virtual Machine. If we say virtual machine is just the abstraction in term of instructions, we can say VB, Pascal, Smalltalk, VBScript, JavaScript have VM (Probably, Gates' GWBasic even contains a VM Implementation). In broader interpretation, can we consider that language that we use &amp;quot;abstraction of instructions&amp;quot;? If so, even C, C++ are the implementation of VM in some sense but I wouldn't go that far.&lt;br&gt;&lt;br&gt;In my view, those stuff are more like execution engine, bytecode interpreter, jit compiler more than virtual machine. Virtual Machine should really isolate hardware from the language. Java did pretty well in that sense while .NET allows users/developers to &amp;quot;hack&amp;quot; into the underlying hardware more directly like memory addressing/COM. I also think that there are some differences in more detail in terms of security implementation that might be worth mentioned.&lt;br&gt;&lt;br&gt;Really, what is really the fine line to decide whether it's VM or not?</description></item><item><title>re: Is the CLR a Virtual Machine?</title><link>http://blogs.msdn.com/brada/archive/2005/01/12/351958.aspx#352107</link><pubDate>Thu, 13 Jan 2005 13:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:352107</guid><dc:creator>mschaef</dc:creator><description>&amp;quot;However the term Execution Engine refers to the implementation of a completely different machine (an “IL Machine” on top of an x86).  That’s the same thing the Pascal PMachine did (PCode on top of lots of hardware) for example… and it is the same thing both the CLR and the JVM do.&amp;quot;&lt;br&gt;&lt;br&gt;There is one big difference between the JVM and CLR:&lt;br&gt;&lt;br&gt;&lt;a target="_new" href="http://www.sun.com/microelectronics/picoJava/overview.html"&gt;http://www.sun.com/microelectronics/picoJava/overview.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;quot;picoJava Microprocessor Cores are uniquely designed processor cores that natively execute Java bytecode as defined by the Java Virtual Machine (JVM). &amp;quot;&lt;br&gt;&lt;br&gt;That would make a JVM a software implementation of a particular hardware architecture. Also, since Java bytecodes are typed, compared to the polymorphic bytecodes used by the MSIL, it's a lot more plausible to do Java in hardware than the CLR. This seems like a good way to distinguish between a &amp;quot;Virtual Machine&amp;quot; and a &amp;quot;Execution Environment&amp;quot;.&lt;br&gt;&lt;br&gt;That said, given the history of the term in Java, Smalltalk, and other dynamic languages, I'd use the term VM for both the JVM and the CLR.</description></item><item><title>re: Is the CLR a Virtual Machine?</title><link>http://blogs.msdn.com/brada/archive/2005/01/12/351958.aspx#352135</link><pubDate>Thu, 13 Jan 2005 14:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:352135</guid><dc:creator>Bob Riemersma</dc:creator><description>Considering all the hooks back into the &amp;quot;real&amp;quot; machine, I don't think the term VM applies.  It has more of the feel of a &amp;quot;host and execution environment&amp;quot; a la WSH or IE or something for script and ActiveX components.  Or a VB program compiled to p-code.&lt;br&gt;&lt;br&gt;But I suppose this is more hair splitting.</description></item><item><title>re: Is the CLR a Virtual Machine?</title><link>http://blogs.msdn.com/brada/archive/2005/01/12/351958.aspx#352153</link><pubDate>Thu, 13 Jan 2005 14:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:352153</guid><dc:creator>Mark Mullin</dc:creator><description>I've always thought that it depends on your perspective -  I know the Smalltalk kernel better than .net, but&lt;br&gt;&lt;br&gt;1)  From the point of view of the application, it's a pure virtual machine -  it implements a virtual instruction set that is disjoint from the native processors instruction set, and performs the mapping via software&lt;br&gt;&lt;br&gt;2) From the point of view of the high level kernel it's a mixed bag&lt;br&gt;   -a  Some stuff is intercepted immediately and jitted, i.e. there is a virtual machine, but it ain't an execution machine per se, it's a translator&lt;br&gt;    b-  Some stuff is hardwired, i.e. particular opcodes in the virtual machine are fundamentally trapdoors into the native system&lt;br&gt;    c -  and some stuff really is virtual, that is, it's interpreted by the core logic and the instruction set is truly disjoint&lt;br&gt;&lt;br&gt;I see these machines as hybrids -  a true virtual machine is one that realizes its entire instruction set through a software implementation, and interprets some kind of low level language at runtime to sequence virtual operations for processing - jitting doesn't fall into this class because it's effectively a transformation of representation followed by native execution, whereas the true virtual machine is a 1:n straight execution, where each virtual instruction corresponds to n _direct_ operations on the physical machine.&lt;br&gt;</description></item><item><title>Project Vismaya [Update]</title><link>http://blogs.msdn.com/brada/archive/2005/01/12/351958.aspx#371924</link><pubDate>Sun, 13 Feb 2005 20:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:371924</guid><dc:creator>Bharath Ganesh</dc:creator><description>Project Vismaya [Update]</description></item><item><title>Execution Engine-independent JIT compilers</title><link>http://blogs.msdn.com/brada/archive/2005/01/12/351958.aspx#564513</link><pubDate>Thu, 30 Mar 2006 07:07:06 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:564513</guid><dc:creator>Michał Cierniak</dc:creator><description>I have recently put together a set of slides about LIL (Low-level Intermediate Language) and gave a talk...</description></item><item><title> Brad Abrams Is the CLR a Virtual Machine | Hair Growth Products</title><link>http://blogs.msdn.com/brada/archive/2005/01/12/351958.aspx#9714416</link><pubDate>Tue, 09 Jun 2009 11:47:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9714416</guid><dc:creator> Brad Abrams Is the CLR a Virtual Machine | Hair Growth Products</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://hairgrowthproducts.info/story.php?id=2260"&gt;http://hairgrowthproducts.info/story.php?id=2260&lt;/a&gt;&lt;/p&gt;
</description></item></channel></rss>