随着计算机硬件的快速发展,10年前因为速度问题而被诟病的Java现在成了计算机流言语言中的老大,但是它却仍被认为复杂笨重,近几年来动态语言却有后来赶上的趋势,掌握一门动态语言成了程序员需要考虑的事宜。 近期接触了几种流行的动态语言Python, Ruby, Groovy,它们相比静态语言Java/C++来说,大为简单,灵活,省时,那么选择何种语言? 浅尝三种语言后,写下此文,作为在JavaEye留的第一爪。
从TIOBE网站的语言排名可以看出,比较2000与2008年,Java 从30%跌到20%左右, C++从18%跌到11%, 静态语言从72%占有率降到了60%; 动态语言由27%升到40%,其中Python从1%到5%, Ruby由 < 1%到2.5%。PHP由5%长到11%。(以上数据为大约估算)
从企业界角度看,语言的流行性与以个几点有关:
1) 成熟的库(library)
Python的库非常多, Groovy可以调用强大的Java所有的库,ruby差些,但是正在赶上。
2) 流行框架
如果某种语言有个流行框架,那就能吸引过来很多使用者。Ruby on Rail是杀手级框架。Python 框架很多,但是目前尚没有特别突出的。Groovy还年轻,只有个Grails,但是可以利用JAVA已有的框架如SPRING HIBERNATE。
3) 流行程序
如果某个流行程序使用了某语言,那么这种语言不可必免会被多人使用。比如iPhone的出现使一种可能没多少人听说过的 Cocoa热了起来,因为人们用它编写在iPhone上运行的手机程序。这三种动态语言中Python在图象处理,或科学计算界已占有一席之地。Ruby可能落后一些,Groovy几乎没有。JavaEye
4) 企业界的倾向
市场通常会倾向于简单好用省时省力,易于使用维护,稳定,能承受大负荷(scalable)的语言,这也是JAVA的流行性当时超过C++的原因,这三个语言比静态语言都简单,其中Python由于其语法和句法简单,所以可能是最好维护,而且能够承受高负荷(Youtube每天数亿点击为证);RUBY 有些魔幻语法也能使程序写得很简单,总体维护上比Python感觉差了一点,让其他人看程序可能不是非常直接易懂,性能上目前也差些。Groovy 模仿了大量RUBY,也借鉴了少量Python文法,由于在JVM上运行,性能上应该是不错的。
5)对硬件的利用
对着双核的出现,可以预料双核,四核,16, 32..核CPU都可能在未来出现。如果未来语言只能利用多核中的一核,那未免太浪费了,也可能因此而落于人后。从这一点上看GROOVY有天然优势,能借助JVM完成这一任务;PYTHON 正在积极研制新的方法实现,也可以在JVM或WINDOW环境下运行JPython 与IronPython;Ruby落后些,但是也有JRuby和IronRuby,起步晚些。
从语言的各自优缺点来看:
Python:
1)三者中最成熟,通用,工具库多,资源丰富,文档等支持强大,几乎能做任何事:网络,图形界面,桌面程序,服务器,图形处理,算法等。
2)相比之下性能好,运行速度快,负载力强。
3)简单易学,文法简洁,其使用空白缩进代替花括号或END使代码看起来很干净,易读易懂因此易维护。
4)基于尽量使用一种方法完成一件事,越简单越好的哲学。这种哲学适合大型项目,因为让其他人看着易懂,好维护,不至于过多灵活繁杂的语法使自己玩的爽了,别人看得傻了。这与RUBY的用许多种方法完成一件事的哲学正相反。GROOVY感觉在两者之间。
5)得到业界承认
a) 大多数Linux,或者流行Linux中绝大多数都默认安装Python,这意味着不管你是哪国人在哪里,想用哪台Linux机子,想用Python就可以用,省时顺手;要用Ruby Groovy还得安装。
b) 有巨头支持。几个例子,Google 互联网老大,公司内部中Python是官方的第三语言,有内部员工说他们是能用Python就用Python, 实在不行才用C++; Youtube 大部分是用 Python写的;著名Linux发行版Ubuntu的发行公司的官方语言,也是其创始人的首选语言;其他还有Redhat, NASA, 动画公司Pixar等;桌面程序如流行程序BT客户端等;
缺点:
1)不是完全的面向对象,语法中混杂有函数调用方法。
2)使用空白缩进代替截止符在网页制作有点问题,这时还得需要新语言或语法,代码Copy Paste等时,使用Tab时也可能有点麻烦,
3)好象目前还不支持多核CPU
4)尽管创始人说Python这一名字取自一个喜剧团体,但是其名字或图标可能会使一些人反感,有些Python语言网站的的Python图片着实不令人喜欢。不喜欢这种动物的人可以考虑选其它的,比如Python的弟弟Ruby。
简要:Python适合大中小型企业各类开发,几乎无所不在,无所不能,想跟紧大型企业或者需要成熟的库,Python可能较合适。
----------------------
Ruby
1) 语法是更纯正的面向对象语言,许多功能让从Java/C++世界过来的人耳目一新;因为它借鉴了包括Python, Smalltalk, Lisp等在内的一些其它优秀语言的优点。一切都是Object,如避免Python的类似len("name"),而采用 "name”.length, 还有提供类内部参数数据的保护等;提供的更多语法,使程序更易懂简练, 比如它有Block closure,它用' < ' 来表示类继承,用?来表示返回是否的函数。
2) 灵活的魔幻语法,如模块的混入,块,开放式的类定义,加上已有的动态性使其变得极其灵活;各种繁多的著名设计模式在它手中好象都失去了意义,Java做梦都想达到的灵活性在RUBY手中轻而易举,Spring AOP相比也失去了光泽,设计大师们的法则与多年经验也好象都不再适用。
3) 相比Python提供了End作为程序块的截止符,这是Rubist们自认为的一大进步,也是与Python的一个重要区别。
4) 杀手级框架,Ruby on Rails,及还有些其它杀手级框架正在一一跃出。
5)有跑在JVM的JRuby和微软的IronRuby
6)名字与图标很好 Ruby 红宝石是瞄准Perl (珍珠)的继承者而来的,名字与图标都优雅端庄赏心阅目。
缺点
1)灵活可能有负面影响
开放的类在大型程序中可能会造成混乱,不易懂不易维护,类可能会不知道是谁在哪个角落改的(不过有了IDE的支持这种情况可能可以解决);语法方法的灵活可能使代码不规范,一个人喜欢写魔幻代码的有可能使后来人看不懂,其用多种方法实现一个目的的哲学好象是在鼓励代码的多样灵活性,这在大型项目中会加大维护难度。这可能也是为何目前尚未有大型企业界使用Ruby的原因。
2)性能相对不强 原有的Ruby速度慢,稳定性相对差些,据说是原有的GC写的不强。不过随着新的更好的RUBY编译器的出现与硬件的快速发展与价格降低,此性能问题应该能够在不远的未来解决。据Java Eye的Robbin讲,即使有此性能问题,扩充硬件或设置系统也多可解决问题。
3)对线程支持不强,Ruby 2.0据说要加强
4)好象尚未支持多核,不过未来可能解决,道理同2)
5)对End的意见 不少人认为Ruby的End过多,显得不好看。代码在写很多层时尤其如此,这样使查找相应的起始位置增加难度。有人建议其创始人Mats提供End的替代字符,他有此意,但是好象没有他看的上的,如果谁不喜欢End的,找个自认为不错的字符发给总部吧,要趁早,否则以后越来越难改。
简要:Ruby是令人兴奋的,学习Ruby可以加深程序员对面向对象,及计算机语言的理解,从这一点上说,Python更只象个工具,Ruby灵活却又很有深度,值得一学。Ruby的主要缺点是其性能性,但是看Java的历史可知,当时Java的速度被评为比C++差得太远,可是几年后性能随着硬件的发展而大大加强,所以Ruby的性能应该在未来不会是大问题。
看过Python 和ruby后,本应就此罢手了,但是对这两语言感觉仍有遗憾之处,于是看到了以前看Ruby时瞧不上的Groovy, 却发现这是个不可小看的语言,不仅如此,而且Groovy可能会成为未来耀眼的新星。
------------------------------------
Groovy
1)初看Groovy, 它好象是Ruby 与java的结合体,也添加了少量Python的东西。Ruby中引以为傲的一切是对象,Groovy也可以作到,如 3.times { ...}, 块传递,动态改变类,增加类函数等。它借鉴了大量Ruby 的语法,但是保留了C/C++/Java程序员熟悉的花括号,没有用Ruby无所不在的"End”。而且对Ruby的一些生僻的字符进行了改进,使得更加友好易懂,如块中的 | x | 换成了 → x
2)被Thoughtwork(就是写重构那本书的Martin Fowler所在公司)经理称为 “Java 2.0” ,可以“无缝”结合Java 代码,你可以在Groovy文件中写Java代码,用Java库。Groovy象是个轻量级的动态版Java,而且加大扩展了许多易用的句法,以前曾想过的一些"Java 要是这么写多好啊" 竟然在Groovy中实现了: 如去掉了多余的分号,三引号使得多行的文本变量整洁好看,砍掉了没多大用的getter setter等。
3 )可以使用所有Java的库,因为Groovy"就是Java”。相比Ruby爱好者在一个一个辛苦编写各种库的时候,Groovy已经是站在Java 的车头上向前冲了。
4)支持多核CPU,未来的硬件是多核CPU的世界,谁不支持多核可能不是淘汰就落后。由于跑在JVM上,Groovy再次领先于Python和Ruby;有人说,也有Jython 和Jruby 啊,但是从与Java的结合性及调用Java代码或库来说,Groovy无疑是极佳的结合,Jruby或Jython相比下显得并不自然。
5)性能不错
Groovy不再是一个玩具或试用品,一个已经使用Groovy的公司其正式发布的产品中有超过十万行Groovy代码。
其性能相比Python我不清楚,但有测试说Grail性能不亚于,甚至更强于Ruby on Rails.由于Groovy跑在JVM上,性能应该不会太差。
6)业界的支持
Groovy 2003年左右刚出现,还是新生儿,还谈不上大型业界的大量支持,就连Sun公司也对Ruby青眼有加,使得Groovy爱好者大抱不平,抱怨Sun偏向外人,不向自己这个Java 亲生子。目前可能只有Oracle与Thoughwork支持。 那么目前业界还未大力支持,谁可能会支持Groovy呢?私下认同这种说法,就是全世界Java与C++的几百万程序员中可能会有不少支持的。这是由于Groovy与Java,或C系列语言句法的近似及与其与Java“无缝”结合的特点相关的。流行语言的发展目前为止是在相似的基础上发展的,想想C → C++ → Java 他们的句法是不是相似?从这一点上看,Groovy最与Java类似; 试想,如果有两种语言有相近的功能,一种有你熟悉的句法,另一种却较为生僻,哪种语言更易上手?从企业界的角度来说,Java的业界(Sun, IBM Oracle等)在过去十年中已经投资了大量金钱与时间在Java上,如果一种语言能与目前的Java项目自然结合使用调用,另一种语言有全新的语法要员工学习,企业界的项目经理会选择哪个? 即使Ruby On Rails再强大,如果使用Ruby Python意味着十年来的人力,资源,框架(Spring Hibernate)库等投资大部分作废,在Grail能带来Rails 70%的编码效率,120%的性能,并且利用已有的框架与员工的情况下,企业会选择哪个?所以个人认为Java程序员或企业界可能会以后认识到Groovy能带来的益处。
7)名字起的也不错
名字是“很棒“, ”极佳“, 有着很积极正面的含意
缺点:
1)它虽然借鉴了大量Ruby的语法,但是有少部分没有完全实现,如开放的类,它只是在一定范围内对类开放修改。
2)Groovy就是Java, 目前只有JVM的实现,只能跑在有JVM的机子上。做桌面程序有着Java相同的弱点,不适合做小巧的Window程序
Groovy是个有前途的语言,照现在的势头发展,仅管它现在排名在39名,未来几年内闯入20名,再过些年闯入前十名或更前都不是不可能的事。
三种语言各有特点,选择哪种语言与您的工作环境,项目特点或个人爱好有着关系。随着动态语言的向前发展,他们的简单灵活与强大能帮助我们节省时间与资源,学一种有潜力的语言能让程序员们站得更稳,立于领先之地,如果有天动态语言发达了,设计模式们很多都用不上了,这不是多年的经验淘汰了吗?程序员们不要忽视了他们了啊。
以上内容为参看一些文章与自己初步使用的感受的一些感想,与网友们分享,有错误之处,请指正。
转自:
http://www.javaeye.com/topic/259257