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

What is the difference between packages GCL and CLISP?

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

Common Lisp 实际上是在 ANSI 标准中定义的。它有很多实现,包括商业和 FOSS。实现一般都符合标准,对于标准中没有定义的东西(比如threads、FFI、unicode),提供了自己的一些扩展。

您应该查看 http://www.cliki.net/Common%20Lisp%20implementation 以了解实施比较。您应该使用哪一个取决于您的需要和偏好。一开始你可以只选择一个。不管怎样,语言本身都是一样的,只要您不使用任何特定于实现的扩展,您就可以根据需要轻松切换到另一种语言。

我个人更喜欢 Linux 上的 SBCL。它具有良好的性能并包括线程和所有扩展。主要缺点是程序会非常大(磁盘 space 和内存使用)。如果您要构建服务器端应用程序或大到超过实现的东西,这并不重要,但对于较小的 client-side 工具,您可能需要研究 CLISP。没用过GCL,所以不好多说

澄清一下: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-dialect。 Ubuntu 可能会提供软件包,但最好通过 Leiningen
  • 安装
  • LFEnewLISPHy等都是其他的(或许,少已知)Lisp 的方言

如果您想从 Common Lisp 开始,最好的选择可能是使用 SBCL implementation with Emacs+SLIME 作为 IDE。

GCL(如 ECL)编译为 C。ECL 主要用于将 Common Lisp 嵌入 C-program。 GCL 曾用于(某些项目仍在使用)开发代数系统,如 Maxima 和 Axiom,但最近它似乎被 SBCL 取代(至少在 Maxima 的情况下)。

CLISP 编译成 VM-code 这使得它可移植但速度慢。项目好久没更新了,里面的CFFI有点问题,和一些现代库不兼容

为了完整性:ABCL 是 JVM 的 Common Lisp 实现,非常狭窄的利基实现(恕我直言,主要是由于 JVM 的缺陷)。