球拍是Scheme的后代。球拍和R6RS有什么不同?它增加了什么,拿走了什么,还是只是不同?
我知道球拍不仅仅是一门语言,它还是一个语言平台。但我指的是球拍族的主要方言。
举个大例子,球拍列表在默认情况下是不可变的,而Scheme列表是可变的。球拍还包括许多其他方案没有的标准库(例如Web Server)。
如上所述,它包含不可变列表。它还包含一个结构系统,比R6RS记录系统更清晰一些。它有一个面向对象的类和对象系统。它具有契约式设计的本机支持。它有一个类似ML模块系统的单元系统,也有一个类似R6RS模块系统的模块系统。我肯定我忘记了我提到的很多事情。
我不确定这个名字除了营销噱头之外还有什么用处,但球拍绝对是一种独特的方案方言。
球拍最终基于R5RS,而不是R6RS,也不是严格的R6RS超集。我不认为它可以被称为“Scheme”,因为它不向后兼容任何Scheme标准。
大多数实现提供了扩展,但在其他方面是向后兼容的,当然,球拍附带的编译器也可以在R5RS或R6RS模式下运行。在球拍模式下运行的有效R5/6RS方案可能会被拒绝,导致运行时错误,或表现与应有的不同。话虽如此,它不向后兼容的主要点是:
set-cdr!
set-car!
set-mcar!
letrec
letrec*
( ... )
[ ... ]
可能还有更多,但在大多数其他部分,球拍是Scheme的超集。
讨论了从PLT Scheme到球拍的名称更改的基本原理。
球拍包含了很多R6RS方案中不包含的非常好的语言构造,比如“匹配”。
Scheme编程语言的语言规范R5RS基于多个Scheme实现者之间的共识。这意味着语言是非常稳定的。这也意味着许多有用的特性不是R5RS标准的一部分。
球拍在R5RS的基础上进行了很大的扩展。有些扩展被定义为宏,但有些特性需要运行时系统的支持。
球拍中不能单独通过宏实现的特性:
#lang
在少数情况下,球拍有行为偏离R5RS的构造。最明显的是让cons构造一个不可变对(mcons构造一个可变对)。拥有不可变对的一个好处是length现在在O(1)平摊时间内运行。
cons
mcons
length