Управляемый код — это код компьютерной программы, который требует и будет выполняться только под управлением Common Language Infrastructure (CLI); Virtual Execution System (VES); виртуальной машины , например .NET , CoreFX или .NET Framework ; Common Language Runtime (CLR); или Mono . Термин был придуман корпорацией Microsoft .
Управляемый код — это вывод компилятора исходного кода, написанного на одном из более чем двадцати языков программирования высокого уровня , включая C# , J# и Visual Basic .NET .
Истинное и тонкое различие между управляемым и неуправляемым кодом распространено и имеет значение только при разработке приложений, взаимодействующих с реализациями CLR. Поскольку многие [ какие? ] старые языки программирования были перенесены в CLR, необходимо различие для идентификации управляемого кода, особенно в смешанной конфигурации. В этом контексте код, который не полагается на CLR, называется «неуправляемым».
Источник путаницы возник, когда Microsoft начала связывать .NET Framework с C++ и выбирать, как назвать Managed Extensions для C++ . Сначала он был назван Managed C++, а затем переименован в C++/CLI . Создатель языка программирования C++ и член комитета по стандартам C++ Бьярне Страуструп даже прокомментировал эту проблему: «В сложном и спорном вопросе о том, как называть привязку/расширения CLI к C++, я предпочитаю C++/CLI как сокращение для „Расширения CLI к ISO C++“. Сохранение C++ как части названия напоминает людям, что является базовым языком, и поможет сохранить C++ надлежащим подмножеством C++ с расширениями C++/CLI». [1]
Компилятор Microsoft Visual C++ может создавать как управляемый код, работающий в среде CLR, так и неуправляемые двоичные файлы, работающие непосредственно в Windows. [2]
Преимущества использования управляемого кода включают удобство программиста (за счет повышения уровня абстракции, создания меньших моделей) и улучшенные гарантии безопасности, в зависимости от платформы (включая реализацию VM). Существует множество исторических примеров кода, работающего на виртуальных машинах, таких как язык UCSD Pascal, использующий p-code , и операционная система Inferno от Bell Labs, использующая виртуальную машину Dis . Java популяризировала этот подход с помощью своего байт-кода, выполняемого виртуальной машиной Java .
Google также упоминает, что Java и Kotlin являются управляемым кодом в своих документах Android NDK JNI [3] [4]