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