Common Intermediate Language (скорочено CIL) — проміжна мова, розроблена корпорацією Microsoft для платформи .NET Framework. JIT-компілятор, який перетворює CIL код в машинний код, є частиною віртуальної машини CLR (англ. Common Language Runtime) — спільного середовища виконання мов для платформи .NET. Раніше ця мова мала назву Microsoft Intermediate Language, але згодом була перейменована для створення стандарту ECMA-335.

Усі компілятори, які забезпечують підтримку платформи .NET, повинні транслювати код, який написаний на мовах високого рівня, в проміжний код на мові CIL.[1]

Код на CIL генерують усі компілятори для платформи .NET самої фірми 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 є складовою частиною специфікації Common Language Infrastructure (CLI).[2]

Загальна інформація ред.

Під час компіляції мов програмування CLI код перекладається в код CIL, а не в об’єктний код, специфічний для платформи чи процесора. CIL — це незалежний від процесора та платформи набір інструкцій, який можна виконувати в будь-якому середовищі, що підтримує загальну мовну інфраструктуру, наприклад у середовищі виконання .NET у Windows або крос-платформному середовищі виконання Mono. Теоретично це позбавляє від необхідності розповсюджувати різні виконувані файли для різних платформ і типів ЦП. Код CIL перевірено на безпеку під час виконання, забезпечуючи кращу безпеку та надійність, ніж скомпільовані виконувані файли.

Приклад коду ред.

Приклад програми 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)
{
    for (int i = 2; i < 1000; i++)
    {
         for (int j = 2; j < i; j++)
         {
              if (i % j == 0)
                   goto outer;
         }
         Console.WriteLine(i);
    }
outer: Console.ReadKey();
}
/* Output:
2
3
*/

яка на 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
}

Примітки ред.

  1. Building a Simple .NET Compiler (англійською) . Архів оригіналу за 31 січня 2019. Процитовано 31 січня 2019.
  2. Mamone, Mark (2006). Practical Mono (Англ.) . Apress. с. 3—5. ISBN 9781430200970. Архів оригіналу за 31 січня 2019. Процитовано 31 січня 2019.

Посилання ред.