当我开始从Practical Common Lisp学习CL时,就像书中所说的那样,我开始使用Allegro CL编译器.我停止使用它,因为它的商业,但免费的位没有给我留下深刻的印象.它需要连接到远程服务器才能获得一些许可.
我切换到'clisp'并使用它.现在,我听说过SBCL并计划开始使用它.
所以,问题是:各种ANSI CL实现有何不同?使用一个在另一个上的任何实际经验?
谢谢.
请参阅Common Lisp实现: Daniel Weinreb 的调查.
如果您在可以运行SBCL的计算机上,则应该使用它.它是最快的免费Lisp编译器(它可以生成与Haskell,OCaml,Java,C和C++一样快的代码,这些代码都非常快,特别是与Python和Ruby相比).它也是一个相当完整的实现,并支持Swank的大部分功能(对于SLIME),这在开发时很好.
正如其他一些评论所提到的,当你刚开始时,你不会发现任何差异.所有免费的CL实现都"足够快"并支持您需要的所有功能.但是如果你开始编写制作软件,你会欣赏SBCL的功能.OTOH,现在没有理由不切换.
我一直在寻找Win32解决方案来解决同样的问题.至于Windows上的免费Lisp实现,我强烈推荐Clozure CL(CCL).有几个原因.首先是Clozure支持32位和64位二进制文件.它非常快,而且有点紧凑.但最重要的是,它是一致和正确的.在与Lispworks(我想念)合作多年之后,我发现它是一个非常成熟的Lisp.CCL在本机操作系统线程,套接字和其他一些不属于CL规范的元素上做得非常好.它对CLOS的实现似乎非常彻底.它的GC和内存管理非常出色.我在Win32上将CCL与SBCL进行了比较,虽然SBCL在几个基准测试中表现得更快一些,但它的影响更大,并且即使在几个强制GC之后,它的形象也在不断增长和增长.同时,CCL一致,小巧,快捷,可爱.如果您想要一个在Windows,Mac和Linux之间保持一致的平台,并且具有32位和64位支持,那么请不要再犹豫了.
我在Win32上尝试过CormanLisp,我喜欢它有很多东西.但它无法在64位Windows平台上正常运行,并且仅限于Win32.它也不是免费的,不知何故,当我向它扔掉一些垃圾代码时,我就崩溃了.我也很容易让SBCL崩溃.CCL不是这样.坚如磐石的.真的,那些家伙做了一个了不起的工作,最终将帮助Lisp保持活力.
至于SLIME,我没有尝试让SLIME与SBCL合作,但我确实让它与CCL很好地配合.无论你喜欢什么,我建议人们编写代码以便于携带.瞄准Windows,Mac和Linux,目标是64位.如果你考虑这些,那么CCL是你最好的选择.
对此答案的最后一次尝试是考虑其他人的错误.以下是我发现的内容:
CLISP很好,但相对于SBCL或CCL而言要慢得多.我看到一点上升空间
在Win32上,SBCL似乎很差.图像尺寸可以变大.
CormanLisp在Win32上很好,但不是便携式的,不支持Windows x64.Roger Corman似乎也没有积极开发CormanLisp,这是一种耻辱,但这是现实.
Clojure(带有"j")不是 Common Lisp.虽然它可能很好,但我认为如果你已经知道CL,那么学习Clojure的许多差异并不值得花费.我相信有些人可能会快速接受它们,但我肯定没有.(如果您正在使用与Java兼容的代码,那么请查看ABCL).
戴夫
ANSI CL的某些部分将某些细节留给实现来确定; 你会发现,对于标准的那些部分,每个实现都有自己的怪癖.
此外,查找对运行时很重要但未在语言中定义的内容:线程和多处理以及垃圾收集等内容在性能和可靠性方面会有很大差异.
我发现SBCL是最容易在Linux中使用的实现; 它对Linux中的线程有很好的支持.我不能多说垃圾收集器,因为它对我来说并不重要.
在Windows上,你最好的选择可能是Allegro或LispWorks,尽管我在Windows上使用clisp取得了一些成功.SBCL的Windows端口正在进行中,但我没有太多使用它,所以我无法评论.
一般来说,理解通过研究或分析难以获得的这类事物; 它来自经验.只需选择一个你熟悉的体面实现,并开始工作.当你走的时候,你会发现棘手的东西.