在Ubuntu存储库中有两个Lisp实现:GCL和CLISP。它们之间有根本区别吗?哪一个更接近行业标准?
答案 0 :(得分:5)
Common Lisp实际上是在ANSI标准中定义的。它有很多实现,包括商业和FOSS。这些实现通常符合标准,并为标准中未定义的内容(如线程,FFI和unicode)提供了一些自己的扩展。
您应该看到http://www.cliki.net/Common%20Lisp%20implementation来比较实现。您应该使用哪一个取决于您的需求和偏好。首先,您可以选择一个。语言本身无论如何都是一样的,只要您不使用任何特定于实现的扩展,您就可以根据需要轻松切换到另一个。
我个人更喜欢Linux上的SBCL。它具有良好的性能,并包括线程和所有的扩展。主要的缺点是程序将非常大(磁盘空间和内存使用)。如果您正在构建服务器端应用程序,或者无论如何都要超过实现的东西,这并不重要,但对于较小的客户端工具,您可能需要查看CLISP。我没有使用过GCL,所以我不能多说。
答案 1 :(得分:3)
只是为了澄清: Lisp 命名编程语言系列,其中包括(bot不限于):
gcl
,abcl
,clisp
,ecl
和sbcl
提供标准的不同(FOSS)实现(具有不同的完整性级别)。 chicken
(主要是R5RS和R6RS),gambit
(R4RS),racket
(方案和R6RS的方言),mit-scheme
(R4RS)如果您想从Common Lisp开始,可能最好的选择是使用SBCL实现Emacs+SLIME作为IDE。
GCL(如ECL)编译为C. ECL主要用于将Common Lisp嵌入到C程序中。使用GCL(并且仍然使用某些项目)来开发像Maxima和Axiom这样的代数系统,但最近它似乎被SBCL取代(至少在Maxima的情况下)。
CLISP编译成VM代码,使其可移植但速度慢。该项目暂时没有更新,CFFI存在一些问题,使其与一些现代库不兼容。
为了完整性:ABCL是JVM的Common Lisp实现,非常狭窄的小众实现(恕我直言,主要是由于JVM的缺陷)。