Co to jest „kod zarządzany”?
Podczas pracy z platformą .NET często występuje termin "kod zarządzany". W tym artykule wyjaśniono, co oznacza kod zarządzany i zawiera dodatkowe informacje na jego temat.
Mówiąc po prostu, kod zarządzany jest tylko taki: kod, którego wykonanie jest zarządzane przez środowisko uruchomieniowe. W takim przypadku środowisko uruchomieniowe jest nazywane środowiskiem uruchomieniowym języka wspólnego lub CLR, niezależnie od implementacji (na przykład Mono, .NET Framework lub .NET Core/.NET 5+). ClR jest odpowiedzialny za pobranie kodu zarządzanego, skompilowanie go do kodu maszynowego, a następnie wykonanie go. Ponadto środowisko uruchomieniowe udostępnia kilka ważnych usług, takich jak automatyczne zarządzanie pamięcią, granice zabezpieczeń i bezpieczeństwo typów.
Porównaj to ze sposobem uruchamiania programu C/C++, nazywanego również "kodem niezarządzanym". W świecie niezarządzanych programista jest odpowiedzialny za prawie wszystko. Rzeczywisty program to zasadniczo plik binarny, który system operacyjny ładuje do pamięci i uruchamia. Wszystko inne, od zarządzania pamięcią po zagadnienia dotyczące zabezpieczeń są obciążeniem programisty.
Kod zarządzany jest napisany w jednym z języków wysokiego poziomu, które można uruchamiać na platformie .NET, takich jak C#, Visual Basic, F# i inne. Podczas kompilowania kodu napisanego w tych językach przy użyciu odpowiedniego kompilatora nie uzyskujesz kodu maszynowego. Uzyskasz kod języka pośredniego, który następnie środowisko uruchomieniowe kompiluje i wykonuje. C++ jest jednym wyjątkiem od tej reguły, ponieważ może również tworzyć natywne, niezarządzane pliki binarne uruchamiane w systemie Windows.
Język pośredni i wykonywanie
Co to jest "Język pośredni" (lub IL w skrócie)? Jest to produkt kompilacji kodu napisanego w językach wysokiego poziomu .NET. Po skompilowaniu kodu napisanego w jednym z tych języków otrzymasz plik binarny wykonany z języka IL. Należy pamiętać, że il jest niezależny od dowolnego konkretnego języka, który działa na podstawie środowiska uruchomieniowego; Istnieje nawet osobna specyfikacja, którą można odczytać, jeśli jesteś tak skłonny.
Po utworzeniu języka IL z poziomu kodu wysokiego poziomu najprawdopodobniej zechcesz go uruchomić. W tym miejscu clR przejmuje i rozpoczyna proces kompilowania just in time lub JIT-ing kodu z IL do kodu maszynowego, który może być rzeczywiście uruchamiany na procesorze CPU. W ten sposób clR wie dokładnie, co robi twój kod i może skutecznie zarządzać nim.
Język pośredni jest czasami nazywany również wspólnym językiem pośrednim (CIL) lub wspólnym językiem pośrednim (CIL).
Współdziałanie niezarządzanych kodu
Oczywiście clR umożliwia przechodzenie granic między światem zarządzanym i niezarządzanym, a istnieje wiele kodu, który to robi, nawet w bibliotekach klas platformy .NET. Jest to nazywane współdziałaniem lub międzyoperacją w skrócie. Przepisy te umożliwiają na przykład podsumowanie niezarządzanej biblioteki i wywołanie jej. Należy jednak pamiętać, że po wykonaniu tej czynności kod przechodzi przez granice środowiska uruchomieniowego, rzeczywiste zarządzanie wykonaniem jest ponownie wykonywane w ręku niezarządzanego kodu, a tym samym podlega tym samym ograniczeniom.
Podobnie jak w tym przypadku język C# to jeden język, który umożliwia korzystanie z niezarządzanych konstrukcji, takich jak wskaźniki bezpośrednio w kodzie, korzystając z tego, co jest znane jako niebezpieczny kontekst, który wyznacza fragment kodu, dla którego wykonanie nie jest zarządzane przez clR.