我并不是一個(gè)非常守舊的Ruby愛好者。我從2005年開始接觸Ruby,那時(shí)跟我一起的還有很多極限編程(XP)的同事,我們都加入了Rails大潮。傳說很多Ruby愛好者都是在那個(gè)時(shí)代從敏捷/極限編程社區(qū)轉(zhuǎn)來的。我們都討厭在企業(yè)級(jí)Java里為了完成一個(gè)東西需要成堆的代碼和XML配置文件的標(biāo)準(zhǔn)做法。
那是一段醉人的日子。元素?cái)?shù)據(jù)編程,動(dòng)態(tài)類型,Ruby和Rails組合而帶來的約定優(yōu)于配置(Convention Over Configuration)的模式,給了我們更加快速的開發(fā)和更簡(jiǎn)潔的代碼。已經(jīng)內(nèi)置到語言中的測(cè)試驅(qū)動(dòng)原則、框架和整個(gè)社區(qū)提供給大家了很多寫的很好的,經(jīng)過驗(yàn)證過的代碼。行為驅(qū)動(dòng)開發(fā)(BDD)——在Java中垂死掙扎(有誰在用JBehave?)——在Ruby中出現(xiàn)并興旺發(fā)展:Rspec是最早的成功案例,接著是Cucumber。如今,這最好的Ruby展示廳同樣也是最好的Agile/XP展示廳,其它的語言望塵莫及。
轉(zhuǎn)眼來到了2012年,革命的年代已經(jīng)結(jié)束。Ruby開發(fā)已經(jīng)成熟,Ruby成為了編程界的主流語言,至少主流在向Ruby漂移。雖然在傳統(tǒng)企業(yè)里,如銀行業(yè),Ruby的滲透并不是很成功,但新興的Ruby企業(yè),如LivingSocial和Groupon,如今已發(fā)展成大企業(yè)。而使Ruby成為主流的標(biāo)志性時(shí)刻是2010年11月Salesforce.com收購(gòu)Heroku,這一地位在七月進(jìn)一步被加強(qiáng)——Ruby的創(chuàng)始人Matz (Yukihiro Matsumoto)被 Heroku 聘為首席架構(gòu)師。
更有趣的是,Rails已經(jīng)成為Web創(chuàng)業(yè)公司的標(biāo)準(zhǔn)技術(shù)。而這種成功并沒有對(duì)Agile/XP社區(qū)造成太大的影響,這個(gè)社區(qū)仍是一個(gè)關(guān)注編程工藝的社區(qū),喜歡嘗試各種語言,如Clojure和Erlang,這是一個(gè)由草根階層推動(dòng)的社區(qū),伴隨著世界各地各種各樣的研討會(huì)。
大部分當(dāng)年做Ruby開發(fā)的今天仍然是Rails愛好者,但我們卻進(jìn)入了一個(gè)反對(duì)Rails的時(shí)期。簡(jiǎn)單死板的Model-View-Controller(MVC)架構(gòu)在2005年是非常有吸引力,而現(xiàn)在它卻因?yàn)槿狈线m的獨(dú)立分層結(jié)構(gòu)而受到批評(píng)。Yehuda Katz——推動(dòng)Rails 3的中堅(jiān)力量——在Twitter上諷刺說:
Rails如今的問題是:1/2的人擔(dān)心它會(huì)變成Java,而另一半人正在努力把它變成java
我希望,也相信,Ruby on Rails社區(qū)會(huì)越來越成熟,能夠充分的反省,在Web開發(fā)中引入正確的架構(gòu)分層,而不需要再發(fā)明一個(gè)類似企業(yè)級(jí)Java Bean這樣的東西。隨著即將到來的蘇格蘭Ruby大會(huì)上Rails六邊會(huì)談,我們的信心更加增強(qiáng);還有Avdi Grimm的Objects on Rails 和Steven Baker的Solid Rails都在推動(dòng)改革的發(fā)展。
- YARV現(xiàn)在是當(dāng)前Ruby 1.9.x的官方的解釋器,相當(dāng)于Matz的最初的Ruby解釋器,它在性能上有了巨大的提升。
- JRuby是當(dāng)前最成熟,最廣泛被用來替代YARV的Ruby解釋器,開發(fā)團(tuán)隊(duì)一直在持續(xù)不斷的更新它。它把所有Java虛擬機(jī)的優(yōu)勢(shì)都帶給了Ruby,即時(shí)編譯,訪問豐富的Java庫(kù),跟老的Java程序進(jìn)行交互,真正的、本地的多線程。這最后一點(diǎn)更是重要,它讓Ruby有能力來利用多核服務(wù)器進(jìn)行大規(guī)模服務(wù):使用多線程來更好的利用內(nèi)存,而不是生成新的進(jìn)程。
- Iron Ruby,.Net框架上的Ruby實(shí)現(xiàn),雖然并沒有受到微軟官方的直接支持,但仍然不斷的在進(jìn)步。
- Rubinius是一個(gè)用Ruby寫成的Ruby(算是吧)。盡管早期有不少挫折,經(jīng)過重大的重寫,Rubinius現(xiàn)在處于穩(wěn)定的改進(jìn)中。它現(xiàn)在正朝著實(shí)現(xiàn)完全多線程的版本2前進(jìn),這一版本中將去除Global
Interpreter Lock。 - Maglev是一個(gè)基于VMWare的 GemStone/S 3.1 虛擬機(jī)上的Ruby實(shí)現(xiàn),它允許分布式的和持久性的Ruby對(duì)象。社區(qū)里的人對(duì)它的認(rèn)識(shí)來自于它早期的曝光:在2008年RailsConf大會(huì)上的首秀讓它光芒四射,但隨后幾年卻變得悄無聲息。
- MacRuby,RubyCocoa的繼任者,是一個(gè)1.9版的Ruby的實(shí)現(xiàn),但卻是基于OS X內(nèi)核技術(shù)的。對(duì)于 Ruby on OS X 來說最大的問題相同的代碼不能運(yùn)行在 iOS (iPhone / iPad)上,這就是為什么最近的Ruby in Motion誕生的原因,它是基于MacRuby的,但完全兼容iOS App Store,這是一種讓人興奮的技術(shù)。
- MRuby有兩原因使我們需要在這里提它一下:他是Matz自己的項(xiàng)目,它是由日本政府資助的。它是一個(gè)Ruby的輕量級(jí)實(shí)現(xiàn),設(shè)計(jì)用于和Lua語言相似的領(lǐng)域。日本人很可能會(huì)是使Ruby嵌入到電子設(shè)備成為可能并興起的重要力量。
Ruby的首次出現(xiàn)距今已有17年,Rails的誕生已有8年,Ruby社區(qū)仍然是一個(gè)令人興奮的地方??粗?dāng)前的各種活動(dòng),各種變革,各種成果,這是我以前從未見過的繁榮景象。