領域特定語言

領域特定語言

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

緒論

在定義DSL是什麼的問題上,Flowler認為目前經常使用的一些特徵,例如“關注於領域”、“有限的表現”和“語言本質”是非常模糊的。因此,唯一能夠確定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、提高開發效率,通過DSL來抽象構建模型,抽取公共的代碼,減少重複的勞動;

2、和領域專家溝通,領域專家可以通過DSL來構建系統的功能;

3、執行環境的改變,可以彌補宿主語言的局限性。

處理步驟

1、DSL腳本;

2、解析腳本;

3、語義模型;

4、生成代碼或者執行模型。

基於groovy的DSL

1、不需要class檔案,可以直接執行腳本;

2、閉包等特性以及語法的簡介,使用非常靈活;

3、可以和java系統無縫的整合;

4、Groovy自身不是 DSL。 Groovy官方已經發布了較多基於 Groovy書寫的 DSL,比如 GANT, GORM, XMLBuilder, HtmlBuilder等等。

代表語言

SQL,Gradle。

相關詞條

相關搜尋

熱門詞條

聯絡我們