4

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

4

2 回答 2

5

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

您应该查看http://www.cliki.net/Common%20Lisp%20implementation以比较实现。您应该使用哪一种取决于您的需求和偏好。对于开始,你可以选择一个。无论如何,语言本身都将是相同的,只要您不使用任何特定于实现的扩展,您就可以在需要时轻松切换到另一种。

我个人更喜欢 Linux 上的 SBCL。它具有良好的性能,并包括线程和所有的扩展。主要缺点是程序会非常大(磁盘空间和内存使用量)。如果您正在构建一个服务器端应用程序,或者任何事情如此之大以至于它超过了实现,那么这并不重要,但是对于较小的客户端工具,您可能想要研究 CLISP。我没用过GCL,所以不能多说。

于 2016-01-05T14:49:27.230 回答
4

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

  • ANSI 通用 Lisp。Ubuntu 中的软件包:gclabclclisp和提供标准eclsbcl不同 (FOSS) 实现(具有不同的完整性级别)。
  • 方案(也由标准定义,但存在多个标准版本: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 开始,最好的选择可能是使用带有Emacs+SLIME的SBCL实现作为 IDE。

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

CLISP 编译成 VM 代码,使其可移植但速度慢。该项目有一段时间没有更新,其中的 CFFI 存在一些问题,使其与一些现代库不兼容。

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

于 2016-01-06T20:04:31.190 回答