Uživatelské nástroje

Nástroje pro tento web


clr

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:

  1. Zdrojový kód v C#, VB.NET nebo jiném jazyce se zkompiluje do MSIL (Intermediate Language)
  2. MSIL je uložen v assemblies (soubory .exe nebo .dll) spolu s metadaty
  3. Při spuštění aplikace CLR načte assembly
  4. JIT kompilátor (Just-In-Time) převádí MSIL na nativní strojový kód pro konkrétní procesor
  5. 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ýkonJIT 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:

  1. Se zkompiluje do MSIL
  2. CLR ho načte při spuštění
  3. JIT kompilátor ho převede na nativní kód
  4. CLR zajistí garbage collection pro objekty
  5. CLR zpracuje případné výjimky

Související pojmy

Externí odkazy

clr.txt · Poslední úprava: autor: admin