使用宏的优秀应用程序和程序的集合

发布于 2024-10-09 23:01:35 字数 2994 浏览 7 评论 0原文

我对宏非常非常感兴趣,并且刚刚开始了解它的真正威力。请帮我收集一些宏系统的精彩用法。

到目前为止,我有这些构造:

模式匹配:

安德鲁·赖特和布鲁斯·杜巴。图案 方案匹配,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年


参考:

摘自Ryan Culpepper 的论文

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.html

Daniel P. Friedman, William E. Byrd,
and Oleg Kiselyov. The Reasoned
Schemer. The MIT Press, July 2005

Matthias 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, 1998

Oscar 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

起风了 2024-10-16 23:01:35

卡尔佩珀和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

萌逼全场 2024-10-16 23:01:35

颤栗、卡尔斯特罗姆、加斯比希勒和Sperber(1994 年及以后)Scsh 参考手册

有很多使用宏将迷你语言嵌入到Scheme中的好例子。向我介绍了定义隐式引用其参数的宏的技术。查看过程形式、正则表达式和类似 awk 的迷你语言的使用。我建议将 Scsh 作为使用宏的起点。

希尔斯代尔Friedman (2000) 以延续传递风格编写宏

展示如何使用连续传递风格使弱语法规则宏变得强大。提供了大量示例。

弗拉特、卡尔佩珀、达赖斯和Findler(已提交)协同工作的宏 - 编译时绑定,部分扩展和定义上下文

提供 Racket/PLT 方案中宏方法的概述和语义。例子不多,但我认为这篇论文有你正在寻找的东西。

Shivers, Carlstrom, Gasbichler & Sperber (1994 & later) The Scsh Reference manual.

Has a lot of good examples of using macros to embed mini-languages into Scheme. Introduced me to the technique of defining macros that implicitly quote their argument. Look at the use of process forms, regular expressions, and the awk-like mini-languages. Scsh is my recommendation as a starting point for playing with macros.

Hilsdale & Friedman (2000) Writing Macros in Continuation-Passing Style.

Shows how the weak syntax-rules macros can be made powerful using continuation-passing style. Gives plenty of examples.

Flatt, Culpepper, Darais & Findler (submitted) Macros that Work Together - Compile-Time Bindings, Partial Expansion, and Definition Contexts.

Provides an overview of, and semantics for the approach to macros in Racket/PLT Scheme. Not a whole lot of examples, but I think the paper has something you are looking for.

挖鼻大婶 2024-10-16 23:01:35

阅读方案!请记住查看 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.

四叶草在未来唯美盛开 2024-10-16 23:01:35

不是一个方案,但有点类似 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.

童话 2024-10-16 23:01:35

我会将“Scheme 标准库本身”添加到列表中。查看 guile 发行版中的文件 boot-9.scm。许多最常用的方案形式 - caseand 等 - 都被定义为宏。

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.

深空失忆 2024-10-16 23:01:35

这里是一个使用方案宏来创建高效机器人系统的非常棒的示例写在方案中

Here's an example of a pretty awesome use of scheme macros to create efficient robotics systems written in scheme

弥枳 2024-10-16 23:01:35

这并不是特别精确,因为它分布在大量非常古老的出版物中,其中大部分我从未读过,但是 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

老子叫无熙 2024-10-16 23:01:35

检查我最喜欢的 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文