Common Lisp 的最新标准

Most recent standard of Common Lisp

谁能告诉我最近标准化 Common Lisp 的文档是什么(各种实现都应该遵循该文档)?我问是因为我可以在网上找到许多关于 CL 的书籍都来自 90 年代,所以我想知道它们是否是最新的。我也来自 Scheme 背景,在 RnRS 系列中进行了标准化。对于 CL,我只知道 ANSI X3.226:1994 标准 (X3J13);是这个吗?

编辑
感谢您的回答,在结束问题之前让我稍微扩展一下:CL 中的情况是否与 Scheme 中的情况相同,即实现标准的相互不兼容扩展的各种实现,结果是没有单一的 "CL language",还是这个社区更统一?

是的。没变。

您可以在 "Common Lisp Hyperspec" (CLHS) 在线名称下以超文本形式找到它。

编辑:是的,这些实现有不同的扩展,彼此独立。然而,对于最重要的,有可移植性包装库,它们使用读取时间条件在不同环境中加载正确的代码。示例:bordeaux-threads(线程),osicat(系统调用)。

Common Lisp

Common Lisp 有四个语言阶段:

  1. 1984 年:CLtL,本书定义的 Common Lisp Common Lisp,语言
  2. 1990 CLtL2,Common Lisp,语言,第 2 版一书中描述的 Common Lisp。它描述了 ANSI CL 标准之前的过渡状态,并不完全兼容。这本书有 HTML 格式,请参阅 Common Lisp, the Language, 2nd Edition
  3. 1994,ANSI Common Lisp 标准,参见CL HyperSpec. A useful free PDF has been made from the last draft, see Common Lisp Standard Draft
  4. 从那时起:稳定的核心,各种扩展,对社区标准的尝试(CDR)

大多数当前的实现都提供带有各种扩展的完整 ANSI CL 标准。不提供完整标准的实现:mocl(按设计)和 GCL。对于许多扩展,有可移植的抽象层或可移植的库(线程、FFI、CLOS 流……)。

在 Common Lisp 中曾经可以找出一个实现提供了哪种语言方言,但今天只有 ANSI CL 才是真正重要的:

CL-USER 11 > (let ((dialects '()))
               (dolist (d '(:ansi-cl :cltl2 :cltl1))
                 (when (member d *features*) (push d dialects)))
               dialects)
(:ANSI-CL)

方案

因此,Common Lisp 的情况与 Scheme 有点不同:几乎所有的 Common Lisp 实现都提供了一种大型通用(!)语言。对于 Scheme,至少有 R5RS, R6RS and R7RS variants in use. But Scheme also has a lot of extensions and with a good community language extension management (see SRFI). There is some work on a R7RS large standard variant, which would standardize a large language: https://groups.google.com/forum/#!forum/scheme-reports-wg2