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

Externí odkazy

Microsoft dokumentace ke CLR

CoreCLR na GitHubu