.NET CLR je runtime prostredie, ktoré spravuje a spúšťa kód napísaný v akomkoľvek programovacom jazyku .NET. CLR je komponent virtuálneho stroja .NET frameworku. Kompilátor tohto jazyka skompiluje zdrojový kód aplikácií vyvinutých pomocou jazykov kompatibilných s .NET do stredného jazyka CLR nazývaného MSIL, t. j. kód prechodného jazyka Microsoft. Tento kód je nezávislý od platformy. Je porovnateľný s bajtovým kódom v jazyku Java. Metadáta sa tiež generujú počas kompilácie a kódu MSIL a ukladajú sa do súboru známeho ako súbor Manifest. Tieto metadáta sú vo všeobecnosti o členoch a typoch požadovaných CLR na spustenie kódu MSIL. Komponent kompilátora just-in-time CLR konvertuje kód MSIL na natívny kód stroja. Tento kód závisí od platformy. CLR spravuje pamäť, vlákna, výnimky, vykonávanie kódu, bezpečnosť kódu, overovanie a kompiláciu.
java kódovanie if else príkaz
Nasledujúci obrázok znázorňuje konverziu zdrojového kódu do natívneho kódu.
Vyššie uvedený obrázok konvertuje kód na natívny kód, ktorý môže CPU spustiť.
Hlavné zložky CLR sú:
- Systém bežného typu
- Bežná jazyková špecifikácia
- Smetiar
- Just in Time Compiler
- Metadáta a zostavy
1. Systém bežného typu:
CTS poskytuje pokyny na deklarovanie, používanie a správu typov údajov za behu. Ponúka medzijazyčnú komunikáciu. Napríklad VB.NET má typ údajov celé číslo a C# má typ údajov int na správu celých čísel. Po kompilácii Int32 používajú oba typy údajov. CTS teda poskytuje typy údajov pomocou riadeného kódu. Bežný typový systém pomáha pri písaní jazykovo nezávislého kódu.
Poskytuje dve kategórie typov.
2. Špecifikácia spoločného jazyka (CLS):
Spoločná špecifikácia jazyka (CLS) obsahuje súbor pravidiel, ktoré musia dodržiavať všetky jazyky podporované sieťou NET. Spoločné pravidlá uľahčujú implementáciu jazykovej integrácie a pomáhajú pri dedení medzi jazykmi a ladení. Každý jazyk podporovaný NET Framework má svoje vlastné pravidlá syntaxe. CLS však zaisťuje interoperabilitu medzi aplikáciami vyvinutými pomocou jazykov NET.
3. Odvoz odpadu:
Garbage Collector je komponent CLR, ktorý funguje ako automatický správca pamäte. Pomáha spravovať pamäť automatickým prideľovaním pamäte podľa požiadavky. Objektom prideľuje pamäť haldy. Keď sa objekty nepoužívajú, získa späť pridelenú pamäť pre budúce použitie. Zabezpečuje tiež bezpečnosť objektov tým, že neumožňuje jednému objektu používať obsah iného objektu.
4. Prekladač Just in Time (JIT):
JIT Compiler je dôležitou súčasťou CLR. Konvertuje kód MSIL na natívny kód (t. j. kód špecifický pre stroj). Program .NET je zostavený buď explicitne alebo implicitne. Vývojár alebo programátor zavolá konkrétny kompilátor na kompiláciu programu v explicitnej kompilácii. Pri implicitnej kompilácii sa program skompiluje dvakrát. Zdrojový kód je skompilovaný do Microsoft Intermediate Language (MSIL) počas prvého kompilačného procesu. Kód MSIL sa prevedie na natívny kód v druhom procese kompilácie. Tento proces sa nazýva kompilácia JIT. Existujú tri typy kompilátorov JIT – Pre, Econo a Normal. Pre JIT Compiler skompiluje celý MSIL kód do natívneho kódu pred spustením. Econo JIT Compiler kompiluje iba tie časti kódu MSIL, ktoré sú potrebné počas vykonávania, a odstraňuje tie časti, ktoré už nie sú potrebné. Normálny kompilátor JIT tiež kompiluje iba tie časti kódu MSIL, ktoré sú potrebné počas vykonávania, ale umiestňuje ich do vyrovnávacej pamäte pre budúce použitie. Nevyžaduje rekompiláciu už použitých častí, pretože boli umiestnené do vyrovnávacej pamäte.
5. Metadáta:
Metadáta sú binárne informácie o programe, uložené buď v CLR Portable Executable súbore (PE) spolu s MSIL kódom alebo v pamäti. Počas vykonávania MSIL sa do pamäte načítajú aj metadáta na správnu interpretáciu tried a súvisiacich tried. Informácie použité v kóde. Metadáta teda pomáhajú implementovať kód jazykovo neutrálnym spôsobom alebo dosiahnuť jazykovú interoperabilitu.
6. Zostavy:
Zostava je základnou jednotkou fyzického zoskupenia kódu. Pozostáva z manifestu zostavy, metadát, kódu MSIL a súboru zdrojov, ako sú súbory obrázkov. Považuje sa tiež za základnú jednotku nasadenia, kontrolu verzií, opätovné použitie, bezpečnostné povolenia atď.
Funkcie .NET CLR
Nasledujú funkcie CLR.
- Konvertuje program na natívny kód.
- Rieši výnimky
- Poskytuje typovú bezpečnosť
- Správa pamäte
- Poskytuje bezpečnosť
- Vylepšený výkon
- Nezávislý na jazyku
- Nezávislé na platforme
- Odvoz odpadu
- Poskytuje jazykové funkcie, ako je dedičnosť, rozhrania a preťaženie objektovo orientovaných programov.
Kód, ktorý beží s CLR, sa nazýva riadený kód, zatiaľ čo kód mimo CLR sa nazýva nespravovaný kód. CLR tiež poskytuje vrstvu interoperability, ktorá umožňuje interoperabilitu spravovaného aj nespravovaného kódu.
1. Spravovaný kód:
Každý jazyk, ktorý je napísaný v rámci .NET, je riadený kód. Spravovaný kód používa CLR, ktorý sa stará o vaše aplikácie tým, že spravuje pamäť, zabezpečuje bezpečnosť, umožňuje ladenie medzi jazykmi atď. Proces spravovaného kódu je znázornený na obrázku:
2. Nespravovaný kód:
Kód vyvinutý mimo rámca .NET je známy ako nespravovaný kód. Aplikácie, ktoré nebežia pod kontrolou CLR, sú vraj nespravované. Určité jazyky, ako napríklad C++, možno použiť na písanie takýchto aplikácií, ako sú nízkoúrovňové prístupové funkcie operačného systému. Kompatibilita na pozadí s VB, ASP a COM sú príklady nespravovaného kódu. Tento kód sa vykonáva pomocou obalových tried. Proces nespravovaného kódu je zobrazený nižšie:
Verzie .NET CLR
CLR sa z času na čas aktualizuje, aby poskytoval lepší výkon.
.NET verzia | verzia CLR |
---|---|
1,0 | 1,0 |
1.1 | 1.1 |
2.0 | 2.0 |
3.0 | 2.0 |
3.5 | 2.0 |
4 | 4 |
4.5 | 4 |
4.6 | 4 |
4.6 | 4 |
Štruktúra .NET CLR
Nasleduje štruktúra komponentov Common Language Runtime.
Podpora knižnice základných tried
Je to knižnica tried, ktorá podporuje triedy pre aplikáciu .NET.
Podpora vlákien
Riadi paralelné vykonávanie viacvláknovej aplikácie.
COM Marshaler
Poskytuje komunikáciu medzi objektmi COM a aplikáciou.
Bezpečnostný motor
Vynucuje bezpečnostné obmedzenia.
Debug Engine
Umožňuje vám ladiť rôzne druhy aplikácií.
Kontrola typu
Kontroluje typy použité v aplikácii a overuje, či zodpovedajú štandardom poskytnutým CLR.
Správca kódu
Spravuje kód pri spustení.
Smetiar
Uvoľní nevyužitú pamäť a pridelí ju novej aplikácii.
Obsluha výnimiek
Spracúva výnimku za behu, aby sa zabránilo zlyhaniu aplikácie.
ClassLoader
Používa sa na načítanie všetkých tried za behu.