31

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

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

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

谢谢你。

4

9 回答 9

34

参见Common Lisp 实现: Daniel Weinreb 的调查。

于 2009-02-22T08:32:06.783 回答
16

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

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

于 2009-02-22T15:31:02.627 回答
15

我一直在寻找相同问题的 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 is nice, but is far slower, relative to SBCL or CCL. I see little upside
  • SBCL seems poor on Win32. Image size can get big.
  • CormanLisp is good on Win32, but not portable, and does not support Windows x64. It also seems that Roger Corman is not actively developing CormanLisp, which is a shame, but it's the reality.
  • Clojure (with a "j") is not Common Lisp. As nice as it may be, I think that if you already know CL, then it's not worth the overhead of learning Clojure's many differences. I'm sure some may pick them up fast, but I surely did not. (If Java-compatible code is what you're after, then look at ABCL).

dave

于 2012-01-17T03:26:48.720 回答
14

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

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

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

在 Windows 上,您最好的选择可能是 Allegro 或 LispWorks,尽管我在 Windows 上使用 clisp 取得了一些成功。SBCL 的 Windows 移植正在进展中,但我并没有使用太多,所以我不能真正发表评论。

一般来说,对这类通过研究或分析难以获得的事物的理解;它来自经验。只需选择一个您感到满意的体面实现,然后开始工作。你会在你去的时候弄清楚棘手的事情。

于 2009-02-22T04:38:10.730 回答
3

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

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

于 2009-02-22T04:19:56.920 回答
3

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

于 2009-04-20T23:32:26.047 回答
2

看来 SBCL 的 REPL 与 clisp 相比不友好?EG 我可以使用 TAB 键在 clisp 中自动完成输入。

所以 clisp 更适合 lisp 新手。

于 2011-09-15T07:11:15.977 回答
1

取决于您选择的操作系统

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

编辑:

Windows 上的 Sbcl 缺乏线程,并且通常不是那么稳定,并且没有一个核心维护人员使用 Windows。

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

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

于 2009-02-24T16:23:54.060 回答
1

如果您在 Windows 下使用cygwin安装 clisp,我非常幸运。

于 2009-08-22T13:55:52.700 回答