.NET: Ориентация на среду выполнения - PullRequest
2 голосов
/ 29 мая 2010

Я начинаю подробно читать о платформе .NET и ее общеязыковой среде выполнения. Я читаю .NET обзор от Microsoft, и я не уверен, что подразумевается под этим утверждением.

Код, нацеленный на среду выполнения, известен как управляемый код, в то время как код, который делает не целевая среда выполнения известна как неуправляемый код.

Как вы ориентируетесь на Common Language Runtime? Я знаю, что он установлен по умолчанию при разработке в Visual Studio, но как бы вы конкретно настроили таргетинг на CLR?

Какой код при разработке приложения .NET не будет нацелен на CLR и поэтому будет называться неуправляемым кодом ?

Ответы [ 3 ]

4 голосов
/ 29 мая 2010

Ориентация на среду выполнения означает компиляцию для среды выполнения, то есть, помимо прочего, вывод CIL или MSIL (в отличие от машинного кода x86 / x64 / и т. Д.).

Сказать, что все, что не нацелено на среду выполнения, является "неуправляемым кодом", является чем-то вроде ложной дихотомии. Например, код, работающий на JVM, возможно, управляется, но я думаю, что в этом контексте мы можем принять предложение, означающее «без изменений [от CLR]».

Можно было бы написать C # -компилятор, который мог бы выплевывать собственный код и не предназначаться для времени выполнения (хотя вам, вероятно, понадобится некоторое время выполнения для GC по крайней мере), и в равной степени возможно написать компилятор C, который выплюнул CIL. В этом примере гипотетический компилятор C # не будет нацелен на время выполнения, но гипотетический компилятор C будет. Важным отличием здесь является отделение языка от его цели.

Приложение .NET, которое не предназначено для среды выполнения, будет противоречием. Если бы он не предназначался для среды выполнения, он не был бы приложением .NET.

Хотя с unsafe и P/Invoke это может стать нечетким. Когда вы используете такие функции, как P/Invoke или COM-взаимодействие, вы в конечном итоге нацеливаетесь на среду выполнения и дополнительно некоторые другие вещи . Это не означает, что вы перестали ориентироваться на среду выполнения, это просто означает, что у вас есть дополнительные зависимости помимо времени выполнения. Отслеживание такого рода вещей - вот почему существуют такие вещи, как CLSCompliantAttribute.

2 голосов
/ 29 мая 2010

Это нечеткий термин, он означает «настройку инструментов сборки для создания двоичного образа, совместимого с управляемой средой выполнения». Исполняемый файл, который может запускать управляемый код, соответствует стандартному формату файла PE32. Знакомый вам как EXE и DLL файлы. Такое бинарное изображение называется «сборка» в .NET говорят. Его формат хорошо документирован в этом стандартном документе Ecma .

Большинство распространенных инструментов сборки очень специфичны для создания управляемых сборок. Как csc.exe и vbc.exe, соответственно компиляторы C # и VB.NET. Некоторые инструменты могут генерировать любой из них и должны запускаться с правильными параметрами командной строки, чтобы получить желаемый конечный результат. Как cl.exe и link.exe, компилятор и компоновщик для C / C ++ со встроенной поддержкой языка C ++ / CLI. Они также могут создавать сборки, содержащие сочетание управляемого IL и машинного кода.

Особенно последние два инструмента не так просты в использовании для управления управляемой средой выполнения. Задача IDE и системы сборки, включенной в Visual Studio, - упростить ее.

2 голосов
/ 29 мая 2010

Весь код, который работает в .NET Framework, является управляемым кодом. Примером неуправляемого кода является C ++, который называется неуправляемым или нативным кодом.

...