JVM, MSIL and .net

Honors Computer Systems Organization (Prof. Grishman)

The Java Virtual Machine was initially designed as a machine-independent platform for running Java programs.  However, as this platform became widely distributed on many different machines, it became attractive to use JVM as a target for other programming languages.  A number of different compilers have been developed which generate JVM code (one catalog from Spring 2002 listed about 160 language systems, including those with Java-based interpreters and those which generate JVM code).  For languages which are a good match for the JVM, JVM provides many services that would have to be written from scratch for a conventional machine, such as memory management with garbage collection and a rich set of IO, graphics, and networking functions.

Microsoft has also been interested in the possibilities of a common network-wide platform for program distribution.  Not wanting to follow the Sun/Java line, they developed their own architecture called the .NET Framework.   Like Java, the design is based on a virtual machine which can be implemented on many real machines.  Microsoft's machine executes MSIL, Microsoft Intermediate Language.  In many ways it is similar to JVM:  it is a stack-oriented machine with explicit typing of all operands, explicit object creation, type and instance methods, and memory management (including garbage collection).  They provide both an interpreter and a "Just In Time" compiler.

Microsoft emphasized from the start that this would be a common base which could be used with a number of programming languages.  Microsoft provided compilers for four languages:  C++, C#, Visual Basic, and JScript.  .NET includes a Common Type System, shared by the 4 languages, and a Common Language Runtime.  This makes is possible to assemble systems in which parts are written in different programming languages.