使用macros收集伟大的应用程序和程序
我对macros很感兴趣,刚开始明白它的真正的力量。 请帮助我收集macros观系统的一些很好的用法。
到目前为止,我有这些构造:
模式匹配:
安德鲁·怀特和布鲁斯·金巴。 计划的模式匹配,1995
序言精神中的关系:
多丽Sitaram。 在schelog中编程。 http://www.ccs.neu.edu/home/dorai/schelog/schelog.html
Daniel P. Friedman,William E. Byrd和Oleg Kiselyov。 理性的策略。 MIT出版社,2005年7月
Matthias Felleisen。 将Prolog转换成Scheme。 1985年印第安纳大学技术报告。
可扩展的循环结构:
塞巴斯蒂安Egner。 在计划中的渴望理解:SRFI-42的devise。 计划和function编程研讨会,第13-26页,2005年9月。
奥林寒颤。 循环的解剖:范围和控制的故事。 在function规划国际会议上,第2-14页,2005。
class级系统:
PLT。 PLT MzLib:库手册。 技术报告PLT-TR2006-4-v352,PLT Scheme Inc.,2006。http://www.plt-scheme.org/techreports/
Eli Barzilay。 骗取。 http://www.barzilay.org/Swindle 。
组件系统:
瑞安Culpepper,斯科特欧文斯和马修弗拉特。 组件接口中的语法抽象。 生成规划和组件工程国际会议,第373-388页,2005年
软件合同检查
马修·弗拉特(Matthew Flatt)和马提亚·费利森 单位:用于HOT语言的酷模块在ACM SIGPLAN会议上的编程语言devise和实现,第236-248页,1998
Oscar Waddell和R. Kent Dybvig。 扩展了句法抽象的范围。在编程语言原理研讨会上,第203-215页,第199页
parsing器发生器
Scott Owens,Matthew Flatt,Olin Shivers和Benjamin McMullan。 在Scheme中使用Lexer和parsing器生成器。 计划和function规划研讨会,第41-52页,2004年9月。
工程语义学工具:
马蒂亚斯·费利森,罗伯特·布鲁斯·查特勒和马修·弗拉特。 语义工程与PLT Redex。 MIT出版社,2009年8月。
编译器转换的规范:
Dipanwita Sarkar,Oscar Waddell和R. Kent Dybvig。 一个用于编译器教育的nanopass框架。 function程序devise杂志,15(5):653-667,2005年9月。
新颖的执行forms
可连续使用的Servlets Greg Pettyjohn,John Clements,Joe Marshall,Shriram Krishnamurthi和Matthias Felleisen。 从广义堆栈检查继续。 在函数式编程国际会议上,216-227页。
定理certificate体系
塞巴斯蒂安Egner。 在计划中的渴望理解:SRFI-42的devise。 计划和函数式编程研讨会,第13-26页,2005年9月。
基本types的扩展
Sam Tobin-Hochstadt和Matthias Felleisen。inputscheme的devise和实现。 在编程语言原理研讨会上,第395-406页,2008年。
怠惰
Eli Barzilay和John Clements。 懒惰没有所有的辛勤工作:结合懒惰和严格的语言进行教学。 在教育中的function和声明式编程中,第9-13页,2005。
functionreact native
格雷戈里阁下库珀和Shriram Krishnamurthi。 以按值存储的语言embeddeddynamic数据stream。 2006年欧洲编程研讨会
参考:
从Ryan Culpepper的论文中收集
Culpepper&Felleisen,强化macros,ICFP 2010
Culpepper,Tobin-Hochstadt和Felleisen,高级macros观与实施types化计划,2007计划研讨会
Flatt,Findler,Felleisen,计划与类,Mixins和特征,APLAS 2006
Herman,Meunier,通过部分评估改进embedded式语言的静态分析,ICFP 2004
Shivers,Carlstrom,Gasbichler&Sperber(1994及更高版本) Scsh参考手册 。
有许多使用macros将小型语言embedded到Scheme中的很好的示例。 向我介绍了定义隐含引用他们的论点的macros的技术。 看看过程forms,正则expression式和awk-like迷你语言的使用。 Scsh是我的build议,作为玩macros的起点。
Hilsdale&Friedman(2000) 以持续传递的方式写macros 。
显示弱语法规则macros如何使用continuation-passing风格变得强大。 给出了大量的例子。
Flatt,Culpepper,Darais&Findler(已提交) 一起工作的macros – 编译时绑定,部分扩展和定义上下文 。
提供球拍/ PLTscheme中的macros方法的概述和语义。 不是很多的例子,但我认为这个文件有你正在寻找的东西。
ReadScheme! 请记住检查ReadScheme上的大量参考书目。
http://library.readscheme.org/page3.html
我想你错过了一个例子是embeddedSQL语法到Scheme中。 http://repository.readscheme.org/ftp/papers/sw2002/schemeunit-schemeql.pdf
macros也被用来编写对自动化testing的支持。
不是一个计划,但有点类似的Lisp方言与广泛使用的macros: http : //www.meta-alternative.net/mbase.html
有macros实现各种模式匹配,列表parsing,各种parsing器生成器(包括PEG / Packrat实现),embedded式Prolog,ADT访问者推断(如在Haskell中废弃样板),可扩展语法macros,Hindley-类似Scheme的语法macros,等等。 该function的一部分可能被移植到Scheme,其他部分需要一个带有明确上下文的扩展macros系统。
我会将“Scheme标准库本身”添加到列表中。 查看guile分发中的文件boot-9.scm
。 许多最常用的Scheme格式( case
等)在这里被定义为macros。
对于大部分我从来没有读过的大多数非常古老的出版物,但是对于通用Lisp对象系统和元对象协议*的IIRC大块来说,这并不是特别精确,是; 是; 或者最初是用macros构build的…
*迄今为止最先进的OO系统编程所构成的恕我直言
下面是一个很好的使用schememacros来创build高效的机器人系统的例子
选中一个我最喜欢的REST API实现:Slack api客户端,它不是在Scheme中编写的,而是在Racket中。
octotep /球拍松弛-API