Ruby 1.9不会杀死Python

 

松本行宏如约于圣诞节发布了Ruby 1.9。根据Ruby的惯例,小数点后面第一位如果是单数,那么就表明这是一个实验版本,不推荐用于产品环境。所谓“产品环境”,对于目前的Ruby来说,基本上就是Ruby on Rails。从目前RoR社群的反映来看,确实有人正在尝试用Ruby 1.9配合RoR,但是尚属玩票性质。我询问了一些处在真实项目中的RoR团队,目前还没有人打算在自己的项目中使用Ruby 1.9。

      在Ruby社群里的半仙级人物Mauricio Fernandez在这里总结了Ruby 1.9的主要新特性,洋洋洒洒的一大篇,充斥着鸡毛蒜皮的语法糖衣,我看了半天,愣是没看到几个特有意义的东西。其实Ruby 1.9的最重大变化在内不在外,新的虚拟机Yarv把Ruby的性能大大提高了。在CSDN上的一篇转载报道中提到,在一个Fibonacci序列的评测对比中,Ruby 1.9的性能较之Python 2.5.1还要快出两倍。当然,仅凭借一个测试就断定Ruby 1.9的性能快于Python是幼稚的,但是现在可以肯定地说,Ruby脑袋上那顶“速度最慢的动态语言”的大帽子肯定要摘掉了。

      有人认为,这下子不得了了,Ruby要称霸动态语言了。你想想,Ruby已经几乎拥有了所有梦幻般的语言特性,神奇的动态能力,强大的支持库,内置的跟Perl可以比肩的正则表达式,Smalltalk级别的纯而又纯的面向对象特征,简洁明快的风格,跨语言整合也非常容易,唯一的缺点就是速度慢。现在连这个缺点都被弥补了,Ruby还能挡得住吗?其他的动态语言都该歇菜了。

      虽然我也算是一个Ruby语言的拥护者,但是我并不这么认为。特别是,我不认为Ruby 1.9能够对Python造成实际的威胁,更谈不上“赶尽杀绝”。原因很简单,Ruby是一种魔幻语言,而Python是一种简约语言,Python的支持者也大多数是简约主义的忠实信徒。对于他们来说,一种语言越是魔幻,就越无法获得他们的信任。

      什么是魔幻语言呢?这是我杜撰出来的说法。对编程语言进行分类有很多方法,其中人们常用的比如非常“过程式语言”,“面向对象语言”,“函数式语言”等,这是按照在这种语言中原始的看待程序的方式来划分。还有比如“编译型语言”和“解释型语言”,这是按照语言翻译发生的时间来划分的,还有一些别的分法。不过我一直觉得,根据语言本身的设计风格和拥护者的气质也可以把语言划分成“魔幻语言”和“简约语言“两类。

      所谓”魔幻语言“,主要代表作品有C++、Perl、Javascript和Ruby。这些语言拥有丰富的特性,聪明的技巧和意想不到的奇效,永远有发掘不完的奇技淫巧,总能找到让人匪夷所思的”yet another way"。反过来,“简约语言”崇尚清晰直接,够用就行,要求从代码容易理解,宁可笨一点、累一点、多写一点代码,反对出人意料的技巧,反对故弄玄虚。C、PHP、Python和Lua这一派语言的代表作。而Java和C#从语言设计来说,一开始还是比较简约的,但是近来越来越魔幻,而且标准库设计相当繁复。但我倾向于将它们归于简约语言一类,因为虽然在其中也有很多技巧,但是这两种语言社群的总体风格是比较质朴的。VB的传统是典型的简约,老式的VB6和VBA都是典型的简约派,新的VB.NET虽然也能玩出魔幻来,但是根本上还是更亲近简约语言。

      魔幻语言通常看上去更加引人入胜,能够做一大堆让人目瞪口呆的事情。魔幻语言的拥护者,通常都热衷于这种智力竞赛,他们发掘语言中每一个死角,寻找有趣的技巧组合,一遍遍地寻找更好的方法和思路,对语言层面的技巧如痴如醉,乐此不疲。在魔幻语言的社群里,“语言高手”是备受尊崇的,他们可能不知道怎么响应一个HTTP请求,但是却能够用不少于6种方式来写一个for循环。他们写的代码是一种谜语般的艺术,出谜语和猜谜语的人们都能从中获得巨大的精神满足。

      简约语言就土多了。通常做一件事情就那么一两种方法,你真的没多少花花肠子可绕。光看代码根本不看不出你的道行,随便一个受过一点专业训练的人也能看透你葫芦里卖的什么药,在代码里找成就感,基本没戏。当然,这并不是说简约语言的“能力”要比魔幻语言差,或者是会限制你的思维。相反,简约语言让你把注意力集中在哪些真正与问题相关的地方,而不是语言本身的表达方式上。因此从工程上看,简约语言更适合大规模、协作式的软件开发。
从长时间的比较来看,简约语言无疑受到更广泛的支持。

      魔幻语言如果进行有效地控制,也可以以简约的方式来使用。这其中有两种途径,其一是通过有效的限制方式使语言的应用归于质朴。比如Java和C#本身具有很多魔幻特性,是有资格称为魔幻语言的,但是整个社群的风气比较单纯,很少人喜欢炫技耍酷,语言的应用风格被有效地限制在一个“简约子集”之中。第二条路径是通过魔幻实现质朴,C++大师Andrew Koenig曾经用这个观点来为C++的复杂辩护,但是C++在这方面做得并不好。要说这方面的成功案例,Ruby on Rails倒算是一个。RoR在实现中用了很多奇技淫巧,但是在这个框架之上开发Web应用,却显得比PHP更简约直观,这就是通过魔幻达到简约的例子。

      回到开头的话题,Ruby是一个典型的魔幻语言,而Python则是简约派的代表。两个语言的支持人群在审美观念和开发风格方面差距非常大。初学Ruby和Python的人,都会感受到一种欣喜和兴奋,但是原因却不太一样。Ruby的学习者会惊喜于很多新的表达方式,比如 :attr_accessor 之类的魔幻特性,而Python学习者则会惊喜于实现具体功能的简洁性。可以说从一开始他们追求的就是不同的东西。随着学习的深入,Python开发者当然也会发现Python中的不少深入的特性,不过却并不倾向于滥用它们。长次以往,Python人群对任何语言的魔幻面都会产生一种厌恶感。我认识的一个Django开发者,就明确表示,就算RoR比Django开发效率高一点,也绝不使用Ruby,因为Ruby这个语言充满了“不必要的小聪明”。

       从性能上来说,Python的性能获得大幅度提升的机会不太大,但我并不相信YARV能够真的让Ruby在速度上享有对Python的明显优势,两者的运行时效率最终应当在同一个数量级上,因此,语言的选择主要还是取决于风格和审美倾向。据此,我判断Python的开发者不会大规模转向Ruby,Ruby的发展也不会对Python构成实质的冲击。两种语言都将成为最主流的应用开发语言。


评论

#  Semigod 发表于2008-01-07 12:44:59  IP: 137.117.2.*
同意一把。我以前也是VC的忠实Fans,用了近十年VC后,让有机会我接触了python, 就是这一接触,让我几乎不再碰VC了。Python是那么的简单明了,实现业务通常比想象得来得似乎更简单(至少比起用VC做的话要简单N倍)。因为,我已经完全被这种简单明了所折服,写代码时,也与以前用C++不一样了,不再想尽办法使用各种技巧来提高那一点让人感觉不到的效率,而是尽量保持代码的简洁与可移植性。至于速度,这个现在实在不是什么问题, 如果你真的需要速度,你一定会把那部分用C++来实现,而不是很在意速度的地方,就算它慢一些你也可能完全感觉不到。

#  NaiNaiGeXiong 发表于2008-01-07 14:20:48  IP: 222.84.65.*

分析得不错,我需要的是解决问题而不是为语言、语法细节而花太多时间。现在的C++推荐用库编程,一个1000行的C++源文件写下来差不多一半就是引用库的东西,充满了'::'、'<>'、'_'和'&'符号,代码显得很乱阅性很差,以前我也是被C++的魔法所吸引,现在却转向了简约一派,从人性上思考,我认为Python无疑拥有极高的美学设计和极强的生命力。

#  ttkk1024 发表于2008-01-07 15:25:03  IP: 218.26.96.*

就个人而言追求奇技淫巧无可厚非
就团队而言追求奇技淫巧大错特错

#  dikatour 发表于2008-01-07 16:16:39  IP: 121.0.31.*

"而Python学习者则会惊喜于实现具体功能的简洁性",跟1楼,2楼一样,先入C++魔门,后面接触了python,就被python的简洁征服了(也许内置都很多库使用起来很方便也有关系),虽然还是刚接触python,但是很喜欢python这门语言。

ruby也稍微学习过一点点,语法上有一些地方有些perl都影子..python学好了以后再继续学习吧.

#  fenglian521 发表于2008-01-07 17:05:40  IP: 211.140.254.*

这篇文章写得不错,观点清晰,内容明确,语言朴实,在csdn上看过好多文章,正经的评论性文章没有几个,这算是一个。

啊~~,原来是孟大人的,罪过罪过

#  fankai 发表于2008-01-07 19:55:49  IP: 222.67.46.*

本文有两点值得商榷之处:

1、ruby 1.9在语法方面有一个可能对将来影响深远的东西:Fiber编程,相关介绍可以看看这里:

http://www.infoq.com/cn/news/2007/09/ruby-1-9-fibers

简而言之就是纯内核线程和纯用户线程以外的第三条实现并发编程的方式。

2、ruby的魔幻语法和C++相比,最大区别在于:

C++的魔幻语法会导致代码的可读性变差,而Ruby的魔幻语法会导致代码的可读性大大提高。

不论是matz本人,还是整个Ruby社区,Rails社区诸多开源项目的作者,抑或整个Ruby和Rails开发者社区,在一个编程哲学问题上是高度统一的,这就是:

强调程序员的快乐编程,追求人性化编程,在代码的可读性上面有偏执的追求,拒绝难以阅读的代码和难用的API。

所以你看无论是Rails,rake,rspec,甚至移植自lucene的ferret,都鲜明的体现出来这种特点,就是API简单好用,让你写的代码像英文文章,自然流畅。

这也是为什么Ruby应用于DSL领域这么热的根本原因。

另外对于ruby程序员来说,这种追求编程人性化的哲学理念会潜移默化影响程序员,让他不知不觉把代码的可读性越写越好。

#  lyanry 发表于2008-01-08 09:27:16  IP: 202.110.209.*

对前面 fankai 的第 2 个观点,我不赞同。

Ruby的魔幻语法会导致代码的可读性大大提高,但是这可读性是体现在API层面的。孟言的文章里说的很直白,这是通过魔幻达到质朴。这种途径,辛苦的是写API的Ruby程序员,而不是使用API的Ruby程序员。


#  linkerlin 发表于2008-01-08 09:37:10  IP: 61.172.241.*

@fankai Lua的协程就是你所说的Fiber.
相比较Lua,Python, Ruby最大的优势是社区和活跃.
Lua也有一个Web框架 Kepler 可惜没有什么人气.
Ruby照着目前的趋势发展下去有特性崩塌的危险!

#   ThinkX 发表于2008-01-08 09:40:54  IP: 210.82.111.*

一种没有魔幻功能的语言也许在创造库的时候表达能力不足或者是使用库的人会比较繁琐,但也正是因为有这些魔幻功能的存在才有人对这些魔幻功能着迷。也许一个很好的界限是,使用魔幻功能创造容易使用的库,而只是使用简单的特性去调用这些库用在项目中。

#  elviscai 发表于2008-01-08 16:30:10  IP: 218.97.244.*

偶不是开发人员,但偶觉得魔幻语言是一个趋势——会越来越魔幻。

直到有一天,“嘎巴儿”一下,魔幻语言与简约语言完全断裂成两个部分,魔幻做功能,简约做架构……

#  trackant 发表于2008-01-08 17:29:04  IP: 137.189.89.*

赞同,感觉ruby或python的选择更多不是从功能角度出发的,两者都是足够强大的。美学或者说风格方面的喜好起了很大的作用

#  zhengyun_ustc 发表于2008-01-08 17:42:25  IP: 61.51.123.*

1:智力比赛嘛。所以Ruby1.9提高了性能,Python也会迎头赶上。
2:玩聚网

的前后台基本上都是Python,所以,魔幻不魔幻确实对我们不重要,重要的是性能(多线程下性能再好一些)和简约(代码和架构都能被后来者看懂)。

#  chengg0769 发表于2008-01-08 19:09:57  IP: 121.13.54.*

孟岩好。
我的看法是:技术本身就是多种需求和多种求解过程的。以前强调效率,精简是因为计算机内存和速度,还有计算成本问题。但386年代basic的解释执行就是一个例子。现在的中间代码编译又为平台移植铺平了道路。所以我想说,这个世界本身就需要这些有差异化的技术,编程语言也不例外。至于用VC,C++来跟动态语言相比就没有任何可比性。D语言也想作多种语言的一统,而且还有很多的想法,思路正在萌芽。语言永远都有提升的空间,而派生和新生就是最常见的方式。
不过很遗憾,我等有生之年能否看到中国自己的语言大师?是个问题。

你可能感兴趣的:(Python,ruby,语言,python,编程,django,rails)