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