Будьте осторожны с вашей терминологией:
- CLR не преобразует «код языка» в MSIL - он конвертирует MSIL в собственный код на лету.
- Java-кодне конвертируется в «собственный код, независимый от платформы»;это оксюморонИсходный код Java преобразуется в независимый от платформы байт-код Java.JVM преобразует байт-код в собственный код так же, как CLR с MSIL (ну, в некоторой степени)
Обратите внимание, что и MSIL, и байт-код могут интерпретироваться ;HotSpot иногда интерпретирует, иногда JIT-компиляцию, а часто JIT-компиляцию несколько раз .CLR .NET для настольных компьютеров всегда JIT компилируется в данный момент один раз.
Стоит также понимать, что байт-код является независимым только от платформы, поскольку JVM доступна для интересующей вас платформы.То же самое верно для MSIL.Вы можете скомпилировать программу на C # в Windows и затем запустить ее в Linux под Mono , если есть сборка Mono для вашей платформы и , если , она не использует библиотеки, которые недоступно в Mono.
Теперь, что касается преобразования MSIL в байт-код Java ... обратное более осуществимо, поскольку MSIL , как правило, более мощный, чем байт-код Java.Например, пользовательские типы значений и обобщенные значения в MSIL не могут быть легко преобразованы в байт-код.Вам, вероятно, понадобится что-то ближе к CLR , написанному на Java .Я смею сказать, что есть некоторые умные возможности, но есть фундаментальные трудности там.Даже обратное вряд ли будет простым - особенно если Java 7 вводит динамический вызов для байт-кода (тогда как динамическая типизация в .NET выполняется DLR просто как библиотека).