Открыть сервис

Common Language Infrastructure

Common Language Infrastructure (CLI) — это открытая спецификация (международный стандарт ISO/IEC 23271 и ECMA-335), описывающая исполняющую среду и набор правил для создания и выполнения программ, написанных на разных языках программирования. CLI определяет единую платформу, на которой код на различных языках (например, C#, Visual Basic .NET, F#) компилируется в промежуточный код и выполняется в общей виртуальной машине, что обеспечивает межъязыковую интеграцию и переносимость приложений.

Спецификация CLI была разработана компанией Microsoft в конце 1990-х — начале 2000-х годов как основа платформы .NET Framework. В 2001 году спецификация была передана в организацию ECMA International для стандартизации, а в 2003 году утверждена как стандарт ISO/IEC. Хотя CLI тесно связана с .NET, сама спецификация является открытой и не зависит от конкретной реализации, что позволяет создавать сторонние реализации, такие как Mono и .NET Core.

Основные компоненты CLI

CLI описывает несколько ключевых компонентов, которые вместе образуют исполняющую среду:

  • Common Type System (CTS) — система общих типов, определяющая единый набор типов данных (числа, строки, классы, интерфейсы, делегаты и т.д.), которые поддерживаются всеми языками, совместимыми с CLI. CTS гарантирует, что типы, объявленные в одном языке, могут быть корректно использованы в другом.
  • Common Language Specification (CLS) — подмножество CTS, определяющее минимальный набор правил, которым должны следовать языковые компиляторы для обеспечения полной совместимости между языками. CLS позволяет использовать библиотеки, написанные на одном языке, в коде на другом языке без дополнительных преобразований.
  • Virtual Execution System (VES) — виртуальная исполняющая система, которая отвечает за загрузку и выполнение промежуточного кода (CIL), управление памятью, обработку исключений и безопасность. VES является аналогом виртуальной машины, но работает на уровне промежуточного представления.
  • Common Intermediate Language (CIL) — низкоуровневый промежуточный язык, на который компилируется исходный код. CIL не зависит от аппаратной платформы и операционной системы; он преобразуется в машинный код непосредственно перед выполнением (JIT-компиляция) или заранее (AOT-компиляция).
  • Metadata — метаданные, описывающие структуру и атрибуты типов, методов, свойств и событий. Метаданные хранятся вместе с кодом CIL в переносимых исполняемых файлах (PE-файлах) и позволяют среде выполнения корректно загружать и связывать компоненты.

Архитектура и принцип работы

Программа в среде CLI проходит несколько этапов. Исходный код на любом поддерживаемом языке компилируется в сборку (assembly), которая содержит код CIL, метаданные и манифест. Сборка является основной единицей развертывания и может быть либо исполняемым файлом, либо библиотекой.

При запуске приложения VES загружает сборку, читает метаданные и по мере необходимости компилирует CIL-код в машинный код с помощью JIT-компилятора. Среда выполнения обеспечивает автоматическое управление памятью (сборку мусора), контроль безопасности доступа к ресурсам и обработку исключений. Благодаря этому разработчику не требуется вручную управлять памятью или проверять границы массивов.

Одним из ключевых преимуществ CLI является межъязыковая совместимость. Поскольку все языки компилируются в единый CIL и используют общую CTS, объекты, созданные в одном языке, могут наследоваться, переопределяться и использоваться в другом языке без ограничений. Например, класс, написанный на C#, может быть унаследован в F# или использован в Visual Basic .NET.

Реализации CLI

Существует несколько реализаций спецификации CLI:

  • .NET Framework — оригинальная реализация Microsoft для Windows (разработка прекращена, заменена .NET Core).
  • .NET Core / .NET 5+ — кроссплатформенная реализация Microsoft, поддерживающая Windows, Linux и macOS. Является преемником .NET Framework и развивается как единая платформа.
  • Mono — кроссплатформенная реализация с открытым исходным кодом, первоначально разработанная для Linux, но поддерживающая и другие платформы. Используется в Xamarin для мобильной разработки.
  • DotGNU — прекращенный проект с открытым исходным кодом, частично реализовавший CLI.

Применение

CLI лежит в основе экосистемы .NET, которая используется для разработки широкого спектра приложений: от веб-сервисов и десктопных программ до мобильных приложений и игр. Благодаря стандартизации CLI, код, написанный под .NET, может быть перенесен между реализациями с минимальными изменениями, что делает платформу привлекательной для корпоративной разработки. Также CLI используется в образовательных целях для изучения принципов виртуальных машин и промежуточного кода.

Критика и ограничения

Критики CLI отмечают относительно высокое потребление памяти и накладные расходы на JIT-компиляцию по сравнению с нативной компиляцией. Также указывается на сложность спецификации и её зависимость от решений Microsoft, несмотря на формальную открытость. Однако развитие .NET Core и AOT-компиляции (например, NativeAOT) постепенно снижает значимость этих замечаний.

Источники

  • ECMA-335: Common Language Infrastructure (CLI).
  • ISO/IEC 23271: Information technology — Common Language Infrastructure.
  • Microsoft .NET documentation: Common Language Infrastructure overview.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →