当前位置: 首页 > 面试题库 >

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

华烈
2023-03-14
问题内容

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

我公司的C#代码库很大。这段代码的一半以上是我们用于创建,读取,修改,计算和编写Excel工作簿的核心引擎。我们经常收到来自客户和潜在客户的问题,询问我们是否要构建引擎的Java版本-
他们中的许多人对UI完全不感兴趣。我们甚至有一些客户不愿意从其Java应用程序中使用.NET库。

因此,我们希望构建Java版的核心引擎,理想情况下无需维护单独的Java源代码库。

埃里克·辛克( Eric
Sink)很好地描述了这个问题。除了我们的软件许可包括免版税部署的事实外,我处于类似的职位,这使得Eric选择Mainsoft成为我们的首选。

几年来,我一直在无聊地搜索“ c#to
jvm”之类的东西,这已经有好几年了。我花了大约7年的时间为Java开发类似的软件,我相信我们可以轻松地封装我们在核心引擎中使用的.NET
API,并且可以使用Java库完成我们需要的一切。因此,如果我们只有C#->
JVM编译器,则可以为Java构建我们的核心引擎,并且不再需要拒绝愿意使用它的Java开发人员。

我不是在问Sun不执行C#编译器的技术原因。我认识到Java没有属性或64位无符号长等。为了争辩,仅假设可以通过扩展JVM和/或其他方法来解决所有这些技术问题。

而且我也不想就为什么一种语言/堆栈可能优于另一种语言/堆栈再进行辩论。我们业务的现实是,每个潜在客户都有很多。

Sun为什么要使用C#编译器?(当然是IMO)

使在Java平台上运行C#代码更加容易,意味着有更多开发人员和该平台更多的软件。平台的成功还有什么更重要的吗?乔纳森·施瓦茨(Jonathan
Schwartz)是一名软件专家。我将由比我更聪明的人来决定他是否担任Sun总裁兼首席执行官一项不可能的工作,但是在加入Sun不久后与Jonathan会面时,我的印象是他了解软件并且需要大量软件。开发人员基础。

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

  1. NIH综合征?
  2. 斯科特·麦克尼利(Scott McNealy)的幽灵?
  3. 太多的Java开发人员不喜欢或不信任与Microsoft相关的任何内容?
  4. 他们同意不承担大笔费用吗?
  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,然后这样做,您将永远不会从Sun通过C#到JVM编译器获得任何帮助。



 类似资料:
  • 问题内容: 我的编译器类正在创建一种我们打算编译为Java字节码的语言。我们已经取得了很大的进步,并且正在接近代码生成的时间。 我们在查找有关如何从编译器创建.class文件的信息时遇到问题。您有什么资源可以为我们提供帮助吗?我们已经有很多关于指令集的文档,但是需要有关如何直接填写类文件/十六进制编写的信息。 我们不需要有关反编译.class文件的信息或建议。 即使是从头开始编写.class文件的

  • 问题内容: 如果我有一个字节变量: 为什么以下工作: …但这不是吗? 编译器第一理解为第二吗? [编辑] 我知道演员,但我想提请您注意 我认为它们是平等的,那么为什么编译器会有所不同呢?之间有什么区别 问题答案: 因为是的等效项,而的类型被提升为(JLS§5.6.2二进制数值提升),因此,如果不进行显式转换,则不能将其结果分配给它。 根据JLS,§15.26.2复合赋值运算符: 形式为E1 op

  • 问题内容: 如果你给 它没有编译,但是带有花括号的相同代码是: 有什么解释? 问题答案: 基本上,变量声明只能在块中声明。 查看 Java语言规范中“语句”的语法 -它包括Block,但不包括LocalVariableDeclarationStatement- 后者是block语法的一部分。 这实际上是实用主义的问题:如果没有括号,则只能使用一个语句。如果没有后续语句,则声明变量是没有意义的,因为

  • 问题内容: 我目前正在翻译中编写一个针对Java字节码的玩具编译器。 我想知道是否可以在编写.class文件之前在发出的字节码中进行各种简单的窥孔优化的目录,也许是摘要。我实际上知道一些具有此功能的库,但是我想自己实现。 问题答案: 您知道Proguard吗?http://proguard.sourceforge.net/ 这是一个很棒的字节码优化器,它实现了很多优化。请参阅常见问题解答以获取列表

  • 问题内容: 在方法或类范围内,下面的行进行编译(带有警告): 在类范围中, 变量获取其默认值 ,以下给出“未定义引用”错误: 它不是第一个应该以相同的“未定义参考”错误结束吗?还是第二行应该编译?还是我缺少什么? 问题答案: tl; dr 对于 字段 ,是非法的,因为它是对的非法前向引用。您实际上可以通过编写来解决此问题,该文件可以毫无抱怨地进行编译。 对于 局部变量 ,是非法的,因为未在使用前进

  • 我试图理解Scala代码如何在Java的IDE中与Java一起工作。我在使用Spark Java时遇到了这个疑问,在Spark Java中,我看到Scala包也在代码中,并且使用了相应的类和方法。 我的理解是,Scala代码需要Scala的编译器转换成Java.class文件,然后从它们开始JDK在JVM中完成它的部分,转换成二进制文件并执行操作。如果我说错了,请指正。 之后,在eclipse中的