虽然只有8岁,却如同35岁的青壮年一般,Java已经迅速地在众多领域确立了其地位:对等网络、开放源代码、无线开发和嵌入式应用程序等等,这还只是其中一些。要准确地把握这门语言的走向是很困难的,因为它正在同时向各个方向齐头并进。
在本系列的文章里,我邀请了经验丰富的Java开发人员来讨论他们认为重要的发展趋势。第一部分涵盖了Java社区的发展(Java Community Process)及其官僚作风的问题。现在,我们要看看Java王国里脚本语言正在增强的影响力,以及使用它们的优势和劣势。
关于快速开发的一切
毫无疑问:脚本编写语言,例如Jython、Python、Perl和PHP,正在被越来越多地使用。Jython事实上就是Python编程语言的完整实现。它100%使用纯Java编写而成,并答应对Java库的轻松访问。
这种脚本编写的趋势在很大程度上是由快速应用程序开发(RAD)推动的,这是一种始终都能够赢得追随者的开发风格。由于市场营销的执行者逼迫IT的生产公司加速产品的开发,因此IT的治理者被迫寻找最有效的方式来满足最终期限的要求。在这里RAD是主要的源动力。
“你可能很擅长某些脚本语言,并且能够完成常规Java所不能完成的任务,”Mukund Balasubramanian说。他是位于加利福尼亚州雷德伍德城的Infravio的首席技术官,负责着Java和Web服务的集成。“假如你知道如何使用一门优秀的语言,你就可以在开发中省下很多的时间和金钱。”
脚本语言的优势
Balasubramanian说,脚本语言具有下列优势:
快速开发:脚本语言极大地简化了“开发、部署、测试和调试”的周期过程。
轻易部署:大多数脚本语言都能够随时部署,而不需要耗时的编译/打包过程。
同已有技术的集成:脚本语言被Java或者COM这样的组件技术所包围,因此能够有效地利用代码。
易学易用:很多脚本语言的技术要求通常要低一些,因此能够更轻易地找到大量合适的技术人员。
动态代码:脚本语言的代码能够被实时生成和执行,这是一项高级特性,在某些应用程序里(例如javascript里的动态类型)是很有用也是必需的。
脚本语言的劣势
但是,Java脚本语言有下面这些劣势:
脚本语言不够全面。它们会要求一门“真正的”编程语言的存在;例如,你必须找一个数据库驱动程序将其内置进脚本语言里。
脚本语言并不是软件工程和构建代码结构的最佳选择,例如面向对象和基于组件的开发。
脚本语言通常不是“通用”语言,但是能够根据专门的应用来调整,例如PHP和万维网。
“因此,脚本语言能够在很大程度上加速软件的开发,但是必须要根据具体的应用来仔细选择——例如动态Web页面,或者对‘真正的’编程语言进行补充,就像Jython是对Java的补充一样,”Balasubramanian说。
第三方的工具能够有助于将脚本和基础框架融合在一起
像IBM的Bean脚本编写框架(Bean Scripting Framework)这样的工具使得将Tcl、Python、Perl和其他脚本语言融合进Java应用程序变得相当轻易。Sun、Borland、BEA和其他的公司也提供了类似的工具。但是俄勒冈州威尔逊维尔的Mentor Graphics的资深Java开发人员David Kearns指出,支持一门脚本语言就存在耗时和耗钱的风险,不要说支持六门语言了。
在其最近为Java世界所撰写的一篇文章中,Kearns描述了在你Java应用程序里支持脚本语言所固有的风险。
“在我看来,Jython具有最快的脚本解释器,并有一些强大的编程特性,”他说。“我唯一真正关心的是Jython的控制流句法(control-flow syntax),这可能对你来说很重要,也可能不重要。对于Jacl而言,编写用于Jython的脚本的学习曲线可能要比JavaScript或者BeanShell高,(即学习前者要比学习后两者困难),因为有更多的新东西要学习。假如你想要在Python里编写不同平常的脚本,那么我推荐你去买本书看看。Python是一门很常见的编程语言,所以你在书店里会有很多的选择。
其他Java脚本语言
下面列举出了一些使用最广泛的面向Java的脚本语言,感谢Java老手——About.com的William Wagers提供这些内容:
Beanshell
BeanShell是一个简短的、免费的、可下载的、可嵌入的Java源代码解释器,它具有使用Java编写成的对象脚本语言的特性。除了普通的脚本命令和句法之外,BeanShell还能够执行标准的Java陈述式和表达式。它能够将脚本对象作为简单的方法闭塞(method closure)来支持,就像Perl和JavaScript里的一样。
Jess
Jess是一个完全使用Java语言编写的规则引擎(rule engine)和脚本环境。Jess最初的灵感来自CLIPS专家系统,但是现在它已经发展成为一个完整的、卓越的动态环境。使用Jess,你能够创建Java applet以及应用程序,并让这些程序根据以说明规则(declarative rule)的形式所提供的信息进行“推理”。
JudoScript
JudoScript是一个Java类的脚本,它具有很多特性:HTTP客户端和服务器编程、文件系统和归档、XML和XSLT脚本编写、JDBC脚本编写,以及Html修饰能力(scraping)。它还有值得炫耀的带有监控程序的调度程序、sendmail、运行可执行(run executable)、Java GUI的创建、FTP、SSH和SCP,以及Windows注册表等等。这个软件可下载,包括源代码,都是免费的。
Rhino
Rhino使用纯Java编写而成,是一个开放源代码的JavaScript的实现。它通常被嵌入到Java应用程序里,用来向终端用户提供脚本编写的能力。
脚本编写是Java的未来吗?
你认为脚本编写稳固地扎根在Java的未来里吗?将你的看法发布在下面。