.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.
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í
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ů.
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:
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:
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.
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.