簡體   English   中英

Racket vs Scheme宏

[英]Racket vs Scheme macros

球拍宏是否具有比Scheme或Common Lisp中更高級的功能? 我懷疑,特別是關於模塊,命名空間和范圍等等,但我很欣賞一個簡單的概述,即Racket宏可以做什么,如果有的話,其他lisps不能。

另外,Scheme / CL還將讀者層暴露給開發人員,使用它,在這些lisps中不可能創建全新的語言(不僅僅是s-expr宏),比如Scribble,你可以在Racket中使用它嗎?

換句話說,Racket是一個圍繞“語言導向編程”的哲學/慣例,為此目的使用方便的語法包裝器,還是從根本上擴展Scheme以在該語言中做技術上不可能的事情?

非常感謝。

使“語言導向編程”在Racket中起作用的兩個關鍵特性是:

  • 模塊系統允許指定基本語言
  • 上下文相關的宏

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

第二個是Racket提供可重寫的上下文相關宏,例如#%app#%module-begin等,允許自定義模塊或整個模塊中的每個功能應用程序。 這允許在整個模塊上添加例如類型檢查傳遞。

這不是一個詳盡的功能列表,有助於在Racket中構建語言。 如果您有興趣閱讀更多相關信息,那么“語言作為圖書館”的論文值得一讀。

我建議閱讀論文“可組合和可編譯的宏 - 你想要什么時候?” 馬修弗拉特。

它解釋了如何在Racket中協同工作的宏和模塊。

然后在Racket中實現一種小語言 - 比如說TinyBasic。 然后與其他語言進行比較。

UPDATE

http://www.cs.utah.edu/plt/publications/jfp12-draft-fcdf.pdf

在@Scott將其發布在列表中之后,請參閱Matthew對同一問題的回復 ,並附有更新的概述文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM