【问题标题】:What are the compilers available that target JVM or CLR apart from javac or Microsoft's compilers for .Net?除了 javac 或 Microsoft 的 .Net 编译器之外,还有哪些针对 JVM 或 CLR 的可用编译器?
【发布时间】:2012-02-12 12:53:05
【问题描述】:

除了 javac 或 Microsoft 的 .Net 编译器之外,还有哪些针对 JVM 或 CLR 的可用编译器?为什么我们没有针对 JVM 或 CLR 的流行语言(如 C、C++)的编译器?

【问题讨论】:

  • 实际上已经有人尝试将 C 编译到 JVM,但我怀疑他们的表现是否良好。手动内存管理和指针算法不适合 JVM,即使这样,它也需要大量工作才能获得几乎为零的收益。您对发出 JVM 字节码的 C 编译器有何期望?
  • 你的意思是真的只有编译器,还是你对 JVM 存在的所有解释器也满意?至少会有 JRuby 和 JPython。我认为 Clojure 和 Scala 都可以编译为字节码,而不是 java。

标签: java .net compiler-construction jvm clr


【解决方案1】:

维基百科对此有很好的信息:

为什么我们没有针对 JVM 或 CLR 的流行语言(如 C、C++)的编译器?

嗯,有 C++/CLI。链接:

【讨论】:

    【解决方案2】:

    说到 .NET,有 mono

    fsf 有一个Java compiler 作为GCC 的一部分。

    至于为什么没有从 C/C++ 编译到 JVM/CLR 的现有编译器 - 不确定是不是这种情况,但除了大量不同的内存模型之外,您需要记住这些语言也是部分指定的由随附的库(比如 libc)提供——这些库并不小,也需要转换,这也不是一件小事。

    【讨论】:

      【解决方案3】:

      存在大量编译成字节码的编译器,特别是在Java世界中,字节码级别非常高,因此为它编写编译器相对容易。

      对于 C 来说,问题在于编译程序所需的机器抽象级别比 JVM 提供的级别。例如。为了使指针算法起作用,你必须有一个单一的、大块的内存来放置所有东西,这违背了 Java 将世界视为许多独立对象的观点。

      但是,它可以做到。 NestedVM 通过将 C 程序编译到具有自定义运行时库的 MIPS-CPU 来解决这个问题。然后将生成的代码直接解释为字节码。

      【讨论】:

        【解决方案4】:

        RemObjects 拥有适用于 JVM 和 .NET 的 Oxygene 编译器(也就是适用于 Java 和 .NET 的 Pascal)。

        http://www.remobjects.com/oxygene/

        Microsoft 确实有用于 CLR 的 VC++ 编译器,但这是对 C++ (C++/CLR) 的扩展。由于这个事实,没有人试图为 JVM 定制 C++(据我所知)。

        C 不是 OO 语言,因此除非经过大量定制(如 C++/CLR),否则它不适合 JVM 或 CLR。​​

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-01
          • 2021-08-31
          • 1970-01-01
          相关资源
          最近更新 更多