Interested Article - Common Intermediate Language

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 ).

Same as Common Intermediate Language