`
like.eagle
  • 浏览: 248612 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Python, Ruby 与 Groovy,谁与争锋?

 
阅读更多

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. 

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

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

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

 

分享到:
评论

相关推荐

    干货:Jenkins Pipeline调用shell、python、java、groovy脚本的正确使用姿势.doc

    干货:Jenkins Pipeline调用shell、python、java、groovy脚本的正确使用姿势.doc

    学编程选什么语言好?是PHP、Python还是Ruby?

    主要介绍了学编程选什么语言好?是PHP、Python还是Ruby?需要的朋友可以参考下

    精通 Groovy--下一代开发语言

    什么是 Groovy? Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,...

    scala erlang groovy python 原理 比较 分析

    scala erlang groovy python 原理 比较 分析

    groovy入门

    (在这点上,Ruby 与 Groovy 不同,因为它的语法与 Java 语法差异很大。) 许多 Java 开发人员非常喜欢 Groovy 代码和 Java 代码的相似性。从学习的角度看,如果知道如何编写 Java 代码,那就已经了解 Groovy 了。...

    Groovy v2.4.13官方版

    Groovy 是用于Java虚拟机的一种敏捷的动态语言,它结合了Python、Ruby和Smalltalk的许多强大的特性。它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多...

    Server Metaprogramming Ruby-Pyton-Groovy-Haskell-Erlang.pdf

    Server Metaprogramming Ruby-Pyton-Groovy-Haskell-Erlang.pdf

    java_groovy_python集合

    姿势需要解锁,不学习怎么会? 老司机开个车,java和groovy都是比较实用的。python用的但是也是可以的

    groovy-1.5.6-installer

    The Groovy web site (http://groovy.codehaus.org) gives one ...features that are inspired by languages like Python, Ruby and Smalltalk, making them available to Java developers using a Java-like syntax.”

    精通Groovy

    什么是 Groovy? Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,...

    groovy2.5.6安装文件

    Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以...

    GROOVY 入门手册扫描版

    Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以...

    groovy-1.8.3.jar

    groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以...

    groovy-官网翻译.docx

     建立在Java的基础上,同时,吸收了其他语言的优点,比如:Python、 Ruby 和 Smalltalk  Java开发人员,上手快,几乎没有学习曲线  提供静态类型检查和编译,提高性能、健壮性  支持函数编程、闭包等语法,...

    groovy-3.0.8.msi

    Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy也可以...

    Groovy入门教程

    Groovy入门教程 Groovy是一种基于JVM的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以...

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...

    groovy-3.0.9-API文档-中文版.zip

    赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...

    groovy入门经典,groovyeclipse 插件

    groovy入门经典,groovyeclipse 插件

    [Groovy] Making Java Groovy 英文版

    Making Java Groovy is a practical handbook for developers who want to blend Groovy into their day to day work with Java It starts by introducing the key differences between Java and Groovy and how you...

Global site tag (gtag.js) - Google Analytics