《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了吧,少了一種選擇,聚集一些人氣總是好的。
轉自:http://www.winu.cn/viewthread.php?tid=109124
---------------------------------------------------------------------------------------------------------------------------------
說人之短,乃護己之短??浼褐L,乃忌人之長。皆由存心不厚,識量太狹耳。能去此弊,可以進德,可以遠怨。
http://m.tkk7.com/szhswl
------------------------------------------------------------------------------------------------------ ----------------- ---------
posted on 2008-12-07 14:36
宋針還 閱讀(598)
評論(0) 編輯 收藏 所屬分類:
Python