我想知道部署必須至少以兩種語言(Java,C#)運行並且可能更多(Python,可能還有Javascript)的領域特定語言的好策略。編寫便攜式域特定語言
一些背景。我們已經開發並部署了一個當前用C#編寫的領域特定語言。它通過一系列方法調用進行部署,其參數是公共語言基元(字符串,double等),集合(IEnumerable,HashSet,...)或特定於領域的庫(CMLMolecule,Point3,RealSquareMatrix)中的對象。這個庫已經過很好的測試,對象必須遵守一個穩定的部署XML模式,所以變化將會演化和管理(至少這是希望)。
我們希望這個語言能夠被廣泛和部分計算機使用的社區使用,用於在沒有中央控制的情況下攻擊他們自己的解決方案。理想情況下,DSL將創建一定程度的封裝併產生他們所需的基本功能。圖書館將管理多種多樣而詳細的算法。 DSL的要求在Domain-specific languages vs. library of functions中有很多共同之處。
我很欣賞最好的體系結構(很明顯,一旦部署,我們不能輕易回溯)。選項至少包括:
- 創建IDL(例如通過CORBA)。 W3C爲XML DOM做了這樣的工作 - 我討厭它 - 並且它似乎是過度殺傷
- 手動爲每個平臺創建類似的簽名並盡力保持它們的同步。
- 創建可解析語言(例如CSS)。
- XML聲明式編程(c.f. XSLT)。這是我的首選解決方案,因爲它可以被搜索,操縱等。
性能並不重要。明確的目的是。
編輯有關應用程序調用是否構成DSL的討論。我發現了Martin Fowler對DSL的介紹(http://martinfowler.com/dslwip/Intro.html),他認爲簡單的方法調用(或者鏈接調用)可以稱爲DSL。等等一系列這樣的:
point0 = line0.intersectWith(plane);
point1 = line1.intersectWith(plane);
midpoint = point0.midpoint(point1);
可以被認爲是DSL
了很大的負面在XML表達的任何語言。你打算讓開發人員直接使用XML或者是存儲/運行時格式?發明ANT的人說XML是錯誤的選擇,如果他能改變事情,他會選擇不同的方式。 – SteveD 2009-10-08 14:10:55
@stevendick。謝謝,我聽到你說的話。我個人是一個XML上癮者,但我儘量保持開放的態度。 – 2009-10-08 20:25:48
看看ANT的原作者有什麼話:http://web.archive.org/web/20040602210721/x180.net/Articles/Java/AntAndXML.html 不要盲目地遵循XML-金錘範例。如果您打算創建一個由實際人員閱讀和寫入的DSL,請考慮使用許多優秀的詞法分析器/分析器工具中的一種,而不是XML。這些日子裏有很多很好的工具(比如ANTLR)使得這個工具很實用。現在寫lexers/parser並不像現在lex/yacc是最先進的那樣痛苦。 – 2009-10-15 01:50:00