【问题标题】:Are there native compilers for functional programming languages [closed]是否有函数式编程语言的本机编译器[关闭]
【发布时间】:2010-09-11 09:48:25
【问题描述】:

Joel Spolsky praised 程序的本机代码版本,不依赖于运行时。

哪些本机代码编译器可用于函数式语言?

【问题讨论】:

    标签: functional-programming


    【解决方案1】:

    是的,还有:

    ocamlc 是字节码编译器,ocamlopt 是本机代码编译器。 GCL 将 Common Lisp 编译为本机二进制文件。

    F# 没有任何东西,因为据我所知,.NET 没有像 Joel 提到的本机编译器。其实CSML可以用来从ocaml调用C#,呃,不知道能不能把它编译成native code——好像不太可能——虽然文档有提到,但是很不完整。

    【讨论】:

      【解决方案2】:

      许多函数式语言的编译方式与其他任何语言一样。

      例如在 Clojure 中:

      • reader 将源代码文本转换为代表程序的数据结构(s-expression
      • 如果需要,然后应用宏来转换代码
      • Clojure 编译器随后将代码转换为 Java 字节码 - 这与 Java、Scala 和其他 JVM 语言使用的机器可移植格式相同
      • 最后,JVM 中的JIT compiler 将字节码转换为本机机器码,可能会即时执行各种优化。这是在其运行的任何平台上直接执行的代码。

      有趣的一点是,所有这些都是动态发生的,即在程序执行期间的任何时候,您都可以编写新的源代码,将其传递给阅读器和各种编译步骤,然后运行新编译的本机代码 > 必须重新启动程序。这很重要,因为它启用了interactive development at the REPL,同时仍然提供了完全编译代码的好处。

      【讨论】:

      • 然后,您还可以使用 GCJ 或 IKVM/Mono 将 JVM 字节码提前编译为本机机器码。
      【解决方案3】:

      PLT Scheme 有一个 JIT 编译器。

      Stalin 是一个 Scheme 编译器,它进行了可笑的激进优化。

      除了CLISP 之外,我所知道的所有 Common Lisp 实现都编译为本机代码。 (但是,是否应该将 CL 视为函数式语言取决于术语“函数式”的含义。)

      MLton 是标准 ML 的高度优化编译器。

      函数式语言可以并且已经被非常有效地编译了一段时间。在这方面,命令式语言没有区别。

      【讨论】:

        【解决方案4】:

        这个帖子真的很不清楚。问题似乎是“是否有功能语言的编译器可以生成本机可执行文件而无需安装其他软件?”

        答案通常是肯定的。例如,Haskell 具有生成本机二进制文件的 a compiler。许多其他函数式语言都有类似的编译器。

        【讨论】:

        • 虽然,Haskell 使用 C-- 作为中间语言(以前使用纯 C),所以它不是与 C 本身相同的编译语言。
        • @Sean:C 也经历了几个步骤,即使它是内部的。例如,Clang 以 C 开头,但在链接到可执行文件之前先转换为 LLVM IL,然后再进行汇编。这与 Haskell 并没有什么不同,Haskell 基本上做同样的事情(尽管可能需要更多步骤)。
        猜你喜欢
        • 1970-01-01
        • 2011-09-04
        • 1970-01-01
        • 2010-09-20
        • 2010-11-10
        • 2012-08-06
        • 1970-01-01
        • 2010-12-06
        • 1970-01-01
        相关资源
        最近更新 更多