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 modul runtime, který se týká, 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 kód zprostředkujícího jazyka , který modul runtime následně 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.

Zprostředkující jazyk a spouštění

Co je "Zprostředkující jazyk" (nebo il zkratka)? 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 kód vysoké úrovně, pravděpodobně ho budete chtít spustit. Tady clr převezme a spustí proces kompilace just-in-time nebo JIT-ing kódu z IL na strojový kód, který se dá spustit na procesoru. ClR tímto způsobem přesně ví, co váš kód dělá, a dokáže ho efektivně spravovat .

Zprostředkující jazyk se někdy označuje také jako Common Intermediate Language (CIL) nebo 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 knihovnách tříd .NET. Tato funkce se označuje jako interoperabilita nebo interoperabilita pro krátkou dobu. Tato ustanovení vám například umožní zabalit nespravovanou knihovnu a zavolat do ní. 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 jazyk C# je jeden jazyk, který umožňuje používat nespravované konstrukce, jako jsou ukazatele přímo v kódu pomocí toho, co se označuje jako nebezpečný kontext, který označuje část kódu, pro kterou clR nespravuje provádění.

Další materiály