2012-11-05 125 views
19

球拍宏是否比Scheme或Common Lisp中的方法具有更高級的功能?我懷疑是這樣,特別是關於模塊,名稱空間和範圍等,但我希望簡單地瞭解一下Racket宏可以做些什麼,如果有的話,其他Lisp不能做。球拍VS方案宏

此外,Scheme/CL還將閱讀器層暴露給開發人員,並且使用它,是不是可以在這些lisps中創建全新的語言(不僅僅是s-expr宏),例如Scribble,您的方式可以在球拍?

換句話說,Racket只是一個圍繞「面向語言的編程」的哲學/約定,爲此目的使用了方便的語法封裝,還是更加根本地擴展了Scheme,使其在技術上不可能在該語言中實現?

非常感謝。

回答

14

兩個關鍵的功能,使「面向語言編程」在拍工作是:

  • 模塊系統允許基本語言
  • 方面的規範敏感的宏

第一個子彈基本上是#lang所做的。讓模塊系統負責設置閱讀器和給定模塊中的可用綁定,可以輕鬆使用不同的語言。如果沒有這些,使用Scribble或at-exp等語言將會更麻煩。

第二個是,球拍提供覆寫投放上下文敏感的宏如#%app#%module-begin,等等,其允許的,比如說定製,模塊內或整個模塊的每功能應用。這允許例如在整個模塊上添加類型檢查通過。

這不是功能,有助於在球拍建立語言的詳盡清單。如果您有興趣閱讀更多內容,"Languages as Libraries"論文值得一讀。

5

Matthew's reply見同樣的問題@Scott貼吧後的名單上,有一個更近的概述文件。