包GCL和CLISP有什么区别?

时间:2016-01-05 14:09:57

标签: ubuntu common-lisp clisp gnu-common-lisp

在Ubuntu存储库中有两个Lisp实现:GCL和CLISP。它们之间有根本区别吗?哪一个更接近行业标准?

2 个答案:

答案 0 :(得分:5)

Common Lisp实际上是在ANSI标准中定义的。它有很多实现,包括商业和FOSS。这些实现通常符合标准,并为标准中未定义的内容(如线程,FFI和unicode)提供了一些自己的扩展。

您应该看到http://www.cliki.net/Common%20Lisp%20implementation来比较实现。您应该使用哪一个取决于您的需求和偏好。首先,您可以选择一个。语言本身无论如何都是一样的,只要您不使用任何特定于实现的扩展,您就可以根据需要轻松切换到另一个。

我个人更喜欢Linux上的SBCL。它具有良好的性能,并包括线程和所有的扩展。主要的缺点是程序将非常大(磁盘空间和内存使用)。如果您正在构建服务器端应用程序,或者无论如何都要超过实现的东西,这并不重要,但对于较小的客户端工具,您可能需要查看CLISP。我没有使用过GCL,所以我不能多说。

答案 1 :(得分:3)

只是为了澄清: Lisp 命名编程语言系列,其中包括(bot不限于):

  • ANSI Common Lisp 。 Ubuntu中的软件包:gclabclclispeclsbcl提供标准的不同(FOSS)实现(具有不同的完整性级别)。
  • 方案(也由标准定义,但存在多个版本的标准:R4RS,R5RS,R6RS和R7RS)。 Ubuntu中的软件包:chicken(主要是R5RS和R6RS),gambit(R4RS),racket(方案和R6RS的方言),mit-scheme(R4RS)
  • Clojure 是JVM的Lisp方言。 Ubuntu可能会提供该软件包,但最好通过Leiningen
  • 安装它
  • LFE newLISP Hy 等等是Lisp的其他(也许,鲜为人知)方言

如果您想从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的缺陷)。