摘要:的解析器實現更成熟,第三方庫質量高解析器盡管已經有了很大的性能提升和很多新的功能,但是從源代碼實現的角度來說,基本上是通過在源代碼上打來增加功能的。相對而言,解析器更成熟,也比較穩定。
最近在考慮學習一門后端語言,在ruby和python直接猶豫,然后自己做了一些對比,希望能幫到有同樣問題的你。
一、異同對比選擇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直接調用linuxKernel的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同化的危險,至少我訂閱的幾個Javablog聚合中談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的幾個網站
1.http://www.python.org/- Python 的官方網站
2.http://python.cn/- Python 中文社區
3.http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPythonPython For Dot Net 的網站
Ruby的幾個網站
1、www.ruby-lang.org/zh_CNRuby中文官方網站
2、http://www.rubystudy.com/bbs/tag.php?name=RubyRuby中文學習交流社區
3、http://ruby-lang.guo.cc/Ruby在線參考手冊
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40756.html
摘要:測試內容使用不同的語言及其版本,測試各自完成包含行列單元格的文件的生成,對比其各自耗費時間,次重復執行取其平均值后進行橫向比較。 背景 去年因為線上系統需要導出大量數據(大概是 11 萬行)到 Excel,代碼是 Python 2.7 寫的,除去數據庫查詢耗時,整個的 Excel 文件生成也還要耗費幾十秒的時間,這聽起來真是一個非常夸張的事情。后來為其更換了號稱性能表現最好的 pyex...
摘要:但我還是使用它開發了很多軟件。那么問題就很明顯了為什么今天還在使用除了個人理想主義的偏好以外,還有很多理由。為什么使用而不是也許和比較的最重要的語言是。為什么選擇而不是你已有專業知識或者在使用庫。 showImg(https://segmentfault.com/img/remote/1460000018390090?w=790&h=466); 我們來開門見山地說。? PHP 是一門奇...
摘要:一概述集合是引入的新的內置對象類型,其特點同數學意義的集合,即集合內所有元素不重復元素唯一。數組集合對比數組和集合,數組可以加入重復數據,而集合的所有元素是唯一的不允許重復。因此,適合臨時存放一組對象,以及存放跟對象綁定的信息。 本文同步帶你入門 帶你入門 JavaScript ES6 (五) 集合,轉載請注明出處。 前面我們學習了: for of 變量和擴展語法 塊作用域變量和解構...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...
閱讀 1438·2023-04-25 16:31
閱讀 2040·2021-11-24 10:33
閱讀 2745·2021-09-23 11:33
閱讀 2528·2021-09-23 11:31
閱讀 2900·2021-09-08 09:45
閱讀 2336·2021-09-06 15:02
閱讀 2647·2019-08-30 14:21
閱讀 2313·2019-08-30 12:56