Common Language Infrastructure

A Common Language Infrastructure (CLI)  a .NET Keretrendszer a különböző programozási nyelven írt programok futtatására szolgáló alrendszere. A megjelenése előtt minden nyelvnek saját futtató modulja volt, hogy a lefordított alkalmazás működhessen – a Visual Basic-nek a VBVM-re, a Visual C++ .NET megjelenése előtti Visual C++ verzióknak az MSVCRT DLL-re. A common language infrastructure egy próbálkozás ezen futtató modulok egyesítésére. Kezdeményezője a Microsoft, azóta már az ISO és az  ECMA szabályozza.

A CLI egy osztálykönyvtárat és virtuális gépet használ – a Common Language Runtime-ot (CLR). Sok fordító már képes kódot előállítani erre a virtuális gépre. Az előállított kódot Common Intermediate Language-nek (CIL) (korábban MSIL) nevezik. Ez egy CPU-független utasításkészlettel rendelkező nyelv, ami hatékonyan fordítható natív kóddá. A CIL egy magas szintű objektumorientált, verem-alapú assembly nyelvként képzelhető el.

A CIL a Java bájtkód versenytársának, a CLI/CLR pedig a Java Runtime Environment (JRE) versenytársának tekinthető. A .NET Framework, Mono, DotGNU és Portable.NET a CIL implementációja.

Áttekintés

Többek között a CLI specifikáció a következő négy aspektust írja elő:

A Common Type System (CTS) (közös típusrendszer)
Adattípusok és műveleteik készlete, amelyen minden CTS fordítású programozási nyelvnek osztoznia kell.
A Metadata (metaadatok)
Nyelvfüggetlen információk a program szerkezetéről, emiatt nyelvek és eszközök számára átjárható. Segíti az együttműködést egy általunk nem ismert nyelven írt programmal.
A Common Language Specification (CLS) (közös nyelvi specifikáció)
Alapszabályok halmaza, amelyeknek minden CLI-t célzó nyelvnek meg kell felelnie, hogy együtt működhessen  más CLS-vel fordított nyelvekkel. A CLS szabályok magukban foglalják a Common Type System egy részét.
A Virtual Execution System (VES) (virtuális végrehajtórendszer)
A VES betölti és végrehajtja a CLI-kompatibilis programot, futásidőben kombinálja a kód különböző részeit a metaadatok alapján.

A kompatibilis nyelvek a Common Intermediate Language (CIL)-re fordulnak, ami egy platformfüggetlen köztes nyelv.A kód végrehajtása közben a platform-specifikus VES a CIL-t gépi nyelvre fordítja, alkalmazkodva a hardverhez és az operációs rendszerhez.

Szabvány és licenc
2000 augusztusában több cég, köztük a Microsoft, a  Hewlett-Packard és az Intel megkezdték a CLI szabványosítását. Ezt az  ECMA is elfogadta, amit az ISO szabvány követett 2003-ban.

A  Microsoft és partnerei szabadalmat nyújtottak be a CLI-re. Az  ECMA és az ISO megköveteli, hogy az implementáció számára fontos szabadalmak megfeleljenek az észszerű és nem diszkriminatív (RAND) feltételeinek. Ez megengedi, hogy a használatért a tulajdonos díjat igényeljen, ami aggodalmat kelthet az ingyenes implementációk számára, mint a Mono. Azonban sem a 2013, sem partnerei nem nyújtottak be ezzel kapcsolatos szabadalmat.
 
2009 júliusában a Microsoft hozzáadta a C#-ot a Microsoft Community Promise specifikációinak listájához.  Így senkinek sem kell félnie attól, hogy a szabvány különböző verzióinak implementálásáért majd a Microsoft beperli. A CLI szabvány implementálásához meg kell felelni a szabvány által meghatározott és támogatott valamelyik profilnak, aminek minimuma a kernel profil. Ez egy nagyon kis része a .NET  telepítések alapértelmezett core könyvtárának. A CLI megfelelési záradéka megengedi a támogatott profil bővítését új metódusokkal és típusokkal, továbbá új névterek bevezetését. Viszont nem engedi meg az interfészek bővítését új tagokkal. Ez azt jelenti, hogy a CLI eszközei használhatók és bővíthetők, amíg az implementáció nem változtatja meg a futtatandó programok viselkedését; miközben megengedi, hogy egy speciálisan az adott implementációra írt program nem specifikált módon működjön.

2012-ben az ECMA és az ISO olyan elemekkel bővítette a szabványt, amelyek nem részei a  Community Promise-nak.

Implementációk
.NET Framework a Microsoft eredeti kereskedelmi implementációja. Virtuális végrehajtó rendszere a Common Language Runtime és a Standard Libraries megvalósítója a Framework Class Library.
.NET Compact Framework a Microsoft kereskedelmi implementációja hordozható eszközökre és Xbox 360-ra.
.NET Micro Framework nyílt forrású implementáció korlátozott erőforrású eszközökre.
Shared Source Common Language Infrastructure egy referencia implementáció a Microsofttól, a Shared Source licensszel.
.NET Core hordozható és modulmentes implementáció a Microsofttól. A .NET Foundation .NET Frameworkje a MIT license-et használja.
Mono a CLI és társult technológiáinak nyílt kódú implementációja, a Xamarin pénzügyi támogatásával.
Portable.NET, a dotGNU projekt része, az ECMA-335 szabad implementációja a Free Software Foundationtől.

Jegyzetek

Fordítás

Számítógép-programozás