Racket与Scheme宏比较

24
racket宏是否具有比Scheme或Common Lisp中发现的更高级的功能? 我怀疑是这样,特别是关于模块、命名空间和作用域等方面,但我希望简单概述一下Racket宏可以做什么,如果有的话,其他Lisp不能做什么。 此外,Scheme/CL还向开发人员公开了读取器层,通过使用它,在这些lisp中创建完全新的语言(不仅仅是s-expr宏),例如Scribble,不是可能的吗? 换句话说,Racket只是围绕“面向语言编程”的哲学/约定,并具有方便的语法包装器,以此为目标,还是更基本地扩展Scheme以实现在该语言中无法实现的东西? 非常感谢。
3个回答

18
“语言导向编程”在Racket中发挥作用的两个关键特征是:
- 模块系统允许指定基础语言; - 上下文敏感宏。
第一个要点基本上就是#lang所做的事情。使模块系统负责设置读取器和给定模块中可用绑定,可以轻松使用不同的语言。如果没有这个功能,使用Scribble或at-exp等语言将更加麻烦。
第二个要点是Racket提供可覆盖的上下文敏感宏,如#%app#%module-begin等,允许自定义模块内部或整个模块中的每个函数应用。这允许在整个模块上添加类型检查过程。
这不是构建Racket语言所需的所有功能的详尽列表。如果您对此感兴趣,值得阅读"Languages as Libraries"论文以获取更多信息。

15

7
请参阅马修的回复,由@Scott在列表中发布相同的问题,包含更近期的概述论文。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接