Common Lisp实际上是在ANSI标准中定义的。有许多商业和自由开源软件(FOSS)的实现。这些实现通常符合标准,并为一些未在标准中定义的内容提供了一些自己的扩展(例如线程、FFI和Unicode)。
你可以参考http://www.cliki.net/Common%20Lisp%20implementation来比较各种实现。你应该根据自己的需要和喜好选择一个实现。对于初学者,你可以随便选一个。语言本身将是相同的,只要你不使用任何特定于实现的扩展,就可以轻松地切换到另一个实现。
我个人更喜欢在Linux上使用SBCL。它具有良好的性能,并包括线程等扩展功能。主要的弱点是程序会非常大(磁盘空间和内存使用率都很高)。如果你正在构建服务器端应用程序或其他足够庞大以超过实现的应用程序,那么这并不重要,但对于较小的客户端工具,你可能需要看看CLISP。我没有使用过GCL,所以无法发表太多评论。
为了澄清一下:Lisp 是一个编程语言家族的名称,包括但不限于以下几种:
gcl
、abcl
、clisp
、ecl
和 sbcl
等,它们提供了不同的(FOSS)标准实现(具有不同的完整度)。chicken
(大部分是 R5RS 和 R6RS)、gambit
(R4RS)、racket
(Scheme 方言和 R6RS)、mit-scheme
(R4RS)等如果您想从 Common Lisp 开始,最好的选择可能是使用 SBCL 实现以及 Emacs+SLIME 作为 IDE。
GCL(如 ECL)编译成 C 代码。ECL 主要用于将 Common Lisp 嵌入到 C 程序中。GCL 曾用于开发代数系统 Maxima 和 Axiom,但最近似乎被 SBCL 取代了(至少在 Maxima 的情况下是这样)。
CLISP 编译为 VM 代码,使其具有可移植性但速度较慢。该项目已经有一段时间没有更新了,在其中存在着一些问题,例如它与一些现代库不兼容,导致 CFFI 的一些问题。
补充一下:ABCL 是基于 JVM 的 Common Lisp 实现,是一个极其狭窄的应用领域实现(在我看来主要是由于 JVM 的缺陷)。