Python, Ruby 与 Groovy,谁与争锋?
SleekEngine
随着计算机硬件的快速发展,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 脚本的正确使用姿势 Jenkins Pipeline 是一个强大的自动化工具,可以帮助开发者自动化构建、测试和部署流程。在设计 Pipeline 脚本的过程中,经常会遇到调用...
赠送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...
标题和描述均提到了对五种编程语言——Scala、Erlang、Groovy、Python以及它们各自的原理、比较和分析。这些语言各自拥有独特的特性和应用场景,在编程领域扮演着不同的角色。下面,我们将深入探讨每种语言的关键...
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脚本更新时,无需重新编译或重启Java应用,只需更新数据库中的脚本,Java程序就能即时感知并执行新的逻辑。 - **灵活的业务逻辑**:业务规则可以根据需求快速调整,无需改变Java源码,降低...
IDEA自带的插件Generate POJOs.groovy 比较简陋,不能生成完整的dao/mapper,切生成的POJO没有注解。没有统一格式化,所以在此基础上进行了扩展能够简单的生成pojo/dao/mapper. 使用时选择目录后会在改目录下生成...
Groovy结合了Python、Ruby等脚本语言的简洁性和Java的类型安全,使得开发效率大大提高。杂志中可能涵盖了Groovy的基础语法、类和对象、闭包、元编程以及与其他Java库和框架的交互等内容,帮助开发者快速入门并熟练...
(在这点上,Ruby 与 Groovy 不同,因为它的语法与 Java 语法差异很大。) 许多 Java 开发人员非常喜欢 Groovy 代码和 Java 代码的相似性。从学习的角度看,如果知道如何编写 Java 代码,那就已经了解 Groovy 了。...
1. **与Java的高度兼容性**:Groovy可以无缝地与Java代码集成,可以在Groovy脚本中直接调用Java类库。 2. **动态类型**:Groovy采用了动态类型系统,变量无需显式声明类型。 3. **闭包支持**:闭包是Groovy的一个...
groovy-all-2.4.15.jar文件,MAC使用时需存放在/Users/用户名/.gradle/caches/jars-3/某一缓存目录下,找不到就都看一下,我遇到的问题是缓存目录中下载的是2.4.17版本,应该跟gradle版本升级有关
Groovy结合了Java的静态类型系统和Python、Ruby等动态语言的灵活性,使得开发者可以更加高效地编写代码。本篇文章将深入探讨Groovy语言的关键特性和应用场景。 一、Groovy简介 Groovy是2003年由James Strachan创建...
Groovy结合了Python、Ruby和Perl等脚本语言的简洁性和灵活性,并且完全兼容Java,可以无缝地与Java代码集成。在"groovy-2.3.6-installer"这个版本中,我们聚焦于Windows操作系统上的安装过程。 Groovy 2.3.6是该...
Apache Groovy SDK 4.0.1 是一个重要的软件开发工具包,专为使用Groovy编程语言进行开发的程序员设计。Groovy是一种基于Java平台的动态、灵活的编程语言,它扩展了Java语言的功能,提供了简洁的语法和强大的元编程...
在IT行业中,掌握多种编程语言是非常重要的,尤其是像Java、Groovy和Python这样的流行语言。这些语言各有特点,广泛应用于不同的领域。以下是对标题、描述和标签所提及的知识点的详细解析: 标题“java_groovy_...
### 服务器元编程:Ruby、Python、Groovy、Haskell 和 Erlang #### 知识点一:元编程概述 **元编程**是一种程序设计技术,它允许程序在运行时检查自身结构,并能够修改自己的行为或生成新的代码。元编程在多种编程...
最后,Ruby是一种动态的面向对象编程语言,其最著名的是Ruby on Rails(Rails)框架,该框架极大地简化了Web应用的开发过程,被誉为快速开发的典范。Ruby语言的语法灵活,开发者可以有多种方式编写同一功能,这虽然...
Groovy结合了Python、Ruby和Smalltalk等语言的特性,并与Java无缝集成,使得开发者可以在Java应用中充分利用Groovy的优势。 在开始Groovy的学习之前,首先要了解如何设置Groovy开发环境。这通常包括安装Java ...
Groovy结合了Python、Ruby和Smalltalk等语言的特性,同时保留了与Java的无缝集成能力,使得它在脚本编写、Web开发、自动化测试等领域有着广泛的应用。 标题“groovy-all”暗示这是一个包含Groovy完整实现的库,通常...
org.gradle.api.resources.ResourceException: Could not get resource 'https://jcenter.bintray.com/org/codehaus/groovy/groovy-all/2.4.15/groovy-all-2.4.15.jar'. 下载groovy-all-2.4.15.jar后,放入对应的 ...