Common Intermediate Language
Эту страницу предлагается переименовать в «Common Intermediate Language». |
Microsoft Intermediate Language, сокращенно MSIL — промежуточный язык, разработанный фирмой Microsoft для платформы .NET Framework. JIT-компилятор MSIL является частью так называемой CLR (англ. Common Language Runtime) — общей среды выполнения языков .NET.
В код на языке MSIL должны переводить код на языках высокого уровня все компиляторы, обеспечивающие поддержку платформы .NET. Код на MSIL генерируют, в частности, все компиляторы для платформы .NET самой фирмы Майкрософт, входящие в среду разработки Visual Studio (C#, Managed C++, Visual Basic .NET, Visual J# .NET).
Язык MSIL по синтаксису и мнемонике напоминает язык ассемблера. Его можно рассматривать как ассемблер виртуальной машины .NET. В то же время язык MSIL содержит некоторые достаточно высокоуровневые конструкции, повышающие его уровень по сравнению с ассемблером для любой реально существующей машины, и писать код непосредственно на MSIL легче, чем на ассемблере для реальных машин. Поэтому его можно рассматривать как своеобразный «высокоуровневый ассемблер».
Язык MSIL также нередко называют просто IL (англ. Intermediate Language), то есть просто «промежуточный язык».
Синтаксис и мнемоника языка MSIL описываются спецификацией CIL (англ. Common Intermediate Language) — открытой спецификацией общего промежуточного языка. Спецификация CIL является составной частью более общей спецификации CLI (англ. Common Language Infrastructure).
Пример кода
Это пример постейшей программы Hello, World , написанной на 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)
{
outer:
for (int i = 2; i < 1000; i++)
{
for (int j = 2; j < i; j++)
{
if (i % j == 0)
goto outer;
}
Console.WriteLine(i);
}
}
которая на CIL выглядит так:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.maxstack 2
.locals init ([0] int32 i,
[1] int32 j)
IL_0000: ldc.i4.2
stloc.0
br.s IL_001f
IL_0004: ldc.i4.2
stloc.1
br.s IL_0011
IL_0008: ldloc.0
ldloc.1
rem
brfalse.s IL_0000
ldloc.1
ldc.i4.1
add
stloc.1
IL_0011: ldloc.1
ldloc.0
blt.s IL_0008
ldloc.0
call void [mscorlib]System.Console::WriteLine(int32)
ldloc.0
ldc.i4.1
add
stloc.0
IL_001f: ldloc.0
ldc.i4 0x3e8
blt.s IL_0004
ret
}
![]() | Для улучшения этой статьи желательно: |