成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

python 和 ruby的對(duì)比

ghnor / 2667人閱讀

摘要:的解析器實(shí)現(xiàn)更成熟,第三方庫(kù)質(zhì)量高解析器盡管已經(jīng)有了很大的性能提升和很多新的功能,但是從源代碼實(shí)現(xiàn)的角度來(lái)說(shuō),基本上是通過(guò)在源代碼上打來(lái)增加功能的。相對(duì)而言,解析器更成熟,也比較穩(wěn)定。

最近在考慮學(xué)習(xí)一門(mén)后端語(yǔ)言,在ruby和python直接猶豫,然后自己做了一些對(duì)比,希望能幫到有同樣問(wèn)題的你。

一、異同對(duì)比選擇1、Python和ruby的相同點(diǎn):

都強(qiáng)調(diào)語(yǔ)法簡(jiǎn)單,都具有更一般的表達(dá)方式。python是縮進(jìn),ruby是類(lèi)basic的表達(dá)。都大量減少了符號(hào)。

都是動(dòng)態(tài)數(shù)據(jù)類(lèi)型。都是有豐富的數(shù)據(jù)結(jié)構(gòu)。

都具有C語(yǔ)言擴(kuò)展能力,都具有可移植性,比perl的可移植性更好。也都可以作為嵌入語(yǔ)言。

都是面向?qū)ο蟮恼Z(yǔ)言,都可以作為大項(xiàng)目的開(kāi)發(fā)工具。

都有豐富的庫(kù)支持。

也有最寬松的版權(quán)許可,除了一些工具屬于GNU世界。

都有l(wèi)isp特色的eval函數(shù),也都能把函數(shù)作為參數(shù)。

也有圖形界面的ruby的專(zhuān)門(mén)編輯器。

都獲得了廣泛的c庫(kù)的支持。如qt、gtk、tk、SDL、FOX等,ruby計(jì)劃實(shí)現(xiàn)SWIG接口。

都有完善的文檔。

2、和python相比ruby的優(yōu)點(diǎn):

具有正則表達(dá)式和嵌入html的功能。python也有正則表達(dá)式,但沒(méi)有ruby的應(yīng)用方便和廣泛。python的嵌入html項(xiàng)目才剛起步。ruby還有apache的mod模塊。ruby本身也實(shí)現(xiàn)和很多unix工具,如racc,doctools。比python更親近Linux。

比python功能更完整的面向?qū)ο蟮恼Z(yǔ)法。

ruby的整個(gè)庫(kù)都是具有類(lèi)繼承的結(jié)構(gòu)。

他的基本的數(shù)據(jù)類(lèi)型和運(yùn)算符都是可以重載的。

ruby主要的功能都是通過(guò)對(duì)象的方法調(diào)用來(lái)實(shí)現(xiàn)的,而不是函數(shù)。python也在向這方面發(fā)展,但沒(méi)有ruby做的徹底。

ruby的類(lèi)是更規(guī)范的單繼承,還有接口等概念的實(shí)現(xiàn)。

python可以實(shí)現(xiàn)在列表內(nèi)的條件語(yǔ)句、循環(huán)語(yǔ)句,而ruby用“塊”的方式來(lái)實(shí)現(xiàn)這個(gè)功能,比python的更靈活,更具有通用性。

ruby具有類(lèi)似lisp的徹底的函數(shù)方式的條件語(yǔ)句、循環(huán)語(yǔ)句等。語(yǔ)句的表達(dá)能力更強(qiáng)。

附帶一些unix工具,如racc等。

3、和python相比ruby的不足:

最大的不足正是因?yàn)閞uby的強(qiáng)大所引起的。它沒(méi)有python的簡(jiǎn)單性好。比較復(fù)雜的面向?qū)ο笳Z(yǔ)法、“塊”語(yǔ)法的引入、正則表達(dá)式的引入、一些簡(jiǎn)寫(xiě)標(biāo)記都增加了語(yǔ)言的復(fù)雜性。

python的縮進(jìn)表達(dá)方式比ruby的basic的表達(dá)方式更讓人悅目,ruby程序的滿(mǎn)眼的end讓人不舒服。當(dāng)然,ruby認(rèn)為end的方式比python更先進(jìn)。

ruby還沒(méi)有python的“自省”的能力,沒(méi)有從程序文件中生成文檔的能力。

ruby沒(méi)有國(guó)際化的支持。國(guó)際化支持在ruby的計(jì)劃中。這是因?yàn)閞uby的歷史比python要短造成的。

ruby沒(méi)有類(lèi)似jython的東西。

4、python和ruby的語(yǔ)言的選擇:

從簡(jiǎn)單的就是好的來(lái)說(shuō),選python是沒(méi)錯(cuò)的。python適合尋找簡(jiǎn)單語(yǔ)言的人,這很可能造成python更流行,因此也有更多的支持。但如果要追求更強(qiáng)大的語(yǔ)法功能,則ruby是好的選擇。因?yàn)閞uby和python的哲學(xué)有很多相似的地方,先從python入手,盡量用python,如果python的能力不足了,可以在找ruby。

ruby和python的比較,就像五筆和拼音輸入法的比較。拼音作為入門(mén)的輸入法和長(zhǎng)久使用的輸入法都沒(méi)有問(wèn)題。五筆適合更高要求的情況。如果追求性能的不妨學(xué)學(xué)ruby。對(duì)編程語(yǔ)言感興趣,想了解各種編程概念的學(xué)ruby也會(huì)很興奮。

二、兩者各有特點(diǎn):

1、Python從語(yǔ)法上來(lái)說(shuō)更質(zhì)樸一些,而Ruby更性感一些

Python的語(yǔ)法相對(duì)其他腳本語(yǔ)言來(lái)說(shuō),沒(méi)有太多花巧的地方,顯得比較死板一點(diǎn),其實(shí)從Python強(qiáng)制代碼縮進(jìn)也可以看出來(lái)Guido設(shè)計(jì)語(yǔ)言的取向。語(yǔ)法死板的一面就是不容易玩出來(lái)更性感的東西,比方說(shuō)Rails這樣的框架,另外Python也無(wú)法做DSL這樣的事情,但是語(yǔ)法死板的另一面就是比較規(guī)范,相對(duì)來(lái)說(shuō),更加適應(yīng)軟件開(kāi)發(fā)的工程性要求,更容易組織大規(guī)模的團(tuán)隊(duì)進(jìn)行開(kāi)發(fā)。

Ruby的語(yǔ)法非常靈活,Matz設(shè)計(jì)ruby的出發(fā)點(diǎn)也是為了coding for fun,因此可以用ruby玩出來(lái)很多花樣,運(yùn)用足夠的技巧,可以用Ruby寫(xiě)出來(lái)逼近自然語(yǔ)言的DSL,對(duì)于程序員來(lái)說(shuō),玩ruby確實(shí)充滿(mǎn)了樂(lè)趣。Rails能在ruby社區(qū)誕生,而不是Python社區(qū)誕生絕對(duì)和編程語(yǔ)言有直接的關(guān)系。不過(guò)ruby語(yǔ)法靈活的另一面就是編程實(shí)現(xiàn)風(fēng)格的多樣性,這對(duì)于大規(guī)模團(tuán)隊(duì)的協(xié)作和管理是一個(gè)挑戰(zhàn)。

2、Python的解析器實(shí)現(xiàn)更成熟,第三方庫(kù)質(zhì)量高

Ruby1.9解析器盡管已經(jīng)有了很大的性能提升和很多新的功能,但是從源代碼實(shí)現(xiàn)的角度來(lái)說(shuō),基本上是通過(guò)在Ruby1.8源代碼上打patch來(lái)增加功能的。從源代碼的結(jié)構(gòu)來(lái)說(shuō),Ruby的實(shí)現(xiàn)太古老了,Ruby擴(kuò)展起來(lái)比較困難,只能不斷打patch。這也是為什么現(xiàn)在Ruby社區(qū)涌現(xiàn)出來(lái)那么多新的Ruby解析器實(shí)現(xiàn)的原因。從很大程度上來(lái)說(shuō),這制約了Ruby的發(fā)展速度。相對(duì)而言,Python解析器更成熟,也比較穩(wěn)定。

在第三方類(lèi)庫(kù)的數(shù)量上來(lái)說(shuō),Ruby并不比Python少,但是高性能高質(zhì)量久經(jīng)考驗(yàn)的第三方類(lèi)庫(kù)Python要明顯比Ruby多,事實(shí)上很多Ruby的第三方類(lèi)庫(kù)都不太成熟,因此這也很大程度上制約了Ruby的發(fā)展。

3、Python的應(yīng)用領(lǐng)域非常廣泛,而Ruby目前主要局限在在Web領(lǐng)域

Python應(yīng)用的領(lǐng)域非常廣泛,除了web開(kāi)發(fā)以外,還被廣泛用在服務(wù)器后端的高性能服務(wù)器實(shí)現(xiàn),服務(wù)器后端的各種密集運(yùn)算,全文檢索,各種文本處理,系統(tǒng)管理等等,另外桌面應(yīng)用領(lǐng)域wxPython也是一個(gè)很成熟的跨平臺(tái)GUI框架。對(duì)于某些特殊的應(yīng)用,比方說(shuō)調(diào)用操作系統(tǒng)內(nèi)核API,Python也可以完成的很好,比方說(shuō)大量小文件的實(shí)時(shí)同步方案,就是用Python直接調(diào)用linuxKernel的inotify特性來(lái)實(shí)現(xiàn)的。所以可以說(shuō)Python是軟件開(kāi)發(fā)領(lǐng)域的瑞士軍刀,什么事情都可以做。

正是由于Ruby解析器和Ruby類(lèi)庫(kù)的制約,Ruby的應(yīng)用主要局限在Web開(kāi)發(fā)領(lǐng)域,目前Ruby的應(yīng)用還無(wú)法延伸到web開(kāi)發(fā)領(lǐng)域以外的很多地方。據(jù)說(shuō)豆瓣早期就考慮過(guò)Ruby on Rails,但是因?yàn)镽uby不能做其他事情,而Python可以大包大攬,最后放棄Ruby選擇了Python。

4、在Web領(lǐng)域Ruby是王者

隨著互聯(lián)網(wǎng)應(yīng)用更進(jìn)一步滲透到軟件開(kāi)發(fā)的各個(gè)領(lǐng)域,其實(shí)web開(kāi)發(fā)占整個(gè)軟件行業(yè)開(kāi)發(fā)的比重也是越來(lái)越大。盡管Ruby在其他領(lǐng)域很受制約,但是在Web開(kāi)發(fā)領(lǐng)域就是絕對(duì)的王者了。Rails框架的領(lǐng)先程度已經(jīng)遠(yuǎn)遠(yuǎn)甩開(kāi)了任何一個(gè)潛在的競(jìng)爭(zhēng)對(duì)手十萬(wàn)八千里。因此盡管Ruby可能有這樣那樣的問(wèn)題,但是說(shuō)到Web開(kāi)發(fā),Rails幾乎就是無(wú)可爭(zhēng)議的唯一選擇。

而Python盡管十分全面,卻偏偏在web開(kāi)發(fā)領(lǐng)域不彰,web框架雖然眾多,卻沒(méi)有一個(gè)真正可以挑大梁,Django雖然在Python社區(qū)比較流行,但很多方面也有缺陷?,F(xiàn)在的互聯(lián)網(wǎng)應(yīng)用往往都是多種語(yǔ)言混合編程,Ruby在Web以外的缺陷也可以用其他語(yǔ)言來(lái)彌補(bǔ)。

5、Python的包管理不如Ruby

盡管Python的第三方類(lèi)庫(kù)更高質(zhì)量更成熟,但是Python社區(qū)缺乏Ruby Gem這樣一個(gè)良好的包管理軟件和包發(fā)布的網(wǎng)站。因此應(yīng)用的構(gòu)建顯得不如Ruby那么方便,那么人性化。特別是在類(lèi)庫(kù)的版本升級(jí)上,就會(huì)遇到很多麻煩,不如Ruby Gem那么簡(jiǎn)單。

不過(guò)總的來(lái)說(shuō),Python和Ruby還是相似度極高的兩種編程語(yǔ)言,即使兩種編程語(yǔ)言都學(xué)習(xí)一下也不會(huì)浪費(fèi)太多時(shí)間。如果我個(gè)人選擇的話(huà),會(huì)首選用Rails來(lái)構(gòu)建web應(yīng)用,再根據(jù)情況選擇Python或者Java處理一些服務(wù)器后端的運(yùn)算。總之,未來(lái)還是一個(gè)混合編程的時(shí)代,我們需要多了解一些編程工具,然后根據(jù)需要看菜吃飯才行。

三、《ruby和python的比較》之更正

1、文檔、開(kāi)源項(xiàng)目、庫(kù)支持,這些東西Ruby不要跟Python比,不是幾個(gè)數(shù)量級(jí)的問(wèn)題,何必貌似并列的排在一起。

2、Python確實(shí)沒(méi)有把正則表達(dá)式模塊內(nèi)置到核心里面,但是卻有re這個(gè)標(biāo)準(zhǔn)庫(kù)的支持,當(dāng)時(shí)的目的也是為了盡可能的把核心做到最小。我不太明白,使用標(biāo)準(zhǔn)庫(kù)和內(nèi)置有什么區(qū)別,甚至可以作為優(yōu)點(diǎn)?且使用Python中的正則表達(dá)式也不過(guò)是多個(gè)import

re和調(diào)用時(shí)的幾個(gè)字母而已,省下的無(wú)數(shù)個(gè)end足以抵銷(xiāo)這個(gè)問(wèn)題了。

3、至于嵌入HTML功能,Python里有C/Python雙實(shí)現(xiàn)的Cheetah模板可用,據(jù)說(shuō)托Zope的福,美國(guó)海軍和法國(guó)政府在用,不知Ruby這個(gè)功能的成熟度如何?

4、mod_ruby模塊的出現(xiàn)時(shí)間很短,如果作者沒(méi)有聽(tīng)過(guò)mod_python那就實(shí)在孤陋寡聞了。我在一年前翻譯mod_python3.2.8文檔的時(shí)候,mod_python已經(jīng)很成熟了,以至于幾乎所有的Python

WEB框架都支持構(gòu)建在其上來(lái)提高效率。但是,似乎mod_ruby的更新,每年也只有幾次。mod_python更有g(shù)nu.org這樣的重量級(jí)應(yīng)用,不知mod_ruby有沒(méi)有?

5、另外,提到unix工具。Red hat

Linux的安裝程序一直是用Python寫(xiě)的,如果你恰巧用ubuntu,那么,那個(gè)提示你更新系統(tǒng)的程序,也是用Python寫(xiě)的。

6、racc和doctools,請(qǐng)?jiān)徫业墓侣崖?,我google了一下居然除了你的這篇文章還沒(méi)找到幾篇關(guān)于racc的中文內(nèi)容,輾轉(zhuǎn)之后才查到是一種類(lèi)似yacc的工具。從google的角度講,racc的可用性我就不多說(shuō)了。我不太明白一個(gè)yacc工具在日常編程當(dāng)中有多大的實(shí)用性,但是既然作者提到了我就順便找了個(gè)我只聽(tīng)說(shuō)過(guò)名字,根本沒(méi)用過(guò)的Spark。google的結(jié)果是"racc

ruby":"python

spark"=159,000:659,000。至于doctools,我更是無(wú)話(huà)可說(shuō),在google上只有15,800條記錄,我到現(xiàn)在都看不出這個(gè)東西是干什么用的。所以找了個(gè)估計(jì)是類(lèi)似的東西對(duì)比了一下,docutils,google的記錄是25,400條。

7、“比Python庫(kù)更完整的面向?qū)ο笳Z(yǔ)法”。試問(wèn)面向?qū)ο蟮哪康氖鞘裁矗吭僬?,ruby能否像Python一樣,絕大多數(shù)標(biāo)準(zhǔn)庫(kù)根本不需要查文檔,只要猜測(cè)一下大體上的名字,然后dir()一下,再help()一下就可以直接上手,用到第二次的時(shí)候,因?yàn)槟K內(nèi)東西實(shí)在太少,記憶太方便,就可以直接寫(xiě)出來(lái)的地步?另外,面向?qū)ο蠹炔皇鞘裁淬y彈,也不是最先進(jìn)的軟件工程思想。

8、"ruby的整個(gè)庫(kù)都是類(lèi)繼承結(jié)構(gòu)的",個(gè)人認(rèn)為是Java的糟粕,反倒是當(dāng)成寶學(xué)過(guò)來(lái)了?;蛟S這也是ruby來(lái)拯救Java程序員的一項(xiàng)優(yōu)勢(shì)吧。

9、"基本數(shù)據(jù)類(lèi)型和運(yùn)算符都是可以重載的",這個(gè)不是太清楚,不知Python中重載__add__之類(lèi)的算不算。

10、"ruby主要的功能都是通過(guò)對(duì)象的方法調(diào)用來(lái)實(shí)現(xiàn)的,而不是函數(shù)",Python中所有的東西都是對(duì)象,但并不都是類(lèi),不知這句還有什么意義。另外,推薦你不要太追求什么徹底,還是實(shí)用這個(gè)詞比較有吸引力。

11、Python沒(méi)有嚴(yán)格要求單繼承是給程序員以靈活性。另外,關(guān)于接口,Python中只要定義了同名的函數(shù)就算是具有了相同的接口,玄學(xué)上升到了這個(gè)高度,我也有些迷糊了。至于接口,不要那么自信,ruby的所謂接口也不過(guò)是個(gè)mix-in。這個(gè)東西Python的幾個(gè)大項(xiàng)目中也有過(guò)實(shí)現(xiàn),只是因?yàn)閷?duì)Python意義不明顯,所以才沒(méi)有更多的使用。

12、關(guān)于lisp的函數(shù)式編程,Python中有很多內(nèi)置支持,如map、zip、filter等等,當(dāng)然還有l(wèi)ambda。不要說(shuō)支持,我們談實(shí)用。Pythoner中尚且有些人認(rèn)為函數(shù)式編程影響了代碼可讀性而盡量避免呢。所以,你認(rèn)為支持什么東西之前,先想好這樣?xùn)|西算不算是個(gè)好東西。

13、"最大的不足正是因?yàn)閞uby的強(qiáng)大所引起的"。這句真惡心,不予評(píng)論。

14、呵呵,ruby居然沒(méi)有國(guó)際化支持,真是個(gè)笑話(huà),不知道當(dāng)初那個(gè)小日本怎么想的?難道他英語(yǔ)過(guò)了四級(jí)?

15、至于jython,現(xiàn)在也有了jruby,可能是作者的原文比較早的緣故吧。Python也有很多種實(shí)現(xiàn),像是jython,

ironpython, pypy,

pyrex等等。Python的優(yōu)秀其實(shí)并不一定要通過(guò)用其他語(yǔ)言來(lái)實(shí)現(xiàn)才能體現(xiàn)出來(lái)。當(dāng)然更不要說(shuō)寄希望于要Java來(lái)解救水深火熱中的ruby了。

另外么,有些ruby的缺點(diǎn)不要回避:

16、ruby沒(méi)有本地化線(xiàn)程,而是用的偽線(xiàn)程,根本無(wú)法利用多核CPU的優(yōu)勢(shì)。CPython使用了本地化線(xiàn)程,但是因?yàn)槭褂昧薌IL所以也是無(wú)法利用多核CPU優(yōu)勢(shì)的。但是Stackless的出現(xiàn)完全可以解決這個(gè)問(wèn)題,并且stackless更是將Python提高到了并行計(jì)算的高度,這個(gè)高度的競(jìng)爭(zhēng)對(duì)手可以是Erlang,ruby自然不必窺探。其中的超輕量線(xiàn)程技術(shù)可以確保一臺(tái)很爛的機(jī)器上跑幾十萬(wàn)的線(xiàn)程還很輕松?;赥wisted的異步編程方式也提供了一種選擇。

17、剛剛開(kāi)始學(xué)Python的時(shí)候,就聽(tīng)說(shuō)過(guò)一句“Python是主流動(dòng)態(tài)語(yǔ)言中最慢的”,后來(lái)才知道,說(shuō)那句話(huà)的人根本沒(méi)把ruby放在眼里。如果把ruby也算進(jìn)主流動(dòng)態(tài)語(yǔ)言里,那么就會(huì)出現(xiàn)一個(gè)比Python還慢了一個(gè)多數(shù)量級(jí)的語(yǔ)言了。

18、ruby流行么?是不是要走向PHP?php是個(gè)好東西,但是問(wèn)題在于他只能作WEB編程,限制了PHP的應(yīng)用范圍,稍微需要系統(tǒng)一點(diǎn)的東西就要借助于C。而現(xiàn)在的ruby似乎也就是走著這條路。直到有一天,有人爆料"ruby是可以做客戶(hù)端編程的",贏得大家一片好奇。況且現(xiàn)在的ROR能否取代什么還是個(gè)未知數(shù)。從Java

WEB開(kāi)發(fā)中解救出來(lái)的人們也并不都是走向了ruby。

四、評(píng)《選Ruby還是選Python?》

Python和Ruby的設(shè)計(jì)哲學(xué)確實(shí)有很大的差異,這個(gè)問(wèn)題,我就不評(píng)論哪個(gè)更好了,各有所愛(ài)吧。至于效率,Ruby永遠(yuǎn)不要考慮跟Python相比。Ruby是偽線(xiàn)程,而且根本沒(méi)有利用多核CPU的可能,直接pass。而Python使用native

thread,僅僅由于部分模塊不是threadsafe的而加入了GIL來(lái)限制應(yīng)用多核CPU,而在我最近的測(cè)試中,在使用Twisted的異步線(xiàn)程之后,已經(jīng)可以很好的利用多核CPU的計(jì)算能力了。執(zhí)行效率上也不是一個(gè)數(shù)量級(jí),自己試試就知道。

拿Java對(duì)比Python,可見(jiàn)作者創(chuàng)造力之強(qiáng)悍,哈哈。開(kāi)源項(xiàng)目是很符合達(dá)爾文的自然選擇的,難道Ruby的開(kāi)源項(xiàng)目少倒成了優(yōu)點(diǎn)了?另外,在Python中我也沒(méi)見(jiàn)除了WEB

framework之外有什么項(xiàng)目有太多的重復(fù)。舉個(gè)例子,pypcap就已經(jīng)基本淘汰了pcapy了。

談到資源,Ruby還有很長(zhǎng)的路要走,所以提到雙方都很強(qiáng)的時(shí)候,麻煩不要太并列化了。至于Java社區(qū)的人傾向于學(xué)Ruby,我個(gè)人認(rèn)為只是被Java折磨慣了的開(kāi)發(fā)人員目光太狹隘所致。語(yǔ)言是工具,面向?qū)ο笠彩枪ぞ?,純粹的面向?qū)ο蟛⒉灰?jiàn)得高明到哪里去,Python也有函數(shù)式編程的支持,作者怎么沒(méi)有提到。另外,Python的很多做法是以開(kāi)發(fā)效率為第一目標(biāo)的而不拘泥于各類(lèi)形式,甚至為很多智力有限的人所廣泛詬病的C++中的多繼承,Python也可以支持。問(wèn)題不在于支持了什么讓你不喜歡的東西,而是讓盡可能多的人用上他們喜歡的東西。另外,一直被Ruby開(kāi)發(fā)者所認(rèn)為的Python不夠OO的一個(gè)例子就是取一個(gè)序列的長(zhǎng)度,Python使用len(x)的方法。這個(gè)問(wèn)題,如果Ruby開(kāi)發(fā)者認(rèn)為x.length就可以算是OO的話(huà),那么Python也大可以直接使用x.__len__()來(lái)獲取長(zhǎng)度。從用方法來(lái)封裝屬性的Java角度講,誰(shuí)更OO一些呢,哈哈。

Ruby是一個(gè)日本人的作品,呵呵,這個(gè)就不多說(shuō)了,不喜歡日本的國(guó)人有很多,在此我僅在技術(shù)層面就可以把Ruby貶低下去,無(wú)須用非技術(shù)的東西了。

關(guān)于Ruby on

rails,Ruby社區(qū)確實(shí)把幾乎所有的精力都集中于此。但是這只能表現(xiàn)出Ruby的幼稚,事實(shí)已經(jīng)證明了,ROR的很多模仿者已經(jīng)推出無(wú)數(shù)的高級(jí)功能,遠(yuǎn)遠(yuǎn)超過(guò)了ROR,沒(méi)有取代ROR只是出于先入為主的觀念。如果現(xiàn)在的Ruby,突然失去了ROR又會(huì)是什么樣子。至于作者提到的zend,居然用來(lái)跟ROR相比,有如以卵擊石,我學(xué)過(guò)Python的2種WEB框架,平時(shí)也比較關(guān)注Python和Ruby的各種東西,但是zend這個(gè)東西,我是沒(méi)有聽(tīng)說(shuō)過(guò)的,不知是不是作者的作品,哈哈。如果一定要在WEB框架上有個(gè)較量的話(huà),你可以用django,Quixote,mod_python之類(lèi)的來(lái)比較一下。django,一個(gè)典型的ROR模仿品,還在成長(zhǎng),但是已經(jīng)有很多優(yōu)于ROR的功能了,而性能上遠(yuǎn)優(yōu)于ROR自不必說(shuō)。應(yīng)用Quixote的douban.com是所有使用Python和Ruby網(wǎng)站中流量最大的,而且在相同硬件配置的情況下比ROR實(shí)現(xiàn)速度快了一倍還多,要知道去除WEB服務(wù)器等等的各種平等損耗之后,這可是要快上一個(gè)數(shù)量級(jí)的東西。至于mod_python,據(jù)說(shuō)www.gnu.org用的就是這個(gè)。如果Ruby還想開(kāi)源的話(huà),那么就永遠(yuǎn)活在Python的陰影里面吧。

至于上手的速度,各個(gè)人有不同的情況,不作評(píng)論。至于靈活性所帶來(lái)的東西,仁者見(jiàn)仁,就不要評(píng)論了。作者談到Python的入門(mén)不容易,真不知Ruby有個(gè)何等容易。我初學(xué)Python時(shí),第11天就用Python寫(xiě)了一個(gè)詞法解析器,至今仍然在我博客上可查。所以,入門(mén)難度這個(gè)東西,每個(gè)人還是自己去試試為好,不必聽(tīng)別人怎么說(shuō)。

提到ROR生成的目錄有很多東西,要很久才可以都了解,這確實(shí)是IDE的綜合癥。在Python下,比較典型的例子是TurboGears,如果你希望了解整個(gè)應(yīng)用程序的運(yùn)行方式,你可以從核心cherrypy開(kāi)始學(xué)習(xí),然后開(kāi)始使用TurboGears就沒(méi)有什么可不了解的東西了。在這個(gè)角度上,ROR沒(méi)有選擇。再者,現(xiàn)在ROR可用的一種連接WEB服務(wù)器的方式scgi,當(dāng)年也是Python的作品,又是一個(gè)在Python的陰影下活著的小東西。

未來(lái)的發(fā)展么,孤注一擲的Ruby還很難說(shuō),但既然是孤注一擲,風(fēng)險(xiǎn)還是蠻大的。而Python么,我也以為真的會(huì)平穩(wěn)的發(fā)展,但是后來(lái)Micro$oft的加入,讓我們都難以預(yù)料Python的未來(lái)到底有多大了。我們?cè)倩仡^談?wù)勛髡咭恢庇憛挼腜ython的多樣性,在我看來(lái)Ruby可以超越Python的東西屈指可數(shù),而Python超過(guò)Ruby的東西,自然是Ruby難以逾越的鴻溝。所以從編程語(yǔ)言的多樣性考慮,也就不建議大家學(xué)Ruby了吧,少了一種選擇,聚集一些人氣總是好的。

五、python和ruby,我選誰(shuí)?

其實(shí)python和ruby非常接近,比大多數(shù)別的語(yǔ)言要接近的多,所以喜歡用啥就用啥(大實(shí)話(huà),雖然也是廢話(huà))。語(yǔ)法上的差別雖然有那么一點(diǎn),大部分是syntax sugar,我斗膽稍微列幾個(gè)(python我也忘得差不多了,不對(duì)的大家盡管來(lái)鞭尸吧),但是主要差異還是設(shè)計(jì)思想上的:靈活vs明確. 我不認(rèn)為兩者在生產(chǎn)力上會(huì)有什么差別,如果你熟悉的話(huà)。*注意,僅限語(yǔ)言本身的比較。

1. ruby的case可以匹配很多東西:范圍/數(shù)組,對(duì)象,正則表達(dá),python沒(méi)有case/switch而使用if/else比較死板點(diǎn)

2. python的縮進(jìn)很漂亮,雖然有時(shí)會(huì)造成些許麻煩。ruby的end蠻難看的,所以大家都被逼當(dāng)one liner(玩笑)

3. 感覺(jué)上ruby比python更OO,當(dāng)然這也可能是因?yàn)閜ython不提倡用那些改變對(duì)象內(nèi)部構(gòu)造的‘伎倆’造成的錯(cuò)覺(jué)

4. python有l(wèi)ist comprehension, ruby沒(méi)有:(

5. python有真正的keyword argument, ruby用hash模擬,當(dāng)然實(shí)際用起來(lái)沒(méi)什么差別

6. python的self很討厭,ruby沒(méi)有那種繁瑣的東西

7. reflection,ruby內(nèi)置了很多方法,比如object.methods,而python把這些信息存在特殊的字典里。差不多

8. ruby的block功能很強(qiáng),python的lambda只能返回單一值

9. ruby的open class已經(jīng)聲明遠(yuǎn)播,可以玩出2.days.ago這樣的花樣,python好像沒(méi)法直接修改內(nèi)置類(lèi)也反對(duì)這么做。

10. python需要用@classmethod修飾聲明類(lèi)方法,ruby是內(nèi)建

11. ruby有單子方法,也就對(duì)對(duì)象多帶帶定制,python不知道有沒(méi)有類(lèi)似概念

12. ruby有method_missing機(jī)制,python可以使用__getattr__截獲未定義方法(from qiezi)

13. ruby使用單繼承+mixin,python使用多重繼承,不過(guò)python也有mixin

14. ruby有attr_*系列語(yǔ)法helper,省卻自己寫(xiě)一堆setter/getter, python的property方法還是得自己寫(xiě)setter/getter

15. ruby和python都使用duck typing,不過(guò)python也有一套顯式的interface機(jī)制(從zope3并入內(nèi)核了么?)

16. ruby的函數(shù)調(diào)用括號(hào)是可省的,稍微少敲幾下鍵盤(pán)。python默認(rèn)沒(méi)括號(hào)也不帶參數(shù)的話(huà)返回函數(shù)本身的一個(gè)引用。

17. 我不清楚python的meta programming能到什么程度,只好等大牛來(lái)說(shuō)說(shuō)了。只是覺(jué)得pythoner不常用那個(gè),也許覺(jué)得會(huì)把程序邏輯搞得晦澀不明。

18. ruby從perl繼承了一部分難看的東西,比如很多預(yù)定義的$x常量

19. ruby內(nèi)建正則表達(dá),方便一點(diǎn)

20. ruby的yield是用來(lái)call block的。而python的yield是用來(lái)給generator輸入輸出值的。

21. python的庫(kù)給我感覺(jué)命名規(guī)范有點(diǎn)不統(tǒng)一,有些方法用snake_case有些則用CamelCase,也許是庫(kù)太多了遺留下的歷史問(wèn)題

22. python的三引號(hào)很漂亮,ruby的<<-XX...XX太難看了,也可以用%q{...}包裹多行文字(from qiezi)

23. ruby的類(lèi)庫(kù)設(shè)計(jì)中喜歡給方法添加別名,方便記憶。

另: ruby官方網(wǎng)站也提供了一些基本的比較。

六、兩種語(yǔ)言的資源和學(xué)習(xí)曲線(xiàn)比較:

總體的印象,用一個(gè)不大恰當(dāng)?shù)谋扔鳎喝绻鸓ython是Java,那么Ruby就是.net。我們知道,Java世界非常復(fù)雜,非常多樣性,任何一個(gè)需求,都會(huì)有很多開(kāi)源項(xiàng)目,他們用不同的思想來(lái)實(shí)現(xiàn),性能特點(diǎn)迥異,到底選那個(gè),總是令人犯難?,F(xiàn)在Python也是如此,而由于Python開(kāi)發(fā)難度遠(yuǎn)遠(yuǎn)低于Java,導(dǎo)致Python的相關(guān)項(xiàng)目比Java還要多得多。

資源上,兩者社區(qū)都很強(qiáng),有趣的是,現(xiàn)在Java社區(qū)存在被Ruby同化的危險(xiǎn),至少我訂閱的幾個(gè)Javablog聚合中談Ruby比Java還多。Ruby的社區(qū)較為集中,Python則比較分散。我總懷疑Ruby的日本用戶(hù)較多,但因?yàn)椴欢瘴?,很難確認(rèn)這個(gè)想法。對(duì)于一個(gè)母語(yǔ)非英語(yǔ)的創(chuàng)始人,我總是有點(diǎn)恐懼,怕很難理解他,怕很難得到最新消息等等,雖然這個(gè)擔(dān)心目前看來(lái)并無(wú)必要,不過(guò),誰(shuí)知道會(huì)怎么樣呢!

Ruby之所以現(xiàn)在突然變得熱門(mén),和rails這套架構(gòu)是分不開(kāi)的??紤]Ruby,就要考慮到Ruby on rails。rails提供了一套非常好的web開(kāi)發(fā)框架,開(kāi)發(fā)效率非常高。Python雖然有很多類(lèi)似的架構(gòu)實(shí)現(xiàn),但并沒(méi)有出現(xiàn)一個(gè)能夠一統(tǒng)江湖的架構(gòu)。Python的zend雖然完整,但更偏向于web服務(wù)器,不能用來(lái)和rails比較。

Ruby比pyton更容易上手。從語(yǔ)言特征看,Ruby有很多有意思的創(chuàng)造,比如說(shuō)block,但大規(guī)模的應(yīng)用這些好玩的東西讓程序變得混亂。Python語(yǔ)法強(qiáng)調(diào)簡(jiǎn)單,但是由于太靈活,簡(jiǎn)單得太過(guò)分,于是傳統(tǒng)程序員經(jīng)常會(huì)看到一些令人大吃一驚的表達(dá)方式。我不知道這應(yīng)該算優(yōu)點(diǎn)還是缺點(diǎn),至少我認(rèn)為語(yǔ)法過(guò)于靈活,容易導(dǎo)致不同程序員的代碼風(fēng)格差異過(guò)大,增加了學(xué)習(xí)成本。

初期入門(mén),Ruby更容易,但一旦達(dá)到一定復(fù)雜度,那么Ruby的難度驟然加大。Python入門(mén)不容易,復(fù)雜的時(shí)候也不會(huì)太痛苦。rails有入門(mén)簡(jiǎn)單,深入難的問(wèn)題。rails生成的目錄是做什么用途?o/r mapping如何實(shí)現(xiàn)的?如何把數(shù)據(jù)從web中傳遞到數(shù)據(jù)庫(kù)的。這些都是Ruby程序員早晚要面對(duì)的問(wèn)題。Python則不會(huì)這樣,如果搞不清楚這些,大概根本沒(méi)辦法開(kāi)始。集成度太高的快速開(kāi)發(fā)工具都有這個(gè)特點(diǎn),無(wú)論是VB、Delphi,還是.net,有多少使用了半年以?xún)?nèi)的開(kāi)發(fā)人員可以說(shuō)清楚工程目錄下面所有的文件的用途、每個(gè)文件中的語(yǔ)法?我相信很多很有經(jīng)驗(yàn)的用戶(hù)也未必說(shuō)的清楚。

從架構(gòu)上看,二者雖然實(shí)際上相差甚遠(yuǎn),但最后表現(xiàn)出來(lái)的結(jié)果反而很相似。Ruby是純粹的OO語(yǔ)言,而Python是函數(shù)和OO混合型。雖然Ruby也能用函數(shù)風(fēng)格的編碼方式,但實(shí)際上是模擬出來(lái)的。他們的這個(gè)差距對(duì)于普通的程序員影響并不大,畢竟看起來(lái)差不多。

總體來(lái)說(shuō),如果是非專(zhuān)業(yè)人員初嘗開(kāi)發(fā),Ruby是合適的。對(duì)于專(zhuān)業(yè)的程序員,我還是建議選擇Python。

對(duì)于未來(lái)發(fā)展,我認(rèn)為Python的發(fā)展可預(yù)見(jiàn),會(huì)較為平穩(wěn)。Python已經(jīng)屬于一個(gè)社區(qū),而非一個(gè)人,但Ruby由于種種原因,Ruby的作者maze的意志仍然會(huì)對(duì)Ruby的發(fā)展造成較大影響。Sun控制著Java,但由于sun的資源強(qiáng)大,且組織了jcp進(jìn)行統(tǒng)籌,所以Java發(fā)展很不錯(cuò),但Ruby能不能作到這一點(diǎn),還需要時(shí)間來(lái)證明。

七、從Python到Ruby

Python是一門(mén)非常優(yōu)秀的語(yǔ)言,從Python遷移到Ruby,你將發(fā)現(xiàn)一些語(yǔ)法上的不同。

相似點(diǎn)

和Python一樣,在Ruby中,...

有一個(gè)交互提示 (叫做 irb).

你可以在命令行中讀取文檔 (通過(guò)ri 命令來(lái)替代 pydoc).

沒(méi)有特殊的結(jié)束一行的符號(hào) (新行除外).

文字可以用多行,就像Python中的三個(gè)引號(hào).

List用[],Dict用{} (Dict在Ruby中叫“hashes”).

Arrays的工作方式相同(2個(gè)Array相加成為一個(gè)更加長(zhǎng)的Array,但是想這樣a3 = [ a1, a2 ] 合并,將產(chǎn)生一個(gè)包含數(shù)組的數(shù)組).

Objects是有固定類(lèi)型和動(dòng)態(tài)轉(zhuǎn)換的.

一切都是object,變量名只是一個(gè)指向Object的指針.

雖然關(guān)鍵字不同, 但是exceptions的工作方式不變.

你擁有嵌入文檔的工具 (在Ruby中叫做rdoc).

不同點(diǎn)

與Python不同, 在Ruby中,...

Strings是可以改變的。

你可以使用常量(常量的值是不同改變的)。

這里有些強(qiáng)制規(guī)定的書(shū)寫(xiě)要求 (例如:class的名字以大寫(xiě)字母開(kāi)頭, 變量名已小寫(xiě)字母開(kāi)頭)。

這里只有一種容器(Array), 并且是可以改變的。

引號(hào)中的String限制不同。

這里沒(méi)有新風(fēng)格的Class,Class只有一種風(fēng)格。

你無(wú)法直接訪(fǎng)問(wèn)屬性,在Ruby中,都是通過(guò)方法調(diào)用實(shí)現(xiàn)的。

在方法調(diào)用中使用(),是一種可選的策略。

這里用private等等限制訪(fǎng)問(wèn)的關(guān)鍵字,來(lái)替代Python中的名字隱藏。

“mixin’s”用來(lái)替代多繼承。

你可以在任何時(shí)候修改已有的Class,并添加新的方法。

用true和false來(lái)替代True和False (用nil來(lái)替代None)。

在判斷真值的時(shí)候,只有false和nil會(huì)被認(rèn)為是假.其他所有的都認(rèn)為是真(包括0, 0.0, "",和[])。

用elsif替代elif.

用require替代import. 但是用法是相同的。

用usual-style來(lái)注釋文檔(替代docstrings) 同時(shí)用來(lái)生成文檔。

八、從三個(gè)方面來(lái)進(jìn)行Python和Ruby的比較:

1.各自所適用于什么應(yīng)用

2.開(kāi)發(fā)環(huán)境、運(yùn)行環(huán)境

3.可移植性如何,因?yàn)轫?xiàng)目最后計(jì)劃移植到手機(jī)平臺(tái),如windows CE Symbina

【1.各自所適用于的應(yīng)用場(chǎng)合】

查閱的結(jié)果似乎對(duì)于這兩種語(yǔ)言的評(píng)價(jià)都很好,在網(wǎng)絡(luò)開(kāi)發(fā)上的性能都很好。都很適用于快速的應(yīng)用程序開(kāi)發(fā),開(kāi)發(fā)的效率很高。

Python:

摘取了跟項(xiàng)目有關(guān)的一些應(yīng)用方面的敘述

跨平臺(tái)開(kāi)發(fā):

Python 以中立方式支持不同的一系列平臺(tái),如果用戶(hù)使用的系統(tǒng)包含不同的平臺(tái),使用 Python 開(kāi)發(fā)應(yīng)用程序則再好不過(guò);它這種適應(yīng)性也可以為系統(tǒng)預(yù)留使用其它工具的可能。對(duì)于頻繁更換平臺(tái)用戶(hù),Python 是個(gè)理想的選擇。

為最終用戶(hù)提供軟件服務(wù)時(shí),Python 也是個(gè)備選方案,可以避免同時(shí)用不同應(yīng)用軟件編程的時(shí)間和費(fèi)用。

互聯(lián)網(wǎng)程序設(shè)計(jì):

Python 帶有的標(biāo)準(zhǔn)模塊可以對(duì)網(wǎng)絡(luò)插槽進(jìn)行初級(jí)和協(xié)議級(jí)別的通訊,比如,如果要從 POP 服務(wù)器上讀取電子郵件,Python 隨帶的庫(kù)模塊可以做到。另外, Python 還支持 XML、HTML和 CGI 庫(kù)文件,所以利用它可以解析用戶(hù)輸入的需求,并通過(guò)網(wǎng)絡(luò)服務(wù)器產(chǎn)生最佳質(zhì)量的成果。

程序員還可為擁有 Python 內(nèi)置解釋器的 Apache、Unix 和 Windows 網(wǎng)絡(luò)服務(wù)器編譯模塊?;?CGI 程序的功效,可以很方便地執(zhí)行 Python 語(yǔ)句而不用多帶帶裝載。

針對(duì)于python的網(wǎng)絡(luò)編程,有一本很好的書(shū):《python網(wǎng)絡(luò)編程基礎(chǔ)》

這本書(shū)全面介紹了使用Python語(yǔ)言進(jìn)行網(wǎng)絡(luò)編程的基礎(chǔ)知識(shí),主要內(nèi)容包括網(wǎng)絡(luò)基礎(chǔ)知識(shí)、高級(jí)網(wǎng)絡(luò)操作、Web Services、解析HTML和XHTML、XML、E-mail服務(wù)、FTP、使用Python操作數(shù)據(jù)庫(kù)、SSL、幾種服務(wù)器端框架(包括Socket服務(wù)器、SimpleXMLRPCServer、CGI和mod_python),以及多任務(wù)處理(包括Forking、線(xiàn)程和異步通信)等。本書(shū)實(shí)用性強(qiáng),共提供了大約175個(gè)實(shí)例,6600行以上的代碼,是幫助讀者全面而快速地學(xué)習(xí)Python語(yǔ)言、編寫(xiě)網(wǎng)絡(luò)程序的最佳實(shí)踐。

Ruby:

功能強(qiáng)大,面向?qū)ο蟮哪_本語(yǔ)言,可以使您方便快捷地進(jìn)行面向?qū)ο缶幊?,有時(shí)使用像Smalltalk、Eiffel或C++這樣正式的面向?qū)ο笳Z(yǔ)言來(lái)開(kāi)發(fā)一些小項(xiàng)目顯得有點(diǎn)"小題大做",而Ruby剛好可以滿(mǎn)足這些面向?qū)ο缶幊痰男枨?當(dāng)然了,您也可以使用Ruby進(jìn)行普通的面向過(guò)程編程。

Ruby支持很多網(wǎng)絡(luò)協(xié)議,不管是高層的還是底層的。ruby提供了一些基本類(lèi),讓你可以使用TCP,UDP,SOCKS等很多協(xié)議交互,而不必拘泥在網(wǎng)絡(luò)層。這些類(lèi)也提供了輔助類(lèi),讓你可以輕松的對(duì)服務(wù)器進(jìn)行讀寫(xiě)。進(jìn)行網(wǎng)絡(luò)編程也是很不錯(cuò)。

【2.開(kāi)發(fā)環(huán)境、運(yùn)行環(huán)境】

Python:

相比之下,就是沒(méi)有一個(gè)很強(qiáng)的集成開(kāi)發(fā)環(huán)境。有人說(shuō)開(kāi)源軟件相對(duì)于收費(fèi)的那種軟件好用一些。

用得較多的幾個(gè):

Python自帶的idle:

不是python的IDE中最好的……

PythonWin :

使用起來(lái)非常得心應(yīng)手(就像使用 Windows 那樣舒服)。它有個(gè)好用的編輯器,包括代碼合并、語(yǔ)法標(biāo)簽高亮顯示以及代碼自動(dòng)完成特性。PythonWin 和有些 IDE 一樣,不包含任何類(lèi)型的表單設(shè)計(jì)器;但它提供一個(gè)優(yōu)秀的調(diào)試器,具有監(jiān)視、代碼檢查、交互調(diào)試窗口、斷點(diǎn)、和其他調(diào)試器該有的功能。最重要的是,PythonWin 很穩(wěn)定,盡管有時(shí)候在 Win95r2 系統(tǒng)上使用時(shí)會(huì)奇怪地“停止響應(yīng)”。界面上來(lái)說(shuō),PythonWin 比較簡(jiǎn)單,但非常吸引人,很好的運(yùn)用了可嵌入和可對(duì)接的元素(我有點(diǎn)偏愛(ài) Idle 風(fēng)格的 "many windows everywhere",它也為其他許多 IDE 所采用的)。PythonWin 還集成了 ActiveState 的 HtmlHelp 版本的 Python 說(shuō)明文檔和 PythonCOM。

eclipse的pydev插件,eclipse+pydev

Pydev 基于Eclipse的,非常棒的Python環(huán)境,改進(jìn)速度非???。提供的一些功能

UliPad :

一個(gè)編輯器,你可以用它來(lái)進(jìn)行你的文檔寫(xiě)作,編程開(kāi)發(fā)。它使用 Python 編程語(yǔ)言開(kāi)發(fā),用戶(hù)界面基于 wxPython 。它除了想要完成一般編輯器的常用功能之外,最主要是想實(shí)現(xiàn)一種方便、靈活的框架,開(kāi)發(fā)者可以方便地開(kāi)發(fā)新的功能。而且有編程經(jīng)驗(yàn)的用戶(hù)還可以針對(duì)日常工作中的特別問(wèn)題編制處理的插件,從而使之與自已的日常工作緊密結(jié)合起來(lái)。由于使用的是 Python 這種功能強(qiáng)大的編程語(yǔ)言,你可以方便地對(duì)本軟件進(jìn)行修改,從而滿(mǎn)足自已的需要。

UliPad 支持代碼著色、智能補(bǔ)全、代碼調(diào)試、Python類(lèi)瀏覽、代碼片段、Ftp功能、目錄瀏覽等等強(qiáng)大功能,其 Doc 目錄下的文檔更是非常豐富,是你編寫(xiě) Python 的絕世好幫手!

系統(tǒng)要求:

python 2.4+

wxPython 2.6+

我們最后選擇的是UliPad,還是挺棒的。

Ruby:

Ruby有極好的高級(jí)調(diào)試器。

可以用netbeans的ruby插件或eclipse的ruby插件

Eclipse下安裝開(kāi)發(fā)環(huán)境的大致過(guò)程:

1. 安裝 Ruby 1.8.6 One-Click Installer。

2. 將 Eclipse Platform Runtime Binary 壓縮包解壓到某個(gè)目錄。

3. 將 Ruby Development Tools 壓縮包的內(nèi)容解壓縮到 Eclipse 相應(yīng)目錄下。

運(yùn)行環(huán)境在其官方網(wǎng)站上下載相應(yīng)的版本再安裝即可,windows下面的安裝較為簡(jiǎn)單,雙擊運(yùn)行即可安裝。

【3.可移植性】

Python:

由于它的開(kāi)源本質(zhì),Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過(guò)改動(dòng)使它能夠工作在不同平臺(tái)上)。如果你小心地避免使用依賴(lài)于系統(tǒng)的特性,那么你的所有Python程序無(wú)需修改就可以在下述任何平臺(tái)上面運(yùn)行。這些平臺(tái)包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC!

Python在執(zhí)行時(shí),首先會(huì)將.py文件中的源代碼編譯成Python的byte code(字節(jié)碼),然后再由Python Virtual Machine來(lái)執(zhí)行這些編譯好的byte code。這種機(jī)制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更高級(jí)的Virtual Machine。這里的高級(jí)并不是通常意義上的高級(jí),不是說(shuō)Python的Virtual Machine比Java或.NET的功能更強(qiáng)大,而是說(shuō)和Java 或.NET相比,Python的Virtual Machine距離真實(shí)機(jī)器的距離更遠(yuǎn)?;蛘呖梢赃@么說(shuō),Python的Virtual Machine是一種抽象層次更高的Virtual Machine。

可以安裝一種面向?qū)ο蟮慕忉屝缘挠?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,也是一種功能強(qiáng)大而完善的通用型語(yǔ)言,已經(jīng)具有十多年的發(fā)展歷史,成熟且穩(wěn)定。Python 具有腳本語(yǔ)言中最豐富和強(qiáng)大的類(lèi)庫(kù),足以支持絕大多數(shù)日常應(yīng)用.在Symbina智能手機(jī)上支持C++和JAVA開(kāi)發(fā)的兩類(lèi)程序,裝上Python后,也就可以支持眾多以Python開(kāi)發(fā)的各種程序了。對(duì)于普通的手機(jī)用戶(hù),我們不用了解太多,只是安上Python這個(gè)平臺(tái)就可以了,可以讓我們的手機(jī)支持更多以Python開(kāi)發(fā)的程序。目前在Symbian手機(jī)上已經(jīng)有相當(dāng)多的Python開(kāi)發(fā)的程序,也都是比較實(shí)用的。

Ruby:

它大部分是在Linux上開(kāi)發(fā)的,但是可以在很多類(lèi)型的Unix, Dos, Windows95/98/Me/NT/2000/XP, MacOS, BeOS, OS/2等系統(tǒng)上運(yùn)行。

關(guān)于ruby跟手機(jī)開(kāi)發(fā)的資料很少,有在windows CE上運(yùn)行的版本,但是好像現(xiàn)在相關(guān)的資料還特別少,而且安裝失敗、編譯不通過(guò)的例子偏多。日文頁(yè)面上有少量的日文介紹。

【總結(jié)】

然后針對(duì)于Python跟Ruby在朋友的建議下還給出了如下一些參考意見(jiàn),在此感謝他:

1.? Python也被稱(chēng)為是一門(mén)清晰的語(yǔ)言。因?yàn)樗淖髡咴谠O(shè)計(jì)它的時(shí)候,總的指導(dǎo)思想是,對(duì)于一個(gè)特定的問(wèn)題,只要有一種最好的方法來(lái)解決就好了。Python語(yǔ)言是一種清晰的語(yǔ)言的另一個(gè)意思是,它的作者有意的設(shè)計(jì)限制性很強(qiáng)的語(yǔ)法,使得不好的編程習(xí)慣(例如if語(yǔ)句的下一行不向右縮進(jìn))都不能通過(guò)編譯。這樣有意的強(qiáng)制程序員養(yǎng)成良好的編程習(xí)慣。Python在其他部分的設(shè)計(jì)上也堅(jiān)持了清晰劃一的風(fēng)格,這使得Python稱(chēng)為一門(mén)易讀性、易維護(hù)性好,并且被大量用戶(hù)所歡迎的、用途廣泛的語(yǔ)言。

同一個(gè)問(wèn)題用Python幾個(gè)人分別寫(xiě)寫(xiě)出來(lái)的代碼會(huì)很相近。但Ruby則設(shè)計(jì)思想不一樣,用它寫(xiě)出來(lái)的程序太過(guò)于靈活,不同的人寫(xiě)出來(lái)可能相差會(huì)很大。

2.? Ruby英文文檔極度缺乏,中文文檔就更不用說(shuō)。Python社區(qū)相對(duì)成熟,也有一大堆的資料。

最后給出Python的幾個(gè)網(wǎng)站

1.http://www.python.org/- Python 的官方網(wǎng)站

2.http://python.cn/- Python 中文社區(qū)

3.http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPythonPython For Dot Net 的網(wǎng)站

Ruby的幾個(gè)網(wǎng)站

1、www.ruby-lang.org/zh_CNRuby中文官方網(wǎng)站

2、http://www.rubystudy.com/bbs/tag.php?name=RubyRuby中文學(xué)習(xí)交流社區(qū)

3、http://ruby-lang.guo.cc/Ruby在線(xiàn)參考手冊(cè)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40756.html

相關(guān)文章

  • 不嚴(yán)謹(jǐn)不同語(yǔ)言下大 Excel 文件寫(xiě)入性能比較

    摘要:測(cè)試內(nèi)容使用不同的語(yǔ)言及其版本,測(cè)試各自完成包含行列單元格的文件的生成,對(duì)比其各自耗費(fèi)時(shí)間,次重復(fù)執(zhí)行取其平均值后進(jìn)行橫向比較。 背景 去年因?yàn)榫€(xiàn)上系統(tǒng)需要導(dǎo)出大量數(shù)據(jù)(大概是 11 萬(wàn)行)到 Excel,代碼是 Python 2.7 寫(xiě)的,除去數(shù)據(jù)庫(kù)查詢(xún)耗時(shí),整個(gè)的 Excel 文件生成也還要耗費(fèi)幾十秒的時(shí)間,這聽(tīng)起來(lái)真是一個(gè)非??鋸埖氖虑?。后來(lái)為其更換了號(hào)稱(chēng)性能表現(xiàn)最好的 pyex...

    keithxiaoy 評(píng)論0 收藏0
  • 2019 為什么我們還會(huì)繼續(xù)使用 PHP ?

    摘要:但我還是使用它開(kāi)發(fā)了很多軟件。那么問(wèn)題就很明顯了為什么今天還在使用除了個(gè)人理想主義的偏好以外,還有很多理由。為什么使用而不是也許和比較的最重要的語(yǔ)言是。為什么選擇而不是你已有專(zhuān)業(yè)知識(shí)或者在使用庫(kù)。 showImg(https://segmentfault.com/img/remote/1460000018390090?w=790&h=466); 我們來(lái)開(kāi)門(mén)見(jiàn)山地說(shuō)。? PHP 是一門(mén)奇...

    guyan0319 評(píng)論0 收藏0
  • 帶你入門(mén) JavaScript ES6 (五) 集合

    摘要:一概述集合是引入的新的內(nèi)置對(duì)象類(lèi)型,其特點(diǎn)同數(shù)學(xué)意義的集合,即集合內(nèi)所有元素不重復(fù)元素唯一。數(shù)組集合對(duì)比數(shù)組和集合,數(shù)組可以加入重復(fù)數(shù)據(jù),而集合的所有元素是唯一的不允許重復(fù)。因此,適合臨時(shí)存放一組對(duì)象,以及存放跟對(duì)象綁定的信息。 本文同步帶你入門(mén) 帶你入門(mén) JavaScript ES6 (五) 集合,轉(zhuǎn)載請(qǐng)注明出處。 前面我們學(xué)習(xí)了: for of 變量和擴(kuò)展語(yǔ)法 塊作用域變量和解構(gòu)...

    BetaRabbit 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來(lái)學(xué)習(xí)一門(mén)新編程語(yǔ)言吧!

    摘要:入門(mén),第一個(gè)這是一門(mén)很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類(lèi)工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺(jué)已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...

    caspar 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<