Microsoft .NET provides a powerful platform for the development of Internet applications that can run on any .NET enabled device. The heart of this platform is a Common Language Runtime (CLR). The Common Language Runtime provides a device and language independent way to express data and behaviour of applications. While the Common Language Runtime primarily supports Object Oriented (OO) languages, procedural and functional languages are also supported. Through the Common Language Runtime, languages can interoperate with each other and make use of a built-in garbage collector, security system, exception support, and a powerful framework.
Microsoft IL is the intermediate language emitted by all compilers that target the CLR. The CLR converts the device independent IL binaries into native code using IL-to-native code compilers (also incorrectly known as JIT compilers). These compilers can be run in a Just-In-Time (JIT) mode, converting methods from IL to native code before a method runs for the first time. They can also be used to convert an entire assembly (see section ) to native code and then saving the native code for future use. While it is possible to interpret IL code, the runtime never interprets IL but always compiles it into native code.
Tools that generate IL can benefit from the many services provided by the runtime, including the support for early and late binding, and the fact that code compiled to IL will run on any platform supported by the CLR. IL is simple and fast to generate, which is essential in RAD (rapid application development) environments, where speed of compilation and ease of debugging are of primary importance. The runtime manages the native code generated from IL so that this code may benefit from features such as cross-language inheritance, code access security, garbage collection, and simplified COM programming.