Common Language Infrastructure

Ez a közzétett változat, ellenőrizve: 2023. december 24.

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[1] és az ECMA[2] 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

szerkesztés
 
A Common Language Infrastructure (CLI) áttekintése

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

szerkesztés

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[3] a Microsoft hozzáadta a C#-ot a Microsoft Community Promise specifikációinak listájához.[4] Í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,[1][2] amelyek nem részei a Community Promise-nak.[4]

Implementációk

szerkesztés

Fordítás

szerkesztés

Ez a szócikk részben vagy egészben a Common Language Infrastructure című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.