改变'cond'成为一种特殊形式有什么样的优势

时间:2010-02-19 18:10:53

标签: compiler-construction scheme language-design interpreter

将'cond'改为特殊形式而不是语法糖会有什么样的优势?

2 个答案:

答案 0 :(得分:5)

在一篇有关Scheme(Lambda the Ultimate Declarative,§1.2)的具有里程碑意义的论文中,斯蒂尔写道:

  

然而,无可否认   IF-THEN-ELSE似乎是最简单的   条件控制算子很容易   能够表达所有其他人。

然后他写了§4.1:

  

虽然我建议只建造   下层部分   编译器,加上必要的宏   提供标准的LISP功能,如   COND和PROG,很容易   想象一下构建一个ALGOL   例如,通过提供一个   解析器加上必要的宏作为   前端。

Steele试图在这篇论文和其他论文中提出的观点,包括他在Rabbit编译器上的MS thesisifcond更简单,并且通常它会更多有意义地将库语法宏扩展为condcase为更简单的基本语法,如if。这样您就可以保持编译器需要理解的输入语言简单,这样做的优点是更容易推理,实现和优化。这一切都符合我想象的极简主义设计。

从表面上看,人们可能会想到cond可以更优化地编译(想想switch表)。正如所有关于“优化”的问题没有实际数据或证据一样,这可能会成为一个不成熟的结论,事实上我不会打赌我的钱是真的。

因此,为了回答您的问题,我发现在cond基本语法而不是在Scheme中使用宏时没有真正或持久的优势。或者,如果有优势,至少会有一些缺点,比如更复杂的评估者。

答案 1 :(得分:0)

cond 是一种特殊形式,因为必须先评估参数。
很重要。如果我没弄错的话,Scheme最初没有 if 形式 实际上 if 形式可能是使用宏的语法糖。