複製鏈接
請複製以下鏈接發送給好友

領域特定語言

(計算機語言)

鎖定
領域特定語言(英語:domain-specific language、DSL)指的是專注於某個應用程序領域的計算機語言。又譯作領域專用語言。同名著作是DSL領域的豐碑之作,由世界級軟件開發大師和軟件開發“教父”Martin Fowler歷時多年寫作而成,ThoughtWorks中國翻譯。
中文名
領域特定語言
外文名
domain-specific languages
作    者
Martin Fowler
譯    者
ThoughtWorks中國
學    科
計算機
領    域
計算機

領域特定語言緒論

在定義DSL是什麼的問題上,Fowler 認為業界經常使用的一些特徵,例如“關注於領域”、“有限的表現”和“語言本質”是非常模糊的。因此,唯一能夠確定DSL邊界的方法是考慮“一門語言的一種特定用法”和“該語言的設計者或使用者的意圖”:
如果XSLT的設計者將其設計為XML的轉換工具,那麼我認為XSLT是一個DSL。如果一個用户使用DSL的目的是該DSL所要達到的目的,那麼它是一個DSL,但是如果有人以通用的方式來使用一個DSL,那麼它(在這種用法下)就不再是一個DSL了。
以Fowler的觀點,DSL首先是一種幫助用户從一個系統中抽象出某些部分的工具。所以“當你意識到你需要一個組件,或者當你已經有了一個組件而你希望簡化操作它的方式的時候”,DSL是有用的。使用DSL確實提供了某些益處。DSL不僅提高了代碼的易讀性,讓開發者可以和領域專家更好的交流,而且是改變執行上下文的一種手段,例如:把邏輯從編譯時切換到運行時,或者當命令式編程不是很合適的時候轉用聲明式計算模型。

領域特定語言定義

領域特定語言(英語:domain-specific language、DSL)指的是專注於某個應用程序領域的計算機語言。又譯作領域專用語言。不同於普通的跨領域通用計算機語言(GPL),領域特定語言只用在某些特定的領域。 比如用來顯示網頁的HTML,以及Emacs所使用的Emac LISP語言。

領域特定語言分類

外部DSL:不同於應用系統主要使用語言的語言,通常採用自定義語法,宿主應用的代碼採用文本解析技術對外部DSL編寫的腳本進行解析。例子如:正則表達式SQL、AWK以及Struts的配置文件等
內部DSL:通用語言的特定語法,用內部DSL寫成的腳本是一段合法的程序,但是它具有特定的風格,而且僅僅用到了語言的一部分特性,用於處理整個系統一個小方面的問題;
語言工作台:一種專用的IDE,用於定義和構建DSL,具體的講,語言工作台不僅用來確定DSL的語言結構,而且是人們編寫DSL腳本的編輯環境,最終的腳本將編輯環境和語言本身緊密的結合在一起。 [1] 

領域特定語言優點

1、提高開發效率,通過DSL來抽象構建模型,抽取公共的代碼,減少重複的勞動;
2、和領域專家溝通,領域專家可以通過DSL來構建系統的功能;
3、執行環境的改變,可以彌補宿主語言的侷限性。

領域特定語言處理步驟

1、DSL腳本;
2、解析腳本;
4、生成代碼或者執行模型。 [1] 

領域特定語言基於groovy的DSL

1、不需要class文件,可以直接執行腳本
2、閉包等特性以及語法的簡介,使用非常靈活;
3、可以和java系統無縫的整合;
4、Groovy自身不是 DSL。 Groovy官方已經發布了較多基於 Groovy書寫的 DSL,比如 GANT, GORM, XMLBuilder, HtmlBuilder等等。

領域特定語言代表語言

SQLGradle
參考資料
  • 1.    Martin Fowler.領域特定語言.北京:機械工業出版社,2013:I-II