为什么公共语言运行时不能支持Java

co2*_*f2e 10 .net c# java ironpython

今天,公共语言运行时支持许多语言,包括Iron Python和Iron Ruby.我们同样可以在Java Run Time环境中使用J Ruby和J Python.如果是这样,为什么.net框架工作的公共语言运行时间不能支持Java?你只是好奇地知道,虽然你可能会认为这是一个愚蠢的问题.

Jon*_*eet 19

CLR实际上是为了能够完成运行Java所需的一切而设计的.(实际上,定义IL的方式有一些瑕疵,特别是与Java的兼容性.)您只需要一种将字节码转换为IL,或者从Java源代码编译为IL的方法.J#是这样做的一种方式,但使用Java 1.1.4的限制非常大.

我怀疑不进一步的原因不是将Java作为一种语言运行的问题,而是系统库需要移植的事实.如果您愿意编写类似Java的源代码,但是目标是.NET框架库(并且只有 .NET框架库),并且有一个JLS版本切换java.lang.StringSystem.String等,那么它将是可行的.我不认为当C#在几乎所有方面都是一种更好的语言时会有很多好处.

您可能有兴趣查看IKVM.NET - 在CLI上运行的Java实现.


Joe*_*oey 5

首先,如果Java编译为JVM字节码并在经过认证的JVM(iirc)上运行,那么Java可能只被称为Java,这就是微软努力被命名为J ++和J#的原因.

然后仍然有J#,这是接近Java的东西,在CLR上运行.

然后是IKVM,它是JVM的实现和CLR之上的类库.

实际上,在这种情况下,类库可能是最烦人的事情.J#带有一个自己的库,其中包含Java核心类,仅用于此目的,并且该语言与该类库紧密相关(就像在.NET中一样).

最后的事情可能是:为什么要打扰呢?Java本身将成为CLR的一种低级语言,需要仔细努力来重新创建非实际泛型等内容.由于这种与其他CLR语言的互操作性也可能受到限制.如果你有一个庞大的Java代码库并且想要使用.NET,那么有强大的从Java到C#的翻译器,但是与Su Oracle 兼容的CLR原生Java 会为你只需要触摸的东西付出很多努力兼容性目的,与CLR或其他.NET语言的接口不良.