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函數程式設計
- 20200820 - 程式導向和麵向物件物件
- 函數語言程式設計的興衰與當前之崛起函數程式設計
- 物件導向的程式設計和函數語言程式設計基本相同的證據 - vavr物件程式設計函數VR
- 物件導向程式設計-java語言 第二週程式設計題物件程式設計Java
- 程式導向和麵向物件的對比(轉)物件
- Facebook 開源 Skip 物件導向+函數語言程式設計語言物件函數程式設計
- 物件導向變成 VS 函數語言程式設計物件函數程式設計
- 函數語言程式設計 vs 物件導向程式設計 vs 程式式程式設計的JS演示比較 - DEV函數程式設計物件JSdev
- ‘程式語言‘ ’程式設計工具’程式設計
- 程式語言設計,程式設計哲學程式設計
- Java語言程式設計——物件和類09Java程式設計物件
- 第3章:抽象資料型別(ADT)和麵向物件程式設計(OOP) 3.2設計規約抽象資料型別物件程式設計OOP
- Groovy 是一門 DSL 語言
- C語言大型軟體設計的物件導向C語言物件
- 真的可以,用C語言實現物件導向程式設計OOPC語言物件程式設計OOP
- c語言程式設計題C語言程式設計
- 函數語言程式設計函數程式設計
- JAVA語言程式設計思想Java程式設計
- 物件導向和麵向過程物件
- RAC的函數語言程式設計函數程式設計
- Scala 函數語言程式設計(一) 什麼是函數語言程式設計?函數程式設計
- 麵包店裡的程式設計狂想程式設計
- 雙向連結串列介面設計(C語言)C語言
- Java 中的資料流和函數語言程式設計Java函數程式設計
- Python中的Map、Reduce和Filter函數語言程式設計PythonFilter函數程式設計
- 物件導向和麵向過程的區別物件
- Go語言結構體(struct)物件導向程式設計基礎篇Go結構體Struct物件程式設計
- 聊聊 Go 語言中的物件導向程式設計Go物件程式設計
- 函數語言程式設計-鏈式程式設計RAC函數程式設計
- .NET併發程式設計-函數語言程式設計程式設計函數
- Java語言程式設計—迴圈語句Java程式設計
- JavaScript中的函數語言程式設計JavaScript函數程式設計
- C++的函數語言程式設計C++函數程式設計
- 函數語言程式設計,真香函數程式設計
- Go 語言程式設計規範Go程式設計
- Go語言併發程式設計Go程式設計
- CWK100程式設計語言程式設計
- 結對程式設計(c語言)程式設計C語言