代码之家  ›  专栏  ›  技术社区  ›  Pindatjuh

以JVM而不是x86为目标的缺点是什么?

  •  12
  • Pindatjuh  · 技术社区  · 14 年前

    我正在发展一门新语言。我最初的目标是为Windows平台编译到原生x86,但现在我对此持怀疑态度。

    我看到一些新的语言针对JVM(最著名的Scala和Clojure)。当然,不可能移植每种语言 容易地

    在提出这个问题之后,我对这个决定更加怀疑。我现在知道了一些“pro”JVM参数。最初的问题是: 在为新语言创建编译器时,以JVM为目标是一个好主意吗?

    更新了问题: 在Windows上以JVM而不是x86为目标的缺点是什么?

    4 回复  |  直到 12 年前
        1
  •  4
  •   mikera    14 年前

    many other languages 成功地这样做应该会给你一些安慰。

    总的来说,我认为JVM可能是目前新的/实验性语言的最佳目标,特别是如果您希望在利用真正出色的JIT编译器和大量非常强大的库的同时实现跨平台功能的话。

    尽管如此,在我看来,针对JVM可能遇到的主要缺点如下:

    • 在字节码级别缺少尾部递归支持。有很多方法可以解决这个问题(例如,请参阅Clojure的“recur”特殊形式),但是对于一些语言实现来说,尤其是函数式语言来说,这是一个很烦人的问题。可能最终会在未来的Java版本中修复。

    • 有点明显,但是您需要在您的客户机上安装一个JVM。现在通常不是问题,但仍有一些情况下,这可能是棘手的。

    • Java中的原语(int、long、float等)的行为与对象系统的其他部分不同。同样,您可以解决这个问题,但这对语言实现者来说是额外的麻烦。

    一些可能有用/有趣的链接:

        2
  •  7
  •   Will Hartung    14 年前

    您可能需要考虑将LLVM作为目标,而不是JVM。LLVM可以用于针对许多体系结构,包括x86。

    可移植性不仅仅是简单的CPU支持,但是LLVM可以提供很多帮助,如果您愿意的话,还可以提供本机代码。

        3
  •  3
  •   Daniel    14 年前

    如果您为JVM创建一种语言,那么您还有一个巨大的优势,那就是您脚下有一个巨大的库,可以从您的语言中轻松地使用它。如果您为x86编译,则很可能不是这种情况。我假设如果没有C解析器,就无法在语言中包含例如C-headers。

    基于这个原因,Scala、Groovy和其他公司都取得了巨大的成功。

        4
  •  1
  •   Puppy    14 年前

    如果您希望代码的运行时部分完全依赖于第三方代码并要求用户安装这样的代码,那么您应该只针对JVM, JVM将提供一些实质性的功能,这些功能不能合理地开发自己,或者要求人们为此而扩展(例如C++中的OS头), ,您对JNI作为本机代码(以及其他托管代码,如.NET)的接口感到满意。

    最终,这完全取决于您可用的资源以及您如何描述语言互操作。如果您打算使用JVM来提供许多特性,并且您对互操作的糟糕感到高兴,那么就使用它。否则,我认为你应该重新考虑。