DSL和麵向語言程式設計的崛起

banq發表於2009-08-30
The rise of DSLs and Language Oriented Programming?

幾天前JetBrains(好像以前也是最早推出MDA工具的)推出他們的“MPS” (Meta Programming System超程式設計系統)的EPA產品:Charisma

MPS在一個月前已經到達其第一個里程碑。

MPS 是Martin Fowler在Language Workbenches: The Killer-App for Domain Specific Languages?(DSL的殺手級應用) 發明的。它是自由和開放原始碼,並提供一個有趣的建立在Java上的語言擴充套件的DSL新方法。

另外一家http://intentsoft.com/釋出了他們的Language Workbench語言工作臺的demo,是執行在.net. 上。

在雲端計算領域,Force.com也在利用超程式設計 Meta Programming,這對於商業應用以及CRM相關應用是非常有吸引力的。


按照Martin Fowler的說法,物件導向的領域建模讓我們得以“彙集詞彙”,但語法――將詞彙組合起來的方法――卻是缺失的;DSL補足了語法的方面。因此面向語言程式設計引導我們“從思考詞彙,即物件,走向一種結合了詞彙和語法的語言觀念。”

傳統的與API和框架溝通的方式:你要“從最基本的共識著手並解釋所有的細節”。因為它們沒有“任何內建的上下文”。因此程式碼中總是不斷重複一些上下文,以致成了干擾。相反DSL“總是有著隱含的上下文,上下文幾乎從不露面,就算露面也是很少很少,通常最多一次”。因此我們不必一再地提供上下文資訊,於是程式碼更具可讀性,也更有表現力。

Fowler和Ford都強調了可讀性的重要。他們認為DSL的動機經常被誤解。目的並不是為了讓業務分析師能夠自己寫程式碼,而是為了讓他們能夠閱讀和檢驗程式碼,從而填補專業開發者和業務人員之間的罅隙。

Neal Ford強調說如果一門DSL很難讀,那麼它的設計就是很糟糕的,因為“[使用DSL的]目的之一就是為了創造出更容易閱讀的程式碼”(按這個說法,SQL大概是最容易閱讀的程式碼,很難相信對於中國人非英語國家,有比SQL更容易閱讀的語言了。)。

個人評價:概念是非常吸引人,就象SQL已經是資料庫的超程式設計,那麼是否SQL就應該繼續大行其道呢?讓使用者學習一下某種語言的DSL,和讓其學習SQL哪個成本更低以及更容易呢?我擔心象LinQ那樣類似SQL的DSL會導致面向資料庫死灰復燃。

另外,使用DSL確實完成了面向業務使用者的封裝,他們不必瞭解更多軟體專業知識,但是靈活性是不是就喪失呢?資料庫就是因為其不可伸縮,是一個封閉的盒子,而遭遇效能瓶頸,如何解決這個矛盾呢?

也許基於雲端計算平臺的DSL才是一個更佳的選擇。


[該貼被banq於2009-08-30 15:55修改過]

[該貼被admin於2009-08-30 15:55修改過]

[該貼被admin於2009-08-30 15:59修改過]

相關文章