For faster navigation, this Iframe is preloading the Wikiwand page for Common Intermediate Language.

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

Для улучшения этой статьи желательно: Найти и оформить в виде сносок ссылки на независимые авторитетные источники, подтверждающие написанное.После исправления проблемы исключите её из списка. Удалите шаблон, если устранены все недостатки.
{{bottomLinkPreText}} {{bottomLinkText}}
Common Intermediate Language
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?