Python, Ruby 與 Groovy,誰與爭鋒?

 Python, Ruby 與 Groovy,誰與爭鋒?
http://www.360doc.com/content/090104/22/6822_2262735.html
SleekEngine

隨着計算機硬件的快速發展,10年前因爲速度問題而被詬病的Java現在成了計算機流言語言中的老大,但是它卻仍被認爲複雜笨重,近幾年來動態語言卻有後來趕上的趨勢,掌握一門動態語言成了程序員需要考慮的事宜。 近期接觸了幾種流行的動態語言Python, Ruby, Groovy,它們相比靜態語言Java/C++來說,大爲簡單,靈活,省時,那麼選擇何種語言? 淺嘗三種語言後,寫下此文,作爲在JavaEye留的第一爪。

從TIOBE網站的語言排名可以看出,比較2000與2008年,Java 從30%跌到20%左右, C++從18%跌到11%, 靜態語言從72%佔有率降到了60%; 動態語言由27%升到40%,其中Python從1%到5%, Ruby由 < 1%到2.5%。PHP由5%長到11%。(以上數據爲大約估算)

從企業界角度看,語言的流行性與以下幾點有關:

1)  成熟的庫(library)
   Python的庫非常多, Groovy可以調用強大的Java所有的庫,ruby差些,但是正在趕上。

2) 流行框架
  如果某種語言有個流行框架,那就能吸引過來很多使用者。Ruby on Rail是殺手級框架。Python 框架很多,但是目前尚沒有特別突出的。Groovy還年輕,只有個Grails,但是可以利用JAVA已有的框架如SPRING HIBERNATE。

3) 流行程序
   如果某個流行程序使用了某語言,那麼這種語言不可必免會被多人使用。比如iPhone的出現使一種可能沒多少人聽說過的 Cocoa熱了起來,因爲人們用它編寫在iPhone上運行的手機程序。這三種動態語言中Python在圖象處理,或科學計算界已佔有一席之地。Ruby可能落後一些,Groovy幾乎沒有。

4) 企業界的傾向
市場通常會傾向於簡單好用省時省力,易於使用維護,穩定,能承受大負荷(scalable)的語言,這也是JAVA的流行性當時超過C++的原因,這三個語言比靜態語言都簡單,其中Python由於其語法和句法簡單,所以可能是最好維護,而且能夠承受高負荷(Youtube每天數億點擊爲證);RUBY 有些魔幻語法也能使程序寫得很簡單,總體維護上比Python感覺差了一點,讓其他人看程序可能不是非常直接易懂,性能上目前也差些。Groovy 模仿了大量RUBY,也借鑑了少量Python文法,由於在JVM上運行,性能上應該是不錯的。

5)對硬件的利用
對着雙核的出現,可以預料雙核,四核,16, 32..核CPU都可能在未來出現。如果未來語言只能利用多核中的一核,那未免太浪費了,也可能因此而落於人後。從這一點上看GROOVY有天然優勢,能借助JVM完成這一任務;PYTHON 正在積極研製新的方法實現,也可以在JVM或WINDOW環境下運行JPython 與IronPython;Ruby落後些,但是也有JRuby和IronRuby。

6)語法不一定起決定作用
語言中有好用的語法糖可以給程序員帶來方便,但是並不一定對語言未來的流行起決定作用,因爲好用的語法可能會被其它語言學去。想想C#學Java知道了。ruby借鑑了許多語言的優點,Groovy 借鑑了ruby與python,而新版的python又借鑑了ruby的block用法(用來自動釋放資源)。

從語言的各自優缺點來看:

Python:

1)三者中最成熟,通用,工具庫多,資源豐富,文檔等支持強大,幾乎能做任何事:網絡,圖形界面,桌面程序,服務器,圖形處理,算法等。

2)相比之下性能好,運行速度快,負載力強。

3)簡單易學,文法簡潔,其使用空白縮進代替花括號或END使代碼看起來很乾淨,易讀易懂因此易維護。

4)基於儘量使用一種方法完成一件事,越簡單越好的哲學。這種哲學適合大型項目,因爲讓其他人看着易懂,好維護,不至於過多靈活繁雜的語法使自己玩的爽了,別人看得傻了。這與RUBY的用許多種方法完成一件事的哲學正相反。GROOVY感覺在兩者之間。

5)得到業界承認

    a) Mac機,還有大多數Linux,或者流行Linux中絕大多數都默認安裝Python,這意味着不管你是哪國人在哪裏,想用哪臺Linux機子,想用Python就可以用,省時順手;要用Ruby Groovy還得另外安裝。

    b) 有巨頭支持。幾個例子,Google 互聯網老大,公司內部中Python是官方的第三語言,有內部員工說他們是能用Python就用Python, 實在不行才用C++;   Youtube 大部分是用 Python寫的;著名Linux發行版Ubuntu的發行公司的官方語言,也是其創始人的首選語言;

     c)其他還有Redhat Linux, 美國宇航局,金融系統如紐約股票交易所,摩根大通,電影動畫製作如Disney,Pixar和DreamWorks,星球大戰的特效公司ILM等一系列著名大型機構中使用。桌面程序如流行程序BT客戶端等。

6)語法靈活亦相對嚴謹
除了動態性外,類也是開放的(但是底層內置的不是),可以動態增加刪改類及其屬性函數等。

缺點:
1)不是完全的面向對象,語法中混雜有函數調用方法。
有些語法一些人不易接受:比如代碼中的出現不少類似"__str__"的字眼,類函數中的變量表中self等。
2)使用空白縮進代替截止符在網頁製作有點問題,這時還得需要新語言或語法,代碼Copy Paste等時,使用Tab時也可能有點麻煩,這一點有些人很難接受,加上1)中的情況成爲ruby創始人另立門戶的主要原因。
3)好象目前還不支持多核CPU
4)儘管創始人說Python這一名字取自一個喜劇團體,但是其名字或圖標可能會使一些人反感,有些Python語言網站的的Python圖片着實不令人喜歡。不喜歡這種動物的人可以考慮選其它的,比如Python的弟弟Ruby。

簡要:Python適合大中小型企業各類開發,幾乎無所不在,無所不能,想跟緊大型企業或者需要成熟的庫,Python可能較合適。

----------------------

Ruby

1) 語法是更純正的面嚮對象語言,許多功能讓從Java/C++世界過來的人耳目一新;因爲它借鑑了包括Python, Smalltalk, Lisp等在內的一些其它優秀語言的優點。一切都是Object,如避免Python的類似len("name"),而採用 "name”.length, 還有提供類內部參數數據的保護等;提供的更多語法, 比如它有python沒有的塊與閉包;它有更易懂簡練句法,如用' < ' 來表示類繼承,用?來表示返回是否的函數。

2) 靈活的魔幻語法,如模塊的混入,塊,開放式的類定義,加上已有的動態性使其變得極其靈活;各種繁多的著名設計模式在它手中好象都失去了意義,Java做夢都想達到的靈活性在RUBY手中輕而易舉,Spring AOP相比也失去了光澤,設計大師們的法則與多年經驗也好象都不再適用。

3) 相比Python提供了End作爲程序塊的截止符,這是Rubyist們自認爲的一大進步,也是與Python的一個重要區別。

4) 殺手級框架,Ruby on Rails,及還有些其它殺手級框架正在一一躍出。

5)有跑在JVM的JRuby和微軟的IronRuby

6)名字與圖標很好    Ruby 紅寶石是瞄準Perl (珍珠)的繼承者而來的,名字與圖標都優雅端莊賞心閱目。

缺點
1)靈活可能有負面影響

開放的類(尤其是底層的)在大型程序中可能會造成混亂,不易懂不易維護,類可能會不知道誰在哪個角落就能夠改動(不過有了IDE的支持這種情況可能可以解決);語法方法的靈活可能使代碼不規範,一個人喜歡寫魔幻代碼的有可能使後來人看不懂,其用多種方法實現一個目的的哲學好象是在鼓勵代碼的多樣靈活性,這在大型項目中會加大維護難度。這可能也是爲何目前尚未有大型企業界使用Ruby的原因。針對這一情況已經有人提議對修改底層的類加以限制。

2)性能相對不強   原有的Ruby速度慢,穩定性相對差些,據說是原有的GC寫的不強。不過隨着新的更好的一系列Ruby解析器的出現與硬件的快速發展與價格降低,此性能問題應該能夠在不遠的未來解決。據Java Eye的Robbin講,即使有此性能問題,擴充硬件或設置系統也多可解決問題。

3)對線程支持不強,Ruby 2.0據說要加強

4)好象尚未支持多核,不過未來可能解決,道理同2)

5)對End的意見  不少人認爲Ruby的End過多,顯得不好看。代碼在寫很多層時尤其如此,這樣使查找相應的起始位置增加難度。有人建議其創始人Mats提供End的替代字符,他有此意,但是好象沒有他看的上的,如果誰不喜歡End的,找個自認爲不錯的字符發給總部吧,要趁早,否則以後越來越難改。

綜述:Ruby是令人興奮的,學習Ruby可以加深程序員對面向對象,及計算機語言的理解,從這一點上說,Python更只象個工具,Ruby靈活卻又很有深度,值得一學。Ruby的主要缺點是其GC及性能,近年來已經涌現一系列新的解析器號稱能解決GC問題;有關性能看看Java的歷史可知,當時Java的速度被評爲比C++差得太遠,可是幾年後性能隨着硬件的發展而大大加強,所以Ruby的性能應該在未來不會是大問題。

ruby目前最主要的應用也是其殺手鐗Rails框架具備快速開發網站的特點,一個或幾個人就能快速開發一個網站,能節省很多人力時間,較適合創業型小公司,負荷量不是非常大的中型公司,或大型機構的內部網站。

對Python的空格縮進,非面向對象語法,self, "__xxx__", 跛腳的lambda難以忍受的可以嘗試一下ruby

------------------------------------
Groovy

1)初看起來Groovy好象是Ruby on Java,它幾乎繼承了ruby所有的優秀語法,也添加了少量Python的東西。Ruby中引以爲傲的一切是對象,Groovy也可以作到,如 3.times { ...},   塊傳遞,動態改變類,增刪類函數等。它借鑑了大量Ruby優秀的語法,保留了C/C++/Java程序員熟悉的花括號,沒有用Ruby無所不在的"End”。也支持開放的類,此外還支持將修改的類在一定範圍內使用以減少負面影響。對Ruby的一些生僻的字符進行了改進,使得更加友好易懂,如塊中的 | x | 換成了 x→;

2)被Thoughtwork(就是寫重構那本書的Martin Fowler所在公司)經理稱爲 “Java 2.0” ,可以“無縫”結合Java 代碼,你可以在Groovy文件中寫Java代碼,用Java庫。Groovy象是個輕量級的動態版Java,而且加大擴展了許多易用的句法,以前曾想過的一些"Java 要是這麼寫多好啊" 竟然在Groovy中實現了: 如去掉了多餘的分號,三引號使得多行的文本變量整潔好看,砍掉了沒多大用的getter setter等。

3 )可以使用所有Java的庫,因爲Groovy"就是Java”。相比Ruby愛好者在一個一個辛苦編寫各種庫的時候,Groovy已經是站在Java 的車頭上向前衝了。
        
4)支持多核CPU,未來的硬件是多核CPU的世界,誰不支持多核可能不是淘汰就落後。由於跑在JVM上,Groovy再次領先於Python和Ruby;有人說,也有Jython 和Jruby 啊,但是從與Java的結合性及調用Java代碼或庫來說,Groovy無疑是極佳的結合,Jruby或Jython相比下顯得並不很自然。
 
5)性能不錯
Groovy不再是一個玩具或試用品,一個已經使用Groovy的公司其正式發佈的產品中有超過十萬行Groovy代碼。
其性能相比Python我不清楚,但有測試說Grail性能不亞於,甚至更強於Ruby on Rails.由於Groovy跑在JVM上,性能應該不會太差。

6)業界的支持
Groovy 2003年左右剛出現,還是新生兒,還談不上大型業界的大量支持,就連Sun公司也對Ruby青眼有加,使得Groovy愛好者大抱不平,抱怨Sun偏向外人,不向自己這個Java嫡系。目前可能只有Oracle與Thoughtwork支持。 那麼目前業界還未大力支持,誰可能會支持Groovy呢?私下認同這種說法,就是全世界Java與C++的幾百萬程序員中可能會有不少支持的。這是由於Groovy與Java,或C系列語言句法的近似及與其與Java“無縫”結合的特點相關的。流行語言的發展目前爲止是在相似的基礎上發展的,想想C → C++ → Java 他們的句法是不是相似?從這一點上看,Groovy最與Java類似; 試想,如果有兩種語言有相近的功能,一種有你熟悉的句法,另一種卻較爲生僻,哪種語言更易上手?從企業界的角度來說,Java的業界(Sun, IBM Oracle等)在過去十年中已經投資了大量金錢與時間在Java上,如果一種語言能與目前的Java項目自然結合使用調用,另一種語言有全新的語法要員工學習,企業界的項目經理會選擇哪個? 即使Ruby On Rails再強大,如果使用Ruby Python意味着十年來的人力,資源,框架(Spring Hibernate)庫等投資大部分作廢,在Grais能帶來Rails 70%的編碼效率,120%的性能,並且利用已有的框架與員工的情況下,企業會選擇哪個?所以個人認爲Java程序員或企業界可能會以後認識到Groovy能帶來的益處。

7)名字起的也不錯
名字是“很棒“, ”極佳“, 有着很積極正面的含意

缺點:

1)Groovy就是Java, 目前只有JVM的實現,只能跑在有JVM的機子上。做桌面程序有着Java相同的弱點,不適合做小巧的Window GUI程序。
2) Groovy不適合作手機或嵌入程序。


綜述:Groovy較適用於需要調用已有的Java庫,或者項目中想利用已有Java人力與資源的情況。如果以使用Java爲主的公司不十分願意換一個新語言,Groovy和Grails是ruby和rails的一種可考慮的替代選擇。

對個人來說,喜歡ruby的,但對End不甚習慣仍偏向Java的花括號的,可以嘗試下groovy.

----------------------------------------------------

三種語言各有特點,選擇哪種語言與您的工作環境,項目特點或個人愛好有着關係。隨着動態語言的向前發展,他們的簡單靈活與強大能幫助我們節省時間與資源,學一種有潛力的語言能讓程序員們站得更穩,立於領先之地,如果有天動態語言發達了,設計模式們很多都用不上了,這不是多年的經驗淘汰了嗎?程序員們不要忽視了他們了啊。

以上內容爲參看一些文章與自己初步使用的感受的一些感想,與網友們分享,有錯誤之處,還請指正。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章