Может ли MSIL быть преобразован в родной код Java?

StackOverflow https://stackoverflow.com/questions/3413960

  •  26-09-2019
  •  | 
  •  

Вопрос

DotNet CLR преобразует код языка для MSIL. В то время как код Java будет преобразован в родной код, который является независимой платформой. Можем ли мы преобразовать это MSIL в родной код? Таким образом, dotnet будет автоматически стать независимой платформой.

Это было полезно?

Решение

Будьте осторожны в вашей терминологии здесь:

  • CLR не преобразует «код языка» на MSIL - он преобразует MSIL на нативный код на лету.
  • Java Code не преобразуется в «родной код, который является независимой платформой»; Это оксиморон. Исходный код Java преобразуется в платформу независимо от Java Bytecode. JVM конвертирует Bytecode в родной код так же, как CLR имеет MSIL (ну в некоторой степени)

Обратите внимание, что как MSIL, так и Bytecode могу быть интерпретированным; Горячая точка иногда интерпретирует, иногда скомпилируйте джит, а часто jit compield многократно. Отказ .NET Desktop CLR всегда JIT компилирует один раз в данный момент.

Также стоит понимать, что Bytecode - это только платформа, независимая до такой степени, что есть JVM для заинтересованного вами платформы. То же самое относится к Msil. Вы можете компилировать программу C # на Windows, а затем запустить ее на Linux под Mono если Для вашей платформы есть сбор моно если Это не использует никаких библиотек, которые не доступны на моно.

Теперь, как для преобразования MSIL в Java Bytecode ... обратное более возможно, так как MSIL в общем более мощный, чем Java Bytecode. Например, пользовательские типы значений и дженерики в MSIL не будут легко переводить в Bytecode. Вам, вероятно, понадобится что-то ближе к CLR написано в Java. Отказ Я смею сказать, что есть некоторые умные возможности, но там есть фундаментальные трудности. Даже обратное вряд ли будет легким - особенно если Java 7 представляет динамический вызов к байтекоду (тогда как динамическое набрав в .NET выполняется DLR так же как библиотека).

Другие советы

Этот ответ может быть немного оффтопическим, но стоит упомянуть. Msil to Java Byte Code может жестко, как подробно описано другие, отвечающие на вопрос. Но вы можете обрабатывать преобразование из одной рамки к другому на уровне исходного кода.

Если у вас есть библиотека Java, которую вы хотели бы использовать в приложении .NET - использование ИКВМ. Отказ Он компилирует Java Code в состав .NET Ussifies, используя IKVMC, Java Bytecode To .NET IL Translator. Проверьте проверить условия лицензирования, прежде чем перейти в использование этого!

Также мне любопытно узнать, возможно, возможен задним ходом IE .NET Исходный код в Java?

Я могу ответить на ваш вопрос только частично.

Да, MSIL может быть преобразован в родной код, используя ngen.exe.. Отказ В этом случае, однако, вы потеряете способность эффективно работать на разных целевых архитектурах, например, 32 бита VS 64 бита. Кроме того, вам нужно будет создать несколько версий, один для каждой целевой платформы.

Кроме того, я предлагаю использовать ответ Курта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top