Scheme 在 R4RS 之前有宏吗?
Did Scheme have macros prior to R4RS?
我对Scheme宏的历史理解如下:
- R4RS在附录中引入了宏。这是对语言的扩展,而不是标准的一部分。它本质上是一个出现在R4RS文档中的库。
- R5RS 使用与 R4RS 类似的系统,但它完全是标准的一部分,而不是扩展。
- R6RS 和 R7RS(小)有轻微的 upgrades/changes,但没有实质性的。
- R4RS 之前的任何 Scheme 都没有任何宏,除了附带的外部库。
这是正确的吗?当我搜索 R4RS 和之后的任何东西时,它似乎通常是正确的,但我正在努力寻找一个易于搜索的 R3RS 副本。
方案实现从一开始就有宏,但第一个真正的标准是R2RS,它没有在规范中包含宏系统。
原始 SCHEME 论文“SCHEME:扩展 Lambda 微积分的解释器”(AIM-349,1975),也称为 R0RS,介绍了用 MacLISP 编写的 SCHEME 解释器.即使是 SCHEME 解释器的早期描述也讨论了宏:
...SCHEME has a class of primitives known as AMACROS
. These are similar to MacLISP MACRO
s, in that they are expanded into equivalent code before being executed.
本节接着介绍了SCHEME解释器自带的一些AMACROS
,包括COND
、AND
、OR
、BLOCK
、和 DO
.
文末介绍了 SCHEME 解释器的简单实现,但作者指出“SCHEME 的 'production version' 编码有些复杂。" 在介绍了这个实现之后,他们写道:
AMACRO
s are fairly complicated beasties, and have very little to do with the basic issues of the implementation of SCHEME per se, so the code for them will not be given here. AMACRO
s behave almost exactly like MacLISP macros.
在 R1RS 中,“关于 SCHEME 的修订报告:Lisp 的一种方言”(AIM-452,1978 年),我们发现:
C. Syntactic Extensions
SCHEME has a syntactic extension mechanism which provides a way to define an identifier to be a magic
word, and to associate a function with that word. The function accepts
the magic form as an argument, and produces a new form; this new form
is then evaluated in place of the original (magic) form. This is
precisely the same as the MacLISP macro facility.
这些早期的宏系统是更传统的 Lisp 宏系统,类似于 Common Lisp 宏。卫生宏在 R4RS (1991) 中作为语言扩展引入,但直到 R5RS (1998) 才成为标准的一部分。
早期的报告 R0RS 和 R1RS 与其说是麻省理工学院正在进行的 Scheme 开发报告,不如说是真正的语言标准。在 R2RS (AIM-848, 1985) 的介绍中,作者说主要 Scheme 实现的 15 位代表召集起来创建一个新标准,因为实现开始变得过于分歧。这个新标准规范中没有包含宏系统,但 R2RS 确实对宏做了一些说明,包括当时所有主要实现都有宏系统:
Scheme does not have any standard facility for defining new special forms.
Rationale: The ability to define new special forms creates numerous problems. All current implementations of Scheme have macro facilities that solve those problems to one degree or another, but the solutions are quite different and it isn't clear at this time which solution is best....
R3RS (1986) 有一些类似的语言:
Macros
Scheme does not have any standard facility for defining new kinds of expressions. The ability to alter the syntax of the language creates numerous problems. All current implementations of Scheme have macro facilities that solve those problems to one degree or another, but the solutions are quite different and it isn’t clear at this time which solution is best, or indeed whether any of the solutions are truly adequate. Rather than standardize, we are encouraging implementations to continue to experiment with different solutions.
所以我想说,将 R4RS 之前的宏系统描述为“边缘库”是不公平的,更公平地说,当时的 Scheme 宏系统是特定于实现的。一旦宏卫生被确定为一个重要问题,就会在 Scheme 社区内齐心协力寻找卫生宏的最佳解决方案,并且存在一些分歧。这是上面引用 R2RS 和 R3RS 中描述的情况,“...目前尚不清楚哪种解决方案是最好的....”
AIM-349 和 AIM-452(R0RS 和 R1RS)确实是麻省理工学院 Scheme 开发的报告,而 R2RS 是第一次真正尝试将不同的实现结合在一个标准下,即 R2RS 是第一个Scheme 的真实标准。宏出现在 AIM-349 和 AIM-452 描述的早期实现中,但从 R2RS 开始,宏被排除在实现需要遵守的标准之外,直到就该主题达成共识;每个实现都有自己的宏方法。
资源
R3RS。这是一个可搜索的 pdf 版本,质量比我在网上看到的大多数扫描件都要好。
Hygienic Macro Technology。这是 William Clinger 和 Mitchell Wand 撰写的一篇相当长的论文,描述了卫生宏的发展历史。
我对Scheme宏的历史理解如下:
- R4RS在附录中引入了宏。这是对语言的扩展,而不是标准的一部分。它本质上是一个出现在R4RS文档中的库。
- R5RS 使用与 R4RS 类似的系统,但它完全是标准的一部分,而不是扩展。
- R6RS 和 R7RS(小)有轻微的 upgrades/changes,但没有实质性的。
- R4RS 之前的任何 Scheme 都没有任何宏,除了附带的外部库。
这是正确的吗?当我搜索 R4RS 和之后的任何东西时,它似乎通常是正确的,但我正在努力寻找一个易于搜索的 R3RS 副本。
方案实现从一开始就有宏,但第一个真正的标准是R2RS,它没有在规范中包含宏系统。
原始 SCHEME 论文“SCHEME:扩展 Lambda 微积分的解释器”(AIM-349,1975),也称为 R0RS,介绍了用 MacLISP 编写的 SCHEME 解释器.即使是 SCHEME 解释器的早期描述也讨论了宏:
...SCHEME has a class of primitives known as
AMACROS
. These are similar to MacLISPMACRO
s, in that they are expanded into equivalent code before being executed.
本节接着介绍了SCHEME解释器自带的一些AMACROS
,包括COND
、AND
、OR
、BLOCK
、和 DO
.
文末介绍了 SCHEME 解释器的简单实现,但作者指出“SCHEME 的 'production version' 编码有些复杂。" 在介绍了这个实现之后,他们写道:
AMACRO
s are fairly complicated beasties, and have very little to do with the basic issues of the implementation of SCHEME per se, so the code for them will not be given here.AMACRO
s behave almost exactly like MacLISP macros.
在 R1RS 中,“关于 SCHEME 的修订报告:Lisp 的一种方言”(AIM-452,1978 年),我们发现:
C. Syntactic Extensions
SCHEME has a syntactic extension mechanism which provides a way to define an identifier to be a magic word, and to associate a function with that word. The function accepts the magic form as an argument, and produces a new form; this new form is then evaluated in place of the original (magic) form. This is precisely the same as the MacLISP macro facility.
这些早期的宏系统是更传统的 Lisp 宏系统,类似于 Common Lisp 宏。卫生宏在 R4RS (1991) 中作为语言扩展引入,但直到 R5RS (1998) 才成为标准的一部分。
早期的报告 R0RS 和 R1RS 与其说是麻省理工学院正在进行的 Scheme 开发报告,不如说是真正的语言标准。在 R2RS (AIM-848, 1985) 的介绍中,作者说主要 Scheme 实现的 15 位代表召集起来创建一个新标准,因为实现开始变得过于分歧。这个新标准规范中没有包含宏系统,但 R2RS 确实对宏做了一些说明,包括当时所有主要实现都有宏系统:
Scheme does not have any standard facility for defining new special forms.
Rationale: The ability to define new special forms creates numerous problems. All current implementations of Scheme have macro facilities that solve those problems to one degree or another, but the solutions are quite different and it isn't clear at this time which solution is best....
R3RS (1986) 有一些类似的语言:
Macros
Scheme does not have any standard facility for defining new kinds of expressions. The ability to alter the syntax of the language creates numerous problems. All current implementations of Scheme have macro facilities that solve those problems to one degree or another, but the solutions are quite different and it isn’t clear at this time which solution is best, or indeed whether any of the solutions are truly adequate. Rather than standardize, we are encouraging implementations to continue to experiment with different solutions.
所以我想说,将 R4RS 之前的宏系统描述为“边缘库”是不公平的,更公平地说,当时的 Scheme 宏系统是特定于实现的。一旦宏卫生被确定为一个重要问题,就会在 Scheme 社区内齐心协力寻找卫生宏的最佳解决方案,并且存在一些分歧。这是上面引用 R2RS 和 R3RS 中描述的情况,“...目前尚不清楚哪种解决方案是最好的....”
AIM-349 和 AIM-452(R0RS 和 R1RS)确实是麻省理工学院 Scheme 开发的报告,而 R2RS 是第一次真正尝试将不同的实现结合在一个标准下,即 R2RS 是第一个Scheme 的真实标准。宏出现在 AIM-349 和 AIM-452 描述的早期实现中,但从 R2RS 开始,宏被排除在实现需要遵守的标准之外,直到就该主题达成共识;每个实现都有自己的宏方法。
资源
R3RS。这是一个可搜索的 pdf 版本,质量比我在网上看到的大多数扫描件都要好。
Hygienic Macro Technology。这是 William Clinger 和 Mitchell Wand 撰写的一篇相当长的论文,描述了卫生宏的发展历史。