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 →


