c# - 为什么 Sun 不做 C# 到 Java 字节码编译器?

标签 c# java .net compiler-construction jvm

我们想在 JVM 上运行我们的 C# 代码

我的公司拥有庞大的 C# 代码库。超过一半的代码是我们创建、读取、修改、计算和编写 Excel 工作簿的核心引擎。我们经常收到来自客户和潜在客户的问题,询问我们是否要构建我们引擎的 Java 版本——他们中的许多人对 UI 根本不感兴趣。我们甚至有一些客户不厌其烦地从他们的 Java 应用程序中使用我们的 .NET 库。

因此,我们希望构建我们核心引擎的 Java 版本,最好不要维护单独的 Java 源代码库。

埃里克·辛克 described this problem很好。除了我们的软件许可包括免版税部署这一事实之外,我处于类似的位置,这使得 Eric 选择 Mainsoft 对我们来说是不可能的。

我一直在谷歌上搜索 "c# to jvm" 之类的东西几年来每隔几个月,现在没有快乐。我花了大约 7 年时间为 Java 开发类似的软件,我相信我们在核心引擎中使用的 .NET API 可以很容易地封装,并且我们可以使用 Java 库完成我们需要的一切。所以,如果我们只有一个 C# -> JVM 编译器,我们就可以为 Java 构建我们的核心引擎,而我们将不再需要拒绝想要使用它的 Java 开发人员。

我并不是问 Sun 不做 C# 编译器的技术原因。我承认 Java 没有属性或无符号 64 位长等...为了论证,假设所有这些技术问题都可以通过扩展 JVM 和/或其他方式来处理。

我并不是要就为什么一种语言/堆栈可能比另一种更好进行另一次辩论。我们业务的实际情况是,每个都有大量潜在客户使用。

Sun 为什么要做 C# 编译器? (当然是国际海事组织)

让在 Java 平台上运行 C# 代码变得更容易意味着更多的开发人员和更多的软件用于该平台。平台的成功还有什么比这更重要的吗? Jonathan Schwartz是一个软件人。我会让比我更聪明的人来决定他是否担任 Sun 总裁兼首席执行官这一不可能的工作,但在加入 Sun 后不久与 Jonathan 会面后,我的印象是他了解软件以及对大型软件的需求开发人员的基础。

那么为什么 Sun 不做 C# 编译器呢?

  1. NIH综合症?
  2. Scott McNealy 的幽灵?
  3. 太多 Java 开发人员不喜欢或不信任与 Microsoft 相关的任何东西?
  4. 他们同意不参加 the big bucks ?
  5. ???

一定有充分的理由。我只是无法为我的生活弄清楚它是什么......

最佳答案

首先,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 需要 Microsoft 的许可才能实现这些 API。

如果有足够多的客户想要一个具有商业意义的 Java 版本来将您的应用程序移植到 Java,那么就去做吧,那么您将永远不会通过 C# 到 JVM 编译器从 Sun 获得任何帮助。

关于c# - 为什么 Sun 不做 C# 到 Java 字节码编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/494389/

相关文章:

c# - Tesseract 是否需要一个库来检测 PNG 文件?

c# - WPF 绑定(bind) DataGrid - 我可以添加一个未绑定(bind)的列来显示状态吗?

c# - 使用 NAudio 通过网络发送 .Wav 文件

java - Javascript 和 Java 代码都可以包含在 WAR 覆盖中吗?

c# - Children.Add(item) 值不在预期范围内

c# - SQLDataReader 运行速度太慢取决于标准

java - 显示 Eclipse 菜单 所有视角的贡献(不仅仅是插件开发视角)

java - 如何使用 Java EE Eclipse 打开项目?

.net - GetCustomAttribute() 对 AssemblyVersionAttribute 返回 null

c# - 使用 LLBLGen 多次连接到同一个表