Omówienie środowiska uruchomieniowego języka wspólnego (CLR)

Platforma .NET udostępnia środowisko uruchomieniowe nazywane środowiskiem uruchomieniowym języka wspólnego, które uruchamia kod i udostępnia usługi, które ułatwiają proces programowania.

Kompilatory i narzędzia uwidaczniają funkcje środowiska uruchomieniowego języka wspólnego i umożliwiają pisanie kodu, który korzysta ze środowiska wykonawczego zarządzanego. Kod opracowywany za pomocą kompilatora języka, który jest przeznaczony dla środowiska uruchomieniowego, jest nazywany kodem zarządzanym. Funkcje kodu zarządzanego, takie jak integracja między językami, obsługa wyjątków między językami, ulepszone zabezpieczenia, obsługa wersji i wdrażania, uproszczony model interakcji składników oraz usługi debugowania i profilowania.

Uwaga

Kompilatory i narzędzia mogą generować dane wyjściowe używane przez środowisko uruchomieniowe języka wspólnego, ponieważ system typów, format metadanych i środowisko uruchomieniowe (system wykonywania wirtualnego) są definiowane przez publiczny standard, specyfikację infrastruktury języka wspólnego ECMA. Aby uzyskać więcej informacji, zobacz ECMA C# i Common Language Infrastructure Specifications (Specyfikacje infrastruktury języka wspólnego ECMA).

Aby umożliwić środowisku uruchomieniowemu udostępnianie usług kodu zarządzanego, kompilatory języka muszą emitować metadane opisujące typy, składowe i odwołania w kodzie. Metadane są przechowywane przy użyciu kodu; każdy ładowalny plik wykonywalny środowiska uruchomieniowego języka wspólnego (PE) zawiera metadane. Środowisko uruchomieniowe używa metadanych do lokalizowania i ładowania klas, określania wystąpień w pamięci, rozpoznawania wywołań metod, generowania kodu natywnego, wymuszania zabezpieczeń i ustawiania granic kontekstu czasu wykonywania.

Środowisko uruchomieniowe automatycznie obsługuje układ obiektów i zarządza odwołaniami do obiektów, zwalniając je, gdy nie są już używane. Obiekty, których okresy istnienia są zarządzane w ten sposób, są nazywane danymi zarządzanymi. Odzyskiwanie pamięci eliminuje przecieki pamięci i niektóre inne typowe błędy programowania. Jeśli kod jest zarządzany, możesz użyć zarządzanych, niezarządzanych lub zarządzanych i niezarządzanych danych w aplikacji platformy .NET. Ze względu na to, że kompilatory języka dostarczają własne typy, takie jak typy pierwotne, może nie zawsze wiedzieć lub wiedzieć, czy dane są zarządzane.

Środowisko uruchomieniowe języka wspólnego ułatwia projektowanie składników i aplikacji, których obiekty wchodzą w interakcje między językami. Obiekty napisane w różnych językach mogą komunikować się ze sobą, a ich zachowania można ściśle zintegrować. Można na przykład zdefiniować klasę, a następnie użyć innego języka, aby uzyskać klasę z oryginalnej klasy lub wywołać metodę w oryginalnej klasie. Możesz również przekazać wystąpienie klasy do metody klasy napisanej w innym języku. Ta integracja między językami jest możliwa, ponieważ kompilatory języka i narzędzia przeznaczone dla środowiska uruchomieniowego używają wspólnego systemu typu zdefiniowanego przez środowisko uruchomieniowe. Są one zgodne z regułami środowiska uruchomieniowego dotyczącymi definiowania nowych typów i tworzenia, używania, utrwalania i tworzenia powiązań z typami.

W ramach metadanych wszystkie zarządzane składniki zawierają informacje o składnikach i zasobach, względem których zostały utworzone. Środowisko uruchomieniowe używa tych informacji, aby upewnić się, że składnik lub aplikacja ma określone wersje wszystkiego, czego potrzebuje, co sprawia, że kod jest mniej prawdopodobne, aby przerwać z powodu niektórych niezaspokojonych zależności. Informacje o rejestracji i dane stanu nie są już przechowywane w rejestrze, gdzie mogą być trudne do ustanowienia i utrzymania. Zamiast tego informacje o zdefiniowanych typach i ich zależności są przechowywane z kodem jako metadanymi. W ten sposób zadanie replikacji i usuwania składników jest mniej skomplikowane.

Kompilatory języka i narzędzia uwidaczniają funkcjonalność środowiska uruchomieniowego w sposób, który ma być przydatny i intuicyjny dla deweloperów. Niektóre funkcje środowiska uruchomieniowego mogą być bardziej zauważalne w jednym środowisku niż w innym. Sposób korzystania ze środowiska uruchomieniowego zależy od używanych narzędzi lub kompilatorów języka. Jeśli na przykład jesteś deweloperem języka Visual Basic, możesz zauważyć, że w środowisku uruchomieniowym języka wspólnego język Visual Basic ma więcej funkcji zorientowanych na obiekty niż wcześniej. Środowisko uruchomieniowe zapewnia następujące korzyści:

  • Usprawnienia wydajności.

  • Możliwość łatwego używania składników opracowanych w innych językach.

  • Rozszerzalne typy udostępniane przez bibliotekę klas.

  • Funkcje językowe, takie jak dziedziczenie, interfejsy i przeciążenia programowania obiektowego.

  • Obsługa jawnie wolnych wątków, która umożliwia tworzenie wielowątków i skalowalnych aplikacji.

  • Obsługa obsługi wyjątków strukturalnych.

  • Obsługa atrybutów niestandardowych.

  • Odzyskiwanie pamięci.

  • Używanie delegatów zamiast wskaźników funkcji w celu zwiększenia bezpieczeństwa i zabezpieczeń typów. Aby uzyskać więcej informacji na temat delegatów, zobacz Common Type System ( Common Type System).

Wersje środowiska CLR

Wersje .NET Core i .NET 5+ mają jedną wersję produktu, czyli nie ma oddzielnej wersji środowiska CLR. Aby uzyskać listę wersji platformy .NET Core, zobacz Pobieranie platformy .NET Core.

Jednak numer wersji programu .NET Framework nie musi odpowiadać numerowi wersji środowiska CLR, który zawiera. Aby uzyskać listę wersji programu .NET Framework i odpowiadających im wersji środowiska CLR, zobacz .NET Framework versions and dependencies (Wersje i zależności programu .NET Framework).

Nazwa opis
Proces zarządzanego wykonania Opisuje kroki wymagane do korzystania ze środowiska uruchomieniowego języka wspólnego.
Automatyczne zarządzanie pamięcią Opisuje sposób przydzielania i zwalniania pamięci przez moduł odśmiecenia pamięci.
Omówienie programu .NET Framework Opisuje kluczowe pojęcia dotyczące programu .NET Framework, takie jak wspólny system typów, współdziałanie między językami, wykonywanie zarządzane, domeny aplikacji i zestawy.
System typu wspólnego Opisuje sposób deklarowanych, używanych i zarządzanych typów w środowisku uruchomieniowym w celu zapewnienia integracji między językami.