Python, Ruby 與 Groovy,誰與爭鋒,? SleekEngine 隨著計算機硬件的快速發(fā)展,,10年前因為速度問題而被詬病的Java現(xiàn)在成了計算機流言語言中的老大,但是它卻仍被認為復雜笨重,,近幾年來動態(tài)語言卻有后來趕上的趨勢,,掌握一門動態(tài)語言成了程序員需要考慮的事宜。 近期接觸了幾種流行的動態(tài)語言Python, Ruby, Groovy,,它們相比靜態(tài)語言Java/C++來說,,大為簡單,靈活,,省時,,那么選擇何種語言? 淺嘗三種語言后,,寫下此文,,作為在JavaEye留的第一爪。 從TIOBE網(wǎng)站的語言排名可以看出,比較2000與2008年,,Java 從30%跌到20%左右, C++從18%跌到11%,, 靜態(tài)語言從72%占有率降到了60%; 動態(tài)語言由27%升到40%,其中Python從1%到5%, Ruby由 < 1%到2.5%,。PHP由5%長到11%,。(以上數(shù)據(jù)為大約估算) 從企業(yè)界角度看,語言的流行性與以下幾點有關: 1) 成熟的庫(library) Python的庫非常多,, Groovy可以調用強大的Java所有的庫,,ruby差些,但是正在趕上,。 2) 流行框架 如果某種語言有個流行框架,,那就能吸引過來很多使用者。Ruby on Rail是殺手級框架,。Python 框架很多,,但是目前尚沒有特別突出的。Groovy還年輕,,只有個Grails,,但是可以利用JAVA已有的框架如SPRING HIBERNATE。 3) 流行程序 如果某個流行程序使用了某語言,,那么這種語言不可必免會被多人使用。比如iPhone的出現(xiàn)使一種可能沒多少人聽說過的 Cocoa熱了起來,,因為人們用它編寫在iPhone上運行的手機程序,。這三種動態(tài)語言中Python在圖象處理,或科學計算界已占有一席之地,。Ruby可能落后一些,,Groovy幾乎沒有。 4) 企業(yè)界的傾向 市場通常會傾向于簡單好用省時省力,,易于使用維護,,穩(wěn)定,能承受大負荷(scalable)的語言,,這也是JAVA的流行性當時超過C++的原因,,這三個語言比靜態(tài)語言都簡單,其中Python由于其語法和句法簡單,,所以可能是最好維護,,而且能夠承受高負荷(Youtube每天數(shù)億點擊為證);RUBY 有些魔幻語法也能使程序寫得很簡單,,總體維護上比Python感覺差了一點,,讓其他人看程序可能不是非常直接易懂,性能上目前也差些。Groovy 模仿了大量RUBY,,也借鑒了少量Python文法,,由于在JVM上運行,性能上應該是不錯的,。 5)對硬件的利用 對著雙核的出現(xiàn),,可以預料雙核,四核,,16, 32..核CPU都可能在未來出現(xiàn),。如果未來語言只能利用多核中的一核,那未免太浪費了,,也可能因此而落于人后,。從這一點上看GROOVY有天然優(yōu)勢,能借助JVM完成這一任務,;PYTHON 正在積極研制新的方法實現(xiàn),,也可以在JVM或WINDOW環(huán)境下運行JPython 與IronPython;Ruby落后些,,但是也有JRuby和IronRuby,。 6)語法不一定起決定作用 語言中有好用的語法糖可以給程序員帶來方便,但是并不一定對語言未來的流行起決定作用,,因為好用的語法可能會被其它語言學去,。想想C#學Java知道了。ruby借鑒了許多語言的優(yōu)點,,Groovy 借鑒了ruby與python,,而新版的python又借鑒了ruby的block用法(用來自動釋放資源)。 從語言的各自優(yōu)缺點來看: Python: 1)三者中最成熟,,通用,,工具庫多,資源豐富,,文檔等支持強大,,幾乎能做任何事:網(wǎng)絡,圖形界面,,桌面程序,,服務器,圖形處理,,算法等,。 2)相比之下性能好,運行速度快,,負載力強,。 3)簡單易學,,文法簡潔,其使用空白縮進代替花括號或END使代碼看起來很干凈,,易讀易懂因此易維護,。 4)基于盡量使用一種方法完成一件事,越簡單越好的哲學,。這種哲學適合大型項目,,因為讓其他人看著易懂,好維護,,不至于過多靈活繁雜的語法使自己玩的爽了,,別人看得傻了。這與RUBY的用許多種方法完成一件事的哲學正相反,。GROOVY感覺在兩者之間,。 5)得到業(yè)界承認 a) Mac機,還有大多數(shù)Linux,,或者流行Linux中絕大多數(shù)都默認安裝Python,,這意味著不管你是哪國人在哪里,想用哪臺Linux機子,,想用Python就可以用,,省時順手;要用Ruby Groovy還得另外安裝,。 b) 有巨頭支持,。幾個例子,Google 互聯(lián)網(wǎng)老大,,公司內部中Python是官方的第三語言,,有內部員工說他們是能用Python就用Python, 實在不行才用C++; Youtube 大部分是用 Python寫的,;著名Linux發(fā)行版Ubuntu的發(fā)行公司的官方語言,也是其創(chuàng)始人的首選語言,; c)其他還有Redhat Linux, 美國宇航局,金融系統(tǒng)如紐約股票交易所,,摩根大通,電影動畫制作如Disney,Pixar和DreamWorks,,星球大戰(zhàn)的特效公司ILM等一系列著名大型機構中使用,。桌面程序如流行程序BT客戶端等。 6)語法靈活亦相對嚴謹 除了動態(tài)性外,,類也是開放的(但是底層內置的不是),,可以動態(tài)增加刪改類及其屬性函數(shù)等。 缺點: 1)不是完全的面向對象,,語法中混雜有函數(shù)調用方法,。 有些語法一些人不易接受:比如代碼中的出現(xiàn)不少類似"__str__"的字眼,,類函數(shù)中的變量表中self等。 2)使用空白縮進代替截止符在網(wǎng)頁制作有點問題,,這時還得需要新語言或語法,,代碼Copy Paste等時,使用Tab時也可能有點麻煩,,這一點有些人很難接受,,加上1)中的情況成為ruby創(chuàng)始人另立門戶的主要原因。 3)好象目前還不支持多核CPU 4)盡管創(chuàng)始人說Python這一名字取自一個喜劇團體,,但是其名字或圖標可能會使一些人反感,,有些Python語言網(wǎng)站的的Python圖片著實不令人喜歡。不喜歡這種動物的人可以考慮選其它的,,比如Python的弟弟Ruby,。 簡要:Python適合大中小型企業(yè)各類開發(fā),幾乎無所不在,,無所不能,,想跟緊大型企業(yè)或者需要成熟的庫,Python可能較合適,。 ---------------------- Ruby 1) 語法是更純正的面向對象語言,,許多功能讓從Java/C++世界過來的人耳目一新;因為它借鑒了包括Python, Smalltalk, Lisp等在內的一些其它優(yōu)秀語言的優(yōu)點,。一切都是Object,,如避免Python的類似len("name"),而采用 "name”.length, 還有提供類內部參數(shù)數(shù)據(jù)的保護等;提供的更多語法,, 比如它有python沒有的塊與閉包,;它有更易懂簡練句法,如用' < ' 來表示類繼承,,用?來表示返回是否的函數(shù),。 2) 靈活的魔幻語法,如模塊的混入,,塊,,開放式的類定義,加上已有的動態(tài)性使其變得極其靈活,;各種繁多的著名設計模式在它手中好象都失去了意義,,Java做夢都想達到的靈活性在RUBY手中輕而易舉,Spring AOP相比也失去了光澤,,設計大師們的法則與多年經(jīng)驗也好象都不再適用,。 3) 相比Python提供了End作為程序塊的截止符,這是Rubyist們自認為的一大進步,,也是與Python的一個重要區(qū)別,。 4) 殺手級框架,,Ruby on Rails,及還有些其它殺手級框架正在一一躍出,。 5)有跑在JVM的JRuby和微軟的IronRuby 6)名字與圖標很好 Ruby 紅寶石是瞄準Perl (珍珠)的繼承者而來的,,名字與圖標都優(yōu)雅端莊賞心閱目。 缺點 1)靈活可能有負面影響 開放的類(尤其是底層的)在大型程序中可能會造成混亂,,不易懂不易維護,,類可能會不知道誰在哪個角落就能夠改動(不過有了IDE的支持這種情況可能可以解決);語法方法的靈活可能使代碼不規(guī)范,,一個人喜歡寫魔幻代碼的有可能使后來人看不懂,,其用多種方法實現(xiàn)一個目的的哲學好象是在鼓勵代碼的多樣靈活性,這在大型項目中會加大維護難度,。這可能也是為何目前尚未有大型企業(yè)界使用Ruby的原因,。針對這一情況已經(jīng)有人提議對修改底層的類加以限制。 2)性能相對不強 原有的Ruby速度慢,,穩(wěn)定性相對差些,,據(jù)說是原有的GC寫的不強。不過隨著新的更好的一系列Ruby解析器的出現(xiàn)與硬件的快速發(fā)展與價格降低,,此性能問題應該能夠在不遠的未來解決,。據(jù)Java Eye的Robbin講,即使有此性能問題,,擴充硬件或設置系統(tǒng)也多可解決問題,。 3)對線程支持不強,Ruby 2.0據(jù)說要加強 4)好象尚未支持多核,,不過未來可能解決,,道理同2) 5)對End的意見 不少人認為Ruby的End過多,顯得不好看,。代碼在寫很多層時尤其如此,,這樣使查找相應的起始位置增加難度。有人建議其創(chuàng)始人Mats提供End的替代字符,,他有此意,,但是好象沒有他看的上的,如果誰不喜歡End的,,找個自認為不錯的字符發(fā)給總部吧,要趁早,,否則以后越來越難改,。 綜述:Ruby是令人興奮的,學習Ruby可以加深程序員對面向對象,,及計算機語言的理解,,從這一點上說,,Python更只象個工具,Ruby靈活卻又很有深度,,值得一學,。Ruby的主要缺點是其GC及性能,近年來已經(jīng)涌現(xiàn)一系列新的解析器號稱能解決GC問題,;有關性能看看Java的歷史可知,,當時Java的速度被評為比C++差得太遠,可是幾年后性能隨著硬件的發(fā)展而大大加強,,所以Ruby的性能應該在未來不會是大問題,。 ruby目前最主要的應用也是其殺手锏Rails框架具備快速開發(fā)網(wǎng)站的特點,一個或幾個人就能快速開發(fā)一個網(wǎng)站,,能節(jié)省很多人力時間,,較適合創(chuàng)業(yè)型小公司,負荷量不是非常大的中型公司,,或大型機構的內部網(wǎng)站,。 對Python的空格縮進,非面向對象語法,,self, "__xxx__", 跛腳的lambda難以忍受的可以嘗試一下ruby ------------------------------------ Groovy 1)初看起來Groovy好象是Ruby on Java,,它幾乎繼承了ruby所有的優(yōu)秀語法,也添加了少量Python的東西,。Ruby中引以為傲的一切是對象,,Groovy也可以作到,如 3.times { ...}, 塊傳遞,,動態(tài)改變類,,增刪類函數(shù)等。它借鑒了大量Ruby優(yōu)秀的語法,,保留了C/C++/Java程序員熟悉的花括號,,沒有用Ruby無所不在的"End”。也支持開放的類,,此外還支持將修改的類在一定范圍內使用以減少負面影響,。對Ruby的一些生僻的字符進行了改進,使得更加友好易懂,,如塊中的 | x | 換成了 x→,; 2)被Thoughtwork(就是寫重構那本書的Martin Fowler所在公司)經(jīng)理稱為 “Java 2.0” ,可以“無縫”結合Java 代碼,,你可以在Groovy文件中寫Java代碼,,用Java庫。Groovy象是個輕量級的動態(tài)版Java,而且加大擴展了許多易用的句法,,以前曾想過的一些"Java 要是這么寫多好啊" 竟然在Groovy中實現(xiàn)了: 如去掉了多余的分號,,三引號使得多行的文本變量整潔好看,,砍掉了沒多大用的getter setter等。 3 )可以使用所有Java的庫,,因為Groovy"就是Java”,。相比Ruby愛好者在一個一個辛苦編寫各種庫的時候,Groovy已經(jīng)是站在Java 的車頭上向前沖了,。 4)支持多核CPU,,未來的硬件是多核CPU的世界,誰不支持多核可能不是淘汰就落后,。由于跑在JVM上,,Groovy再次領先于Python和Ruby;有人說,,也有Jython 和Jruby 啊,,但是從與Java的結合性及調用Java代碼或庫來說,Groovy無疑是極佳的結合,,Jruby或Jython相比下顯得并不很自然,。 5)性能不錯 Groovy不再是一個玩具或試用品,一個已經(jīng)使用Groovy的公司其正式發(fā)布的產(chǎn)品中有超過十萬行Groovy代碼,。 其性能相比Python我不清楚,,但有測試說Grail性能不亞于,甚至更強于Ruby on Rails.由于Groovy跑在JVM上,,性能應該不會太差,。 6)業(yè)界的支持 Groovy 2003年左右剛出現(xiàn),還是新生兒,,還談不上大型業(yè)界的大量支持,,就連Sun公司也對Ruby青眼有加,使得Groovy愛好者大抱不平,,抱怨Sun偏向外人,,不向自己這個Java嫡系。目前可能只有Oracle與Thoughtwork支持,。 那么目前業(yè)界還未大力支持,,誰可能會支持Groovy呢?私下認同這種說法,,就是全世界Java與C++的幾百萬程序員中可能會有不少支持的,。這是由于Groovy與Java,或C系列語言句法的近似及與其與Java“無縫”結合的特點相關的,。流行語言的發(fā)展目前為止是在相似的基礎上發(fā)展的,,想想C → C++ → Java 他們的句法是不是相似?從這一點上看,Groovy最與Java類似,; 試想,如果有兩種語言有相近的功能,,一種有你熟悉的句法,,另一種卻較為生僻,哪種語言更易上手,?從企業(yè)界的角度來說,,Java的業(yè)界(Sun, IBM Oracle等)在過去十年中已經(jīng)投資了大量金錢與時間在Java上,如果一種語言能與目前的Java項目自然結合使用調用,,另一種語言有全新的語法要員工學習,,企業(yè)界的項目經(jīng)理會選擇哪個? 即使Ruby On Rails再強大,,如果使用Ruby Python意味著十年來的人力,,資源,框架(Spring Hibernate)庫等投資大部分作廢,,在Grais能帶來Rails 70%的編碼效率,,120%的性能,并且利用已有的框架與員工的情況下,,企業(yè)會選擇哪個,?所以個人認為Java程序員或企業(yè)界可能會以后認識到Groovy能帶來的益處。 7)名字起的也不錯 名字是“很棒“,, ”極佳“,, 有著很積極正面的含意 缺點: 1)Groovy就是Java, 目前只有JVM的實現(xiàn),只能跑在有JVM的機子上,。做桌面程序有著Java相同的弱點,,不適合做小巧的Window GUI程序。 2) Groovy不適合作手機或嵌入程序,。 綜述:Groovy較適用于需要調用已有的Java庫,,或者項目中想利用已有Java人力與資源的情況。如果以使用Java為主的公司不十分愿意換一個新語言,,Groovy和Grails是ruby和rails的一種可考慮的替代選擇,。 對個人來說,喜歡ruby的,,但對End不甚習慣仍偏向Java的花括號的,,可以嘗試下groovy. ---------------------------------------------------- 三種語言各有特點,選擇哪種語言與您的工作環(huán)境,,項目特點或個人愛好有著關系,。隨著動態(tài)語言的向前發(fā)展,他們的簡單靈活與強大能幫助我們節(jié)省時間與資源,學一種有潛力的語言能讓程序員們站得更穩(wěn),,立于領先之地,,如果有天動態(tài)語言發(fā)達了,設計模式們很多都用不上了,,這不是多年的經(jīng)驗淘汰了嗎,?程序員們不要忽視了他們了啊。 以上內容為參看一些文章與自己初步使用的感受的一些感想,,與網(wǎng)友們分享,,有錯誤之處,還請指正,。 |
|