在 Ubuntu 存储库中有两种 Lisp 实现:GCL 和 CLISP。它们之间有根本区别吗?哪个更接近行业标准?
2 回答
Common Lisp 实际上是在 ANSI 标准中定义的。它有很多实现,包括商业和 FOSS。实现通常符合标准,并为标准中未定义的事物(例如线程、FFI 和 unicode)提供了一些自己的扩展。
您应该查看http://www.cliki.net/Common%20Lisp%20implementation以比较实现。您应该使用哪一种取决于您的需求和偏好。对于开始,你可以选择一个。无论如何,语言本身都将是相同的,只要您不使用任何特定于实现的扩展,您就可以在需要时轻松切换到另一种。
我个人更喜欢 Linux 上的 SBCL。它具有良好的性能,并包括线程和所有的扩展。主要缺点是程序会非常大(磁盘空间和内存使用量)。如果您正在构建一个服务器端应用程序,或者任何事情如此之大以至于它超过了实现,那么这并不重要,但是对于较小的客户端工具,您可能想要研究 CLISP。我没用过GCL,所以不能多说。
澄清一下:Lisp命名了一系列编程语言,其中包括(bot 不限于):
- ANSI 通用 Lisp。Ubuntu 中的软件包:
gcl
、abcl
、clisp
和提供标准ecl
的sbcl
不同 (FOSS) 实现(具有不同的完整性级别)。 - 方案(也由标准定义,但存在多个标准版本:R4RS、R5RS、R6RS 和 R7RS)。Ubuntu中的软件包:(
chicken
主要是R5RS和R6RS),gambit
(R4RS),racket
(Scheme和R6RS的方言),mit-scheme
(R4RS) - Clojure是一种用于 JVM 的 Lisp 方言。Ubuntu 可能会提供该软件包,但最好通过Leiningen安装它
- LFE、newLISP、Hy等是 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 的缺陷)。