Joel Spolsky赞扬了不依赖于运行时的程序的本机代码版本。
哪些本机代码编译器可用于函数式语言?
是的,还有:
ocamlc
是字节码编译器,ocamlopt
是本机代码编译器。
GCL
将 Common Lisp 编译为本机二进制文件。
F# 没有任何东西,因为据我所知,.NET 没有像 Joel 提到的本机编译器。实际上,CSML 可用于从 ocaml 调用 C#,呃,不确定是否可以将其编译为本机代码 - 似乎不太可能 - 尽管文档暗示了它,但它非常不完整。
许多函数式语言的编译就像任何其他语言一样。
例如在 Clojure 中:
有趣的一点是,所有这些都是动态发生的,即在程序执行期间的任何时候,您都可以编写新的源代码,将其传递给阅读器和各种编译步骤,然后运行新编译的本机代码,而无需重新启动程序。这很重要,因为它可以在 REPL 进行交互式开发,同时仍然提供完全编译代码的好处。
PLT Scheme有一个 JIT 编译器。
Stalin是一个 Scheme 编译器,它进行了可笑的激进优化。
除CLISP外,我所知道的所有 Common Lisp 实现都编译为本机代码。(然而,是否应该将 CL 视为一种函数式语言取决于术语“函数式”的含义。)
MLton是标准 ML 的高度优化编译器。
函数式语言可以并且已经被非常有效地编译了一段时间。在这方面,命令式语言没有区别。