2005.11.01 来自:CSDN
最近,我需要一种快速开发语言,目前炙手可热的快速开发语言就是Python和Ruby了。Ruby和Python都是非常优秀的脚本语言,虽然他们的设计哲学几乎完全不同,但他们效率差不多,应用领域也差距不大,似乎天生就是竞争对手。到底选那个呢?我做了一些简单的比较。
我们比较两种语言的时候,抛开性能问题不说,一般最在意的大概就是资源和学习曲线。
总体的印象,用一个不大恰当的比喻:如果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能不能作到这一点,还需要时间来证明。
cloudzm: |
XChilde: 这个是类库设计的问题,不是语法设计造成的,不管是to_i也好,to[int]也好,只是向对象发消息。你完全可以自己实现一个这样的类型转换方法。 |
XChilde: |
比如“obj.to[int]”。把要转换成的类型做为一个类型参数。 |
cloudzm: |
XChilde:还有什么比obj.to_i更直观的方法吗?int(obj)? |
XChilde: |
我觉得Ruby有些语法设计得很愚蠢、很丑陋。比如像“obj.to_i”这样的设计,显然可以有更美观、更直观的实现方法。目前Ruby对 UNICODE的支持还比较差。Ruby有一些好的想法,但是和Perl那样的语言相比,无论是语言本身还是它的社区都还很不成熟。另外Ruby缺乏像 Perl那样的丰富、成熟的类库支持。目前也没有哪家大公司明确的支持Ruby。我觉得现在要用Ruby做严肃的开发还为时过早。 (2005.11.22) |
liuhaimiao: |
语言这东西,大同小异,只不过是工具,重要的是思想。 |
jljljjl: |
科技无国界。为什么你们不承认日本的技术呢?中国和日本的矛盾历来深重,但如果我们排斥一切,就像鲁迅先生所说的:“是昏蛋!”Ruby 并不是什么新事物,也有不少年历史了,而且它是开源的,世界上有很多人参与,这本身就淡化了其日本背景。单就开源这一点说,扪心自问,我们能做到什么程 度?我是做开源的,中国人干的龌龊事我见得多了。动不动就搞什么比较,连用都没用过,有什么资格批评? (2005.11.22) |
madmanahong: |
lua (2005.11.21) |
my_sunshine: |
为什么CSND最近经常炒作日本鬼子的语言呢?难道老美的语言还不够用吗? |
linuxdotnet: |
搞不明白,老搞 日本鬼子的东西干嘛啊?不用老外的,特别是日本鬼子的,中国早就搞出来自己的强劲的开发语音以及开发工具了,中国缺的并不是人才,看看 原子弹 买不到,中国就搞出来了,反正能买到的咚咚,中国就搞的N烂?买不到的,搞的也还不错嘛,这说明了什么…… (2005.11.21) |
linuxdotnet: |
太不负责任了,老是弄错误的咚咚出来误认 (2005.11.21) |
mikeshi: |
to cheyo:主要是因为好像csdn中某人特别钟爱的缘故吧,好像是透明…… (2005.11.21) |
mikeshi: |
Python的叫Zope,不叫Zend,真是的,csdn总是在砸杂自己的牌子 (2005.11.21) |
cheyo: |
为什么CSDN最近老在炒Ruby? (2005.11.21) |
woodhead99: |
ruby是日本人写的,还是用python吧 |
XChilde: |
另外生物学领域也经常用Perl来分析DNA序列。现在想研究生物信息学,Perl是必修课。 (2005.11.07) |
lile2002: |
To Suninny: perl 可不是玩具,在Unix 世界上,perl 的地位可不低啊,系统的通用工具语言。 |
sleetdrop: |
呵呵,学脚本有的时候就是图个乐,可偶尔也能方便解决一下身边的问题更是另人开心,做人不必那么认真吗,上网看PLMM是一种休闲,写个cool脚本也是种休闲。 (2005.11.07) |
Suninny: |
to flowerknight: |
leasun: |
我想问问各位评论的兄弟,有谁真正使用Python或者Ruby做过开发?自以为是可是技术人员的大敌。 |
littlecpu: |
他妈的,这个Ruby和什么Python有啥屁用啊? |
MHB: |
我很赞同flowerknight的观点,cloudzm,r_mosaic你们二位强调片面的技术,有一个强大的IDE做开发的后盾是再好不过,一是提 高生产率,二是可调试性强。会用edit写二行纯代码就自以为是,那是自欺欺人。cloudzm,如果手机开发有一个好的IDE工具就不用像你现在这样麻 烦的,javascript也一样。 (2005.11.04) |
XChilde: |
lile2002: |
cloudzm: |
flowerknight: |
gu1dai: |
不明白为什么放着成熟的php不用,去搞什么python Ruby (2005.11.03) |
gu1dai: |
用什么语言来写脚本呢? |
gu1dai: |
对于新入行的或准备入行的程序员,我还是那句话,紧跟当前市场的主流语言,在巩固技术能力的同时加强业务知识的积淀,而不要去追逐那些尚在萌芽或者成长阶段、规范制定并不完整的语言,浪费不必要的精力。 |
r_mosaic: |
其实我想澄清一个问题:Python 是如前所说,是“部落级”的语言。但是这样简单易用的语言如果没有的话,用什么语言来写脚本呢?连 Java 和 C# 对于脚本编写都还嫌复杂。而 Python 至少比 javascript 多了面向对象的功能了! (2005.11.03) |
gu1dai: |
部落语言这个概念我还是第一次听说。 (2005.11.03) |
r_mosaic: |
to alaclp:不是没有应用程序定义语言。我写过代码生成器,目前还在用,就是用 javascript 写的。根本没有必要再搞一个什么“应用程序定义语言”。ESR 说过,写“会写程序的程序”。 (2005.11.03) |
r_mosaic: |
to flowerknight:你大概从没写过脚本吧,连 javascript 这么流行的脚本语言都不提一下?你是不是只写 100 行以上的程序?从不写 100 行以内的程序? (2005.11.03) |
flowerknight: |
to cloudzm again: |
|
alaclp: |
没有应用程序定义语言啊? |
|
Suninny: |
“flowerknight:。。。与其在部落冲突中搞死自己,还不如来捍卫JAVA或.net的国度。在外企呆了三年,看到多少想采用部落级语言开发的项目被Kill掉,劝各位别费那个精神与力气。 。。。。。“ |
|
Suninny: |
Ruby和Python不是一个层次的。根本不存在冲突嘛。。。 |
|
cloudzm: |
flowerknight: |
|
tonyhawk: |
python将是继java后又一个王者 (2005.11.02) |
|
flowerknight: |
to cloudzm: |
|
cloudzm: |
holy_phoenix: |
|
wanghui0380: |
还是比较喜欢python,个人喜欢工具集式的方式,而不喜欢大框架的东西,呵呵,大框架太麻烦,做小东西方便,做大东西,一但涉及底层,就得牵及全身。 (2005.11.02) |
|
flowerknight: |
跟着主流王国级语言走吧,Ruby、Python这种部落级语言的生命力不会长久的,一个很简单理由,连个像样的IDE都没有,凭什么一群菜鸟用文本编辑 器就能开发出好项目来;就算有几个老鸟,恐怕也只能开发有限个项目。与其在部落冲突中搞死自己,还不如来捍卫JAVA或.net的国度。在外企呆了三年, 看到多少想采用部落级语言开发的项目被Kill掉,劝各位别费那个精神与力气。 (2005.11.02) |
|
ripper: |
“Python的zend虽然完整“...,是啊PHP的ZOPE也不错 (2005.11.02) |
|
lile2002: |
to XChilde: |
|
holy_phoenix: |
Python 中的λ算子很强,我就喜欢这个。 |
|
xiangding: |
python不错,比Ruby好多了。小日本的东西,不要在中国来宣传!!!!!!!!!!! (2005.11.02) |
|
rainbow_wzx: |
“JavaScript语法不够简洁,“ 够简洁了吧。至少对C/Java程序员来说。 |
|
XChilde: |
JavaScript语法不够简洁,也没有一个丰富的标准库,不太容易用来做一般的开发。 (2005.11.02) |
|
iasky: |
支持Python`~ (2005.11.02) |
|
JamBoL: |
郁闷,连编码都得用小日本的东西了,不过对日本人的技术还是很钦佩 (2005.11.02) |
|
rainbow_wzx: |
有没有人喜欢javascript?并拿javascript和ruby/python比较比较? |
|
XChilde: |
tx18: |
|
cloudzm: |
作者真是无知啊。 |
|
tx18: |
为何不拿出勇气来试试我们自己的东东呢! |
|
mrkissinger: |
呵呵,在下也是比较喜欢perl (2005.11.01) |
|
lile2002: |
perl 的catalyst 比2者要强, |
|
lile2002: |
Perl 比2者都要好,原因是他们的资源不如perl |
|
sleetdrop: |
俺还是抱着老perl不放,呵呵。 |
|
LuZhou: |
我还是比较看好Python,因为时间比较久,也说明经过了实践。 (2005.11.01) |
|
tinydust: |
说的没错,我最近玩这两种语言也是这个感觉 (2005.11.01) |
|