小蟲的天地

          Java SE | Java EE | NetBeans | Open Source World | Groovy | Grails | JavaScript | jQuery
          隨筆 - 10, 文章 - 0, 評(píng)論 - 225, 引用 - 0
          數(shù)據(jù)加載中……

          Python, Ruby 與 Groovy,誰與爭鋒?(轉(zhuǎn))

          Python, Ruby 與 Groovy,誰與爭鋒?

          SleekEngine

          隨著計(jì)算機(jī)硬件的快速發(fā)展,10年前因?yàn)樗俣葐栴}而被詬病的Java現(xiàn)在成了計(jì)算機(jī)流言語言中的老大,但是它卻仍被認(rèn)為復(fù)雜笨重,近幾年來動(dòng)態(tài)語言卻有后來趕上的趨勢(shì),掌握一門動(dòng)態(tài)語言成了程序員需要考慮的事宜。 近期接觸了幾種流行的動(dòng)態(tài)語言Python, Ruby, Groovy,它們相比靜態(tài)語言Java/C++來說,大為簡單,靈活,省時(shí),那么選擇何種語言? 淺嘗三種語言后,寫下此文,作為在JavaEye留的第一爪。

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

          從企業(yè)界角度看,語言的流行性與以個(gè)幾點(diǎn)有關(guān):

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

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

          3) 流行程序
             如果某個(gè)流行程序使用了某語言,那么這種語言不可必免會(huì)被多人使用。比如iPhone的出現(xiàn)使一種可能沒多少人聽說過的 Cocoa熱了起來,因?yàn)槿藗冇盟帉懺趇Phone上運(yùn)行的手機(jī)程序。這三種動(dòng)態(tài)語言中Python在圖象處理,或科學(xué)計(jì)算界已占有一席之地。Ruby可能落后一些,Groovy幾乎沒有。JavaEye

          4) 企業(yè)界的傾向
          市場通常會(huì)傾向于簡單好用省時(shí)省力,易于使用維護(hù),穩(wěn)定,能承受大負(fù)荷(scalable)的語言,這也是JAVA的流行性當(dāng)時(shí)超過C++的原因,這三個(gè)語言比靜態(tài)語言都簡單,其中Python由于其語法和句法簡單,所以可能是最好維護(hù),而且能夠承受高負(fù)荷(Youtube每天數(shù)億點(diǎn)擊為證);RUBY 有些魔幻語法也能使程序?qū)懙煤芎唵危傮w維護(hù)上比Python感覺差了一點(diǎn),讓其他人看程序可能不是非常直接易懂,性能上目前也差些。Groovy 模仿了大量RUBY,也借鑒了少量Python文法,由于在JVM上運(yùn)行,性能上應(yīng)該是不錯(cuò)的。

          5)對(duì)硬件的利用
          對(duì)著雙核的出現(xiàn),可以預(yù)料雙核,四核,16, 32..核CPU都可能在未來出現(xiàn)。如果未來語言只能利用多核中的一核,那未免太浪費(fèi)了,也可能因此而落于人后。從這一點(diǎn)上看GROOVY有天然優(yōu)勢(shì),能借助JVM完成這一任務(wù);PYTHON 正在積極研制新的方法實(shí)現(xiàn),也可以在JVM或WINDOW環(huán)境下運(yùn)行JPython 與IronPython;Ruby落后些,但是也有JRuby和IronRuby,起步晚些。


          從語言的各自優(yōu)缺點(diǎn)來看:

          Python:

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

          2)相比之下性能好,運(yùn)行速度快,負(fù)載力強(qiáng)。

          3)簡單易學(xué),文法簡潔,其使用空白縮進(jìn)代替花括號(hào)或END使代碼看起來很干凈,易讀易懂因此易維護(hù)。

          4)基于盡量使用一種方法完成一件事,越簡單越好的哲學(xué)。這種哲學(xué)適合大型項(xiàng)目,因?yàn)樽屍渌丝粗锥镁S護(hù),不至于過多靈活繁雜的語法使自己玩的爽了,別人看得傻了。這與RUBY的用許多種方法完成一件事的哲學(xué)正相反。GROOVY感覺在兩者之間。

          5)得到業(yè)界承認(rèn)

          a) 大多數(shù)Linux,或者流行Linux中絕大多數(shù)都默認(rèn)安裝Python,這意味著不管你是哪國人在哪里,想用哪臺(tái)Linux機(jī)子,想用Python就可以用,省時(shí)順手;要用Ruby Groovy還得安裝。
          b) 有巨頭支持。幾個(gè)例子,Google 互聯(lián)網(wǎng)老大,公司內(nèi)部中Python是官方的第三語言,有內(nèi)部員工說他們是能用Python就用Python, 實(shí)在不行才用C++;   Youtube 大部分是用 Python寫的;著名Linux發(fā)行版Ubuntu的發(fā)行公司的官方語言,也是其創(chuàng)始人的首選語言;其他還有Redhat, NASA, 動(dòng)畫公司Pixar等;桌面程序如流行程序BT客戶端等;

          缺點(diǎn):
          1)不是完全的面向?qū)ο螅Z法中混雜有函數(shù)調(diào)用方法。
          2)使用空白縮進(jìn)代替截止符在網(wǎng)頁制作有點(diǎn)問題,這時(shí)還得需要新語言或語法,代碼Copy Paste等時(shí),使用Tab時(shí)也可能有點(diǎn)麻煩,
          3)好象目前還不支持多核CPU
          4)盡管創(chuàng)始人說Python這一名字取自一個(gè)喜劇團(tuán)體,但是其名字或圖標(biāo)可能會(huì)使一些人反感,有些Python語言網(wǎng)站的的Python圖片著實(shí)不令人喜歡。不喜歡這種動(dòng)物的人可以考慮選其它的,比如Python的弟弟Ruby。

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

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

          Ruby

          1) 語法是更純正的面向?qū)ο笳Z言,許多功能讓從Java/C++世界過來的人耳目一新;因?yàn)樗梃b了包括Python, Smalltalk, Lisp等在內(nèi)的一些其它優(yōu)秀語言的優(yōu)點(diǎn)。一切都是Object,如避免Python的類似len("name"),而采用 "name”.length, 還有提供類內(nèi)部參數(shù)數(shù)據(jù)的保護(hù)等;提供的更多語法,使程序更易懂簡練, 比如它有Block closure,它用' < ' 來表示類繼承,用?來表示返回是否的函數(shù)。

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

          3) 相比Python提供了End作為程序塊的截止符,這是Rubist們自認(rèn)為的一大進(jìn)步,也是與Python的一個(gè)重要區(qū)別。

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

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

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

          缺點(diǎn)
          1)靈活可能有負(fù)面影響
          開放的類在大型程序中可能會(huì)造成混亂,不易懂不易維護(hù),類可能會(huì)不知道是誰在哪個(gè)角落改的(不過有了IDE的支持這種情況可能可以解決);語法方法的靈活可能使代碼不規(guī)范,一個(gè)人喜歡寫魔幻代碼的有可能使后來人看不懂,其用多種方法實(shí)現(xiàn)一個(gè)目的的哲學(xué)好象是在鼓勵(lì)代碼的多樣靈活性,這在大型項(xiàng)目中會(huì)加大維護(hù)難度。這可能也是為何目前尚未有大型企業(yè)界使用Ruby的原因。

          2)性能相對(duì)不強(qiáng)   原有的Ruby速度慢,穩(wěn)定性相對(duì)差些,據(jù)說是原有的GC寫的不強(qiáng)。不過隨著新的更好的RUBY編譯器的出現(xiàn)與硬件的快速發(fā)展與價(jià)格降低,此性能問題應(yīng)該能夠在不遠(yuǎn)的未來解決。據(jù)Java Eye的Robbin講,即使有此性能問題,擴(kuò)充硬件或設(shè)置系統(tǒng)也多可解決問題。

          3)對(duì)線程支持不強(qiáng),Ruby 2.0據(jù)說要加強(qiáng)

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

          5)對(duì)End的意見  不少人認(rèn)為Ruby的End過多,顯得不好看。代碼在寫很多層時(shí)尤其如此,這樣使查找相應(yīng)的起始位置增加難度。有人建議其創(chuàng)始人Mats提供End的替代字符,他有此意,但是好象沒有他看的上的,如果誰不喜歡End的,找個(gè)自認(rèn)為不錯(cuò)的字符發(fā)給總部吧,要趁早,否則以后越來越難改。

          簡要:Ruby是令人興奮的,學(xué)習(xí)Ruby可以加深程序員對(duì)面向?qū)ο螅坝?jì)算機(jī)語言的理解,從這一點(diǎn)上說,Python更只象個(gè)工具,Ruby靈活卻又很有深度,值得一學(xué)。Ruby的主要缺點(diǎn)是其性能性,但是看Java的歷史可知,當(dāng)時(shí)Java的速度被評(píng)為比C++差得太遠(yuǎn),可是幾年后性能隨著硬件的發(fā)展而大大加強(qiáng),所以Ruby的性能應(yīng)該在未來不會(huì)是大問題。

          看過Python 和ruby后,本應(yīng)就此罷手了,但是對(duì)這兩語言感覺仍有遺憾之處,于是看到了以前看Ruby時(shí)瞧不上的Groovy, 卻發(fā)現(xiàn)這是個(gè)不可小看的語言,不僅如此,而且Groovy可能會(huì)成為未來耀眼的新星。


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

          1)初看Groovy, 它好象是Ruby 與java的結(jié)合體,也添加了少量Python的東西。Ruby中引以為傲的一切是對(duì)象,Groovy也可以作到,如 3.times { ...},   塊傳遞,動(dòng)態(tài)改變類,增加類函數(shù)等。它借鑒了大量Ruby 的語法,但是保留了C/C++/Java程序員熟悉的花括號(hào),沒有用Ruby無所不在的"End”。而且對(duì)Ruby的一些生僻的字符進(jìn)行了改進(jìn),使得更加友好易懂,如塊中的 | x | 換成了 → x

          2)被Thoughtwork(就是寫重構(gòu)那本書的Martin Fowler所在公司)經(jīng)理稱為 “Java 2.0” ,可以“無縫”結(jié)合Java 代碼,你可以在Groovy文件中寫Java代碼,用Java庫。Groovy象是個(gè)輕量級(jí)的動(dòng)態(tài)版Java,而且加大擴(kuò)展了許多易用的句法,以前曾想過的一些"Java 要是這么寫多好啊" 竟然在Groovy中實(shí)現(xiàn)了: 如去掉了多余的分號(hào),三引號(hào)使得多行的文本變量整潔好看,砍掉了沒多大用的getter setter等。

          3 )可以使用所有Java的庫,因?yàn)镚roovy"就是Java”。相比Ruby愛好者在一個(gè)一個(gè)辛苦編寫各種庫的時(shí)候,Groovy已經(jīng)是站在Java 的車頭上向前沖了。
                  
          4)支持多核CPU,未來的硬件是多核CPU的世界,誰不支持多核可能不是淘汰就落后。由于跑在JVM上,Groovy再次領(lǐng)先于Python和Ruby;有人說,也有Jython 和Jruby 啊,但是從與Java的結(jié)合性及調(diào)用Java代碼或庫來說,Groovy無疑是極佳的結(jié)合,Jruby或Jython相比下顯得并不自然。
           
          5)性能不錯(cuò)
          Groovy不再是一個(gè)玩具或試用品,一個(gè)已經(jīng)使用Groovy的公司其正式發(fā)布的產(chǎn)品中有超過十萬行Groovy代碼。
          其性能相比Python我不清楚,但有測(cè)試說Grail性能不亞于,甚至更強(qiáng)于Ruby on Rails.由于Groovy跑在JVM上,性能應(yīng)該不會(huì)太差。

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

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

          缺點(diǎn):

          1)它雖然借鑒了大量Ruby的語法,但是有少部分沒有完全實(shí)現(xiàn),如開放的類,它只是在一定范圍內(nèi)對(duì)類開放修改。

          2)Groovy就是Java, 目前只有JVM的實(shí)現(xiàn),只能跑在有JVM的機(jī)子上。做桌面程序有著Java相同的弱點(diǎn),不適合做小巧的Window程序

          Groovy是個(gè)有前途的語言,照現(xiàn)在的勢(shì)頭發(fā)展,僅管它現(xiàn)在排名在39名,未來幾年內(nèi)闖入20名,再過些年闖入前十名或更前都不是不可能的事。

          三種語言各有特點(diǎn),選擇哪種語言與您的工作環(huán)境,項(xiàng)目特點(diǎn)或個(gè)人愛好有著關(guān)系。隨著動(dòng)態(tài)語言的向前發(fā)展,他們的簡單靈活與強(qiáng)大能幫助我們節(jié)省時(shí)間與資源,學(xué)一種有潛力的語言能讓程序員們站得更穩(wěn),立于領(lǐng)先之地,如果有天動(dòng)態(tài)語言發(fā)達(dá)了,設(shè)計(jì)模式們很多都用不上了,這不是多年的經(jīng)驗(yàn)淘汰了嗎?程序員們不要忽視了他們了啊。

          以上內(nèi)容為參看一些文章與自己初步使用的感受的一些感想,與網(wǎng)友們分享,有錯(cuò)誤之處,請(qǐng)指正。
           
          轉(zhuǎn)自:
          http://www.javaeye.com/topic/259257

          posted on 2008-10-31 00:57 令狐蟲@qq.com 閱讀(3619) 評(píng)論(0)  編輯  收藏 所屬分類: Groovy


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 濮阳市| 平陆县| 当阳市| 廉江市| 电白县| 类乌齐县| 都江堰市| 宿迁市| 临武县| 绿春县| 牡丹江市| 平乐县| 澄江县| 富宁县| 西乡县| 中宁县| 德阳市| 金堂县| 江门市| 乃东县| 锡林浩特市| 含山县| 即墨市| 张家川| 红原县| 高淳县| 吴忠市| 涟水县| 平谷区| 小金县| 托克托县| 蒙山县| 河间市| 慈利县| 望都县| 龙口市| 星座| 辽中县| 固始县| 阳谷县| 柳州市|