Co je "spravovaný kód"?
Při práci s .NET se často setkáte s termínem "spravovaný kód". Tento článek vysvětluje, co spravovaný kód znamená, a poskytuje další informace o něm.
Jednoduše řečeno, spravovaný kód je jen takový: kód, jehož spuštění je spravováno modulem runtime. V tomto případě se nazývá Common Language Runtime nebo CLR, bez ohledu na implementaci (například Mono.NET Framework nebo .NET Core/.NET 5+). CLR je zodpovědný za převzetí spravovaného kódu, jeho kompilaci do strojového kódu a jeho následného spuštění. Modul runtime navíc poskytuje několik důležitých služeb, jako je automatická správa paměti, hranice zabezpečení a bezpečnost typů.
Naproti tomu, jak byste spustili program C/C++, označovaný také jako "nespravovaný kód". V nespravovaném světě je programátor zodpovědný za skoro všechno. Skutečný program je v podstatě binární soubor, který operační systém (OS) načte do paměti a spustí se. Všechno ostatní, od správy paměti až po aspekty zabezpečení, jsou zátěží programátora.
Spravovaný kód je napsaný v jednom z jazyků vysoké úrovně, které je možné spouštět nad rozhraním .NET, jako je C#, Visual Basic, F# a další. Když zkompilujete kód napsaný v těchto jazycích pomocí příslušného kompilátoru, nebudete mít strojový kód. Získáte zprostředkující jazyk kód, který modul runtime pak zkompiluje a spustí. C++ je jedinou výjimkou tohoto pravidla, protože může také vytvářet nativní nespravované binární soubory, které běží ve Windows.
Provádění mezijazyka &
Co je "Mezijazyk" (neboli IL)? Je to součin kompilace kódu napsaného v jazycích .NET vysoké úrovně. Jakmile kód zkompilujete v jednom z těchto jazyků, získáte binární soubor, který se skládá z IL. Je důležité si uvědomit, že IL je nezávislý na jakémkoli konkrétním jazyce, který běží nad modulem runtime; existuje dokonce samostatná specifikace, kterou si můžete přečíst, pokud jste tak naklonění.
Jakmile vytvoříte IL z vašeho kódu vysoké úrovně, pravděpodobně ho budete chtít spustit. Tady modul CLR převezme a spustí proces kompilace just-in-time kompilace nebo JIT-ing kódu z IL na strojový kód, který se dá spustit na procesoru. CLR přesně ví, co váš kód dělá, a tak jej dokáže efektivně spravovat.
Zprostředkující jazyk se někdy označuje také jako běžný zprostředkující jazyk (CIL).
Interoperabilita nespravovaného kódu
CLR samozřejmě umožňuje předávání hranic mezi spravovaným a nespravovaným světem a existuje mnoho kódu, který to dělá, i v knihovny tříd .NET. To se označuje jako interoperabilita, nebo zkráceně interop. Tato ustanovení vám například umožní zabalit nespravovanou knihovnu a k ní přistupovat. Je však důležité si uvědomit, že jakmile tento kód překročí hranice modulu runtime, skutečná správa provádění je opět v ruce nespravovaného kódu, a proto spadá pod stejná omezení.
Podobně jako C# je jeden z jazyků, který umožňuje používat nespravované konstrukce, jako jsou ukazatele, které lze používat přímo v kódu, využitím tzv. nebezpečného kontextu, který označuje část kódu, pro kterou CLR neřídí provádění.