-
領域特定語言
(計算機語言)
鎖定
- 中文名
- 領域特定語言
- 外文名
- 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寫成的腳本是一段合法的程序,但是它具有特定的風格,而且僅僅用到了語言的一部分特性,用於處理整個系統一個小方面的問題;
領域特定語言優點
1、提高開發效率,通過DSL來抽象構建模型,抽取公共的代碼,減少重複的勞動;
2、和領域專家溝通,領域專家可以通過DSL來構建系統的功能;
3、執行環境的改變,可以彌補宿主語言的侷限性。
領域特定語言處理步驟
1、DSL腳本;
2、解析腳本;
3、語義模型;
領域特定語言基於groovy的DSL
1、不需要class文件,可以直接執行腳本;
2、閉包等特性以及語法的簡介,使用非常靈活;
3、可以和java系統無縫的整合;
4、Groovy自身不是 DSL。 Groovy官方已經發布了較多基於 Groovy書寫的 DSL,比如 GANT, GORM, XMLBuilder, HtmlBuilder等等。