2012-03-19 28 views
0

我從某人那裏聽說DSL在某些特定領域真的很強大。所以我想知道我是否可以把它放入我的技能組。什麼是明文DSL?

出現的第一個問題是DSL究竟是什麼?在做了一些搜索之後,Groovy似乎很好地支持DSL。然後我去閱讀Groovy的文檔,並自己嘗試一下。

我的印象是,DSL只是一些由文本,XML組成的配置文件,而您使用Groovy等工具解析它,它神奇地變成了一些可以調用的方法或函數。發生了什麼?

我看了一些東西,但無法弄清楚。任何幫助?

回答

4

你看過this嗎? Martin Fowler是這個主題的權威人士,也是一位偉大的作家。我懷疑任何人會改善第一段。如果你還沒有得到它,給它一些時間,並重新閱讀文章幾次。

我建議尋找到JetBrain的MPS

一本書可能是壓倒性的,但有一個relatively new one available

,我得到的印象是,DSL只是某種配置的 文件,包括文本,XML,並使用一些工具,比如Groovy來 解析它,它奇蹟般地成爲一些方法或函數可以 調用。發生了什麼?

我不認爲你的印象是完全準確的。現在我會忘記Groovy和解析以及所有的實現細節。關注DSL試圖解決的問題。

一個DSL設計者試圖拿出,作爲一個簡單的語言描述他們的方式他們解決問題的專家,誰是unfamilar與如Groovy或Java或C#編程語言,將承認僞編程語言。

DSL使用熟悉的術語和概念,任何一個關於該域名的

DSL將用戶從底層的實現細節屏蔽,以便他們可以專注於如何攻擊他們的問題。

DSL是爲方便業務用戶而編寫的,而不是開發人員。

記住這一點,其餘的是實施。眼睛在獎品上....

+0

我想先弄清楚大局,弄清楚一個普通的DSL是如何工作的。 – George 2012-03-19 10:04:11

+0

我不認爲你會得到比馬丁福勒爲你繪製的更好的大圖。 – duffymo 2012-03-19 12:22:02

+0

我只是想了解馬丁福勒的,當然,我不能。 – George 2012-03-19 15:26:45

2

域特定語言(DSL)是一種程序設計語言,沒有完整的功能。問題在於,在DSL中編程比在通用語言中編程更容易,並且不易出現錯誤。 「域特定語言」中的「域」是指語言將用於的特定目的。

例如,計算器使用的語言只有+ - * /和數字可以稱爲特定於域的語言。它比常規編程語言具有優勢,因爲程序永遠不會發生段錯誤,崩潰,循環等。域的其他例子可能是Web開發 - 例如,Ur/Web是構建Web應用程序的DSL。 SQL是數據庫領域特定的語言。等等。

我對Groovy瞭解不多,但似乎有一些使用它來創建DSL的特定工具。從根本上說,要創建一個DSL,您需要指定一種語法以及某種語義。 Groovy如何做到這我不知道。

2

DSL是專用於特定域的語言。例如,衆所周知的CSS是一種特定於域的語言,用於文檔的外觀和格式。

通過使用Groovy,您可以創建自己的專注於任何選定域的DSL - 例如,會計,電信,銀行等。這意味着,該語言將使用該領域的通用術語來滿足該領域的需求。此域名的人員很容易理解這種語言,這些人不一定是技術人員(例如會計師)。有時候,它專注於被非程序員使用。特別是Groovy是一種動態語言,通過這種語言,您可以通過配置文件使最終用戶動態地添加代碼腳本,類似於Excel對VB的操作。

無論如何,如果您對此主題感興趣,您應該深入研究Martin Fowler的出版物。

+0

謝謝。我剛剛點了他的書。 – George 2012-03-19 09:57:32

+0

-1 - 這個答案是一個重言式:http://en.wikipedia.org/wiki/Tautology – duffymo 2012-03-19 20:41:42

+0

「DSL是專用於特定領域的語言」==同義反復。 – duffymo 2012-03-19 21:12:58