CLR与Java(作为语言)不兼容吗?

时间:2010-10-15 00:39:53

标签: java clr

我想知道让Java在CLR上运行的可行性。

在这里看到上一个问题后,我意识到Sun Java平台和.NET运行时之间存在很多差异,这使得交叉编译在除了最简单的案例之外都不可能。

话虽如此,IL不是图灵完整的语言吗?你不能在IL写一个JVM吗?当然,答案是肯定的,但为什么要走那么远呢?

我的问题是:

CLR(作为平台)是否与Java语言(不是平台)不兼容?

为了使其适合,有多少Java必须被扭曲或破坏?


当然,可以为CLR + .NET编译

import System.*;

public class HelloWorldExample
{
    public static void main(String args[])
    {
        Console.WriteLine("Hello World !");
    }
}

澄清:

我得到的是,我想知道java的哪些语言特性与它们的CLR对应物不兼容。

例如,我认为泛型在某种程度上是一致的。我相信这是一个类似的例外情况。

3 个答案:

答案 0 :(得分:6)

CLR的设计假设人们必须能够通过编译他们的Java源代码(大部分未经修改)从Java过渡到.Net。因此,您可能认为在运行时(例如协变数组)存在问题的Java中的内容作为CLR中的功能包含在内。

J#项目实现了足够的Java标准库,大多数Java应用程序只需很少的更改即可编译。请注意,J#可以加载JVM字节码以实现兼容性,但J#源始终编译为CLR字节码。

答案 1 :(得分:0)

快速搜索显示IKVM和正在进行的项目Ja.NET

那就是说,我可以看到另一种方式的价值。

答案 2 :(得分:-3)

是的,但考虑到Java使用得更广泛,更标准......你不是想要它反过来,即将C#编译成Java字节码吗?答案当然是可以编写将为CLR发出字节码的Java编译器或将发出Java字节码的C#编译器。但是,棘手的是,您需要提供标准库/库的自定义实现,这些实现将遵循该平台的库或库。考虑到两种API的规模,这将是一项相当重要的工作。这可能需要一个相当大的团队才能在合理的时间内完成。如果您打算这样做,我建议启动一个开源项目,虽然考虑到C#/ CLR是微软主义,但我不确定能产生多少热情。