[macros] 使用宏收集優秀的應用程序和程序


Answers

Shivers,Carlstrom,Gasbichler&Sperber(1994及以後) The Scsh Reference手冊

有很多很好的例子,可以使用宏將迷你語言嵌入到Scheme中。 向我介紹了定義隱式引用其參數的宏的技術。 查看流程表單,正則表達式和類似awk的迷你語言的使用。 Scsh是我的建議,作為玩宏的起點。

希爾斯代爾和弗里德曼(2000) 在繼續傳遞風格中寫作宏

顯示如何使用延續傳遞樣式使弱語法規則宏變得強大。 給出了很多例子。

Flatt,Culpepper,Darais和Findler(已提交) 共同工作的宏 - 編譯時綁定,部分擴展和定義上下文

提供Racket / PLT Scheme中宏方法的概述和語義。 不是很多例子,但我認為這篇論文有你想要的東西。

Question

我對Macros非常感興趣,剛剛開始了解它的真正力量。 請幫我收集一些宏觀系統的用法。

到目前為止,我有這些結構:

模式匹配:

安德魯賴特和布魯斯杜巴。 Scheme的模式匹配,1995

Prolog精神中的關係:

Dorai Sitaram。 在schelog中編程。 http://www.ccs.neu.edu/home/dorai/schelog/schelog.html

Daniel P. Friedman,William E. Byrd和Oleg Kiselyov。 理性的計劃者。 麻省理工學院出版社,2005年7月

Matthias Felleisen。 將Prolog音譯成計劃。 技術報告182,印第安納大學,1985年。

可擴展循環結構:

塞巴斯蒂安·埃格納 方案中的熱切理解:SRFI-42的設計。 “計劃與功能規劃研討會”,2005年9月第13-26頁。

奧林顫抖。 循環的解剖:範圍和控制的故事。 在國際功能規劃會議上,第2-14頁,2005年。

班級系統:

PLT。 PLT MzLib:圖書館手冊。 技術報告PLT-TR2006-4-v352,PLT Scheme Inc.,2006。http://www.plt-scheme.org/techreports/

Eli Barzilay。 騙取。 http://www.barzilay.org/Swindle

組件系統:

Ryan Culpepper,Scott Owens和Matthew Flatt。 組件接口中的語法抽象。 在生成編程和組件工程國際會議,第373-388頁,2005年

軟件合同檢查

Matthew Flatt和Matthias Felleisen。 單位:HOT語言的酷模塊在ACM SIGPLAN會議編程語言設計和實現,第236-248頁,1998年

Oscar Waddell和R. Kent Dybvig。 擴展句法抽象的範圍。在編程語言原理研討會上,第203-215頁,第199頁

解析器生成器

Scott Owens,Matthew Flatt,Olin Shivers和Benjamin McMullan。 Scheme中的Lexer和解析器生成器。 “計劃與功能規劃研討會”,2004年9月第41-52頁。

工程語義工具:

Matthias Felleisen,Robert Bruce Findler和Matthew Flatt。 PLT Redex的語義工程。 MIT出版社,2009年8月。

編譯器轉換的規範:

Dipanwita Sarkar,Oscar Waddell和R. Kent Dybvig。 用於編譯器教育的納米框架。 函數式編程,15(5):653-667,2005年9月。教育明珠。

新的執行形式

具有可序列化延續的Servlet Greg Pettyjohn,John Clements,Joe Marshall,Shriram Krishnamurthi和Matthias Felleisen。 廣義堆棧檢查的延續。 在國際功能規劃會議上,第216-227頁,2005年。

定理證明系統

塞巴斯蒂安·埃格納 方案中的熱切理解:SRFI-42的設計。 在計劃和功能規劃研討會,2005年9月第13-26頁。

基類的擴展與類型

Sam Tobin-Hochstadt和Matthias Felleisen。打字方案的設計和實施。 在“編程語言原理研討會”,第395-406頁,2008年。

怠惰

Eli Barzilay和John Clements。 沒有辛勤工作的懶惰:將懶惰和嚴格的語言結合起來進行教學。 在教育中的功能和聲明性編程中,第9-13頁,2005年。

功能反應性

Gregory H. Cooper和Shriram Krishnamurthi。 使用按值調用語言嵌入動態數據流。 在2006年歐洲規劃研討會上

參考:

收集自Ryan Culpepper的論文




檢查一個我最喜歡的REST API實現:Slack api客戶端,它不是用Scheme編寫的,而是在Racket中。

octotep/racket-slack-api




不是一個Scheme,而是有點類似的Lisp方言,並且使用了非常廣泛的宏: http://www.meta-alternative.net/mbase.htmlhttp://www.meta-alternative.net/mbase.html

有些宏實現了各種模式匹配,列表推導,各種解析器生成器(包括PEG / Packrat實現),嵌入式Prolog,ADT訪問者推理(如在Haskell中廢棄樣板),可擴展語法宏,Hindley-Milner類型系統,類似Scheme的語法宏等等。 該功能的一部分可能可能移植到Scheme,其他部分需要具有顯式上下文的擴展宏系統。




這一點並不是特別精確,因為它分佈在大量我從未讀過的非常古老的出版物上,但是IIRC大量的Common Lisp對象系統和元對象協議*,可以是; 是; 或者最初是用宏構建的......

*到目前為止,構成IMHO的最先進的OO系統編程曾經見過






Links