使用宏的优秀应用程序和程序的集合
我对宏非常非常感兴趣,并且刚刚开始了解它的真正威力。请帮我收集一些宏系统的精彩用法。
到目前为止,我有这些构造:
模式匹配:
安德鲁·赖特和布鲁斯·杜巴。图案 方案匹配,1995
Prolog精神中的关系:
多莱·西塔拉姆。在 schelog 中编程。 http://www.ccs.neu.edu/home/dorai/schelog /schelog.html
丹尼尔·P·弗里德曼、威廉·E·伯德、 和奥列格·基谢廖夫。理性的 阴谋家。麻省理工学院出版社,2005 年 7 月
马蒂亚斯·费莱森。音译 序言进入方案。技术报告 182,印第安纳大学,1985 年。
可扩展循环结构:
塞巴斯蒂安·埃格纳。热切的领悟 方案中:SRFI-42的设计。在 方案与功能研讨会 编程,第 13-26 页,九月 2005年。
奥林颤抖着。循环的剖析: 范围和控制的故事。在 国际功能会议 编程,第 2-14 页,2005 年。
班级系统:
PLT。 PLT MzLib:库手册。 技术报告 PLT-TR2006-4-v352, PLT 方案公司,2006 年。 http://www.plt-scheme.org/techreports/
伊莱·巴尔齐莱。骗取。 http://www.barzilay.org/Swindle。
组件系统:
瑞安·卡尔佩珀、斯科特·欧文斯和 马修·弗拉特.句法抽象 在组件接口中。在 国际生成会议 编程和组件工程, 第 373–388 页,2005 年
软件合同检查
马修·弗拉特和马蒂亚斯·费莱森。 单元:热门语言的酷模块 在 ACM SIGPLAN 会议上 编程语言设计与 实施,第 236–248 页,1998 年
奥斯卡·瓦德尔 (Oscar Waddell) 和 R. 肯特·戴布维格 (R. Kent Dybvig)。 扩展句法范围 抽象。在原理研讨会上 编程语言,页数 203–215, 199
解析器生成器
斯科特·欧文斯、马修·弗拉特、奥林 颤抖,和本杰明·麦克穆兰。词法分析器 和Scheme 中的解析器生成器。在 方案与功能研讨会 编程,第 41-52 页,九月 2004年。
工程语义工具:
马蒂亚斯·费莱森、罗伯特·布鲁斯 芬德勒和马修·弗拉特。语义学 使用 PLT Redex 进行工程设计。麻省理工学院出版社, 2009 年 8 月。
编译器转换规范:
Dipanwita Sarkar、Oscar Waddell 和 R. Kent Dybvig。纳米通道 编译器教育框架。 功能杂志 编程,15(5):653–667,九月 2005.教育明珠。
新颖的执行形式
可序列化的 Servlet 延续 格雷格·佩蒂约翰,约翰 克莱门茨、乔·马歇尔、施里拉姆 克里希那穆提和马蒂亚斯·费莱森。 广义堆栈的延续 检查。在国际 函数式编程会议, 第 216-227 页,2005 年。
定理证明系统
塞巴斯蒂安·埃格纳。热切理解Scheme:设计 SRFI-42。 在方案和函数式编程研讨会中,第 13-26 页, 2005 年 9 月。
基本语言的类型扩展
萨姆·托宾-霍赫施塔特和马蒂亚斯 Felleisen.设计和 类型化方案的实施。在 编程原理研讨会 语言,第 395–406 页,2008 年。
懒惰
伊莱·巴兹莱和约翰·克莱门茨。 懒惰没有所有的困难 工作:懒惰与严格相结合 用于教学的语言。在功能上 和声明式编程 教育,第 9-13 页,2005 年。
功能反应性
格雷戈里·H·库珀和施里拉姆 克里希那穆提。嵌入动态 按值调用语言中的数据流。 在欧洲编程研讨会上, 2006年
参考:
I am very very interested in Macros and just beginning to understand its true power. Please help me collect some great usage of macro systems.
So far I have these constructs:
Pattern Matching:
Andrew Wright and Bruce Duba. Pattern
matching for Scheme, 1995
Relations in the spirit of Prolog:
Dorai Sitaram. Programming in schelog.
http://www.ccs.neu.edu/home/dorai/schelog/schelog.htmlDaniel P. Friedman, William E. Byrd,
and Oleg Kiselyov. The Reasoned
Schemer. The MIT Press, July 2005Matthias Felleisen. Transliterating
Prolog into Scheme. Technical Report
182, Indiana University, 1985.
Extensible Looping Constructs:
Sebastian Egner. Eager comprehensions
in Scheme: The design of SRFI-42. In
Workshop on Scheme and Functional
Programming, pages13–26, September
2005.Olin Shivers. The anatomy of a loop: a
story of scope and control. In
International Conference on Functional
Programming, pages 2–14, 2005.
Class Systems:
PLT. PLT MzLib: Libraries manual.
Technical Report PLT-TR2006-4-v352,
PLT Scheme Inc., 2006.
http://www.plt-scheme.org/techreports/Eli Barzilay. Swindle.
http://www.barzilay.org/Swindle.
Component Systems:
Ryan Culpepper, Scott Owens, and
Matthew Flatt. Syntactic abstraction
in component interfaces. In
International Conference on Generative
Programming and Component Engineering,
pages 373–388, 2005
Software Contract Checking
Matthew Flatt and Matthias Felleisen.
Units: Cool modules for HOT languages
In ACM SIGPLAN Conference on
Programming Language Design and
Implementation, pages 236–248, 1998Oscar Waddell and R. Kent Dybvig.
Extending the scope of syntactic
abstraction.In Symposium on Principles
of Programming Languages, pages
203–215, 199
Parser Generators
Scott Owens, Matthew Flatt, Olin
Shivers, and Benjamin McMullan. Lexer
and parser generators in Scheme. In
Workshop on Scheme and Functional
Programming, pages 41–52, September
2004.
Tools for Engineering Semantics:
Matthias Felleisen, Robert Bruce
Findler, and Matthew Flatt. Semantics
Engineering with PLT Redex. MIT Press,
August 2009.
Specifications of Compiler Transformations:
Dipanwita Sarkar, Oscar Waddell, and R. Kent Dybvig. A nanopass
framework for compiler education.
Journal of Functional
Programming,15(5):653–667, September
2005. Educational Pearl.
Novel Forms of Execution
Servlets with serializable
continuations Greg Pettyjohn, John
Clements, Joe Marshall, Shriram
Krishnamurthi, and Matthias Felleisen.
Continuations from generalized stack
inspection. In International
Conference on Functional Programming,
pages216–227, 2005.
Theorem-Proving System
Sebastian Egner. Eager comprehensions in Scheme: The design
of SRFI-42.
In Workshop on Scheme and Functional Programming, pages 13–26,
September 2005.
Extensions of the Base Language with Types
Sam Tobin-Hochstadt and Matthias
Felleisen.The design and
implementation of typed scheme. In
Symposium on Principles of Programming
Languages, pages 395–406, 2008.
Laziness
Eli Barzilay and John Clements.
Laziness without all the hard
work:combining lazy and strict
languages for teaching. In Functional
and declarative programming in
education, pages 9–13, 2005.
Functional Reactivity
Gregory H. Cooper and Shriram
Krishnamurthi. Embedding dynamic
dataflow in a call-by-value language.
In European Symposium on Programming,
2006
Reference:
Collected from Ryan Culpepper's Dissertation
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
卡尔佩珀和Felleisen,强化宏,ICFP 2010
Culpepper、Tobin-Hochstadt 和 Felleisen,高级宏观学和类型化方案的实施,方案研讨会 2007
Flatt、Findler、Felleisen,具有类、混合和特征的方案,APLAS 2006
Herman、Meunier,改进通过部分评估对嵌入式语言进行静态分析,ICFP 2004
Culpepper & Felleisen, Fortifying Macros, ICFP 2010
Culpepper, Tobin-Hochstadt and Felleisen, Advanced Macrology and the Implementation of Typed Scheme, Scheme Workshop 2007
Flatt, Findler, Felleisen, Scheme with Classes, Mixins, and Traits, APLAS 2006
Herman, Meunier, Improving the Static Analysis of Embedded Languages via Partial Evaluation, ICFP 2004
颤栗、卡尔斯特罗姆、加斯比希勒和Sperber(1994 年及以后)Scsh 参考手册。
希尔斯代尔Friedman (2000) 以延续传递风格编写宏。
弗拉特、卡尔佩珀、达赖斯和Findler(已提交)协同工作的宏 - 编译时绑定,部分扩展和定义上下文。
Shivers, Carlstrom, Gasbichler & Sperber (1994 & later) The Scsh Reference manual.
Hilsdale & Friedman (2000) Writing Macros in Continuation-Passing Style.
Flatt, Culpepper, Darais & Findler (submitted) Macros that Work Together - Compile-Time Bindings, Partial Expansion, and Definition Contexts.
阅读方案!请记住查看 ReadScheme 上的大量参考书目。
http://library.readscheme.org/page3.html
我认为您错过的一个例子是嵌入SQL 语法转化为Scheme。
http://repository.readscheme.org/ftp/papers/sw2002/schemeunit -schemeql.pdf
宏还用于编写自动化测试的支持。
ReadScheme! Remember to check the extensive bibliography on ReadScheme.
http://library.readscheme.org/page3.html
One example I think you missed is embedding SQL syntax into Scheme.
http://repository.readscheme.org/ftp/papers/sw2002/schemeunit-schemeql.pdf
Macros are also used to write supports for automated testing.
不是一个方案,但有点类似 Lisp 方言,广泛使用宏:http://www. meta-alternative.net/mbase.html
有一些宏实现各种模式匹配、列表理解、各种解析器生成器(包括 PEG/Packrat 实现)、嵌入式 Prolog、ADT 访问者推理(例如废弃您的样板文件) Haskell)、可扩展语法宏、Hindley-Milner 类型系统、类似方案的语法宏等等。该功能的一部分可以潜在地移植到Scheme,其他部分需要具有显式上下文的扩展宏系统。
Not a Scheme, but somewhat similar Lisp dialect with a very extensive use of macros: http://www.meta-alternative.net/mbase.html
There are macros implementing various kinds of pattern matching, list comprehensions, various parsers generators (including a PEG/Packrat implementation), embedded Prolog, ADT visitors inference (like scrap your boilerplate in Haskell), extensible syntax macros, Hindley-Milner type system, Scheme-like syntax macros, and many more. Parts of that functionality can be potentially ported to Scheme, other parts needs an extended macro system with explicit context.
我会将“Scheme 标准库本身”添加到列表中。查看 guile 发行版中的文件
boot-9.scm
。许多最常用的方案形式 -case
、and
等 - 都被定义为宏。I would add "The Scheme standard library itself" to the list. Look at the file
boot-9.scm
in the guile distribution. Many of the most commonly-used Scheme forms -case
,and
, etc. - are defined there as macros.这里是一个使用方案宏来创建高效机器人系统的非常棒的示例写在方案中
Here's an example of a pretty awesome use of scheme macros to create efficient robotics systems written in scheme
这并不是特别精确,因为它分布在大量非常古老的出版物中,其中大部分我从未读过,但是 IIRC 大块的 Common Lisp 对象系统和元对象协议*,可以是;是;或者最初是用宏构建的...
* 恕我直言,这构成了迄今为止最先进的面向对象系统编程
This isn't particularly precise in so far as it is spread out over a large number of very old publications most of which i've never read, but IIRC large chunks of the Common Lisp Object System and the Meta-Object Protocol*, can be; are; or were initially, built with of macros...
* Which compose IMHO by far the most advanced OO system programming has ever seen
检查我最喜欢的 REST API 实现之一:Slack api 客户端,它不是用 Scheme 编写的,而是用 Racket 编写的。
octotep/racket-slack-api
Check one of my favorites implementations of a REST API: the Slack api client, that isn't written in Scheme but it is in Racket.
octotep/racket-slack-api