Первый код.NET компилирует в MSIL, и затем JIT преобразовывает его в зависимый код машины. Может любой говорить мне, что все преимущества получают из-за 2 компиляций шага. Спасибо
Есть несколько причин. В первую очередь, вероятно, сделать его кроссплатформенным. Если C # или другие языки .NET скомпилированы непосредственно в собственный код, их придется перекомпилировать для каждой платформы, на которой они работают. С помощью виртуальной машины весь код может храниться в промежуточном формате, и вам нужно только написать реализацию виртуальной машины для каждой платформы.
Кроме того, имея независимый от языка промежуточный язык, вы можете иметь много языков высокого уровня (C #, VB.NET, Python и т. Д.) Все ссылающиеся сборки, написанные на других языках. Поскольку все они компилируются в одно и то же, они могут работать без проблем друг с другом.
Также есть преимущества в производительности. Компилятор JIT может выполнять агрессивную оптимизацию специально для машины, на которой в это время выполняется код. Я не знаю, насколько оптимизация.
Первое преобразование с языка высокого уровня, а затем на машинный, так разработана платформа .Net. Первый уровень заботится о языке высокого уровня для MSIL, а второй уровень может сосредоточиться на сбоях и сбоях платформы для преобразования из MSIL в код машинного уровня. Он в основном поддерживает языковую совместимость и, возможно, в ближайшем будущем он также будет обеспечивать кроссплатформенную поддержку, когда такие проекты, как Mono, будут расширяться.
Исполняемый файл не привязан к платформе. Например, XNA нацелена на процессоры PPC (Xbox360) и x86. Некоторые программы будут работать в Mono на Linux или OSX.
Это позволяет вам лучше оптимизировать для целевой машины или заменять отсутствующие функции: