Ориентация на среду выполнения означает компиляцию для среды выполнения, то есть, среди прочего, вывод CIL, также известного как MSIL (в отличие от машинного кода x86 / x64 / и т. Д.).
Сказать, что все, что не нацелено на среду выполнения, является «неуправляемым кодом», - это своего рода ложная дихотомия. Например, код, работающий на JVM, возможно, является управляемым, но я думаю, что в этом контексте мы можем принять предложение, означающее «без изменений [со стороны CLR]».
Можно было бы написать компилятор C #, который мог бы выдавать собственный код и не ориентироваться на среду выполнения (хотя вам, вероятно, понадобится некоторая среда выполнения по крайней мере для GC), и в равной степени можно написать C компилятор, выплюнувший CIL. В этом примере гипотетический компилятор C # нацелен не на среду выполнения, а на гипотетический компилятор C. Важное различие здесь - отделение языка от его цели.
Приложение .NET, не предназначенное для среды выполнения, было бы противоречием. Если бы он не был нацелен на среду выполнения, это не было бы .NET-приложением.
Однако он может стать более нечетким с unsafe
и P/Invoke
. Когда вы используете такие функции, как P/Invoke
или COM-взаимодействие, вы в конечном итоге ориентируетесь на среду выполнения и, кроме того, некоторые другие вещи. Это не означает, что вы перестали ориентироваться на среду выполнения, это просто означает, что у вас есть дополнительные зависимости помимо среды выполнения. Отслеживание подобных вещей - вот почему такие вещи, как CLSCompliantAttribute
существуют.
person
Logan Capaldo
schedule
29.05.2010