DSL和麵向語言程式設計的崛起
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才是一個更佳的選擇。
幾天前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修改過]
相關文章
- 物件導向和麵向過程程式設計的區別?物件程式設計
- Kotlin編寫Processing程式(使用函數語言程式設計思維和麵向介面方式)Kotlin函數程式設計
- 函數語言程式設計從崛起到沒落到再崛起函數程式設計
- 函數語言程式設計 VS 物件導向程式設計函數程式設計物件
- 函數語言程式設計的興衰與當前之崛起函數程式設計
- WebDSL 新的DSL語言Web
- 物件導向的程式設計和函數語言程式設計基本相同的證據 - vavr物件程式設計函數VR
- 程式導向和麵向物件的對比(轉)物件
- 困惑:程式導向和麵向物件的結合?物件
- Android的崛起和麵臨的困境Android
- 如何在Java消除實現繼承和麵向介面程式設計Java繼承程式設計
- 物件導向程式設計-java語言 第二週程式設計題物件程式設計Java
- Facebook 開源 Skip 物件導向+函數語言程式設計語言物件函數程式設計
- 為什麼說物件導向程式設計和函數語言程式設計都有問題物件程式設計函數
- 如何高效的向新手程式設計師們介紹程式語言?程式設計師
- OOC 物件導向 C 語言程式設計實踐物件程式設計
- 物件導向 vs. 函數語言程式設計物件函數程式設計
- 如何設計一門語言(十)——正規表示式與領域特定語言(DSL)
- 程式語言BASIC程式設計師的啟蒙語言C程式程式設計師
- 物件導向變成 VS 函數語言程式設計物件函數程式設計
- 記-碼農的“啟蒙”之《程式設計語言-實踐之路》和《物件導向分析和設計》兩書程式設計物件
- 函數語言程式設計 vs 物件導向程式設計 vs 程式式程式設計的JS演示比較 - DEV函數程式設計物件JSdev
- 簡單計算器的程式導向實現和麵向物件實現對比物件
- Java語言程式設計——物件和類09Java程式設計物件
- ‘程式語言‘ ’程式設計工具’程式設計
- 程式語言設計,程式設計哲學程式設計
- 程式設計師眼中的程式語言程式設計師
- C語言程式設計C語言程式設計
- 開放出版:許式偉《Go語言程式設計》樣章“物件導向程式設計”Go程式設計物件
- 一小時向非程式設計師介紹 R 程式語言程式設計師
- 第3章:抽象資料型別(ADT)和麵向物件程式設計(OOP) 3.2設計規約抽象資料型別物件程式設計OOP
- C語言大型軟體設計的物件導向C語言物件
- 程式設計師招聘和麵試那些事兒程式設計師
- 物件導向和麵向過程的區別物件
- 谷歌大牛的 C 語言程式設計建議和技巧谷歌程式設計
- 真的可以,用C語言實現物件導向程式設計OOPC語言物件程式設計OOP
- 優化函數語言程式設計:向PHP移植Clojure函式優化函數程式設計PHP函式
- 麵包店裡的程式設計狂想程式設計