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 kodu zarządzanego oznacza 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 nosi nazwę Common Language Runtime 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. Otrzymujesz kod pośredniego języka , który następnie kompiluje i wykonuje środowisko uruchomieniowe. C++ jest jednym wyjątkiem od tej reguły, ponieważ może również tworzyć natywne, niezarządzane pliki binarne uruchamiane w systemie Windows.
Wykonywanie języka pośredniego &
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 kontrolę i rozpoczyna proces kompilacji just-in-time lub kompilacji JIT twojego kodu z IL do kodu maszynowego, który może być rzeczywiście uruchamiany na CPU. W ten sposób CLR wie dokładnie, co robi kod i może skutecznie zarządzać nim.
Język pośredni jest czasami nazywany również wspólnym językiem pośrednim (CIL).
Współdziałanie niezarządzanych kodu
Oczywiście CLR umożliwia przekraczanie granic między światem zarządzanym a niezarządzanym, a istnieje wiele kodu, który to robi, nawet w bibliotekach klas środowiska .NET . Jest to nazywane interoperacyjnośćlub interop krótko. Te przepisy pozwalają na przykład opakować niezarządzaną bibliotekę i wywoływać jej funkcje. 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.
Więcej zasobów
- Omówienie programu .NET Framework
- niebezpieczny kod i wskaźniki
- natywne współdziałanie