GCL和CLISP软件包有什么区别?

4
在Ubuntu仓库中有两个Lisp的实现:GCL和CLISP。它们之间有根本性的区别吗?哪一个更接近于行业标准?
2个回答

5

Common Lisp实际上是在ANSI标准中定义的。有许多商业和自由开源软件(FOSS)的实现。这些实现通常符合标准,并为一些未在标准中定义的内容提供了一些自己的扩展(例如线程、FFI和Unicode)。

你可以参考http://www.cliki.net/Common%20Lisp%20implementation来比较各种实现。你应该根据自己的需要和喜好选择一个实现。对于初学者,你可以随便选一个。语言本身将是相同的,只要你不使用任何特定于实现的扩展,就可以轻松地切换到另一个实现。

我个人更喜欢在Linux上使用SBCL。它具有良好的性能,并包括线程等扩展功能。主要的弱点是程序会非常大(磁盘空间和内存使用率都很高)。如果你正在构建服务器端应用程序或其他足够庞大以超过实现的应用程序,那么这并不重要,但对于较小的客户端工具,你可能需要看看CLISP。我没有使用过GCL,所以无法发表太多评论。


谢谢!对于LISP来说非常有用的网站!我选择了SBCL! - Artur Olenberg

5

为了澄清一下:Lisp 是一个编程语言家族的名称,包括但不限于以下几种:

  • ANSI Common Lisp。Ubuntu 中提供的软件包有 gclabclclispeclsbcl 等,它们提供了不同的(FOSS)标准实现(具有不同的完整度)。
  • Scheme(也可根据标准定义,但是有多个版本的标准:R4RS、R5RS、R6RS 和 R7RS)。Ubuntu 中提供的软件包有 chicken(大部分是 R5RS 和 R6RS)、gambit(R4RS)、racket(Scheme 方言和 R6RS)、mit-scheme(R4RS)等
  • Clojure 是基于 JVM 的 Lisp 方言。Ubuntu 可能提供此软件包,但最好通过 Leiningen 安装。
  • LFEnewLISPHy 等是其他(可能不那么出名的)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 的缺陷)。


2
GCL并不是“主要用于将Common Lisp嵌入C程序” 。GCL主要用于开发和创建应用程序:ACL2,Axiom,Maxima等。 GCL多年来主要用于Maxima项目中,因此特别适用于数学应用程序。 - Rainer Joswig
@RainerJoswig 好的,我的评论主要是针对ECL的,我做了一个无效的假设。我已经更新了答案。 - mobiuseng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接