|
【CSDN 現(xiàn)場報道】2010年12月9日,年度收官技術(shù)盛宴SD2.0大會在上海光大會展中心國際大酒店隆重開幕。這是自2007年成功舉辦首屆以來,由CSDN 和《程序員》雜志主辦的連續(xù)第四屆SD2.0(軟件開發(fā)2.0)大會。來自IBM、微軟、盛大、FaceBook、阿里巴巴等眾多企業(yè)的技術(shù)領(lǐng)袖全部匯 聚,共同剖析當(dāng)前IT技術(shù)發(fā)展大勢,分享在各自領(lǐng)域的技術(shù)成就與成功秘訣。
創(chuàng)新工場首席布道師、軟件架構(gòu)師蔡學(xué)鏞,在工具與語言分論壇做了題為《領(lǐng)域語言(DSL)的設(shè)計與實踐》的主題演講。
蔡 學(xué)鏞認為,整個編程正在朝著領(lǐng)域語言(DSL,Domain Specific Language)發(fā)展。那么什么是領(lǐng)域,可以理解為特定,特定是專用限定,不可以做別的事情。比如R語言,在統(tǒng)計領(lǐng)域應(yīng)該比較流行,但是它的功能太強 大,它做的不止是統(tǒng)計,所以它不是一個DSL。
現(xiàn)在我們談的都是別人家的DSL,我們固然可以用別人家的DSL,但是DSL真正價值是,根據(jù)著自己商務(wù)需求設(shè)計出自己需要的語言。
那 么要如何制作自己的DSL,首先是建造領(lǐng)域模型。哪些領(lǐng)域可以復(fù)用,有哪些方法,都要寫下來。有了領(lǐng)域模型之后,就能簡化DSL的實現(xiàn),即使脫離DSL也 依然有助于編程。你沒有這個設(shè)計工具,更好寫代碼,領(lǐng)域模型的存在價值就是它可以幫助你寫代碼,即時沒有DSL的情況之下。另外,DSL最好具有跨越領(lǐng)域 模型限制的能力。
接 下來是定義DSL。定義DSL需要領(lǐng)域?qū)<液途幊虒<乙煌M行。DSL的定義可能會受到領(lǐng)域模型的影響,它是依附于領(lǐng)域模型的。DSL的實踐方式可能會影 響能用的類型,所以務(wù)必找出領(lǐng)域的關(guān)健詞,比如說財務(wù)就有本金這些關(guān)鍵詞。定義語法,這些關(guān)鍵詞之間怎么組合,就是它的語法,把這個規(guī)則訂出來,當(dāng)這些都 完成了,語言就訂立出來了。不要把這個想的很困難,一般情況下跟一個編程語言是不一樣的,其難度非常低。
設(shè)定出來自己領(lǐng)域模型,DSL要怎么實現(xiàn)它呢?蔡學(xué)鏞認為可以有五種方式: 一、自己寫Parser,但通常比較難,好處就是可以做任何事情不受限制。 二、使用XML,就無須寫Parser,不過缺點也很明顯,限制很大,要求結(jié)構(gòu),數(shù)據(jù)變化大。 三、使用語言自己的DSL機制,但需要語言本身的支持。 四、使用ANTLR等code Gen工具。它可以幫你產(chǎn)生Java的代碼,或者產(chǎn)生其他語言的代碼。 五、使用MPS專門為DSL設(shè)計出來的開發(fā)平臺。通過它不僅可以輕易的把DSL開發(fā)出來,甚至連文字編輯器都有了。
最后蔡學(xué)鏞總結(jié)到,領(lǐng)域語言使用范圍很廣,領(lǐng)域語言很實用且優(yōu)點顯著。領(lǐng)域框架的建立,對于領(lǐng)域語言相當(dāng)重要。建立領(lǐng)域框架之后,即使不使用DSL,仍會為系統(tǒng)開發(fā)帶來相當(dāng)大的好處。 |
|
|
來自: rookie > 《技術(shù)帖》