有 Gambit Scheme、MIT Scheme、PLT Scheme、Chicken Scheme、Bigloo、Larceny、...;然后是所有的口齿不清。
然而,(据我所知)LLVM 上没有一个流行的方案/lisp,尽管 LLVM 提供了很多不错的东西,例如:
- 比 x86 更容易生成代码
- 轻松进行 C FFI 调用...
那么为什么 LLVM 上没有好的方案/lisp 呢?
LLVM 提供了很多,但它仍然只是函数式语言所需的运行时的一小部分。C FFI 调用并不复杂,因为 LLVM 将内存管理留给其他人处理。与垃圾收集器交互是使 FFI 调用在诸如 Scheme 等语言中变得困难的原因。
您可能对HLVM感兴趣,但目前它还不仅仅是实验性的。
对于 CL:Clasp是 LLVM 上的 Common Lisp 实现,而mocl在 LLVM 上实现了 Common Lisp 的一个子集。
对于 Scheme:有一个自托管 Scheme->LLVM 演示和一个用于 Bigloo Scheme 的原型 LLVM 后端。
对于 Clojure:有Rhine,它是受 Clojure 启发的 lisp。
这里有一个非常小且显然未优化的 Scheme 编译器:
http://www.ida.liu.se/~tobnu/scheme2llvm/
从字面上理解你的问题,
我认为构建基于 LLVM 的 Scheme 编译器可能会很有趣。SICP 和 PAIP 中的 Scheme 编译器都是很好的例子。
要记住的一件事是,这些实现中的许多都具有 C FFI 和本机代码编译器,它们明显早于 LLVM。
CL-LLVM为 LLVM提供 Common Lisp 绑定。它采用 FFI 方法,而不是尝试直接输出 LLVM 程序集或位码。
该库可通过 Quicklisp 获得。
mocl是 Common Lisp 的相对静态子集的编译器。它通过 LLVM/Clang 编译。
LLVM 上没有(据我所知)一个流行的方案/lisp
目前,llvm-gcc
它是最接近LLVM上任何语言的流行实现的东西。特别是,目前还没有成熟的基于 LLVM 的带有垃圾收集的语言实现。我确信 LLVM 将被用作许多令人兴奋的下一代语言实现的基础,但这将花费大量时间和精力,而且在这种情况下 LLVM 还处于早期阶段。
我自己的HLVM项目是仅有的基于 LLVM 的垃圾收集实现之一,它的 GC 支持多核但绑定松散:我将影子堆栈用于“不合作的环境”,而不是破解 LLVM 中的 C++ 代码以集成真实堆栈步行。
有一个Scheme2LLVM,显然基于 SICP:
该代码与 SICP(计算机程序的结构和解释)一书第五章中的代码非常相似,不同之处在于它实现了 SICP 假定显式控制评估器(虚拟机)已经具有的额外功能。编译器的许多功能都在方案的子集 llvm-defines 中实现,这些方案被编译为 llvm 函数。
不知道算不算“好”。
GHC 正在试验一个方案后端,并通过他们的本机代码编译器获得了非常令人兴奋的初步结果。当然,这就是haskell。但他们最近对 LLVM 进行了新的更改,使尾调用更容易 IIRC。这可能对某些方案实施有好处。