Почему код.NET компилирует в MSIL?

Первый код.NET компилирует в MSIL, и затем JIT преобразовывает его в зависимый код машины. Может любой говорить мне, что все преимущества получают из-за 2 компиляций шага. Спасибо

7
задан R. Martinho Fernandes 18 December 2009 в 05:18
поделиться

4 ответа

Есть несколько причин. В первую очередь, вероятно, сделать его кроссплатформенным. Если C # или другие языки .NET скомпилированы непосредственно в собственный код, их придется перекомпилировать для каждой платформы, на которой они работают. С помощью виртуальной машины весь код может храниться в промежуточном формате, и вам нужно только написать реализацию виртуальной машины для каждой платформы.

Кроме того, имея независимый от языка промежуточный язык, вы можете иметь много языков высокого уровня (C #, VB.NET, Python и т. Д.) Все ссылающиеся сборки, написанные на других языках. Поскольку все они компилируются в одно и то же, они могут работать без проблем друг с другом.

Также есть преимущества в производительности. Компилятор JIT может выполнять агрессивную оптимизацию специально для машины, на которой в это время выполняется код. Я не знаю, насколько оптимизация.

20
ответ дан 6 December 2019 в 06:24
поделиться

Первое преобразование с языка высокого уровня, а затем на машинный, так разработана платформа .Net. Первый уровень заботится о языке высокого уровня для MSIL, а второй уровень может сосредоточиться на сбоях и сбоях платформы для преобразования из MSIL в код машинного уровня. Он в основном поддерживает языковую совместимость и, возможно, в ближайшем будущем он также будет обеспечивать кроссплатформенную поддержку, когда такие проекты, как Mono, будут расширяться.

1
ответ дан 6 December 2019 в 06:24
поделиться

Ответ можно найти на MSDN

6
ответ дан 6 December 2019 в 06:24
поделиться
  • Исполняемый файл не привязан к платформе. Например, XNA нацелена на процессоры PPC (Xbox360) и x86. Некоторые программы будут работать в Mono на Linux или OSX.

  • Это позволяет вам лучше оптимизировать для целевой машины или заменять отсутствующие функции:

    • Например, OSX> = 10.5 компилируется с отсутствующими инструкциями графического процессора во время выполнения с OpenCL.
    • Допустим, вы работаете на ЦП без поддержки операций с плавающей запятой, тогда вы можете эмулировать его с помощью JIT без необходимости полного переписывания кода.
    • В какой-то момент в будущем можно будет динамически выгружать обработку в GPU или другие цели (я подозреваю, что функциональные языки несколько лучше подходят для этого).
1
ответ дан 6 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: