Az IL programozási nyelv

Nyelvi elemek

Az IL lexikális elemei

Az IL-ben a programok karakterkészlete a Unicode A megjegyzések írásához a megszokott // használható. Az azonosítókat a Unicode szabvány szerinti bármilyen karaktersorozat megtestesítheti, tehát a @test?_X is lehet egy normál változónév. (Ezt a lehetőséget a C# compiler-e erősen ki is használja pl. az ún. "display" osztályok és "backing field"-ek fordításakor.) Lefoglalt kulcsszavakat idézőjelek között lehet változónévnek használni. A nyelv megkülönbözteti a kis- és nagybetűket.
Numerikus literál lehet decimális vagy lebegőpontos esetén normált alakú.

Alapkoncepció

A nyelv egyszerre tartja meg az OOP előnyét és adja a (relative) gyors futtathatóságot. Programozás szempontjából az assembly nyelvre emlékeztet. Így néz ki a Hello World program:

.assembly extern mscorlib {} .assembly hello {} .method static public void main() cil managed { .entryoint .maxstack 1 .ldstr "Hello World!" .call void [mscorlib]System.Console::WriteLine(Class System.String) .ret }

A fenti példából látható, hogy itt is ponttal kezdődnek a direktívák, hasonló utasításokat használ, mint az assembly nyelv (ldstr egy srtinget rak a stackbe), de megmarad az OO környezet, az osztályok és annak metódusainak, addattagjainak az elérése a teljes (névtérnévvel minősített) nevük alapján történik.

A felosztás: legnagyobb egység az assembly. Ez egy unitnak felel meg, több névtér osztályait, moduljait is magában foglalhatja. Az első futáskor előálló bájtkód bekerül a .NET assembly cache rendszerébe, és módosításig onnan fut (ez egy gyorsítása a rendszernek). A modul az egy fájlnak megfelelő egység. Fontos különbség, hogy míg magasabb szinten a namespace változhat (relatív lehet), addig ezen a szinten már mindig teljes elérési nevet kell használni. Minden assembly-t aláírhat a fejlesztője, amivel kivédhető annak illektéktelen kicserélése ún. spoofing támadás esetén. Az assembly-ben további metainformációként szerepelhet annak verziója, készítőjének neve, rövid leírása is. A rendszerben ugyanannak az assemblynek több verziója is élhet egyszerre, a verziószám alapján tudja megkülönböztetni őket, és hivatkozáskor a megfelelőt betölteni és futtatni az alkalmazáshoz.

A nyelvet első ránézésre úgy lehet elképzelni, mint egy olyan assembly nyelvet, amiből kivették az adatmozgató utasításokat, és minden direkt memóriaműveletet (vagy regiszterkezelést). Helyette gazdag stackkezelő, metódushívó utasításkészlet került bele kiegészítve típusossággal, kivételkezeléssel. Az elsődleges adatterület a stack, sok utasítás közvetlenül ebbe dolgozik, vagy innen dolgozik. A heap eléréséhez szintén közvetlen utasítások vannak, amik objektumreferenciákat kezelnek. Ezekre az objektumreferenciákra nincsenek értelmezve a C++-ban megszokott aritmetikai pointerműveletek.