当前位置:  开发笔记 > 编程语言 > 正文

为什么Sun不用C#来编写Java字节码编译器?

如何解决《为什么Sun不用C#来编写Java字节码编译器?》经验,为你挑选了6个好方法。

首先,Sun没有动力在JVM上实现C#编译器,因为它们具有非常相似的称为Java编程语言的东西.

它也不像实现编译器那么简单,因为Java标准类库与.net基类库不同.您最终必须将所有.NET API调用更改为Java API调用.

Micrsoft有一个名为J#的产品,用于Java到.NET的转换,但最终没有人使用它,因为API仅限于Java 2之前的API,因此它几乎没用.如果Sun实现了.NET BCL的部分内容,那将是相同的,因为只有它的核心部分是标准化的和免版税的.像ASP.NET和WPF,WCF等部分不是ECMA标准的一部分,所以Sun需要微软的许可才能实现这些API.

如果有足够多的客户希望java版本具有商业意义来将您的应用程序移植到java然后执行它,那么您将无法通过C#到JVM编译器从Sun获得任何帮助.



1> Tim..:

首先,Sun没有动力在JVM上实现C#编译器,因为它们具有非常相似的称为Java编程语言的东西.

它也不像实现编译器那么简单,因为Java标准类库与.net基类库不同.您最终必须将所有.NET API调用更改为Java API调用.

Micrsoft有一个名为J#的产品,用于Java到.NET的转换,但最终没有人使用它,因为API仅限于Java 2之前的API,因此它几乎没用.如果Sun实现了.NET BCL的部分内容,那将是相同的,因为只有它的核心部分是标准化的和免版税的.像ASP.NET和WPF,WCF等部分不是ECMA标准的一部分,所以Sun需要微软的许可才能实现这些API.

如果有足够多的客户希望java版本具有商业意义来将您的应用程序移植到java然后执行它,那么您将无法通过C#到JVM编译器从Sun获得任何帮助.


等等...... C#是一种死胡同的语言?现在*那是一场骚乱!

2> Randolpho..:

Joe Erickson写道:

在Java平台上运行C#代码更容易,这意味着更多的开发人员和更多的平台软件.

这是一个不真实的陈述.在JVM上运行C#代码不会创建Java程序员,它会创建可以在JVM上执行的C#程序员.它只扩展了C#的范围,假设JVM还将任何微软特定的调用(即win32)转换为平台中立的东西.因此,如果Sun将IL转换为Java字节码,那么它唯一可以帮助的是:Microsoft.而且,鉴于Sun在最初的C#-Java分裂/ Visual J ++诉讼中与微软的历史......

此外,无论您是否愿意,您都必须面对技术上的不可行性.字节码的执行方式存在根本区别,这些问题远比是否存在无符号长数据类型更重要.

如果您必须在非Microsoft平台上安装C#,请使用Mono



3> Chase Seiber..:

为什么Microsoft不对C#进行Java字节码编译?为什么不,你做了吗?每边都有开放的规格......


现在,MICROSOFT没有动力这样做,因为他们从软件中赚钱(也相当多).硬件公司试图将软件商品化,软件公司试图将硬件商品化.

4> Matthew Flas..:

"因此,我们希望构建一个Java版本的核心引擎,理想情况下不需要维护单独的Java源代码库."

基本上,您希望编译未修改的C#代码,并使其在仅Java环境中运行.

IKVM 不是你想要的. IKVM 主要有三个方面.

一个.ikvm - Java虚拟机的CLI实现(请注意,这为Java类库使用Classpath(现为OpenJDK)).

湾 ikvmc - 将java字节码编译为CLI字节码.

C.ikvmstub - 生成调用CLI代码的java存根类.

请注意,所有这些工具都在运行时依赖于CLI.你想要的是与IKVM完全相反的东西,它当然是MVKI(最尊敬的Kompiler Intermediary):):

一个.mvki - CLI虚拟机的Java实现(可能会使用Mono或DotGNU作为类库).

湾 mvkic - 将CLI字节码编译为Java字节码.

C.mvkistub - 生成调用Java的CLI存根类

请注意,这些都不需要在运行时现有的.NET Framework实现,因此它们应该让您的Java客户满意.

不幸的是,据我所知MVKI不存在,所以你最好做一个手动端口(这将不可避免地更干净,虽然更多的工作).

编辑:根据Mainsoft 的描述,它似乎与MVKI相似,虽然我不确定他们为类库做了什么,而且与IKVM不同,它不是FOSS.



5> mcintyre321..:

http://jsc.sourceforge.net/是ac #cross编译器,可以将.NET代码转换为Java(以及其他内容).



6> davogones..:

将您的.NET API公开为ASMX Web服务,您应该很高兴.

编辑:对于更多繁重的使用场景,值得研究Windows Communication Foundation(WCF).它具有内置的可配置支持,可用于安全性,流式传输,不同的传输方案(HTTP,TCP/IP,本地命名管道).您不仅限于SOAP消息编码,但这可能是与Java互操作的最简单方法.

我不太确定你的具体情况,但是如果你正在处理大文件并且.NET代码和Java代码都在本地运行,你可以使用.NET将文件保存到用户的硬盘驱动器然后获取它来自您的Java应用程序.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有