Ruby 1.9版本新特性展示
Ruby語(yǔ)言發(fā)展至今已經(jīng)存在了很多種版本。每種版本的出現(xiàn)都為我們?cè)黾恿诵碌墓δ?,展示了Ruby發(fā)展的前景光明。宏如約發(fā)布了Ruby 1.9版本。#t#
根據(jù)Ruby的慣例,小數(shù)點(diǎn)后面第一位如果是單數(shù),那么就表明這是一個(gè)實(shí)驗(yàn)版本,不推薦用于產(chǎn)品環(huán)境。所謂“產(chǎn)品環(huán)境”,對(duì)于目前的Ruby來(lái)說(shuō),基本上就是Ruby on Rails。
從目前RoR社群的反映來(lái)看,確實(shí)有人正在嘗試用Ruby 1.9版本配合RoR,但是尚屬玩票性質(zhì)。我詢問(wèn)了一些處在真實(shí)項(xiàng)目中的RoR團(tuán)隊(duì),目前還沒(méi)有人打算在自己的項(xiàng)目中使用Ruby 1.9。
在Ruby社群里的半仙級(jí)人物Mauricio Fernandez在這里總結(jié)了Ruby 1.9的主要新特性,洋洋灑灑的一大篇,充斥著雞毛蒜皮的語(yǔ)法糖衣,我看了半天,愣是沒(méi)看到幾個(gè)特有意義的東西。其實(shí)Ruby 1.9的最重大變化在內(nèi)不在外,新的虛擬機(jī)Yarv把Ruby的性能大大提高了。
在CSDN上的一篇轉(zhuǎn)載報(bào)道中提到,在一個(gè)Fibonacci序列的評(píng)測(cè)對(duì)比中,Ruby 1.9的性能較之Python 2.5.1還要快出兩倍。當(dāng)然,僅憑借一個(gè)測(cè)試就斷定Ruby 1.9版本的性能快于Python是幼稚的,但是現(xiàn)在可以肯定地說(shuō),Ruby腦袋上那頂“速度最慢的動(dòng)態(tài)語(yǔ)言”的大帽子肯定要摘掉了。
有人認(rèn)為,這下子不得了了,Ruby要稱霸動(dòng)態(tài)語(yǔ)言了。你想想,Ruby已經(jīng)幾乎擁有了所有夢(mèng)幻般的語(yǔ)言特性,神奇的動(dòng)態(tài)能力,強(qiáng)大的支持庫(kù),內(nèi)置的跟Perl可以比肩的正則表達(dá)式,Smalltalk級(jí)別的純而又純的面向?qū)ο筇卣?,?jiǎn)潔明快的風(fēng)格,跨語(yǔ)言整合也非常容易,唯一的缺點(diǎn)就是速度慢。現(xiàn)在連這個(gè)缺點(diǎn)都被彌補(bǔ)了,Ruby還能擋得住嗎?其他的動(dòng)態(tài)語(yǔ)言都該歇菜了。
雖然我也算是一個(gè)Ruby語(yǔ)言的擁護(hù)者,但是我并不這么認(rèn)為。特別是,我不認(rèn)為Ruby 1.9版本能夠?qū)ython造成實(shí)際的威脅,更談不上“趕盡殺絕”。原因很簡(jiǎn)單,Ruby是一種魔幻語(yǔ)言,而Python是一種簡(jiǎn)約語(yǔ)言,Python的支持者也大多數(shù)是簡(jiǎn)約主義的忠實(shí)信徒。對(duì)于他們來(lái)說(shuō),一種語(yǔ)言越是魔幻,就越無(wú)法獲得他們的信任。
什么是魔幻語(yǔ)言呢?這是我杜撰出來(lái)的說(shuō)法。對(duì)編程語(yǔ)言進(jìn)行分類有很多方法,其中人們常用的比如非常“過(guò)程式語(yǔ)言”,“面向?qū)ο笳Z(yǔ)言”,“函數(shù)式語(yǔ)言”等,這是按照在這種語(yǔ)言中原始的看待程序的方式來(lái)劃分。還有比如“編譯型語(yǔ)言”和“解釋型語(yǔ)言”,這是按照語(yǔ)言翻譯發(fā)生的時(shí)間來(lái)劃分的,還有一些別的分法。不過(guò)我一直覺(jué)得,根據(jù)語(yǔ)言本身的設(shè)計(jì)風(fēng)格和擁護(hù)者的氣質(zhì)也可以把語(yǔ)言劃分成“魔幻語(yǔ)言”和“簡(jiǎn)約語(yǔ)言“兩類。
所謂”魔幻語(yǔ)言“,主要代表作品有C++、Perl、Javascript和Ruby。這些語(yǔ)言擁有豐富的特性,聰明的技巧和意想不到的奇效,永遠(yuǎn)有發(fā)掘不完的奇技淫巧,總能找到讓人匪夷所思的”yet another way"。反過(guò)來(lái),“簡(jiǎn)約語(yǔ)言”崇尚清晰直接,夠用就行,要求從代碼容易理解,寧可笨一點(diǎn)、累一點(diǎn)、多寫一點(diǎn)代碼,反對(duì)出人意料的技巧,反對(duì)故弄玄虛。C、PHP、Python和Lua這一派語(yǔ)言的代表作。
而Java和C#從語(yǔ)言設(shè)計(jì)來(lái)說(shuō),一開始還是比較簡(jiǎn)約的,但是近來(lái)越來(lái)越魔幻,而且標(biāo)準(zhǔn)庫(kù)設(shè)計(jì)相當(dāng)繁復(fù)。但我傾向于將它們歸于簡(jiǎn)約語(yǔ)言一類,因?yàn)殡m然在其中也有很多技巧,但是這兩種語(yǔ)言社群的總體風(fēng)格是比較質(zhì)樸的。VB的傳統(tǒng)是典型的簡(jiǎn)約,老式的VB6和VBA都是典型的簡(jiǎn)約派,新的VB.NET雖然也能玩出魔幻來(lái),但是根本上還是更親近簡(jiǎn)約語(yǔ)言。
魔幻語(yǔ)言通常看上去更加引人入勝,能夠做一大堆讓人目瞪口呆的事情。魔幻語(yǔ)言的擁護(hù)者,通常都熱衷于這種智力競(jìng)賽,他們發(fā)掘語(yǔ)言中每一個(gè)死角,尋找有趣的技巧組合,一遍遍地尋找更好的方法和思路,對(duì)語(yǔ)言層面的技巧如癡如醉,樂(lè)此不疲。在魔幻語(yǔ)言的社群里,“語(yǔ)言高手”是備受尊崇的,他們可能不知道怎么響應(yīng)一個(gè)HTTP請(qǐng)求,但是卻能夠用不少于6種方式來(lái)寫一個(gè)for循環(huán)。他們寫的代碼是一種謎語(yǔ)般的藝術(shù),出謎語(yǔ)和猜謎語(yǔ)的人們都能從中獲得巨大的精神滿足。
簡(jiǎn)約語(yǔ)言就土多了。通常做一件事情就那么一兩種方法,你真的沒(méi)多少花花腸子可繞。光看代碼根本不看不出你的道行,隨便一個(gè)受過(guò)一點(diǎn)專業(yè)訓(xùn)練的人也能看透你葫蘆里賣的什么藥,在代碼里找成就感,基本沒(méi)戲。
當(dāng)然,這并不是說(shuō)簡(jiǎn)約語(yǔ)言的“能力”要比魔幻語(yǔ)言差,或者是會(huì)限制你的思維。相反,簡(jiǎn)約語(yǔ)言讓你把注意力集中在哪些真正與問(wèn)題相關(guān)的地方,而不是語(yǔ)言本身的表達(dá)方式上。因此從工程上看,簡(jiǎn)約語(yǔ)言更適合大規(guī)模、協(xié)作式的軟件開發(fā)。
從長(zhǎng)時(shí)間的比較來(lái)看,簡(jiǎn)約語(yǔ)言無(wú)疑受到更廣泛的支持。
Ruby 1.9版本中的魔幻語(yǔ)言如果進(jìn)行有效地控制,也可以以簡(jiǎn)約的方式來(lái)使用。這其中有兩種途徑,其一是通過(guò)有效的限制方式使語(yǔ)言的應(yīng)用歸于質(zhì)樸。比如Java和C#本身具有很多魔幻特性,是有資格稱為魔幻語(yǔ)言的,但是整個(gè)社群的風(fēng)氣比較單純,很少人喜歡炫技耍酷,語(yǔ)言的應(yīng)用風(fēng)格被有效地限制在一個(gè)“簡(jiǎn)約子集”之中。
第二條路徑是通過(guò)魔幻實(shí)現(xiàn)質(zhì)樸,C++大師Andrew Koenig曾經(jīng)用這個(gè)觀點(diǎn)來(lái)為C++的復(fù)雜辯護(hù),但是C++在這方面做得并不好。要說(shuō)這方面的成功案例,Ruby on Rails倒算是一個(gè)。RoR在實(shí)現(xiàn)中用了很多奇技淫巧,但是在這個(gè)框架之上開發(fā)Web應(yīng)用,卻顯得比PHP更簡(jiǎn)約直觀,這就是通過(guò)魔幻達(dá)到簡(jiǎn)約的例子。
回到開頭的話題,Ruby是一個(gè)典型的魔幻語(yǔ)言,而Python則是簡(jiǎn)約派的代表。兩個(gè)語(yǔ)言的支持人群在審美觀念和開發(fā)風(fēng)格方面差距非常大。初學(xué)Ruby和Python的人,都會(huì)感受到一種欣喜和興奮,但是原因卻不太一樣。Ruby的學(xué)習(xí)者會(huì)驚喜于很多新的表達(dá)方式,比如 :attr_accessor 之類的魔幻特性,而Python學(xué)習(xí)者則會(huì)驚喜于實(shí)現(xiàn)具體功能的簡(jiǎn)潔性。
可以說(shuō)從一開始他們追求的就是不同的東西。隨著學(xué)習(xí)的深入,Python開發(fā)者當(dāng)然也會(huì)發(fā)現(xiàn)Python中的不少深入的特性,不過(guò)卻并不傾向于濫用它們。長(zhǎng)次以往,Python人群對(duì)任何語(yǔ)言的魔幻面都會(huì)產(chǎn)生一種厭惡感。我認(rèn)識(shí)的一個(gè)Django開發(fā)者,就明確表示,就算RoR比Django開發(fā)效率高一點(diǎn),也絕不使用Ruby,因?yàn)镽uby這個(gè)語(yǔ)言充滿了“不必要的小聰明”。
從性能上來(lái)說(shuō),Python的性能獲得大幅度提升的機(jī)會(huì)不太大,但我并不相信YARV能夠真的讓Ruby 1.9版本在速度上享有對(duì)Python的明顯優(yōu)勢(shì),兩者的運(yùn)行時(shí)效率最終應(yīng)當(dāng)在同一個(gè)數(shù)量級(jí)上,因此,語(yǔ)言的選擇主要還是取決于風(fēng)格和審美傾向。據(jù)此,我判斷Python的開發(fā)者不會(huì)大規(guī)模轉(zhuǎn)向Ruby,Ruby的發(fā)展也不會(huì)對(duì)Python構(gòu)成實(shí)質(zhì)的沖擊。兩種語(yǔ)言都將成為最主流的應(yīng)用開發(fā)語(yǔ)言






