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:
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í:
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
-
Příklad
// Jednoduchý C# program
using System;
class Program
{
static void Main()
{
Console.WriteLine("Hello from CLR!");
}
}
Tento kód:
-
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
-
MSIL – Microsoft Intermediate Language
JIT – Just-In-Time kompilátor
-
GAC – Global Assembly Cache
CSharp – programovací jazyk C#
-
Externí odkazy