编程界主流脚本编程语⾔的⽐较和选择
过去这⼀年的时间⾥,我买了不少书,查了很多资料,可以算是认真的学习了⼏种主流的脚本语⾔,因为我⼀直想搞⼀个好⽤的⾃动化⼯具,来⽅便我们的系统维护。虽然这个愿望还没有达成,但是在这个过程中,还是学到了很多东西。今天下午,跟同事们聊天时,说到了脚本语⾔,这是⽐较难得的,也正好借这个契机,把我的⼀些看法说⼀说,有不妥和错误的地⽅,请⼤家多指正。
为什么选择脚本语⾔
为什么选择脚本语⾔,可能每个⼈⾯对的实际情况都不⼀样。语⾔本⾝没有好坏之分,只有合适或者不合适。因此,我所谓的选择主要是根据应⽤需要来选择,并⾮根据语⾔的好坏或者使⽤者的习惯。就我⾃⼰的情况来说,很长⼀段时间⾥,如果需要程序来辅助完成⼯作时,我都会选择Java。
先简单说说Java,Java是企业应⽤当之⽆愧的统治者。但是,近⼏年随着⼤家对开发语⾔认识的转变,Java已经让越来越多的⼈感到不满,取⽽代之的是脚本语⾔的迅速崛起。⼀个例⼦是,Java 7在最初的功能规划时,呼声最⾼的是“闭包”,
⽽“闭包”恰恰是脚本语⾔最具特⾊的功能之⼀。在使⽤诸如Java,C之类的语⾔时,我们不得不⾯对各种复杂的数据类型、设计模式和⼤量看起来没⽤但⼜不能缺少的代码。⽽对脚本语⾔来说,这些问题都是
天⽣就不存在的。现在,开发讲究敏捷,注重效率,对于⼀个企业来说,开发⼯作⾸先要考虑的就是成本,敏捷开发正是降低成本最有效的⼿段之⼀,⽽脚本语⾔,⼜是实现敏捷开发的⼀条可⾏之路。
有⼈说Java已经out了,但我并不这么觉得,我个⼈认为Java仍然是最好的跨平台⽅案。现在我们已经不能单纯把Java看做⼀门语⾔,它已经成为⼀个事实上的平台。构建在Java平台之上的优秀的Java替代产品,也已经得到⼤家的⼴泛⽀持和认可,如groovy、scala等等。我相信,Java仍然有它的⽣命⼒,⽽它的⽣命⼒可能也要得益于脚本语⾔。
说了半天废话,还是要回到我选择脚本语⾔的话题上。我的初衷很简单,我要⼀个⾮Java平台的,C语⾔的替代品。为什么?第⼀,Java不是万能的,⽐如它做不了ICMP Ping;第⼆,C语⾔学习曲线过长,C程序的部署难度较⾼;第三,上述的脚本语⾔的所有优势。
本着以上⼏个原则,我学了⼏个流⾏的脚本语⾔,他们是:Perl、Python、Ruby,当然后来我也学习Java平台上的脚本语⾔,如Jython(Python的Java实现)、JRuby(Ruby的java实现)、Groovy。下⾯我想就这⼏个脚本语⾔,来做⼀个简单的⽐较,希望⼤家在选择脚本语⾔时,能有更多的参考。
脚本语⾔的⽐较
脚本语⾔的⽐较,可能⽐较凌乱,但我想侧重以下⼏个⽅⾯:学习曲线,语⾔本⾝的特⾊、跨平台的能⼒、国际化的能⼒,以及它在应⽤领域的份额。
Unix/Linux Shell
⾸选还是要提⼀提Unix/Linux Shell(包括awk、sed),它也是脚本语⾔,并且可能是我们⽇常使⽤最多的。我个⼈感觉,shell更适合做流程化的系统管理⼯作,⽽对于逻辑较为复杂的应⽤级产品,shell的开发和维护难度都相当⾼。带有个⼈情感的说,shell的学习难度⼤于⼤多数主流脚本语⾔,这和它的语法特点,调试、运⾏环境等等都有关系。因此,⽇常流程化的系统管理⼯作,shell仍然是⼀个不错的⼯具,除此之外,相信⼤家还有更好的选择。
Python/Jython
Python最⼤的魅⼒之⼀,就是简单易学,⼀个新⼿可以短期内(有⼈说是⼗分钟,我认为⼏天是完全可能的)就写出⾼质量并且实⽤的程序,它甚⾄被称为⾮计算机专业⼈⼠学习编程的最好选择。Python的功能强⼤,标准库的丰富程度,估计连Java也望尘莫及。Python适合做系统管理,但这并不是说它不能做⼤型应⽤程序。Python应⽤的成功案例,已经数不胜数,尤其是在科学计算领域更是独树⼀帜。Python是⼀门优秀的⾯向对象语⾔,但更多的Python程序员,喜欢Python⾯向过程的部分。我个⼈感觉,Python的OO不如Ruby,因为不够彻底,但这也正是Python⽀持者更爱它的地⽅。
可惜的是,Python在企业应⽤领域没能有更⼤的突破,近⼏年更有被后起之秀Rails(Ruby的WEB框架)抛在⾝后的意思。但这并不说明Python在企业应⽤⽅⾯不成熟(⾖瓣⽹是离我们最近的Python案python转java代码
例),如果有兴趣,⼤家可以了解Python 社区最具⼈⽓的WEB框架Django,也可以去看看简单到让⼈难以置信的WEB框架webpy。Python在短短⼏年内就成为六⼤主流开发语⾔之⼀,绝对不是盖的!
Jython是Python的Java实现,它是IBM WebSphere服务器官⽅指定的管理语⾔。我选择jython是看重了jdbc访问数据库的便捷。但可惜的是,jython对中⽂⽀持⾮常不好,可能是python本⾝的复杂度较⾼,jython团队的活跃度也⽐较低,总之Jython要⾛的路还很漫长,⾄少我认为当前版本,还不具备投⼊⽣产开发的能⼒。
Ruby/JRuby
Ruby是脚本语⾔的后起之秀,它的成功要得益于杀⼿级框架Rails,Rails社区早就喊出了⼲掉Java的⼝号,虽然这种⼝号没有什么实际意义,但Rails的确已经成为眼下最为炙⼿可热的企业应⽤框架。我个⼈花了⼏个⽉的时间学习Rails,虽然没有
实际的开发经验,但Rails敏捷开发上的突出表现,的确是当仁不让的,这也是它能迅速窜红的主要原因吧。
抛开Rails框架,还是来说Ruby。Ruby的语⾔特⾊是纯⾯向对象,语法以魔幻著称(它吸收了Perl、Python等脚本语⾔的⼤量优秀元素)。因此它的学习曲线要⾼于Python,但是学成以后可能会写出⾮
常优雅的代码。美中不⾜是Ruby还年轻,它的标准库还不够丰富,成熟的第三⽅库也相对较少,但这些情况会随着时间的推进逐渐改变。
Ruby完全可以胜任系统管理的需要,当然,如果开发WEB程序,Rails更是不⼆的选择。
JRuby是Ruby的Java实现,也是最早被Sun官⽅接收的Java平台脚本语⾔(后来还有Jython)。JRuby与Ruby的兼容性⾮常⾼,团队也⾮常活跃。如果想在Java平台上使⽤脚本语⾔,除了Java原⽣的Groovy,我推荐JRuby,这也是我的选择。
Perl
提到Perl可能很多⼈会想到CGI,我个⼈可能更多的会联想到⽂本处理,事实上,Perl设计之初的主要⽤途的确是在⽂本中提取信息。Perl像Python⼀样,是⽬前最久经考验,且成熟度最⾼的脚本语⾔之⼀,它有着⼤量的⽤户和忠实的粉丝,因此我说Perl的坏话就⽐较⼼虚⼀点:)
坦⽩的说,我不太喜欢Perl,可能像⼤多数不喜欢Perl的⼈⼀样,Perl语法让⼈不太习惯,有⼈说Perl的语法丑陋,可能有些夸张,但这能说明⼀些问题。Perl社区⾄少也应该承认⼀点:Perl是⼀门⽐较难上⼿的语⾔。这并不是说,你短期内掌握不了Perl,⽽是你短期内写不出真正像样的东西。另外,Perl不是⾯向对象语⾔,当然,很多⼈并不看重这⼀点,但这并不是什么优点。
Perl适合做系统管理,我觉得它跟shell很像。在其他应⽤领域,尤其是internet⽅⾯,
Perl都有不俗的表现。Perl⾮常优秀,还是那句话,语⾔没有好坏,只有合适不合适。
Groovy
如果你正在为“热爱Java平台”和“厌恶Java语法”的事情纠结,Groovy可能就是最好的选择。Groovy可以说是Java平台的原⽣脚本语⾔,与Java完美结合,它本⾝不提供标准库,完全使⽤Java的API库。在Rails成功之后,Groovy社区也出现了Grails 框架,⽤来抗衡Rails。Groovy本⾝也吸收了Ruby⼤量的经典语法,热爱Java的⼈,可以选择Groovy。
脚本语⾔的缺点和未来
⽬前⼤家公认的,脚本语⾔的主要缺陷还是性能问题,当然这可能取决于很多因素,问题是有多少情况下,性能问题才是致命的。从EJB的崩溃,Spring的兴起到Java遭受质疑,Rails取得成功,都说明,⼤家在⾯对不同规模的应⽤时,已经⾮常理智了。我相信能够真正服务于我们的技术,才能有好的前景,脚本语⾔的明天是⽆限光明的!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。