1. 程式人生 > >Python和Ruby語言對比

Python和Ruby語言對比

一、異同對比選擇
1、python和ruby的相同點:

* 都強調語法簡單,都具有更一般的表達方式。python是縮排,ruby是類basic的表達。都大量減少了符號。

* 都是動態資料型別。都是有豐富的資料結構。

* 都具有c語言擴充套件能力,都具有可移植性,比perl的可移植性更好。也都可以作為嵌入語言。

* 都是面向物件的語言,都可以作為大專案的開發工具。

* 都有豐富的庫支援。

* 也有最寬鬆的版權許可,除了一些工具屬於GNU世界。

* 都有lisp特色的eval函式,也都能把函式作為引數。

* 也有圖形介面的ruby的專門編輯器。

* 都獲得了廣泛的c庫的支援。如qt、gtk、tk、SDL、FOX等,ruby計劃實現SWIG介面。

* 都有完善的文件。

2、和python相比ruby的優點:

* 具有正則表示式和嵌入html的功能。python也有正則表示式,但沒有ruby的應用方便和廣泛。python的嵌入html專案才剛起步。ruby還有apache的mod模組。ruby本身也實現和很多unix工具,如racc,doctools。比python更親近linux。

* 比python功能更完整的面向物件的語法。
* ruby的整個庫都是具有類繼承的結構。
* 他的基本的資料型別和運算子都是可以過載的。
* ruby主要的功能都是通過物件的方法呼叫來實現的,而不是函式。python也在向這方面發展,但沒有ruby做的徹底。
* ruby的類是更規範的單繼承,還有介面等概念的實現。

* python可以實現在列表內的條件語句、迴圈語句,而ruby用“塊”的方式來實現這個功能,比python的更靈活,更具有通用性。

* ruby具有類似lisp的徹底的函式方式的條件語句、迴圈語句等。語句的表達能力更強。

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

3、和python相比ruby的不足:

* 最大的不足正是因為ruby的強大所引起的。它沒有python的簡單性好。比較複雜的面向物件語法、“塊”語法的引入、正則表示式的引入、一些簡寫標記都增加了語言的複雜性。

* python的縮排表達方式比ruby的basic的表達方式更讓人悅目,ruby程式的滿眼的end讓人不舒服。當然,ruby認為end的方式比python更先進。

* ruby還沒有python的“自省”的能力,沒有從程式檔案中生成文件的能力。

* ruby沒有國際化的支援。國際化支援在ruby的計劃中。這是因為ruby的歷史比python要短造成的。

* ruby沒有類似jython的東西。

4、python和ruby的語言的選擇:

從簡單的就是好的來說,選python是沒錯的。python適合尋找簡單語言的人,這很可能造成python更流行,因此也有更多的支援。但如果要追求更強大的語法功能,則ruby是好的選擇。因為ruby和python的哲學有很多相似的地方,先從python入手,儘量用python,如果python的能力不足了,可以在找ruby。

ruby和python的比較,就像五筆和拼音輸入法的比較。拼音作為入門的輸入法和長久使用的輸入法都沒有問題。五筆適合更高要求的情況。如果追求效能的不妨學學ruby。對程式語言感興趣,想了解各種程式設計概念的學ruby也會很興奮。


二、兩者各有特點:

  1、Python從語法上來說更質樸一些,而Ruby更性感一些

   Python的語法相對其他指令碼語言來說,沒有太多花巧的地方,顯得比較死板一點,其實從Python強制程式碼縮排也可以看出來Guido設計語言的取向。語法死板的一面就是不容易玩出來更性感的東西,比方說Rails這樣的框架,另外Python也無法做DSL這樣的事情,但是語法死板的另一面就是比較規範,相對來說,更加適應軟體開發的工程性要求,更容易組織大規模的團隊進行開發。

   Ruby的語法非常靈活,Matz設計ruby的出發點也是為了coding for fun,因此可以用ruby玩出來很多花樣,運用足夠的技巧,可以用Ruby寫出來逼近自然語言的DSL,對於程式設計師來說,玩ruby確實充滿了樂趣。Rails能在ruby社群誕生,而不是Python社群誕生絕對和程式語言有直接的關係。不過ruby語法靈活的另一面就是程式設計實現風格的多樣性,這對於大規模團隊的協作和管理是一個挑戰。

   2、Python的解析器實現更成熟,第三方庫質量高

   Ruby1.9解析器儘管已經有了很大的效能提升和很多新的功能,但是從原始碼實現的角度來說,基本上是通過在Ruby1.8原始碼上打patch來增加功能的。從原始碼的結構來說,Ruby的實現太古老了,Ruby擴充套件起來比較困難,只能不斷打patch。這也是為什麼現在Ruby社群湧現出來那麼多新的Ruby解析器實現的原因。從很大程度上來說,這制約了Ruby的發展速度。相對而言,Python解析器更成熟,也比較穩定。

   在第三方類庫的數量上來說,Ruby並不比Python少,但是高效能高質量久經考驗的第三方類庫Python要明顯比Ruby多,事實上很多Ruby的第三方類庫都不太成熟,因此這也很大程度上制約了Ruby的發展。

   3、Python的應用領域非常廣泛,而Ruby目前主要侷限在在Web領域

   Python應用的領域非常廣泛,除了web開發以外,還被廣泛用在伺服器後端的高效能伺服器實現,伺服器後端的各種密集運算,全文檢索,各種文字處理,系統管理等等,另外桌面應用領域wxPython也是一個很成熟的跨平臺GUI框架。對於某些特殊的應用,比方說呼叫作業系統核心API,Python也可以完成的很好,比方說大量小檔案的實時同步方案,就是用Python直接呼叫Linux Kernel的inotify特性來實現的。所以可以說Python是軟體開發領域的瑞士軍刀,什麼事情都可以做。

   正是由於Ruby解析器和Ruby類庫的制約,Ruby的應用主要侷限在Web開發領域,目前Ruby的應用還無法延伸到web開發領域以外的很多地方。據說豆瓣早期就考慮過Ruby on Rails,但是因為Ruby不能做其他事情,而Python可以大包大攬,最後放棄Ruby選擇了Python。

  4、在Web領域Ruby是王者

   隨著網際網路應用更進一步滲透到軟體開發的各個領域,其實web開發佔整個軟體行業開發的比重也是越來越大。儘管Ruby在其他領域很受制約,但是在Web開發領域就是絕對的王者了。Rails框架的領先程度已經遠遠甩開了任何一個潛在的競爭對手十萬八千里。因此儘管Ruby可能有這樣那樣的問題,但是說到Web開發,Rails幾乎就是無可爭議的唯一選擇。

   而Python儘管十分全面,卻偏偏在web開發領域不彰,web框架雖然眾多,卻沒有一個真正可以挑大樑,Django雖然在Python社群比較流行,但很多方面也有缺陷。現在的網際網路應用往往都是多種語言混合程式設計,Ruby在Web以外的缺陷也可以用其他語言來彌補。

   5、Python的包管理不如Ruby

   儘管Python的第三方類庫更高質量更成熟,但是Python社群缺乏Ruby Gem這樣一個良好的包管理軟體和包釋出的網站。因此應用的構建顯得不如Ruby那麼方便,那麼人性化。特別是在類庫的版本升級上,就會遇到很多麻煩,不如Ruby Gem那麼簡單。

   不過總的來說,Python和Ruby還是相似度極高的兩種程式語言,即使兩種程式語言都學習一下也不會浪費太多時間。如果我個人選擇的話,會首選用Rails來構建web應用,再根據情況選擇Python或者Java處理一些伺服器後端的運算。總之,未來還是一個混合程式設計的時代,我們需要多瞭解一些程式設計工具,然後根據需要看菜吃飯才行。

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

   1、文件、開源專案、庫支援,這些東西Ruby不要跟Python比,不是幾個數量級的問題,何必貌似並列的排在一起。
   2、Python確實沒有把正則表示式模組內建到核心裡面,但是卻有re這個標準庫的支援,當時的目的也是為了儘可能的把核心做到最小。我不太明白,使用標準庫和內建有什麼區別,甚至可以作為優點?且使用Python中的正則表示式也不過是多個import 
        re和呼叫時的幾個字母而已,省下的無數個end足以抵銷這個問題了。
   3、至於嵌入HTML功能,Python裡有C/Python雙實現的Cheetah模板可用,據說託Zope的福,美國海軍和法國政府在用,不知Ruby這個功能的成熟度如何?
   4、mod_ruby模組的出現時間很短,如果作者沒有聽過mod_python那就實在孤陋寡聞了。我在一年前翻譯mod_python3.2.8文件的時候,mod_python已經很成熟了,以至於幾乎所有的Python 
        WEB框架都支援構建在其上來提高效率。但是,似乎mod_ruby的更新,每年也只有幾次。mod_python更有gnu.org這樣的重量級應用,不知mod_ruby有沒有?
   5、另外,提到unix工具。Red hat 
        Linux的安裝程式一直是用Python寫的,如果你恰巧用ubuntu,那麼,那個提示你更新系統的程式,也是用Python寫的。
    6、racc和doctools,請原諒我的孤陋寡聞,我google了一下居然除了你的這篇文章還沒找到幾篇關於racc的中文內容,輾轉之後才查到是一種類似yacc的工具。從google的角度講,racc的可用性我就不多說了。我不太明白一個yacc工具在日常程式設計當中有多大的實用性,但是既然作者提到了我就順便找了個我只聽說過名字,根本沒用過的spark。google的結果是"racc 
        ruby":"python 
        spark"=159,000:659,000。至於doctools,我更是無話可說,在google上只有15,800條記錄,我到現在都看不出這個東西是幹什麼用的。所以找了個估計是類似的東西對比了一下,docutils,google的記錄是25,400條。
    7、“比Python庫更完整的面向物件語法”。試問面向物件的目的是什麼?再者,ruby能否像Python一樣,絕大多數標準庫根本不需要查文件,只要猜測一下大體上的名字,然後dir()一下,再help()一下就可以直接上手,用到第二次的時候,因為模組內東西實在太少,記憶太方便,就可以直接寫出來的地步?另外,面向物件既不是什麼銀彈,也不是最先進的軟體工程思想。
    8、"ruby的整個庫都是類繼承結構的",個人認為是Java的糟粕,反倒是當成寶學過來了。或許這也是ruby來拯救Java程式設計師的一項優勢吧。
     9、"基本資料型別和運算子都是可以過載的",這個不是太清楚,不知Python中過載__add__之類的算不算。
     10、"ruby主要的功能都是通過物件的方法呼叫來實現的,而不是函式",Python中所有的東西都是物件,但並不都是類,不知這句還有什麼意義。另外,推薦你不要太追求什麼徹底,還是實用這個詞比較有吸引力。
     11、Python沒有嚴格要求單繼承是給程式設計師以靈活性。另外,關於介面,Python中只要定義了同名的函式就算是具有了相同的介面,玄學上升到了這個高度,我也有些迷糊了。至於介面,不要那麼自信,ruby的所謂介面也不過是個mix-in。這個東西Python的幾個大專案中也有過實現,只是因為對Python意義不明顯,所以才沒有更多的使用。
     12、關於lisp的函數語言程式設計,Python中有很多內建支援,如map、zip、filter等等,當然還有lambda。不要說支援,我們談實用。Pythoner中尚且有些人認為函數語言程式設計影響了程式碼可讀性而儘量避免呢。所以,你認為支援什麼東西之前,先想好這樣東西算不算是個好東西。
      13、"最大的不足正是因為ruby的強大所引起的"。這句真噁心,不予評論。
      14、呵呵,ruby居然沒有國際化支援,真是個笑話,不知道當初那個小日本怎麼想的?難道他英語過了四級?
      15、至於jython,現在也有了jruby,可能是作者的原文比較早的緣故吧。Python也有很多種實現,像是jython,
            ironpython, pypy,
            pyrex等等。Python的優秀其實並不一定要通過用其他語言來實現才能體現出來。當然更不要說寄希望於要Java來解救水深火熱中的ruby了。
            另外麼,有些ruby的缺點不要回避:
      16、ruby沒有本地化執行緒,而是用的偽執行緒,根本無法利用多核CPU的優勢。CPython使用了本地化執行緒,但是因為使用了GIL所以也是無法利用多核CPU優勢的。但是Stackless的出現完全可以解決這個問題,並且stackless更是將Python提高到了平行計算的高度,這個高度的競爭對手可以是Erlang,ruby自然不必窺探。其中的超輕量執行緒技術可以確保一臺很爛的機器上跑幾十萬的執行緒還很輕鬆。基於Twisted的非同步程式設計方式也提供了一種選擇。
      17、剛剛開始學Python的時候,就聽說過一句“Python是主流動態語言中最慢的”,後來才知道,說那句話的人根本沒把ruby放在眼裡。如果把ruby也算進主流動態語言裡,那麼就會出現一個比Python還慢了一個多數量級的語言了。
      18、ruby流行麼?是不是要走向PHP?PHP是個好東西,但是問題在於他只能作WEB程式設計,限制了PHP的應用範圍,稍微需要系統一點的東西就要藉助於C。而現在的ruby似乎也就是走著這條路。直到有一天,有人爆料"ruby是可以做客戶端程式設計的",贏得大家一片好奇。況且現在的ROR能否取代什麼還是個未知數。從Java 
       WEB開發中解救出來的人們也並不都是走向了ruby。


四、評《選Ruby還是選Python?》

            Python和Ruby的設計哲學確實有很大的差異,這個問題,我就不評論哪個更好了,各有所愛吧。至於效率,Ruby永遠不要考慮跟Python相比。Ruby是偽執行緒,而且根本沒有利用多核CPU的可能,直接pass。而Python使用native
            thread,僅僅由於部分模組不是threadsafe的而加入了GIL來限制應用多核CPU,而在我最近的測試中,在使用Twisted的非同步執行緒之後,已經可以很好的利用多核CPU的計算能力了。執行效率上也不是一個數量級,自己試試就知道。

            拿Java對比Python,可見作者創造力之強悍,哈哈。開源專案是很符合達爾文的自然選擇的,難道Ruby的開源專案少倒成了優點了?另外,在Python中我也沒見除了WEB
            framework之外有什麼專案有太多的重複。舉個例子,pypcap就已經基本淘汰了pcapy了。

            談到資源,Ruby還有很長的路要走,所以提到雙方都很強的時候,麻煩不要太並列化了。至於Java社群的人傾向於學Ruby,我個人認為只是被Java折磨慣了的開發人員目光太狹隘所致。語言是工具,面向物件也是工具,純粹的面向物件並不見得高明到哪裡去,Python也有函數語言程式設計的支援,作者怎麼沒有提到。另外,Python的很多做法是以開發效率為第一目標的而不拘泥於各類形式,甚至為很多智力有限的人所廣泛詬病的C++中的多繼承,Python也可以支援。問題不在於支援了什麼讓你不喜歡的東西,而是讓儘可能多的人用上他們喜歡的東西。另外,一直被Ruby開發者所認為的Python不夠OO的一個例子就是取一個序列的長度,Python使用len(x)的方法。這個問題,如果Ruby開發者認為x.length就可以算是OO的話,那麼Python也大可以直接使用x.__len__()來獲取長度。從用方法來封裝屬性的Java角度講,誰更OO一些呢,哈哈。

            Ruby是一個日本人的作品,呵呵,這個就不多說了,不喜歡日本的國人有很多,在此我僅在技術層面就可以把Ruby貶低下去,無須用非技術的東西了。

            關於Ruby on
            rails,Ruby社群確實把幾乎所有的精力都集中於此。但是這隻能表現出Ruby的幼稚,事實已經證明了,ROR的很多模仿者已經推出無數的高階功能,遠遠超過了ROR,沒有取代ROR只是出於先入為主的觀念。如果現在的Ruby,突然失去了ROR又會是什麼樣子。至於作者提到的zend,居然用來跟ROR相比,有如以卵擊石,我學過Python的2種WEB框架,平時也比較關注Python和Ruby的各種東西,但是zend這個東西,我是沒有聽說過的,不知是不是作者的作品,哈哈。如果一定要在WEB框架上有個較量的話,你可以用django,Quixote,mod_python之類的來比較一下。django,一個典型的ROR模仿品,還在成長,但是已經有很多優於ROR的功能了,而效能上遠優於ROR自不必說。應用Quixote的douban.com是所有使用Python和Ruby網站中流量最大的,而且在相同硬體配置的情況下比ROR實現速度快了一倍還多,要知道去除WEB伺服器等等的各種平等損耗之後,這可是要快上一個數量級的東西。至於mod_python,據說www.gnu.org用的就是這個。如果Ruby還想開源的話,那麼就永遠活在Python的陰影裡面吧。

            至於上手的速度,各個人有不同的情況,不作評論。至於靈活性所帶來的東西,仁者見仁,就不要評論了。作者談到Python的入門不容易,真不知Ruby有個何等容易。我初學Python時,第11天就用Python寫了一個詞法解析器,至今仍然在我部落格上可查。所以,入門難度這個東西,每個人還是自己去試試為好,不必聽別人怎麼說。

            提到ROR生成的目錄有很多東西,要很久才可以都瞭解,這確實是IDE的綜合症。在Python下,比較典型的例子是TurboGears,如果你希望瞭解整個應用程式的執行方式,你可以從核心cherrypy開始學習,然後開始使用TurboGears就沒有什麼可不瞭解的東西了。在這個角度上,ROR沒有選擇。再者,現在ROR可用的一種連線WEB伺服器的方式scgi,當年也是Python的作品,又是一個在Python的陰影下活著的小東西。

            未來的發展麼,孤注一擲的Ruby還很難說,但既然是孤注一擲,風險還是蠻大的。而Python麼,我也以為真的會平穩的發展,但是後來Micro$oft的加入,讓我們都難以預料Python的未來到底有多大了。我們再回頭談談作者一直討厭的Python的多樣性,在我看來Ruby可以超越Python的東西屈指可數,而Python超過Ruby的東西,自然是Ruby難以逾越的鴻溝。所以從程式語言的多樣性考慮,也就不建議大家學Ruby了吧,少了一種選擇,聚集一些人氣總是好的。


五、python和ruby,我選誰?
其實python和ruby非常接近,比大多數別的語言要接近的多,所以喜歡用啥就用啥(大實話,雖然也是廢話)。語法上的差別雖然有那麼一點,大部分是syntax sugar,我斗膽稍微列幾個(python我也忘得差不多了,不對的大家儘管來鞭屍吧),但是主要差異還是設計思想上的:靈活vs明確. 我不認為兩者在生產力上會有什麼差別,如果你熟悉的話。*注意,僅限語言本身的比較。

1. ruby的case可以匹配很多東西:範圍/陣列,物件,正則表達,python沒有case/switch而使用if/else比較死板點

2. python的縮排很漂亮,雖然有時會造成些許麻煩。ruby的end蠻難看的,所以大家都被逼當one liner(玩笑)

3. 感覺上ruby比python更OO,當然這也可能是因為python不提倡用那些改變物件內部構造的‘伎倆’造成的錯覺

4. python有list comprehension, ruby沒有:(

5. python有真正的keyword argument, ruby用hash模擬,當然實際用起來沒什麼差別

6. python的self很討厭,ruby沒有那種繁瑣的東西

7. reflection,ruby內建了很多方法,比如object.methods,而python把這些資訊存在特殊的字典裡。差不多

8. ruby的block功能很強,python的lambda只能返回單一值

9. ruby的open class已經宣告遠播,可以玩出2.days.ago這樣的花樣,python好像沒法直接修改內建類也反對這麼做。

10. python需要用@classmethod修飾宣告類方法,ruby是內建

11. ruby有單子方法,也就對物件單獨定製,python不知道有沒有類似概念

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

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

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

15. ruby和python都使用duck typing,不過python也有一套顯式的interface機制(從zope3併入核心了麼?)

16. ruby的函式呼叫括號是可省的,稍微少敲幾下鍵盤。python預設沒括號也不帶引數的話返回函式本身的一個引用。

17. 我不清楚python的meta programming能到什麼程度,只好等大牛來說說了。只是覺得pythoner不常用那個,也許覺得會把程式邏輯搞得晦澀不明。

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

19. ruby內建正則表達,方便一點

20. ruby的yield是用來call block的。而python的yield是用來給generator輸入輸出值的。

21. python的庫給我感覺命名規範有點不統一,有些方法用snake_case有些則用CamelCase,也許是庫太多了遺留下的歷史問題

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

23. ruby的類庫設計中喜歡給方法新增別名,方便記憶。

另: ruby官方網站也提供了一些基本的比較。

六、兩種語言的資源和學習曲線比較:

總體的印象,用一個不大恰當的比喻:如果Python是Java,那麼Ruby就是.net。我們知道,Java世界非常複雜,非常多樣性,任何一個需求,都會有很多開源專案,他們用不同的思想來實現,效能特點迥異,到底選那個,總是令人犯難。現在Python也是如此,而由於Python開發難度遠遠低於Java,導致Python的相關專案比Java還要多得多。

資源上,兩者社群都很強,有趣的是,現在Java社群存在被Ruby同化的危險,至少我訂閱的幾個Java blog聚合中談Ruby比Java還多。Ruby的社群較為集中,Python則比較分散。我總懷疑Ruby的日本使用者較多,但因為不懂日文,很難確認這個想法。對於一個母語非英語的創始人,我總是有點恐懼,怕很難理解他,怕很難得到最新訊息等等,雖然這個擔心目前看來並無必要,不過,誰知道會怎麼樣呢!

Ruby之所以現在突然變得熱門,和rails這套架構是分不開的。考慮Ruby,就要考慮到Ruby on rails。rails提供了一套非常好的web開發框架,開發效率非常高。Python雖然有很多類似的架構實現,但並沒有出現一個能夠一統江湖的架構。Python的zend雖然完整,但更偏向於web伺服器,不能用來和rails比較。

Ruby比pyton更容易上手。從語言特徵看,Ruby有很多有意思的創造,比如說block,但大規模的應用這些好玩的東西讓程式變得混亂。Python語法強調簡單,但是由於太靈活,簡單得太過分,於是傳統程式設計師經常會看到一些令人大吃一驚的表達方式。我不知道這應該算優點還是缺點,至少我認為語法過於靈活,容易導致不同程式設計師的程式碼風格差異過大,增加了學習成本。

初期入門,Ruby更容易,但一旦達到一定複雜度,那麼Ruby的難度驟然加大。Python入門不容易,複雜的時候也不會太痛苦。rails有入門簡單,深入難的問題。rails生成的目錄是做什麼用途?o/r mapping如何實現的?如何把資料從web中傳遞到資料庫的。這些都是Ruby程式設計師早晚要面對的問題。Python則不會這樣,如果搞不清楚這些,大概根本沒辦法開始。整合度太高的快速開發工具都有這個特點,無論是VB、Delphi,還是.net,有多少使用了半年以內的開發人員可以說清楚工程目錄下面所有的檔案的用途、每個檔案中的語法?我相信很多很有經驗的使用者也未必說的清楚。

從架構上看,二者雖然實際上相差甚遠,但最後表現出來的結果反而很相似。Ruby是純粹的OO語言,而Python是函式和OO混合型。雖然Ruby也能用函式風格的編碼方式,但實際上是模擬出來的。他們的這個差距對於普通的程式設計師影響並不大,畢竟看起來差不多。

總體來說,如果是非專業人員初嘗開發,Ruby是合適的。對於專業的程式設計師,我還是建議選擇Python。

對於未來發展,我認為Python的發展可預見,會較為平穩。Python已經屬於一個社群,而非一個人,但Ruby由於種種原因,Ruby的作者maze的意志仍然會對Ruby的發展造成較大影響。Sun控制著Java,但由於sun的資源強大,且組織了jcp進行統籌,所以Java發展很不錯,但Ruby能不能作到這一點,還需要時間來證明。


七、從Python到Ruby
Python是一門非常優秀的語言,從Python遷移到Ruby,你將發現一些語法上的不同。

 相似點

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

有一個互動提示 (叫做 irb).
你可以在命令列中讀取文件 (通過ri 命令來替代 pydoc).
沒有特殊的結束一行的符號 (新行除外).
文字可以用多行,就像Python中的三個引號.
List用[],Dict用{} (Dict在Ruby中叫“hashes”).
Arrays的工作方式相同(2個Array相加成為一個更加長的Array,但是想這樣a3 = [ a1, a2 ] 合併,將產生一個包含陣列的陣列).
Objects是有固定型別和動態轉換的.
一切都是object,變數名只是一個指向Object的指標.
雖然關鍵字不同, 但是exceptions的工作方式不變.
你擁有嵌入文件的工具 (在Ruby中叫做rdoc).
 

不同點

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

Strings是可以改變的。
你可以使用常量(常量的值是不同改變的)。
這裡有些強制規定的書寫要求 (例如:class的名字以大寫字母開頭, 變數名已小寫字母開頭)。
這裡只有一種容器(Array), 並且是可以改變的。
引號中的String限制不同。
這裡沒有新風格的Class,Class只有一種風格。
你無法直接訪問屬性,在Ruby中,都是通過方法呼叫實現的。
在方法呼叫中使用(),是一種可選的策略。
這裡用private等等限制訪問的關鍵字,來替代Python中的名字隱藏。
“mixin’s”用來替代多繼承。
你可以在任何時候修改已有的Class,並新增新的方法。
用true和false來替代True和False (用nil來替代None)。
在判斷真值的時候,只有false和nil會被認為是假.其他所有的都認為是真(包括0, 0.0, "",和[])。
用elsif替代elif.
用require替代import. 但是用法是相同的。
用usual-style來註釋文件(替代docstrings) 同時用來生成文件。
 

八、從三個方面來進行Python和Ruby的比較:

1.各自所適用於什麼應用
2.開發環境、執行環境
3.可移植性如何,因為專案最後計劃移植到手機平臺,如windows CE Symbina


【1.各自所適用於的應用場合】

查閱的結果似乎對於這兩種語言的評價都很好,在網路開發上的效能都很好。都很適用於快速的應用程式開發,開發的效率很高。

Python:

摘取了跟專案有關的一些應用方面的敘述

跨平臺開發:

Python 以中立方式支援不同的一系列平臺,如果使用者使用的系統包含不同的平臺,使用 Python 開發應用程式則再好不過;它這種適應性也可以為系統預留使用其它工具的可能。對於頻繁更換平臺使用者,Python 是個理想的選擇。
為終端使用者提供軟體服務時,Python 也是個備選方案,可以避免同時用不同應用軟體程式設計的時間和費用。

網際網路程式設計:

Python 帶有的標準模組可以對網路插槽進行初級和協議級別的通訊,比如,如果要從 POP 伺服器上讀取電子郵件,Python 隨帶的庫模組可以做到。另外, Python 還支援 XML、HTML和 CGI 庫檔案,所以利用它可以解析使用者輸入的需求,並通過網路伺服器產生最佳質量的成果。
程式設計師還可為擁有 Python 內建直譯器的 Apache、Unix 和 Windows 網路伺服器編譯模組。基於 CGI 程式的功效,可以很方便地執行 Python 語句而不用單獨裝載。
針對於python的網路程式設計,有一本很好的書:《python網路程式設計基礎》
這本書全面介紹了使用Python語言進行網路程式設計的基礎知識,主要內容包括網路基礎知識、高階網路操作、Web Services、解析HTML和XHTML、XML、E-mail服務、FTP、使用Python操作資料庫、SSL、幾種伺服器端框架(包括Socket伺服器、SimpleXMLRPCServer、CGI和mod_python),以及多工處理(包括Forking、執行緒和非同步通訊)等。本書實用性強,共提供了大約175個例項,6600行以上的程式碼,是幫助讀者全面而快速地學習Python語言、編寫網路程式的最佳實踐。


Ruby:

功能強大,面向物件的指令碼語言,可以使您方便快捷地進行面向物件程式設計,有時使用像Smalltalk、Eiffel或C++這樣正式的面嚮物件語言來開發一些小專案顯得有點"小題大做",而Ruby剛好可以滿足這些面向物件程式設計的需求.當然了,您也可以使用Ruby進行普通的面向過程程式設計。
Ruby支援很多網路協議,不管是高層的還是底層的。ruby提供了一些基本類,讓你可以使用TCP,UDP,SOCKS等很多協議互動,而不必拘泥在網路層。這些類也提供了輔助類,讓你可以輕鬆的對伺服器進行讀寫。進行網路程式設計也是很不錯。


【2.開發環境、執行環境】

Python:

相比之下,就是沒有一個很強的整合開發環境。有人說開源軟體相對於收費的那種軟體好用一些。
用得較多的幾個:
Python自帶的idle:
不是python的IDE中最好的……
PythonWin :

使用起來非常得心應手(就像使用 Windows 那樣舒服)。它有個好用的編輯器,包括程式碼合併、語法標籤高亮顯示以及程式碼自動完成特性。PythonWin 和有些 IDE 一樣,不包含任何型別的表單設計器;但它提供一個優秀的偵錯程式,具有監視、程式碼檢查、互動除錯視窗、斷點、和其他偵錯程式該有的功能。最重要的是,PythonWin 很穩定,儘管有時候在 Win95r2 系統上使用時會奇怪地“停止響應”。介面上來說,PythonWin 比較簡單,但非常吸引人,很好的運用了可嵌入和可對接的元素(我有點偏愛 Idle 風格的 "many windows everywhere",它也為其他許多 IDE 所採用的)。PythonWin 還集成了 ActiveState 的 HtmlHelp 版本的 Python 說明文件和 PythonCOM。

eclipse的pydev外掛,eclipse+pydev
Pydev 基於Eclipse的,非常棒的Python環境,改進速度非常快。提供的一些功能

UliPad :
一個編輯器,你可以用它來進行你的文件寫作,程式設計開發。它使用 Python 程式語言開發,使用者介面基於 wxPython 。它除了想要完成一般編輯器的常用功能之外,最主要是想實現一種方便、靈活的框架,開發者可以方便地開發新的功能。而且有程式設計經驗的使用者還可以針對日常工作中的特別問題編制處理的外掛,從而使之與自已的日常工作緊密結合起來。由於使用的是 Python 這種功能強大的程式語言,你可以方便地對本軟體進行修改,從而滿足自已的需要。
UliPad 支援程式碼著色、智慧補全、程式碼除錯、Python類瀏覽、程式碼片段、Ftp功能、目錄瀏覽等等強大功能,其 Doc 目錄下的文件更是非常豐富,是你編寫 Python 的絕世好幫手!
系統要求:
python 2.4+
wxPython 2.6+

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

Ruby:

Ruby有極好的高階偵錯程式。

可以用netbeans的ruby外掛或eclipse的ruby外掛

Eclipse下安裝開發環境的大致過程:
1. 安裝 Ruby 1.8.6 One-Click Installer。
2. 將 Eclipse Platform Runtime Binary 壓縮包解壓到某個目錄。
3. 將 Ruby Development Tools 壓縮包的內容解壓縮到 Eclipse 相應目錄下。

執行環境在其官方網站上下載相應的版本再安裝即可,windows下面的安裝較為簡單,雙擊執行即可安裝。


【3.可移植性】

Python:

由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程式無需修改就可以在下述任何平臺上面執行。這些平臺包括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在執行時,首先會將.py檔案中的原始碼編譯成Python的byte code(位元組碼),然後再由Python Virtual Machine來執行這些編譯好的byte code。這種機制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更高階的Virtual Machine。這裡的高階並不是通常意義上的高階,不是說Python的Virtual Machine比Java或.NET的功能更強大,而是說和Java 或.NET相比,Python的Virtual Machine距離真實機器的距離更遠。或者可以這麼說,Python的Virtual Machine是一種抽象層次更高的Virtual Machine。

可以安裝一種面向物件的解釋性的計算機程式設計語言,也是一種功能強大而完善的通用型語言,已經具有十多年的發展歷史,成熟且穩定。Python 具有指令碼語言中最豐富和強大的類庫,足以支援絕大多數日常應用.在Symbina智慧手機上支援C++和JAVA開發的兩類程式,裝上Python後,也就可以支援眾多以Python開發的各種程式了。對於普通的手機使用者,我們不用瞭解太多,只是安上Python這個平臺就可以了,可以讓我們的手機支援更多以Python開發的程式。目前在Symbian手機上已經有相當多的Python開發的程式,也都是比較實用的。


Ruby:

它大部分是在Linux上開發的,但是可以在很多型別的Unix, Dos, Windows95/98/Me/NT/2000/XP, MacOS, BeOS, OS/2等系統上執行。
關於ruby跟手機開發的資料很少,有在windows CE上執行的版本,但是好像現在相關的資料還特別少,而且安裝失敗、編譯不通過的例子偏多。日文頁面上有少量的日文介紹。


【總結】
然後針對於Python跟Ruby在朋友的建議下還給出瞭如下一些參考意見,在此感謝他:

1.  Python也被稱為是一門清晰的語言。因為它的作者在設計它的時候,總的指導思想是,對於一個特定的問題,只要有一種最好的方法來解決就好了。Python語言是一種清晰的語言的另一個意思是,它的作者有意的設計限制性很強的語法,使得不好的程式設計習慣(例如if語句的下一行不向右縮排)都不能通過編譯。這樣有意的強制程式設計師養成良好的程式設計習慣。Python在其他部分的設計上也堅持了清晰劃一的風格,這使得Python稱為一門易讀性、易維護性好,並且被大量使用者所歡迎的、用途廣泛的語言。
同一個問題用Python幾個人分別寫寫出來的程式碼會很相近。但Ruby則設計思想不一樣,用它寫出來的程式太過於靈活,不同的人寫出來可能相差會很大。

2.  Ruby英文文件極度缺乏,中文文件就更不用說。Python社群相對成熟,也有一大堆的資料。

最後給出Python的幾個網站