Obsah
CLR (Common Language Runtime)
CLR (Common Language Runtime) je běhové prostředí a virtuální stroj, který tvoří základ .NET Frameworku. Jedná se o klíčovou komponentu, která zajišťuje provádění kódu napsaného v libovolném .NET jazyce.
Základní funkce
CLR je zodpovědný za několik zásadních funkcí během běhu aplikace:
- Správa paměti – automatické přidělování a uvolňování paměti prostřednictvím Garbage Collectoru
- Kompilace kódu – převod MSIL (Microsoft Intermediate Language) na nativní strojový kód pomocí JIT kompilátoru
- Správa vláken – řízení multithreadingu a synchronizace
- Zabezpečení – kontrola oprávnění a bezpečnostní politiky (Code Access Security)
- Zpracování výjimek – jednotný systém pro ošetření chyb napříč různými jazyky
- Type safety – kontrola typové bezpečnosti kódu
Jak CLR funguje
Proces provádění .NET aplikace probíhá v těchto krocích:
- Zdrojový kód v C#, VB.NET nebo jiném jazyce se zkompiluje do MSIL (Intermediate Language)
- MSIL je uložen v assemblies (soubory .exe nebo .dll) spolu s metadaty
- Při spuštění aplikace CLR načte assembly
- JIT kompilátor (Just-In-Time) převádí MSIL na nativní strojový kód pro konkrétní procesor
- Nativní kód je vykonán procesorem
Garbage Collection
Jednou z nejvýznamnějších funkcí CLR je automatická správa paměti:
- Vývojář nemusí ručně uvolňovat paměť (jako v C/C++)
- Garbage Collector automaticky detekuje a odstraňuje nepoužívané objekty
- Používá generační přístup (Generation 0, 1, 2) pro optimalizaci výkonu
- Zabraňuje běžným chybám jako memory leaks nebo dangling pointers
JIT kompilátor
Just-In-Time (JIT) kompilátor převádí MSIL na nativní kód:
- Normal JIT – kompiluje metody při prvním zavolání
- Econo JIT – rychlejší kompilace s menší optimalizací
- Pre-JIT – kompilace celého assembly při instalaci (ngen.exe)
Kompilovaný kód je uložen v cache, taktakže každá metoda se kompiluje pouze jednou během běhu aplikace.
Výhody CLR
Použití CLR přináší několik významných výhod:
- Přenositelnost – stejný MSIL kód běží na různých architekturách
- Jazyková interoperabilita – různé .NET jazyky mohou snadno spolupracovat
- Bezpečnost – kontrola kódu před spuštěním, izolace aplikací
- Výkon – JIT optimalizace pro konkrétní hardware
- Spolehlivost – automatická správa paměti snižuje počet chyb
CTS a CLS
CLR definuje dva důležité standardy:
- CTS (Common Type System) – jednotný typový systém pro všechny .NET jazyky, definuje jak se typy chovají a jak spolu komunikují
- CLS (Common Language Specification) – pravidla, která musí jazyky dodržovat pro zajištění interoperability
Managed vs Unmanaged Code
- Managed Code – kód spuštěný pod kontrolou CLR, má přístup ke všem službám CLR
- Unmanaged Code – kód běžící mimo CLR (např. COM komponenty, nativní DLL), nemá automatickou správu paměti
CLR umožňuje interoperabilitu mezi managed a unmanaged kódem pomocí:
- P/Invoke – volání nativních Windows API
- COM Interop – práce s COM komponentami
Assemblies
CLR pracuje s jednotkami nazývanými assemblies:
- Základní stavební bloky .NET aplikací
- Obsahují MSIL kód a metadata
- Mohou být soubory .exe nebo .dll
- Private assemblies – dostupné pouze pro jednu aplikaci
- Shared assemblies – sdílené mezi aplikacemi v GAC (Global Assembly Cache)
Application Domains
CLR podporuje izolaci aplikací pomocí Application Domains (AppDomains):
- Lehčí než procesy operačního systému
- Umožňují běh více aplikací v jednom procesu
- Poskytují izolaci a bezpečnostní hranice
- Aplikace lze načítat a uvolňovat bez ukončení procesu
Verze CLR
CLR měl několik hlavních verzí odpovídajících verzím .NET Frameworku:
| Verze CLR | Verze .NET Framework |
|---|---|
| CLR 1.0 | .NET Framework 1.0 |
| CLR 1.1 | .NET Framework 1.1 |
| CLR 2.0 | .NET Framework 2.0, 3.0, 3.5 |
| CLR 4 | .NET Framework 4.x |
CoreCLR
Pro .NET Core byl vyvinut CoreCLR – open-source verze CLR:
- Multiplatformní (Windows, Linux, macOS)
- Modulárnější a lehčí
- Optimalizovaný pro cloud a kontejnery
- Aktivně vyvíjen na GitHubu
Příklad
// Jednoduchý C# program using System; class Program { static void Main() { Console.WriteLine("Hello from CLR!"); } }
Tento kód:
- Se zkompiluje do MSIL
- CLR ho načte při spuštění
- JIT kompilátor ho převede na nativní kód
- CLR zajistí garbage collection pro objekty
- CLR zpracuje případné výjimky
Související pojmy
- .NET Framework – celková platforma
- MSIL – Microsoft Intermediate Language
- JIT – Just-In-Time kompilátor
- Garbage Collection – automatická správa paměti
- GAC – Global Assembly Cache
- CSharp – programovací jazyk C#
- .NET Core – multiplatformní verze
