特定領域語言

馬丁·福勒與麗貝卡·帕森斯合著

2010

實作內部和外部 DSL 的詳細指南

自從我進入電腦領域以來,特定領域語言 (DSL) 就一直存在,但很難找到太多關於如何使用它們的資訊。DSL 是小型語言,專注於軟體系統的特定面向。你無法使用 DSL 建立完整程式,但你經常在主要以通用語言編寫的系統中使用多個 DSL。

DSL 有兩種主要形式:外部和內部。外部 DSL 是一種語言,獨立於主機通用語言進行剖析:正則表示式和 CSS 就是很好的範例。外部 DSL 在 Unix 社群中根深蒂固。內部 DSL 是主機通用語言中 API 的特定形式,通常稱為流暢介面。定義測試預期的模擬函式庫(例如 JMock)就是很好的範例,Ruby on Rails 使用的許多機制也是如此。內部 DSL 也有很長的應用歷史,特別是在 Lisp 社群中。

人們發現 DSL 很寶貴,因為設計良好的 DSL 比傳統函式庫更容易編寫程式。這可以提升程式設計師的生產力,這總是很有價值的。特別是,它也可以改善與領域專家的溝通,這是解決軟體開發中最困難問題之一的重要工具。CSS 就是一個很好的例子,大多數編寫 CSS 程式的人都不認為自己在編寫程式。儘管如此,我通常不認為最終使用者通常會直接用 DSL 編寫程式,重要的是溝通的提升。

儘管 DSL 已經存在很長一段時間,但缺乏如何使用它們的知識是一個重大的障礙,這正是為何我撰寫這本書的原因。這本書提供了開發內部和外部 DSL 的技術,讓你具備在它們之間做出選擇的資訊,以及開始工作的良好資訊套件。我也強調在函式庫上分層 DSL 的重要性,以便你通常同時建立它們。本書也包含關於程式碼生成的資料,這是使用 DSL 的偶爾必要部分。

就像P of EAA一樣,這本書是一本雙面書,既提供學習 DSL 的敘事,也提供詳細的參考書,所以不要害怕頁數多。你可以透過閱讀敘事部分(142 頁)來很好地掌握主題,並在需要時將其餘部分當作參考書來查閱。

此書提供電子版本。Amazon 有 Kindle 版本。InformIT 有 epub 和 pdf 版本。Apple 在 ibookstore 中提供 epub 版本。

勘誤表

延伸讀物

DSL 指南

我在本網站上的指南頁面,是我彙整有關 DSL 的資訊的地方。

免費第一章

本書免費提供的第一章,提供了 DSL 的良好概觀,以及我對它們的做法。

DSL 模式目錄

本書中模式的參考 URI。每個 URI 都列出模式意圖和章節參考。

翻譯

日文、韓文、葡萄牙文