DSL:單一語言開發(fā)的終結(jié)者?作者 Sadek Drobi譯者 Jason Lai 發(fā)布于 2007年8月8日 上午4時(shí)0分 許 多年以來,對(duì)于軟件項(xiàng)目,企業(yè)軟件開發(fā)的主流實(shí)踐一直都傾向于在單一的通用編程語言上進(jìn)行標(biāo)準(zhǔn)化,從而使得Java和C#成為今天編程語言的主流選擇。隨 著越來越多的目光開始投向DSL,也許我們的前腳已經(jīng)踏在了一道新的門檻之上,向前望去,我們會(huì)發(fā)現(xiàn)在軟件項(xiàng)目中采用多種語言已經(jīng)成為一個(gè)標(biāo)準(zhǔn),但80年 代和90年代初出現(xiàn)的問題不會(huì)重現(xiàn)。 Martin Fowler提出,也許我們正在邁進(jìn)這樣的一個(gè)新時(shí)期: [……]在這個(gè)時(shí)期內(nèi),我們將見證多種語言在同一個(gè)項(xiàng)目上的應(yīng)用,人們就像現(xiàn)在選擇框架一樣,根據(jù)功能來選擇相應(yīng)的語言。 Fowler稱:“像Hibernate、Struts和ADO這樣的大型框架,給人們?cè)趯W(xué)習(xí)上帶來的挑戰(zhàn),絕不亞于學(xué)習(xí)一門語言,即便你在單一一 門宿主語言上使用這些框架編程也是如此。”此外,在它們的宿主語言中表述需求的難度可能會(huì)相當(dāng)大,并可能引出笨拙難用的配置文件,“這些配置文件實(shí)際上就 是使用XML寫的外部領(lǐng)域特定語言”。 在語言中嵌入DSL,而不是使用類庫,可能會(huì)是一個(gè)更為合適的解決方案。Martin給出了這樣的一個(gè)分析結(jié)論:“API就好比是在聲明一個(gè)詞匯 表,而DSL則為其增加了相應(yīng)的語法,使得人們能夠?qū)懗鰲l理清晰的句子。”因此,使用DSL而不是框架會(huì)使代碼豐富表現(xiàn)力,為人們帶來“更良好的抽象處理 方式”,并使“閱讀我們寫出的代碼及對(duì)我們意圖的展示變得更加容易”。 Piers Cawley稱,DSL 的主要特性并非其可讀性,而是“它們對(duì)去相應(yīng)領(lǐng)域的高度專注”使得它們能夠更加明確地表義。Cawley為了闡述他的觀點(diǎn)舉了一個(gè)例子,說明DSL不僅僅 能讓我們“寫出讀起來像領(lǐng)域?qū)<艺f出來的話一樣的程序”,也可以很技術(shù)化,用來代表一個(gè)使用它們的語法進(jìn)行操控的框架。 Neal Ford也相信,被他稱為多語言編程(Polyglot Programming)的勢(shì)頭正在興起。 在軟件開發(fā)的這個(gè)新紀(jì)元中,日益明顯的主要特征就是嵌入更多的語言,使人們能夠“為所做的菜選擇一把恰到好處的刀,并且恰如其分地使用它”。他舉了一個(gè)例 子,展示在Java編程語言中并行類庫的使用難度,并將其與Haskell作比。Haskell是一門函數(shù)式語言,“消除了變量所帶來的副作用”,并使 “編寫線程安全的代碼”變得更容易。Ford強(qiáng)調(diào)說,Java和.NET平臺(tái)都存在Haskell語言的實(shí)現(xiàn)(Jaskell和 Haskell.net)。 不再使用單一語言進(jìn)行開發(fā)所帶來的風(fēng)險(xiǎn)之一可能讓80年代末90年代初所出現(xiàn)的問題又再次重現(xiàn),當(dāng)時(shí)語言就是完全獨(dú)立的平臺(tái),既不能互操作也不能放在一起良好地使用。Martin Fowler指出,現(xiàn)在的情況有這樣的一個(gè)重要區(qū)別: 在80年代末期,人們很難讓各個(gè)語言之間緊密地互操作。這些年來,人們花了很大精力創(chuàng)建出可以讓不同語言緊密共存的環(huán)境。腳本語言在傳統(tǒng)上與C語言有著很 密切的關(guān)系。在JVM和CLR平臺(tái)上也有人為互操作花費(fèi)了大量精力。另外人們也在類庫上投入了很多人力物力,為的是讓語言忽視類庫的存在。 最終,要學(xué)習(xí)并使用多種語言,對(duì)于業(yè)界乃至開發(fā)人員都可能會(huì)變成一項(xiàng)重要資產(chǎn)?!禤ragmatic Programmers》這本書里面就說到,由于這樣做會(huì)對(duì)人們對(duì)編程的思考方式產(chǎn)生影響,因此這樣能幫助人們發(fā)現(xiàn)解決問題的新途徑。 您是怎樣認(rèn)為的呢?在下去的五年中,我們會(huì)開始混合使用語言,并像用類庫一樣頻繁地使用DSL嗎? 查看英文原文:DSLs bringing the end of single language development? |
|
|