logo

.NET Common Language Runtime (CLR)

.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.

Net Common Language Runtime

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
Net Common Language Runtime

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.

    Typ hodnoty:Typ hodnoty ukladá údaje do pamäte alokovanej v zásobníku alebo inline v štruktúre. Táto kategória typu obsahuje dátový adresár. Ak sa hodnota jednej premennej skopíruje do druhej, obe premenné ukladajú údaje nezávisle. Môže ísť o vstavané typy, typy definované používateľom alebo typy enumerácií. Vstavané typy sú primitívne dátové typy, ako sú numerické, boolovské, char a dátumy. Používatelia v zdrojovom kóde vytvárajú používateľom definované typy. Enumerácia sa týka množiny vymenovaných hodnôt reprezentovaných menovkami, ale uložených ako číselný typ.
    Net Common Language Runtime Typ referencie:Typ Reference ukladá referenciu na hodnotu adresy pamäte a je alokovaný na halde. Pamäť haldy sa používa na dynamické prideľovanie pamäte. Referenčný typ neobsahuje priamo skutočné údaje, ale adresu údajov. Kedykoľvek sa vytvorí objekt typu odkaz, skopíruje adresu a nie skutočné údaje. Preto sa dve premenné budú vzťahovať na rovnaké údaje. Ak sa zmenia údaje jedného objektu referenčného typu, to isté sa prejaví aj v druhom objekte. Referenčné typy môžu byť samoopisné typy, typy ukazovateľov alebo typy interferencií. Samopopisujúce typy môžu byť reťazce, polia a typy tried, ktoré o sebe ukladajú metadáta.

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:

Net Common Language Runtime

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:

Net Common Language Runtime

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.

Net 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.