使用哪个Common Lisp实现?[关闭]


45

在Common Lisp中开始开发似乎有一个直接的问题:选择一个实现。在考虑实施CL时,应考虑什么,以及应承担多少权重?

是否应符合ANSI标准?SLIME应该支持吗?某些实现是否缺少好的库,文档等?


有趣的问题:我现在正在阅读“ Practical Common Lisp”,并在CLISP中尝试了示例,但是我猜任何实现都符合标准:Common Lisp对我来说似乎是一种非常成熟和稳定的语言。
Giorgio

Answers:


25

这取决于您的特定需求以及特定实现的优势和劣势。就是说,这是我想到不同实现时首先想到的:

SBCL非常快,并且擅长数字运算。因此,如果您依赖大量的数值计算,那可能是适合您的正确实现。而且,它具有不错的类型推断(对于Lisp实现)。

CLISP是一个相对较小的字节编译实现,对于脚本编写可能很有趣。

几年前,我尝试使用CCL并坚持使用它,因为与其他实现相比,我更喜欢它的错误消息和堆栈跟踪,并且编译时间相对较短。对我来说,轻松使用交互式功能是非常重要的。如果需要它的速度,我仍然可以为已部署的程序切换到SBCL。(尽管不需要。)此外,还可以选择提供商业支持。

如果要在JVM上部署,则有ABCL。

对于嵌入式使用,ECL。

Allegro拥有AllegroGraph,AllegroStore,易于使用的可视化GUI构建器等,但并不是所有人都喜欢他们的许可条款。

LispWorks似乎很好地适合最终用户应用程序编程,它具有一个不错的跨平台GUI工具包和许可条款,这些条款可能比Allegro更好地适合小型团队和单个程序员。(至少这是我想要的。)

当然,这些只是广义的类别和印象。我建议您仔细看一下SBCL,CCL和CLISP,因为IMHO是最常用和最受支持的开源实现,然后选择其中之一。也就是说,除非您的需求与ABCL或ECL所提供的相符。

是否应符合ASNI标准?

如果没有的话,那将不是CL的实现。(当然,实践中可能会有一些偏差,但是一致性至少应该是目标。)

SLIME应该支持吗?

可以-如果您使用SLIME。(我认为,这是目前最好的Lisp环境,但每个人都有自己的环境。)

某些实现是否缺少好的库,文档等?

至少大多数常用的库都应该很好地支持SBCL,CCL,Allegro和LispWorks。CLISP本身带有一个非常漂亮的库集合,并且也应该得到大多数支持。


22

Dan Weinreb(不幸的是,他去年去世了)写了一篇概述:

Lisp调查

CL实现之间存在许多差异。在一个实现中,不可能满足Lisp系统用户的所有不同需求(速度,大小,许可证,价格,兼容性,操作系统支持等)。必须使用一种或多种可用的实现方式(遵循某种哲学)来找到局部最优值:

  • 免费,免费,基于C的(因此已广泛移植):ECLCLISP

  • 免费,免费,基于JVM:ABCL

  • 免费,免费,广泛的本地实施:SBCLCCLCMUCL

  • 专有的,商业的,非常广泛的本地实现,对基于GUI的应用程序的出色支持:Allegro CLLispWorks

通过操作系统/平台:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.