可以将MSIL转换为Java Native Code吗?

5 .net java cil native-code

Dotnet CLR将语言代码转换为MSIL.将Java代码转换为独立于平台的本机代码.我们可以将此MSIL转换为本机代码吗?因此,Dotnet将自动变为独立于平台.

Jon*_*eet 14

这里要小心你的术语:

  • CLR不会将"语言代码"转换为MSIL - 它会动态地将MSIL转换为本机代码.
  • Java代码不会转换为"与平台无关的本机代码"; 那是矛盾的.Java源代码转换为独立于平台的Java字节码.JVM将字节码转换为本机代码的方式与CLR与MSIL相同(在某种程度上)

注意,可以解释MSIL和字节码; HotSpot有时会解释,有时是JIT编译,经常JIT编译多次..NET桌面CLR总是在JIT编译一次.

同样值得理解的是,字节码仅与平台无关,只有JVM可用于您感兴趣的平台.对于MSIL也是如此.您可以在Windows上编译C#程序,然后在Linux下单运行它,如果有单声道,为您的平台上构建和如果不使用它们不提供任何单库.

现在至于将MSIL转换为Java字节码......反过来更可行,因为MSIL 通常比Java字节码更强大.例如,MSIL中的自定义值类型和泛型不会轻易转换为字节码.您可能需要更接近用Java编写的CLR .我敢说有一些聪明的可能性,但那里存在根本性的困难.即使反过来也不容易 - 特别是如果Java 7引入了对字节码的动态调用(而.NET中的动态类型由DLR作为库执行).