元程式設計
以下頁面介紹 Scala 中元程式設計的重新設計。它們介紹以下基本設施
-
inline
是一個新的修飾詞,保證定義會在使用點內嵌。內嵌背後的主要動機是減少函數呼叫和存取值背後的開銷。擴充會在Typer
編譯器階段由 Scala 編譯器執行。與其他生態系統中的內嵌相反,Scala 中的內嵌不只是對編譯器的請求,而是命令。原因是 Scala 中的內嵌可以驅動其他編譯時間操作,例如內嵌模式比對(啟用類型層級程式設計)、巨集(啟用編譯時間、產生式、元程式設計)和執行時間程式碼產生(多階段程式設計)。 -
編譯時間操作 是標準函式庫中的輔助定義,提供對值和類型的編譯時間操作支援。
-
巨集 建立在兩個著名的基本運算上:引號和拼接。引號將程式碼轉換為資料,特別是此程式碼的(樹狀)表示。它表示為
'{...}
,用於表達式,並表示為'[...]
,用於類型。拼接表示為${ ... }
,反之亦然:它將程式的表示轉換為程式碼。這些兩個抽象與inline
一起,允許以程式方式建構程式碼。 -
執行階段 巨集在編譯時間建構程式碼,而分段讓程式在執行時間建構新程式碼。這樣,程式碼產生不僅可以依賴靜態資料,還可以依賴執行時間可用的資料。這將程式的評估分成兩個或更多階段或...階段。因此,這種產生式程式設計方法稱為「多階段程式設計」。分段建立在與巨集相同的基礎上。它使用引號和拼接,但省略了
inline
。 -
反射 引號是程式碼的「黑盒子」表示。它們可以使用拼接參數化和組合,但無法從外部分析其結構。TASTY 反射提供了一種通過在標準 API 中部分揭示程式碼片段的表示類型來分析程式碼結構的方法。表示類型是一種typed abstract syntax tree,由此產生了
TASTy
標籤。 -
TASTy 檢查 型別抽象語法樹以自訂壓縮二進位格式序列化,儲存在
.tasty
檔案中。TASTY 檢查允許載入這些檔案並分析其內容的樹狀結構。