2009-06-16 64 views
29

我想就什麼時候使用Domain Specific Language做一些實際指導。我發現了有關優點和缺點的資源,但是什麼樣的項目可以保證它的使用?什麼時候應該使用域特定語言?

似乎創建和維護DSL有很大的投資時間,所以在什麼應用領域我可以獲得我的時間投資的生產力回報?

編輯:似乎DSL最常見的用途是用於保存數據狀態的文件格式,那麼如何使用DSL來實現程序邏輯和結構(也許代碼生成)呢?這何時可行?

編輯#2我主要問的是什麼時候創建一個特定的DSL值得。當然,我們應該儘可能地使用現有的DSL來節省時間。

+0

「......我們應儘可能使用現有的DSL以節省時間。」我不認爲這是真的。 – Andreas 2014-09-16 21:21:29

回答

15

創建另一個DSL的原因很少。這個世界很胖,有特殊用途的語言。

想一想這些路線。

  1. 用通用語言解決問題,如Python,Java,C++ ..不管。

  2. 優化該解決方案,將常用功能分解出來,並構建一個非常優雅,真正可擴展的類庫。

  3. 優化該類庫以強調「正交性」。確保所有功能一起使用,沒有任何問題。

  4. 如果您只需簡化語法,請在漂亮的類庫中創建一個腳本包裝器。這是你的DSL。對於Python來說,這很簡單 - 它已經是一種動態語言。對於Java,您可以利用一些東西。對於C++來說,構建這個靈活的腳本環境可能有點麻煩。

  5. 如果您仍然需要進一步優化,請考慮爲您的DSL編寫一個編譯器。浮現在腦海

+1

學習如何開發特定於領域的語言有什麼好的資源? – CMCDragonkai 2014-06-25 10:08:07

11

首先,我想使用當問題域的發展對是一種被廣泛熟知域,該域的一些業務專家已經通過很大的篇幅去建立這樣一個DSL是DSL,讓你不必自己去解決所有他們已經想出的問題。

如果你想創建一個DSL的,我會考慮這樣做,如果你的企業是在一個非常特殊的領域做的,你花你的大部分時間在一個特定的問題域聚焦。如果你在爲多個問題域進行應用程序時反彈,那麼我不會建議採取這種方法。

例如,如果您的企業在建立稅務申請方面太糟糕了,建立稅收系統DSL可能是一個好主意。這將使您的語言不僅可以在您的各種稅務申請中使用,而且您的行業中的其他企業也可以進行市場化(可用),這些企業想要完成類似的事情。

當然,您必須在現有語言的基礎上重新構建DSL與框架的成本/收益。

+0

感謝您指出的區別。 DSL實際上就在我們身邊,我想我正在問更多關於創建DSL的問題。 – Kekoa 2009-06-16 18:50:24

+0

這主要是重申我的答案。當這種情況發生時,我的策略是你顯然是一個天才。給予好評! :-) – 2009-06-16 18:53:43

2

最明顯的是,當語言已經存在並得到很好的支持時,您應該明確地使用它們。這個主要的例子是用於基於Motif的GUI開發的UIL以及用於軟件構建的UIL。

如果你必須自己創建,我會說尋找領域大量的工作是在正確指定的東西,以及你的編譯器無法真正找到大多數錯誤,但一個特定於域的編譯器可以。圖形用戶界面是一個很好的例子,因爲大部分工作都在設置佈局,通常有很多方法可以進行語法有效的C++調用,這些調用對底層GUI系統沒有任何意義(EG:試圖嵌入整個對話框按鈕內的小部件)。

我發現UIL對於GUI開發尤其是一個巨大的收益,因爲UIL編譯器可以在GUI規範中發現錯誤,這些錯誤看起來像C++ compilter的正常可編譯代碼。它得到很好的支持意味着代碼很容易在平臺之間移植,甚至是GUI構建器。

3

一種情況是,當要求需要定製/配置非常高的或不可能的水平。所以你會提供一種針對DSL的腳本模型。

以汽車組裝「手臂」爲例,提供配置模型來支持各種工廠配置將是不可能的。 (檢測到這一點,沒有檢測到,當發生這種情況時,請執行此操作......等等)

但是,爲每個客戶編寫一個新的專用邏輯應用程序可能不是一個好方法。因此,在這種情況下,您創建了一個可以成爲DSL的小框架,然後對於您銷售的每個機器人手臂,您可以在DSL中編寫一個小應用程序,並將其與編譯和運行DSL的核心軟件一起保存腳本代替。或者更好的是,機器人手臂還包括編程DSL的工具,以便您的客戶可以在您創建的DSL中「編程」手臂。

想到的一個現實世界的例子是Yahoo Pipes(你可以把它想象成DSL)或者robots.txt指令用於自動化web爬蟲。它們可能不是一個完整的DSL,但它們可以證明DSL可能有用。

3

好,有人說了吧,所以這裏有雲:

Lisp是由一些作爲任何域的域特定語言重視。在這一點上,一個良好的支持和非常可擴展的DSL。

在某些情況下,從塑造一個Lisp語言DSL(或類似的語言,例如哈斯克爾)實際上可以提供大量的電能以最小的努力,並因此將是相當值得的。 DSL並不總是需要很大的維護負擔。

相關問題