День сто шестидесятый. #ВопросыНаСобеседовании
Самые часто задаваемые вопросы на собеседовании по .NET
5. Что такое управляемый код?
Управляемый код - это код, выполнение которого управляется средой исполнения. В этом случае рассматриваемая среда исполнения называется Common Language Runtime или CLR, независимо от реализации (Mono или .NET Framework или .NET Core). CLR отвечает за распознавание управляемого кода, компиляцию его в машинный код и последующее выполнение. Кроме того, среда выполнения предоставляет несколько важных сервисов, таких как автоматическое управление памятью, границы безопасности, безопасность типов и т.д.
В этом смысле программы на C/C++ называются «неуправляемым кодом». Здесь программист отвечает практически за всё. Такая программа - это, по сути, двоичный файл, который операционная система загружает в память и исполняет. Всё остальное, от управления памятью до соображений безопасности, является ответственностью программиста.
Управляемый код написан на одном из языков высокого уровня, который можно запускать поверх .NET, таких как C#, Visual Basic, F# и другие. Когда вы компилируете код, написанный на этих языках, с помощью соответствующего компилятора, вы не получаете машинный код. Вы получаете код на промежуточном языке (Intermediate Language), который среда исполнения затем компилирует и выполняет. C++ является единственным исключением из этого правила, поскольку он также может создавать собственные неуправляемые двоичные файлы, которые работают в Windows.
Конечно, CLR позволяет переходить через границы между управляемым и неуправляемым миром, и есть много примеров кода, который делает это, даже в библиотеках базовых классов. Это называется совместимостью (interoperability или interop). Это позволяет вам, например, обернуть неуправляемую библиотеку и обратиться к ней. Однако важно отметить, что при этом, когда код пересекает границы среды выполнения, фактическое управление выполнением снова оказывается в руках неуправляемого кода и, таким образом, попадает под те же ограничения.
Подобно этому, C# позволяет вам использовать неуправляемые конструкции, такие как указатели, непосредственно в коде, используя так называемый небезопасный контекст, который обозначает фрагмент кода, выполнение которого не управляется CLR.
Источник: https://docs.microsoft.com/en-us/dotnet/standard/language-independence-and-language-independent-components
Самые часто задаваемые вопросы на собеседовании по .NET
5. Что такое управляемый код?
Управляемый код - это код, выполнение которого управляется средой исполнения. В этом случае рассматриваемая среда исполнения называется Common Language Runtime или CLR, независимо от реализации (Mono или .NET Framework или .NET Core). CLR отвечает за распознавание управляемого кода, компиляцию его в машинный код и последующее выполнение. Кроме того, среда выполнения предоставляет несколько важных сервисов, таких как автоматическое управление памятью, границы безопасности, безопасность типов и т.д.
В этом смысле программы на C/C++ называются «неуправляемым кодом». Здесь программист отвечает практически за всё. Такая программа - это, по сути, двоичный файл, который операционная система загружает в память и исполняет. Всё остальное, от управления памятью до соображений безопасности, является ответственностью программиста.
Управляемый код написан на одном из языков высокого уровня, который можно запускать поверх .NET, таких как C#, Visual Basic, F# и другие. Когда вы компилируете код, написанный на этих языках, с помощью соответствующего компилятора, вы не получаете машинный код. Вы получаете код на промежуточном языке (Intermediate Language), который среда исполнения затем компилирует и выполняет. C++ является единственным исключением из этого правила, поскольку он также может создавать собственные неуправляемые двоичные файлы, которые работают в Windows.
Конечно, CLR позволяет переходить через границы между управляемым и неуправляемым миром, и есть много примеров кода, который делает это, даже в библиотеках базовых классов. Это называется совместимостью (interoperability или interop). Это позволяет вам, например, обернуть неуправляемую библиотеку и обратиться к ней. Однако важно отметить, что при этом, когда код пересекает границы среды выполнения, фактическое управление выполнением снова оказывается в руках неуправляемого кода и, таким образом, попадает под те же ограничения.
Подобно этому, C# позволяет вам использовать неуправляемые конструкции, такие как указатели, непосредственно в коде, используя так называемый небезопасный контекст, который обозначает фрагмент кода, выполнение которого не управляется CLR.
Источник: https://docs.microsoft.com/en-us/dotnet/standard/language-independence-and-language-independent-components