各种ANSI CL实现有何不同?

时间:2009-02-22 03:42:57

标签: lisp common-lisp

当我开始从Practical Common Lisp学习CL时,就像书中所说的那样,我开始使用Allegro CL编译器。我停止使用它,因为它的商业,但免费的位没有给我留下深刻的印象。它需要连接到远程服务器以获取一些许可资料。

我切换到'clisp'并正在使用它。现在,我一直在听SBCL并计划开始使用它。

所以,问题是:各种ANSI CL实现有何不同?使用一个在另一个上的任何实际经验吗?

谢谢。

9 个答案:

答案 0 :(得分:31)

请参阅Daniel Weinreb撰写的Common Lisp Implementations: A Survey

答案 1 :(得分:15)

如果您使用的是可以运行SBCL的计算机,则应该使用它。它的 最快的免费Lisp编译器(它可以生成快速的代码) 作为Haskell,OCaml,Java,C和C ++,它们都非常快, 特别是与Python和Ruby相比)。它也相当完整 实现,并支持Swank的大部分功能(对于SLIME),这在你开发时很不错。

正如其他一些评论所提到的,你不会真正注意到任何评论 你刚开始时的差异。所有免费的CL 实现“足够快”并支持您需要的所有功能。但是如果你开始写作 生产软件,你会欣赏SBCL的功能。 OTOH,现在没有理由不转换。

答案 2 :(得分:14)

我一直在研究同一问题的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)。

戴夫

答案 3 :(得分:12)

ANSI CL的某些部分将某些细节留给实现来确定;你会发现,对于标准的那些部分,每个实现都有自己的怪癖。

此外,查找对运行时很重要但未在语言中定义的内容:线程和多处理以及垃圾收集等内容在性能和可靠性方面会有很大差异。

我发现SBCL是最容易在Linux中使用的实现;它对Linux中的线程有很好的支持。我不能多说垃圾收集器,因为它对我来说并不重要。

在Windows上,你最好的选择可能是Allegro或LispWorks,尽管我在Windows上使用clisp取得了一些成功。 SBCL的Windows端口正在进行中,但我没有太多使用它,所以我无法发表评论。

一般而言,理解通过研究或分析难以获得的这类事物;它来自经验。只需选择一个你熟悉的体面实现,并开始工作。当你走的时候,你会发现棘手的东西。

答案 4 :(得分:3)

我不知道给你一个详细的答案,但是我注意到当我在我的AI课程中使用CL时,SBCL比Clisp快得多。除非你有令人信服的理由,否则我建议你选择SBCL。

我听说Clisp比SBCL更容易安装并且更便携(它有很多特定于处理器的优化),但是如果你使用的是Linux,它们很容易从包管理器中获取。

答案 5 :(得分:3)

我发现clisp中的错误消息更友好,可以帮助我更快地找到问题。

答案 6 :(得分:2)

与clisp相比,似乎SBCL的REPL不友好?例如。我可以使用TAB键在clisp中自动完成输入。

所以对于lisp新手来说,clisp更好。

答案 7 :(得分:1)

取决于您选择的操作系统

  • Windows - 使用ecl或abcl
  • Linux - 使用sbcl或ecl或abcl或cmucl
  • Mac - ccl或ecl或sbcl
  • 其他 - abcl或ecl或sbcl

编辑:

Windows上的Sbcl缺少线程,并且通常不那么稳定,并且核心维护者都没有使用窗口。

ecl是跨平台lisps的更好选择,其功能集在所有主要平台上都是平等稳定的。

编辑2011-10: Sbcl窗口现在具有线程支持。它还没有在mainiline中完全合并,但是有一个非常稳定的fork,它具有线程和其他Windows特定的好东西。

答案 8 :(得分:1)

如果你在windows下,我使用cygwin安装clisp时运气很好。