ВМ - это просто абстракция микропроцессора.Это всего лишь определение и на самом деле не существует.Т.е. вы не можете запустить код на виртуальной машине;тем не менее, вы можете сгенерировать код IL для него.Преимущество заключается в том, что языковым компиляторам не нужно знать подробности о различных типах реальных процессоров.Поскольку разные языки .NET, такие как C # или VB (и многие другие), генерируют IL, они совместимы на этом уровне.Это, вместе с другими соглашениями, такими как система общих типов, позволяет вам использовать DLL, сгенерированную из кода VB, например, в программе на C #.
IL компилируется как раз вовремя в Windows при запуске.NET приложение, а также может быть скомпилировано заранее в Mono.В обоих случаях генерируется машинный код native для фактического процессора.Этот полностью скомпилированный код выполняется на микропроцессоре REAL!
Другой аспект - количество компиляторов, которые вы должны написать.Если у вас есть n языков, и вы хотите запустить их на m процессорных архитектурах, вам необходимо n компиляторы языка для IL + m Компиляторы IL-to-native .Без этого промежуточного уровня абстракции вам бы понадобилось иметь n × m компиляторов, и это может быть намного большее число, чем просто n + m !