Common Language Infrastructure
- 1 year ago
- 0
- 0
Common Intermediate Language (сокращённо CIL ) — «высокоуровневый ассемблер» виртуальной машины .NET . Промежуточный язык, разработанный компанией Microsoft для платформы .NET Framework . JIT -компилятор CIL является частью CLR ( англ. c ommon l anguage r untime ) — общей среды выполнения программ, написанных на языках .NET . Ранее язык назывался « Microsoft Intermediate Language (MSIL) », однако был переименован для создания стандарта «ECMA-335».
Все компиляторы , поддерживающие платформу .NET , должны транслировать код с языков высокого уровня платформы .NET на язык CIL. В частности, код на языке CIL генерируют все компиляторы .NET компании Microsoft , входящие в среду разработки Microsoft Visual Studio ( C# , Managed C++ , Visual Basic .NET , Visual J# .NET ).
По синтаксису и мнемонике язык CIL напоминает язык ассемблера . Его можно рассматривать как ассемблер виртуальной машины .NET. В то же время язык CIL содержит некоторые достаточно высокоуровневые конструкции, повышающие его уровень по сравнению с ассемблером для любой реально существующей машины, и писать код непосредственно на CIL легче, чем на ассемблере для реальных машин. Поэтому CIL можно рассматривать как своеобразный «высокоуровневый ассемблер».
Язык CIL также нередко называют просто IL от англ. i ntermediate l anguage — буквально «промежуточный язык».
Синтаксис и мнемоника языка CIL описываются стандартом «ECMA-335». Спецификация CIL является составной частью более общей спецификации — спецификации CLI ( англ. c ommon l anguage i nfrastructure ).
Следующая программа написана на языке CIL и выводит строку « Hello, world !».
.assembly Hello {}
.method public static void Main() cil managed
{
.entrypoint
.maxstack 1
ldstr "Hello, world!"
call void [mscorlib]System.Console::WriteLine(string)
ret
}
Следующая программа записана на языке C# .
static void Main ( string [] args )
{
for ( int i = 2; i < 1000; i++ )
{
for ( int j = 2; j < i; j++ )
{
if ( i % j == 0 )
goto outer;
}
Console.WriteLine( i );
outer:;
}
}
Рассмотрим код CIL, в который компилируется код C# , записанный выше.
.assembly primes{}
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.maxstack 2
.locals init (int32 V_0,
int32 V_1)
ldc.i4.2
stloc.0 // v_0=2
br.s IL_001f
IL_0004: ldc.i4.2
stloc.1 // v_1=2
br.s IL_0011
IL_0008: ldloc.0 // V_0
ldloc.1 // V_1
rem // V_0 % V_1
brfalse.s IL_001b
ldloc.1 //v_1
ldc.i4.1
add
stloc.1 // v_1+=1
IL_0011: ldloc.1 //if v_1<=v_0
ldloc.0
blt.s IL_0008
ldloc.0
call void [mscorlib]System.Console::WriteLine(int32)
IL_001b: ldloc.0 //v_0
ldc.i4.1
add
stloc.0 //v_0+=1
IL_001f: ldloc.0
ldc.i4 0x3e8
blt.s IL_0004 //if v_0<=1000
ret
}
В комплекте с
IDE
«
Microsoft Visual Studio
» поставляется утилита
ildasm
, позволяющая просматривать код CIL.
ildasm
по умолчанию устанавливается в папку «
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools
» (точный путь зависит от разрядности
ОС
и версии
.NET Framework
).