使用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

    Interesting Posts