logo

.NET Common Language Runtime (CLR)

.NET CLR je runtime prostředí, které spravuje a spouští kód napsaný v libovolném programovacím jazyce .NET. CLR je součást virtuálního stroje .NET frameworku. Kompilátor tohoto jazyka zkompiluje zdrojový kód aplikací vyvinutých pomocí jazyků kompatibilních s .NET do zprostředkujícího jazyka CLR zvaného MSIL, tj. kódu zprostředkujícího jazyka Microsoft. Tento kód je nezávislý na platformě. Je srovnatelný s byte kódem v Javě. Metadata se také generují během kompilace a kódu MSIL a ukládají se do souboru známého jako soubor Manifest. Tato metadata se obecně týkají členů a typů požadovaných CLR ke spuštění kódu MSIL. Komponenta kompilátoru just-in-time CLR převádí kód MSIL na nativní kód stroje. Tento kód je závislý na platformě. CLR spravuje paměť, vlákna, výjimky, provádění kódu, bezpečnost kódu, ověřování a kompilaci.

html tagy

Následující obrázek ukazuje převod zdrojového kódu do nativního kódu.

Net Common Language Runtime

Výše uvedený obrázek převádí kód na nativní kód, který může CPU spustit.

Hlavní součásti CLR jsou:

  • Systém běžného typu
  • Společná jazyková speciace
  • Popelář
  • Just in Time Compiler
  • Metadata a sestavení
Net Common Language Runtime

1. Běžný typový systém:

CTS poskytuje pokyny pro deklarování, používání a správu datových typů za běhu. Nabízí mezijazyčnou komunikaci. Například VB.NET má datový typ integer a C# má datový typ int pro správu celých čísel. Po kompilaci je Int32 používán oběma datovými typy. CTS tedy poskytuje datové typy pomocí spravovaného kódu. Běžný typový systém pomáhá při psaní jazykově nezávislého kódu.

Poskytuje dvě kategorie typů.

    Typ hodnoty:Typ hodnoty ukládá data do paměti alokované na zásobníku nebo inline ve struktuře. Tato kategorie typu obsahuje datový adresář. Pokud je hodnota jedné proměnné zkopírována do druhé, obě proměnné ukládají data nezávisle. Může jít o vestavěné typy, uživatelem definované typy nebo typy výčtů. Vestavěné typy jsou primitivní datové typy, jako je numerický, booleovský, char a datum. Uživatelé ve zdrojovém kódu vytvářejí uživatelem definované typy. Výčet odkazuje na sadu výčtových hodnot reprezentovaných štítky, ale uložených jako číselný typ.
    Net Common Language Runtime Typ reference:Typ Reference ukládá odkaz na hodnotu adresy paměti a je alokován na haldě. Paměť haldy se používá pro dynamické přidělování paměti. Reference Type neuchovává přímo skutečná data, ale uchovává adresu dat. Kdykoli je vytvořen objekt referenčního typu, zkopíruje adresu a ne skutečná data. Proto dvě proměnné budou odkazovat na stejná data. Pokud se změní data jednoho objektu typu reference, totéž se projeví i u druhého objektu. Referenční typy mohou být samopopisující typy, typy ukazatelů nebo typy interference. Samopopisující typy mohou být typy řetězců, polí a tříd, které o sobě ukládají metadata.

2. Společná jazyková specifikace (CLS):

Common Language Specification (CLS) obsahuje sadu pravidel, kterými se mají řídit všechny jazyky podporované sítí NET. Společná pravidla usnadňují implementaci jazykové integrace a pomáhají při dědění mezi jazyky a ladění. Každý jazyk podporovaný NET Framework má svá vlastní pravidla syntaxe. CLS však zajišťuje interoperabilitu mezi aplikacemi vyvinutými pomocí jazyků NET.

3. Odvoz odpadu:

Garbage Collector je součást CLR, která funguje jako automatický správce paměti. Pomáhá spravovat paměť automatickým přidělováním paměti podle požadavku. Objektům přiděluje paměť haldy. Když se objekty nepoužívají, získá zpět přidělenou paměť pro budoucí použití. Zajišťuje také bezpečnost objektů tím, že nedovoluje jednomu objektu používat obsah jiného objektu.

4. Just in Time (JIT) kompilátor:

JIT Compiler je důležitou součástí CLR. Převádí kód MSIL na nativní kód (tj. kód specifický pro stroj). Program .NET je kompilován buď explicitně, nebo implicitně. Vývojář nebo programátor zavolá konkrétní kompilátor, aby zkompiloval program v explicitní kompilaci. Při implicitní kompilaci je program kompilován dvakrát. Zdrojový kód je zkompilován do jazyka MSIL (Microsoft Intermediate Language) během prvního procesu kompilace. Kód MSIL je převeden na nativní kód ve druhém procesu kompilace. Tento proces se nazývá kompilace JIT. Existují tři typy kompilátorů JIT – Pre, Econo a Normal. Pre JIT Compiler zkompiluje celý MSIL kód do nativního kódu před spuštěním. Econo JIT Compiler kompiluje pouze ty části kódu MSIL, které jsou vyžadovány během provádění, a odstraňuje ty části, které již nejsou vyžadovány. Normální kompilátor JIT také kompiluje pouze ty části kódu MSIL, které jsou vyžadovány během provádění, ale ukládá je do mezipaměti pro budoucí použití. Nevyžaduje rekompilaci již použitých částí, protože byly umístěny do mezipaměti.

5. Metadata:

Metadata jsou binární informace o programu, uložené buď v CLR Portable Executable souboru (PE) spolu s MSIL kódem, nebo v paměti. Během provádění MSIL jsou také metadata načtena do paměti pro správnou interpretaci tříd a souvisejících. Informace použité v kódu. Metadata tedy pomáhají implementovat kód jazykově neutrálním způsobem nebo dosáhnout jazykové interoperability.

6. Sestavy:

Sestavení je základní jednotkou fyzického seskupování kódu. Skládá se z manifestu sestavení, metadat, kódu MSIL a sady prostředků, jako jsou soubory obrázků. Je také považován za základní jednotku nasazení, správu verzí, opětovné použití, bezpečnostní oprávnění atd.

Funkce .NET CLR

Následují funkce CLR.

  • Převádí program do nativního kódu.
  • Zvládá výjimky
  • Poskytuje typovou bezpečnost
  • Správa paměti
  • Poskytuje bezpečnost
  • Zlepšený výkon
  • Jazykově nezávislý
  • Nezávislé na platformě
  • Odvoz odpadků
  • Poskytuje jazykové funkce, jako je dědičnost, rozhraní a přetížení pro objektově orientované programy.

Kód, který běží s CLR, se nazývá spravovaný kód, zatímco kód mimo CLR se nazývá nespravovaný kód. CLR také poskytuje vrstvu interoperability, která umožňuje vzájemnou spolupráci spravovaných i nespravovaných kódů.

1. Spravovaný kód:

Jakýkoli jazyk, který je napsán v rámci .NET, je spravovaný kód. Spravovaný kód používá CLR, který se stará o vaše aplikace správou paměti, zabezpečením, umožněním ladění mezi jazyky atd. Proces spravovaného kódu je znázorněn na obrázku:

Net Common Language Runtime

2. Nespravovaný kód:

Kód vyvinutý mimo rámec .NET je známý jako nespravovaný kód. Aplikace, které neběží pod kontrolou CLR, jsou prý nespravované. Některé jazyky, jako je C++, lze použít k psaní takových aplikací, jako jsou nízkoúrovňové přístupové funkce operačního systému. Kompatibilita na pozadí s VB, ASP a COM jsou příklady nespravovaného kódu. Tento kód se spouští pomocí obalových tříd. Proces nespravovaného kódu je zobrazen níže:

Net Common Language Runtime

Verze .NET CLR

CLR se čas od času aktualizuje, aby poskytoval lepší výkon.

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

Struktura .NET CLR

Následuje struktura komponent Common Language Runtime.

Net Common Language Runtime

Podpora knihovny základních tříd

Je to knihovna tříd, která podporuje třídy pro aplikaci .NET.

Podpora vláken

Řídí paralelní provádění vícevláknové aplikace.

COM Marshaler

Poskytuje komunikaci mezi objekty COM a aplikací.

Bezpečnostní stroj

Vynucuje bezpečnostní omezení.

Debug Engine

Umožňuje ladit různé druhy aplikací.

Kontrola typu

Kontroluje typy použité v aplikaci a ověřuje, že odpovídají standardům poskytovaným CLR.

Správce kódu

Spravuje kód za běhu.

Popelář

Uvolní nevyužitou paměť a přidělí ji nové aplikaci.

Obsluha výjimek

Zpracovává výjimku za běhu, aby se zabránilo selhání aplikace.

ClassLoader

Používá se k načtení všech tříd za běhu.