Common Intermediate Language

Поделись знанием:
Перейти к: навигация, поиск

Common Intermediate Language (сокращённо CIL) — «высокоуровневый ассемблер» виртуальной машины .NET. Промежуточный язык, разработанный фирмой «Microsoft» для платформы .NET Framework. JIT-компилятор CIL является частью CLR (англ. common language runtime) — общей среды выполнения программ, написанных на языках .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 от англ. intermediate language — буквально «промежуточный язык».

Синтаксис и мнемоника языка CIL описываются стандартом «ECMA-335». Спецификация CIL является составной частью более общей спецификации — спецификации CLI (англ. common language infrastructure).



Пример кода

Следующая программа написана на языке 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).


Напишите отзыв о статье "Common Intermediate Language"

Отрывок, характеризующий Common Intermediate Language

«Вино? Объедение? Праздность? Леность? Горячность? Злоба? Женщины?» Перебирал он свои пороки, мысленно взвешивая их и не зная которому отдать преимущество.
– Женщины, – сказал тихим, чуть слышным голосом Пьер. Масон не шевелился и не говорил долго после этого ответа. Наконец он подвинулся к Пьеру, взял лежавший на столе платок и опять завязал ему глаза.
– Последний раз говорю вам: обратите всё ваше внимание на самого себя, наложите цепи на свои чувства и ищите блаженства не в страстях, а в своем сердце. Источник блаженства не вне, а внутри нас…
Пьер уже чувствовал в себе этот освежающий источник блаженства, теперь радостью и умилением переполнявший его душу.


Скоро после этого в темную храмину пришел за Пьером уже не прежний ритор, а поручитель Вилларский, которого он узнал по голосу. На новые вопросы о твердости его намерения, Пьер отвечал: «Да, да, согласен», – и с сияющею детскою улыбкой, с открытой, жирной грудью, неровно и робко шагая одной разутой и одной обутой ногой, пошел вперед с приставленной Вилларским к его обнаженной груди шпагой. Из комнаты его повели по коридорам, поворачивая взад и вперед, и наконец привели к дверям ложи. Вилларский кашлянул, ему ответили масонскими стуками молотков, дверь отворилась перед ними. Чей то басистый голос (глаза Пьера всё были завязаны) сделал ему вопросы о том, кто он, где, когда родился? и т. п. Потом его опять повели куда то, не развязывая ему глаз, и во время ходьбы его говорили ему аллегории о трудах его путешествия, о священной дружбе, о предвечном Строителе мира, о мужестве, с которым он должен переносить труды и опасности. Во время этого путешествия Пьер заметил, что его называли то ищущим, то страждущим, то требующим, и различно стучали при этом молотками и шпагами. В то время как его подводили к какому то предмету, он заметил, что произошло замешательство и смятение между его руководителями. Он слышал, как шопотом заспорили между собой окружающие люди и как один настаивал на том, чтобы он был проведен по какому то ковру. После этого взяли его правую руку, положили на что то, а левою велели ему приставить циркуль к левой груди, и заставили его, повторяя слова, которые читал другой, прочесть клятву верности законам ордена. Потом потушили свечи, зажгли спирт, как это слышал по запаху Пьер, и сказали, что он увидит малый свет. С него сняли повязку, и Пьер как во сне увидал, в слабом свете спиртового огня, несколько людей, которые в таких же фартуках, как и ритор, стояли против него и держали шпаги, направленные в его грудь. Между ними стоял человек в белой окровавленной рубашке. Увидав это, Пьер грудью надвинулся вперед на шпаги, желая, чтобы они вонзились в него. Но шпаги отстранились от него и ему тотчас же опять надели повязку. – Теперь ты видел малый свет, – сказал ему чей то голос. Потом опять зажгли свечи, сказали, что ему надо видеть полный свет, и опять сняли повязку и более десяти голосов вдруг сказали: sic transit gloria mundi. [так проходит мирская слава.]