Python 和 Ruby 的对比

Posted 雷课

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 和 Ruby 的对比相关的知识,希望对你有一定的参考价值。

最近在考虑学习一门后端语言,在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中的正则表达式也不过是多个importre和调用时的几个字母而已,省下的无数个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的结果是”raccruby”:”pythonspark”=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在朋友的建议下还给出了如下一些参考意见,在此感谢他:

Python也被称为是一门清晰的语言。因为它的作者在设计它的时候,总的指导思想是,对于一个特定的问题,只要有一种最好的方法来解决就好了。Python语言是一种清晰的语言的另一个意思是,它的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。这样有意的强制程序员养成良好的编程习惯。Python在其他部分的设计上也坚持了清晰划一的风格,这使得Python称为一门易读性、易维护性好,并且被大量用户所欢迎的、用途广泛的语言。

同一个问题用Python几个人分别写写出来的代码会很相近。但Ruby则设计思想不一样,用它写出来的程序太过于灵活,不同的人写出来可能相差会很大。

Ruby英文文档极度缺乏,中文文档就更不用说。Python社区相对成熟,也有一大堆的资料。

最后给出Python的几个网站

  • http://www.python.org/– Python 的官方网站

  • http://python.cn/– Python 中文社区

  • http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPythonPython For Dot Net 的网站

Ruby的几个网站

  • www.ruby-lang.org/zh_CNRuby中文官方网站

  • http://www.rubystudy.com/bbs/tag.php?name=RubyRuby中文学习交流社区

  • http://ruby-lang.guo.cc/Ruby在线参考手册


以上是关于Python 和 Ruby 的对比的主要内容,如果未能解决你的问题,请参考以下文章

学哪个?Python 和 Ruby 优缺点对比!

画说 Ruby 与 Python 垃圾回收

erlang对比golang,如何选择?

PHPPython 和 Ruby 语言的区别

python常见面试题

第一个ruby程序