Answers:
这取决于您的特定需求以及特定实现的优势和劣势。就是说,这是我想到不同实现时首先想到的:
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本身带有一个非常漂亮的库集合,并且也应该得到大多数支持。
Dan Weinreb(不幸的是,他去年去世了)写了一篇概述:
CL实现之间存在许多差异。在一个实现中,不可能满足Lisp系统用户的所有不同需求(速度,大小,许可证,价格,兼容性,操作系统支持等)。必须使用一种或多种可用的实现方式(遵循某种哲学)来找到局部最优值:
免费,免费,基于JVM:ABCL
专有的,商业的,非常广泛的本地实现,对基于GUI的应用程序的出色支持:Allegro CL,LispWorks
通过操作系统/平台: