Lisp 不同的ANSI CL实现有何不同?

Lisp 不同的ANSI CL实现有何不同?,lisp,common-lisp,Lisp,Common Lisp,当我开始从实用的公共Lisp学习CL时,正如书中所说,我从Allegro CL编译器开始。我停止使用它,因为它的商业性,但免费的一点没有打动我。它需要连接到其远程服务器以获取某些许可资料 我切换到“clisp”并正在使用它。现在,我已经听说了SBCL,并计划开始使用它 所以,问题是:不同的ANSI CL实现有何不同?有使用其中一个的实际经验吗 谢谢。我不太清楚,无法给你一个详细的答案,但我注意到,当我在AI课程中使用CL时,SBCL比Clisp快得多。除非你有令人信服的理由不去,否则我建议你去S

当我开始从实用的公共Lisp学习CL时,正如书中所说,我从Allegro CL编译器开始。我停止使用它,因为它的商业性,但免费的一点没有打动我。它需要连接到其远程服务器以获取某些许可资料

我切换到“clisp”并正在使用它。现在,我已经听说了SBCL,并计划开始使用它

所以,问题是:不同的ANSI CL实现有何不同?有使用其中一个的实际经验吗


谢谢。

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


我听说Clisp比SBCL(它有许多特定于处理器的优化)更易于安装和移植,但是如果你使用Linux,它们都很容易从软件包管理器中获取。

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

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

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

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


一般来说,对这些难以通过研究或分析获得的东西的理解;它来自经验。只需选择一个您熟悉的像样的实现,就可以开始工作了。您将在运行过程中找出棘手的问题。

请参阅Daniel Weinreb。

如果您使用的机器可以运行SBCL,您应该使用它。它是 最快的免费Lisp编译器(它可以生成同样快的代码) 如Haskell,OcAML,java,C++和C++,它们都非常快, 尤其是与Python和Ruby相比)。这也是一个相当完整的过程 实现,并支持Swank的大部分功能(用于SLIME),这在开发时很好

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

取决于您选择的操作系统

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

windows上的Sbcl缺少线程,并且通常不太稳定,而且没有一个核心维护人员使用windows

ecl是跨平台Lisp的更好选择,它的特性集在所有主要平台上都是同等稳定的

编辑2011-10:
Sbcl windows现在具有线程支持。它还没有完全融入mainiline,但是有一个相当稳定的fork,它有线程和其他Windows特有的优点。

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

如果您在windows下,我很幸运地安装了clisp。

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


因此,对于lisp新手来说,clisp是一个更好的解决方案。

我一直在寻找解决同一问题的Win32解决方案。至于Windows上的免费Lisp实现,我强烈推荐Clozure CL(CCL)。这有几个原因。首先,Clozure支持32位和64位二进制文件。它非常快,而且有点紧凑。但最重要的是,它是一致和正确的。我发现它是一个非常成熟的Lisp,在使用Lispworks(我错过了)几年之后。CCL在本机OS线程、套接字和其他一些不属于CL规范的元素方面做得非常好。它的CLO实现似乎非常彻底。它的GC和内存管理非常出色。我在Win32上比较了CCL和SBCL,虽然SBCL在几个基准测试中都快了一点,但它的性能要差得多,即使在几次强制GCs之后,它的形象也在不断增长。同时,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,速度要慢得多。我看不出有什么好处
  • SBCL似乎很差