Common Intermediate Language
From Wikipedia, the free encyclopedia
Common Intermediate Language (CIL, pronounced either "sil" or "kil") (formerly called Microsoft Intermediate Language or MSIL) is the lowest-level human-readable programming language in the Common Language Infrastructure and in the .NET Framework. Languages which target the .NET Framework compile to CIL, which is assembled into bytecode. CIL is an object-oriented assembly language, and is entirely stack-based. It is executed by a virtual machine. The primary .NET languages are C#, Visual Basic .NET, C++/CLI, and J#.
CIL was originally known as Microsoft Intermediate Language (MSIL) during the beta releases of the .NET languages. Due to standardization of C# and the Common Language Infrastructure, the bytecode is now officially known as CIL. Because of this legacy, CIL is still frequently referred to as MSIL, especially by long-standing users of the .NET languages.
Contents |
[edit] General information
During compilation of .NET programming languages, the source code is translated into CIL code rather than platform or processor-specific object code. CIL is a CPU- and platform-independent instruction set that can be executed in any environment supporting the .NET framework. CIL code is verified for safety during runtime, providing better security and reliability than natively compiled binaries.
[edit] Bytecode instructions
CIL bytecode has instructions for the following groups of tasks:
- Load and store
- Arithmetic
- Type conversion
- Object creation and manipulation
- Operand stack management (push / pop)
- Control transfer (branching)
- Method invocation and return
- Throwing exceptions
- Monitor-based concurrency
[edit] Just-in-time compilation
Just-in-time compilation involves turning the byte-code into code immediately executable by the CPU. The conversion is performed gradually during the program's execution. JIT compilation provides environment-specific optimization, runtime type safety, and assembly verification. To accomplish this, the JIT compiler examines the assembly metadata for any illegal accesses and handles violations appropriately.
[edit] Native image generator compilation
The native image generator (NGEN) produces a native binary image for the current environment. The byte-code is either skipped entirely or converted into native CPU instructions completely before runtime. This eliminates the JIT overhead at the expense of portability; whenever an NGEN-generated image is run in an incompatible environment, .NET framework automatically reverts to using JIT.
Once NGEN is run against an assembly, the resulting native image is placed into the Native Image Cache for use by all other .NET assemblies. It is advised that NGEN is run during applications' deployment[citation needed].
NGEN is intended to make the assembly execute faster by removing the JIT compilation process at runtime, but in some cases, this has adverse effects due to the optimization made by the JIT optimizer. Because of this fact, it's suggested to use NGEN only after benchmarking the application performance before and after it.
[edit] Metadata
Metadata is information about compiled classes. Like the type library in the Component Object Model, it enables applications to support and discover the interfaces, classes, types, methods, and fields in the assembly. The process of reading metadata is called reflection.
[edit] Executing CIL
- Source code is converted to Common Intermediate Language and a .NET assembly is created.
- Upon execution of a .NET assembly, its CIL is passed through the Common Language Runtime's JIT compiler to generate native code. (NGEN compilation eliminates this step at run time.)
- The native code is executed by the computer's processor.
[edit] External links
- Hello world program in CIL
- Kenny Kerr's intro to CIL (called MSIL in the tutorial)
- Common Language Infrastructure (CLI ) - Partition III - CIL Instruction Set
- Tutorial including CIL (called MSIL in the tutorial) by Aleksey Nudelman
- Common Language Infrastructure (Standard ECMA-335)
- Speed: NGen Revs Up Your Performance With Powerful New Features -- MSDN Magazine, April 2005
|