Common Language Infrastructure
Common Language Infrastructure (CLI, «загальна мовна інфраструктура») — це відкрита специфікація та технічний стандарт, спочатку розроблені компанією Microsoft та стандартизовані ISO/IEC (ISO/IEC 23271) і Ecma International (ECMA 335)[1][2], яка описує виконуваний код і середовище виконання, що дозволяє використовувати кілька мов високого рівня на різних комп'ютерних платформах без переписування під конкретні архітектури. Це означає, що вона не залежить від платформи. .NET Framework, .NET і Mono є реалізаціями CLI.
Формат метаданих також використовується для визначення API-інтерфейсів, які надає Windows Runtime.[3][4]

Серед іншого, специфікація CLI описує такі п'ять аспектів:
- Загальна система типів (CTS)
- Набір типів даних та операцій, спільних для всіх мов програмування, сумісних із CTS.
- Метадані
- Інформація про структуру програми є незалежною від мови, тому на неї можна посилатися між мовами та інструментами, що спрощує роботу з кодом, написаним мовою, якою розробник не користується.
- Common Language Specification (CLS)
- CLS, підмножина CTS, являє собою правила, яких повинні дотримуватися компоненти, розроблені за допомогою підтримуваних мов або для них.
- Вони застосовуються до споживачів (розробників, які програмно звертаються до компонента, сумісного з CLS), розробників бібліотек (р��зробників, які використовують компілятор мови для створення бібліотек, сумісних із CLS) та розширювачів (розробників, які створюють такий інструмент, як компілятор мови або аналізатор коду, що створює компоненти, сумісні з CLS).
- Віртуальна система виконання (VES)
- VES завантажує та виконує програми, сумісні з CLI, використовуючи метадані для об'єднання окремо згенерованих частин коду під час виконання.
- Усі сумісні мови компілюються в Common Intermediate Language (CIL), тобто проміжне подання, абстраговане від апаратного забезпечення платформи. Під час виконання коду специфічна для платформи VES компілює CIL у машинний код відповідно до конкретного апаратного забезпечення та операційної системи.
- У стандарті CLI, спочатку розробленому Microsoft, VES реалізована за допомогою Common Language Runtime (CLR).
- Стандартні бібліотеки
- Набір бібліотек, що надають багато поширених функцій, таких як читання та запис файлів. Їхнім ядром є бібліотека базових класів (BCL).
У серпні 2000 року Microsoft, Hewlett-Packard, Intel та інші компанії працювали над стандартизацією CLI. У грудні 2001 року її було ратифіковано Ecma, а у квітні 2003 року відбулася стандартизація ISO/IEC.
Microsoft та її партнери володіють патентами на CLI. Ecma та ISO/IEC вимагають, щоб усі патенти, необхідні для реалізації, були доступні на «розумних і недискримінаційних (RAND) умовах». Для ліцензування на умовах RAND зазвичай потрібна певна виплата роялті, що може бути причиною занепокоєння щодо Mono. Станом на січень 2013, ані Microsoft, ані її партнери не визначили жодного патенту, необхідного для реалізацій CLI, на який поширювалися б умови RAND.[джерело?]
Станом на липень 2009,[5] Microsoft додала C# і CLI до переліку специфікацій, на які поширюється Microsoft Community Promise,[6] тому будь-хто може безпечно реалізовувати визначені редакції стандартів, не побоюючись патентного позову з боку Microsoft. Для реалізації стандарту CLI необхідно забезпечити відповідність одному з підтримуваних і визначених профілів стандарту, наймінімальнішим із яких є профіль ядра. Профіль ядра фактично являє собою дуже невеликий набір типів, підтримка яких необхідна, порівняно з добре відомою основною бібліотекою стандартних установок .NET. Однак умова відповідності CLI дозволяє розширювати підтримуваний профіль шляхом додавання нових методів і типів до класів, а також успадкування від нових просторів імен. Але вона не дозволяє додавати нові члени до інтерфейсів. Це означає, що можливості CLI можна використовувати та розширювати, доки реалізація профілю, що відповідає стандарту, не змінює поведінку програми, призначеної для виконання �� цьому профілі, водночас допускаючи невизначену стандартом поведінку програм, написаних спеціально для цієї реалізації.
У 2012 році Ecma та ISO/IEC опублікували нову редакцію стандарту CLI.[1][2]
- .NET Framework — початкова комерційна реалізація CLI від Microsoft. Вона підтримує лише Windows. У листопаді 2020 року її замінив .NET.
- .NET, раніше відомий як .NET Core, — безплатний та відкритий багатоплатформний наступник .NET Framework, випущений за ліцензією MIT.
- .NET Compact Framework — комерційна реалізація CLI від Microsoft для портативних пристроїв та Xbox 360.
- .NET Micro Framework — реалізація CLI з відкритим вихідним кодом для пристроїв з обмеженими ресурсами.
- Mono — альтернативна реалізація CLI та супутніх технологій з відкритим початковим кодом, яка переважно використовується для розробки мобільних застосунків та ігор.
- DotGNU — виведена з експлуатації частина проєкту GNU, започаткована в січні 2001 року, метою якої було створення вільної та відкритої програмної альтернативи .NET Framework від Microsoft.
- 1 2 ISO/IEC 23271:2012 - Information technology -- Common Language Infrastructure (CLI). ISO. Архів оригіналу за 2 липня 2023.
- 1 2 ECMA-335. ECMA International. Червень 2012. Архів оригіналу за 16 жовтня 2023.
- ↑ Introduction to Advanced Windows Store App Development using HTML5 and JavaScript. Microsoft Press Store. 15 жовтня 2013. Архів оригіналу за 30 березня 2023.
- ↑ de Icaza, Miguel (15 вересня 2011). WinRT demystified. Архів оригіналу за 30 листопада 2023.
- ↑ Galli, Peter (6 липня 2009). The Ecma C# and CLI Standards. Port 25. Архів оригіналу за 9 липня 2009. Процитовано 26 вересня 2009.
- ↑ v-alje (16 березня 2023). [MS-DEVCENTLP]: Microsoft Community Promise. Microsoft Learn (амер.). Процитовано 1 травня 2023.
- Standard ECMA-335, Common Language Infrastructure (CLI). Ecma International. Процитовано 1 листопада 2023.
- ISO/IEC 23271, Common Language Infrastructure. ISO/IEC. Процитовано 27 вересня 2006.
- Ecma C# and Common Language Infrastructure Standards. Microsoft Corporation. Процитовано 13 жовтня 2009.
- Language independence and language-independent components. Microsoft Learn. 21 грудня 2022. Процитовано 19 травня 2023.