这一年来,买了很多书,查了很多资料。也算是认真学习了几种主流的脚本语言,因为一直想开发一个好用的自动化工具,方便我们的系统维护。虽然这个愿望没有实现,但是在这个过程中,我还是学到了很多东西。今天下午和同事聊天的时候,提到了脚本语言,这是比较少见的,正好借此机会分享一下自己的一些看法。如有不足和错误,敬请指正。为什么选择脚本语言?为什么选择脚本语言?可能每个人的实际情况都不一样。语言本身没有好坏之分,只有合适不合适。所以,我所谓的选择,主要是根据应用的需要,而不是根据语言的好坏,或者用户的习惯。就我自己的情况来说,一直以来,如果我需要一个程序来辅助我的工作,我都会选择Java。先简单说说Java,Java是当之无愧的企业应用霸主。然而近些年来,随着大家对开发语言的认识发生了变化,Java已经让越来越多的人不满意,取而代之的是迅速崛起的脚本语言。一个例子就是,在Java7最初的功能规划中,“闭包”是最流行的,而“闭包”恰恰是脚本语言最有特色的功能之一。在使用Java、C等语言的时候,我们不得不面对各种复杂的数据类型、设计模式,以及一大堆看似无用却不可或缺的代码。对于脚本语言来说,这些问题本来就不存在。如今,开发强调敏捷性和效率。对于一个企业来说,在开发工作中首先要考虑的就是成本。敏捷开发是降低成本最有效的手段之一,而脚本语言是实现敏捷开发的可行途径。路。有人说Java已经过时了,但我不这么认为。我个人认为Java仍然是最好的跨平台解决方案。现在我们不能再简单地把Java当成一种语言,它已经成为了事实上的平台。基于Java平台构建的优秀Java替代产品也得到了大家的广泛支持和认可,比如groovy、scala等。我相信Java还是有它的生命力的,它的生命力或许也得益于脚本语言。废话说了半天,还是要回到我选择脚本语言的话题上来。我的初衷很简单,就是想找一个非Java平台,C语言的替代品。为什么?第一,Java不是万能的,比如不能做ICMPPing;二是C语言的学习曲线太长,C程序部署困难;第三,上述脚本语言的所有优点。基于以上原理,我学习了几种流行的脚本语言,它们是:Perl、Python、Ruby,当然后来我也学习了Java平台的脚本语言,比如Jython(Python的Java实现)、JRuby(RubyJava实现),Groovy。接下来,我想对这些脚本语言做一个简单的比较。希望大家在选择脚本语言的时候能有更多的参考。#p#脚本语言的比较脚本语言的比较可能比较乱,但我想重点关注以下几个方面:学习曲线、语言特性、跨平台能力、国际化能力,以及它在应用中的份额场地。Unix/LinuxShell首先要提到Unix/LinuxShell(包括awk、sed),它也是一种脚本语言,可能是我们日常生活中使用最多的。个人感觉shell更适合基于进程的系统管理,而对于逻辑复杂的应用级产品,shell的开发和维护难度相当大。就个人而言,shell的学习难度比大多数主流脚本语言都要大,这与其语法特点、调试、运行环境等都有关系。因此,shell仍然是日常基于进程的系统管理工作的好工具。另外,我相信你有更好的选择。Python/JythonPython最大的魅力之一就是简单易学。一个新手可以在短时间内(有的说十分钟,我觉得几天完全可以)写出高质量实用的程序。计算机专业人士学习编程的最佳选择。Python的强大功能和标准库的丰富程度估计是Java望尘莫及的。Python适合系统管理,但这并不意味着它不能做大型应用程序。Python应用的成功案例数不胜数,尤其是在科学计算领域。Python是一门优秀的面向对象语言,但是更多的Python程序员喜欢Python面向过程的部分。个人感觉Python的OO不如Ruby,因为不够彻底,但这也是Python支持者更喜欢它的地方。遗憾的是,Python未能在企业应用领域取得更大的突破。近年来被后起之秀Rails(Ruby的WEB框架)甩在了身后。但这并不意味着Python在企业应用中不成熟(豆瓣网是最接近我们的Python案例)。有兴趣的可以了解一下Python社区最流行的WEB框架Django,也可以看看。令人难以置信的WEB框架webpy。Python在短短几年内成为六大主流开发语言之一,绝对不是盖的!Jython是Python的Java实现,Python是IBMWebSphere服务器的官方管理语言。之所以选择jython,是因为看重jdbc访问数据库的便捷性。但遗憾的是jython对中文的支持不是很好。可能是python本身的复杂度比较高,jython团队的活跃度比较低。总之,Jython还有很长的路要走。至少我认为目前的版本还不具备投入生产开发的能力。Ruby/JRubyRuby是脚本语言的后起之秀。它的成功归功于杀手级框架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很像。在其他应用领域,尤其是因特网,Perl表现不俗。Perl很好,俗话说,语言没有好坏,只有适合不适合。Groovy如果您在“热爱Java平台”和“讨厌Java语法”之间挣扎,Groovy可能是最佳选择。Groovy可以说是Java平台的原生脚本语言,与Java完美结合。它本身不提供标准库,完全使用JavaAPI库。在Rails成功之后,Grails框架也出现在Groovy社区中与Rails竞争。Groovy本身也吸收了很多Ruby的经典语法,喜欢Java的可以选择Groovy。脚本语言的缺点和未来普遍认为脚本语言的主要缺点是性能问题。当然,这可能取决于很多因素。问题是在多少情况下性能问题是致命的。从EJB的崩溃,Spring的兴起,到Java的质疑,再到Rails的成功,都说明大家在面对不同规模的应用时,都是非常理性的。相信真正能为我们服务的技术,才能有美好的前景。脚本语言的未来是无限光明的!
