Dotnet CLR将语言代码转换为MSIL。将Java代码转换为独立于平台的本机代码。我们可以将此MSIL转换为本机代码吗?因此,Dotnet将自动变为独立于平台。
答案 0 :(得分:13)
请注意您的术语:
请注意,MSIL和字节码都可以解释; HotSpot有时会解释,有时JIT编译,并且经常JIT编译多次。 .NET桌面CLR总是JIT目前只编译一次。
同样值得理解的是,字节码只是平台独立的程度,因为有一个JVM可用于您感兴趣的平台。对于MSIL也是如此。您可以在Windows上编译C#程序,然后在Mono 下在Linux上运行它,如果您的平台有Mono版本,如果它不使用任何库单声道上没有。
现在将MSIL转换为Java字节码......反过来更可行,因为MSIL 通常比Java字节码更强大。例如,MSIL中的自定义值类型和泛型不会轻易转换为字节码。您可能需要更接近用Java编写的CLR 。我敢说有一些聪明的可能性,但那里存在根本性的困难。即使反过来也不容易 - 特别是如果Java 7引入了对字节码的动态调用(而.NET中的动态类型由DLR作为库执行)。
答案 1 :(得分:1)
这个回复可能有点偏离,但值得一提。 MSIL到Java字节代码可能很难被其他人回答这个问题所详述。但是您可以在源代码级别处理从一个框架到另一个框架的转换。
如果您要在.NET应用程序中使用Java库,请使用IKVM。它使用IKVMC将Java代码编译成.NET程序集,IKVMC是.NET IL转换器的Java字节码。在开始使用之前,请检查许可条款!
另外我很想知道反向是否可能,即.NET源代码是否为Java?
答案 2 :(得分:0)
我只能部分回答你的问题。
是的,可以使用ngen.exe将MSIL转换为本机代码。但是,在这种情况下,您将失去在不同目标体系结构上高效运行的能力,例如: 32位与64位。此外,您还需要创建多个版本,每个版本对应一个目标平台。
除此之外,我建议使用Kurt的答案。