设为首页 收藏本站
查看: 548|回复: 0

[经验分享] Python, Ruby 与 Groovy,谁与争锋?

[复制链接]

尚未签到

发表于 2017-5-1 11:29:09 | 显示全部楼层 |阅读模式
Python, Ruby 与 Groovy,谁与争锋?  --SleekEngine  
网络转载:http://sleekengine.iteye.com/blog/259257 

随着计算机硬件的快速发展,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几乎没有。 

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。 

6)语法不一定起决定作用 
语言中有好用的语法糖可以给程序员带来方便,但是并不一定对语言未来的流行起决定作用,因为好用的语法可能会被其它语言学去。想想C#学Java知道了。ruby借鉴了许多语言的优点,Groovy 借鉴了ruby与python,而新版的python又借鉴了ruby的block用法(用来自动释放资源)。 

从语言的各自优缺点来看: 

Python: 

1)三者中最成熟,通用,工具库多,资源丰富,文档等支持强大,几乎能做任何事:网络,图形界面,桌面程序,服务器,图形处理,算法等。 

2)相比之下性能好,运行速度快,负载力强。 

3)简单易学,文法简洁,其使用空白缩进代替花括号或END使代码看起来很干净,易读易懂因此易维护。 

4)基于尽量使用一种方法完成一件事,越简单越好的哲学。这种哲学适合大型项目,因为让其他人看着易懂,好维护,不至于过多灵活繁杂的语法使自己玩的爽了,别人看得傻了。这与RUBY的用许多种方法完成一件事的哲学正相反。GROOVY感觉在两者之间。 

5)得到业界承认 

    a) Mac机,还有大多数Linux,或者流行Linux中绝大多数都默认安装Python,这意味着不管你是哪国人在哪里,想用哪台Linux机子,想用Python就可以用,省时顺手;要用Ruby Groovy还得另外安装。 

    b) 有巨头支持。几个例子,Google 互联网老大,公司内部中Python是官方的第三语言,有内部员工说他们是能用Python就用Python, 实在不行才用C++;   Youtube 大部分是用 Python写的;著名Linux发行版Ubuntu的发行公司的官方语言,也是其创始人的首选语言; 

     c)其他还有Redhat Linux, 美国宇航局,金融系统如纽约股票交易所,摩根大通,电影动画制作如Disney,Pixar和DreamWorks,星球大战的特效公司ILM等一系列著名大型机构中使用。桌面程序如流行程序BT客户端等。 

6)语法灵活亦相对严谨 
除了动态性外,类也是开放的(但是底层内置的不是),可以动态增加删改类及其属性函数等。 

缺点: 
1)不是完全的面向对象,语法中混杂有函数调用方法。 
有些语法一些人不易接受:比如代码中的出现不少类似"__str__"的字眼,类函数中的变量表中self等。 
2)使用空白缩进代替截止符在网页制作有点问题,这时还得需要新语言或语法,代码Copy Paste等时,使用Tab时也可能有点麻烦,这一点有些人很难接受,加上1)中的情况成为ruby创始人另立门户的主要原因。 
3)好象目前还不支持多核CPU 
4)尽管创始人说Python这一名字取自一个喜剧团体,但是其名字或图标可能会使一些人反感,有些Python语言网站的的Python图片着实不令人喜欢。不喜欢这种动物的人可以考虑选其它的,比如Python的弟弟Ruby。 

简要:Python适合大中小型企业各类开发,几乎无所不在,无所不能,想跟紧大型企业或者需要成熟的库,Python可能较合适。

---------------------- 

Ruby 

1) 语法是更纯正的面向对象语言,许多功能让从Java/C++世界过来的人耳目一新;因为它借鉴了包括Python, Smalltalk, Lisp等在内的一些其它优秀语言的优点。一切都是Object,如避免Python的类似len("name"),而采用 "name”.length, 还有提供类内部参数数据的保护等;提供的更多语法, 比如它有python没有的块与闭包;它有更易懂简练句法,如用' < ' 来表示类继承,用?来表示返回是否的函数。 

2) 灵活的魔幻语法,如模块的混入,块,开放式的类定义,加上已有的动态性使其变得极其灵活;各种繁多的著名设计模式在它手中好象都失去了意义,Java做梦都想达到的灵活性在RUBY手中轻而易举,Spring AOP相比也失去了光泽,设计大师们的法则与多年经验也好象都不再适用。 

3) 相比Python提供了End作为程序块的截止符,这是Rubyist们自认为的一大进步,也是与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的主要缺点是其GC及性能,近年来已经涌现一系列新的解析器号称能解决GC问题;有关性能看看Java的历史可知,当时Java的速度被评为比C++差得太远,可是几年后性能随着硬件的发展而大大加强,所以Ruby的性能应该在未来不会是大问题。 

ruby目前最主要的应用也是其杀手锏Rails框架具备快速开发网站的特点,一个或几个人就能快速开发一个网站,能节省很多人力时间,较适合创业型小公司,负荷量不是非常大的中型公司,或大型机构的内部网站。 

对Python的空格缩进,非面向对象语法,self, "__xxx__", 跛脚的lambda难以忍受的可以尝试一下ruby 

------------------------------------ 
Groovy 

1)初看起来Groovy好象是Ruby on Java,它几乎继承了ruby所有的优秀语法,也添加了少量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与Thoughtwork支持。 那么目前业界还未大力支持,谁可能会支持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)库等投资大部分作废,在Grais能带来Rails 70%的编码效率,120%的性能,并且利用已有的框架与员工的情况下,企业会选择哪个?所以个人认为Java程序员或企业界可能会以后认识到Groovy能带来的益处。 

7)名字起的也不错 
名字是“很棒“, ”极佳“, 有着很积极正面的含意 

缺点: 

1)Groovy就是Java, 目前只有JVM的实现,只能跑在有JVM的机子上。做桌面程序有着Java相同的弱点,不适合做小巧的Window GUI程序。 
2) Groovy不适合作手机或嵌入程序。 


综述:Groovy较适用于需要调用已有的Java库,或者项目中想利用已有Java人力与资源的情况。如果以使用Java为主的公司不十分愿意换一个新语言,Groovy和Grails是ruby和rails的一种可考虑的替代选择。 

对个人来说,喜欢ruby的,但对End不甚习惯仍偏向Java的花括号的,可以尝试下groovy. 

---------------------------------------------------- 

三种语言各有特点,选择哪种语言与您的工作环境,项目特点或个人爱好有着关系。随着动态语言的向前发展,他们的简单灵活与强大能帮助我们节省时间与资源,学一种有潜力的语言能让程序员们站得更稳,立于领先之地,如果有天动态语言发达了,设计模式们很多都用不上了,这不是多年的经验淘汰了吗?程序员们不要忽视了他们了啊。 

以上内容为参看一些文章与自己初步使用的感受的一些感想,与网友们分享,有错误之处,还请指正。 

 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-371573-1-1.html 上篇帖子: python学习:从新手到专家阅读笔记 下篇帖子: 关于python 逻辑运算的一个思考
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表