Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Intermediate Language (IL)

25 Июн 2025

Intermediate Language (IL), также известный как Common Intermediate Language (CIL) — низкоуровневый язык программирования, разработанный компанией Microsoft. Этот язык, являющийся неотъемлемой частью архитектуры Common Language Runtime (CLR), служит посредником между кодом высокого уровня, написанным разработчиком, и машинным кодом, который исполняется процессором.

Рассмотрим этапы компиляции, через которые проходят .NET приложения.

Схема компиляции приложений .NET

  • Компилятор языка переводит исходный код (C#, VB.NET, F#, C++/CLI) в IL-код с метаданными.
  • JIT/AOT компилятор переводит IL-код с метаданными в конечный машинный код.
  • Машинный код начинает исполнение под управлением CLR.

Преимущества IL-кода

Использование механизма промежуточного кода обладает следующими преимуществами:

  • Платформонезависимость. IL работает с любой платформой, для которой есть среда выполнения .NET.
  • Межъязыковая совместимость. Компиляция в промежуточный код позволяет .NET языкам взаимодействовать друг с другом. Например, библиотека, написанная на C#, может без проблем подключаться и использоваться в проекте на F#.
  • Безопасность. В процессе компиляции промежуточного кода в машинные инструкции выполняется процедура, называемая проверкой, — анализ высокоуровневого промежуточного кода и проверка безопасности всех операций.
  • Оптимизация исполняемого кода. Преобразование IL-кода в машинный код с помощью JIT-компилятора позволяет учитывать архитектуру и специфику используемого процессора и операционной системы. Благодаря этому машинный код будет быстрее и эффективнее работать на любой платформе.
  • Работа с памятью. Среда выполнения .NET (CLR) управляет памятью приложения с помощью сборщика мусора (Garbage Collector). IL-код универсально интегрирован с CLR, что позволяет эффективно работать с памятью в приложении, минимизируя утечки и ошибки управления памятью.

Пример IL-кода

Рассмотрим пример IL-кода для простейшей C# программы:

class Program
{
    public static void Main()
    {
        Console.WriteLine("Hello World!");
    }
}

IL-код будет выглядеть следующим образом, но может отличаться в зависимости от версии .NET:

.class private auto ansi beforefieldinit Program
       extends [System.Runtime]System.Object
{
  .method public hidebysig static void  Main() cil managed
  {
    .entrypoint
    // Code size       13 (0xd)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ldstr      "Hello World!"
    IL_0006:  call       void [System.Console]System.Console::WriteLine(string)
    IL_000b:  nop
    IL_000c:  ret
  } // end of method Program::Main

  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // Code size       8 (0x8)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [System.Runtime]System.Object::.ctor()
    IL_0006:  nop
    IL_0007:  ret
  } // end of method Program::.ctor

} // end of class Program

Также IL-код помогает в понимании неочевидных тонкостей языка. Пример использования IL-кода: "Хорошо ли вы помните nullable value types? Заглядываем "под капот"" и "Всегда ли в C# есть упаковка при конкатенации со строкой и интерполяции?".

Популярные статьи по теме
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
close form
Я хочу принять участие в тестировании
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам