|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Oracle收购Sun后Java前途未卜。剧本选择符合的java剧本言语
--假如你正思索在java使用中集成剧本注释器,最可贵是决意利用那种
择要:剧本言语已向java开辟者证实了它的代价。它让客户完成使用功效的扩大和界面的本性化,从而程序的代价得以提拔。别的,它们能够明显的简化程序开辟者的计划义务,经由过程完成静态界说、装载和评价。关于开辟职员,集成一种或多种剧本言语的义务是复杂的,从愈来愈长的可选列表当选出一个的确坚苦的。本文形貌了一些陪伴java使用中剧本言语撑持的成绩,并从分歧角度对照了Groovy,JudoScript,Pnuts,JRuby,Jacl,Jython,Rhino和Beanshell,以期能匡助读者作出准确的决意。
三年前,我在javaworld写了一遍叫做“JavaScripting言语,那种是合适你的?”的文章。当我搜集注释器并举行对照时,我只管选择那些看起来满意刻薄商务需求的。幻想形态下,我但愿注释器可以便利的扩大使用的用户接口,而且有易读的剧本代码,高牢靠,疾速,有好的撑持和文档,而且是完整的。在谁人时分,我把列表限定到了Jacl,Jython,Rhion和BeanShell。
已往的三年中产生了良多变更。可选项不再是很少的几个,不论是静态开辟仍是间接选择,可选的剧本言语都有一打以上。牢靠的选择列表比三年前增加了,如今还包含了Groovy,JudoScript,Pnuts和BeanShell。我们还能够思索不再这个列表中的其他注释器,但这个列表中,已充足开辟职员本人的所需了。
我筹办尺度化一切注释器,看看Jacl,Jython,Rhion和BeanShell在2002年后功能有无进步,并看看Groovy,JudoScript,Jruby和Pnuts同它们对照起来会如何。我以为,看看分歧剧本言语有甚么共同的地方,有甚么出格的刚强和缺点是很成心思的事变。
商务风险
在之前的文章里,我报告了一些出名的优异剧本注释器的材料,并申明了却合剧本注释器时你大概碰到的风险。本文中,我把这些内容简化为一些要点,并依据我在写那些文章以后的履历举行了改善。Java剧本注释器的长处是无庸置疑的。利用剧本言语编码比利用java复杂;脚步言语使程序的使用逻辑和用户界面的推进(drive/驱动?)和扩大成为大概;剧本代码能够违背java使用中类接口而运转,这长短常壮大的功效。如许能够简单的编写程序测试驱动(writetestdriversagainstyourprogram),与编码并编译用于java类的单位测试比拟,这是加倍疾速的。别的,假如用户花工夫利用剧本扩大你的使用,他们就作你的工具长进行了投资,这使得你在合作中多了一件利器。
可是,当在使用中集成jiava剧本注释器时,你必需面临必定的风险。两个次要的风险是,注释器大概成为孤儿,大概是当你把产物装上后,你大概发明注释器的致命缺点。年夜多半注释器是经由过程开源模子静态保护和更新的,在这类情形下,你能够向研讨你所发明成绩的专家追求匡助,给注释器打补钉,大概在将来版本中包括你必要的bug-fix(bug修缮?)。这是一种平安的打赌,但其实不能失掉充足包管。假如你正严厉的思索接纳某个特定的注释器,请先看看它的开辟站点,看看它的代码的退化,看看下面的浮名板,用户的发问都有谜底否。这能够匡助你懂得代码撑持的实践情形。
自我回护的另外一格措施是,对你筹办接纳的任剧本何注释器举行完整测试。一些注释器在公布时包括了一个单位测试集。在测试你的使用中集成的注释器时,这些单位测试能够作为你的更年夜的测试会合的一部分。在测试注释器和使用之间的集成时,能够剔出本人的事情(youhaveyourworkcutoutforyou),由于剧本注释器有充足的弹性,并向开辟职员表露了充足的功效。你在初期向质量包管投进工夫,而不是在使用已成为产物,当用户必要孔殷的bug修复时才思索。
新的合作者列表
假如你正在寻觅一个剧本注释器,你有良多选择。一些注释器撑持已存在的言语,好比Ruby,Python,JavaScript,Java和Tcl。别的一些注释器,如JudoScript,Groovy和Pnuts,选择了它们本人的相似java的言语语法。在对照分歧的注释器,必要举行的最年夜的选择是,那种剧本言语的语法能很好的合适你的使用。像这类团体偏好产生感化的手艺选择,大概在分歧的开辟职员团队引发剧烈的争辩。大概本文能有助于办理一些争辩。
我搜集对照了比来公布的八种分歧的剧本注释器。注释器及其版本都鄙人表中列出。假如你对这些注释器其实不熟习,我还给出了每种注释器功效和开辟举动的提要(athumbnailsketch)。
剧本言语
版本号
冗长形貌
Jacl
1.3.1
Tcl注释器的java完成。假如你但愿在剧本中利用工具包来创立用户接口类,看看Swank工程中的包裹(wrap)javaswing工具的类集。Jacl已存在较长工夫了,而且还在延续改善。
Jython
2.1
Python注释器的java完成。我注重到的一个成绩是,已有很长一段工夫没有看到这个注释器的新版本了。但在Jython的网站上,申明了改动这类近况的企图,而且有基金撑持。
Rhino
1.6.1
JavaScript注释器的java完成。它还撑持把剧本编译成类文件。它的最新版本在几个月前公布,并到场了xml撑持。
JRuby
0.8
Ruby注释器的java完成。它正在开展中,其测试版0.8体现优秀。
BeanShell
2.0beta2
它是一个java源文件注释器,正在延续的开展和到场新特征。2.0版本供应了完整的一般java源文件注释撑持。
Groovy
1.0beta9
Groovy是把Python和Ruby的特性到场java相似语法构成的,由良多使人镇静的特性。能够把剧本间接编译成类文件,对分歧的IDE,又良多Groovy插件可供选择,JSR委员会正在制订Groovy的标准。
JudoScript
0.9
它有和JavaScript相似的编程语法,进修和利用加倍简单。在它的FAQ中提到了它的一个明白方针:“撑持对象级,操纵体系级和使用级的剧本”。我测试的0.9版运转优秀。
Pnuts
1.1beta2
Pnuts有和java类似的编程语法,并坚持延续更新。它能够把剧本间接编译成java类文件。
第一个目标:功能
将来测试第一项目标,我为每一个注释器编写了等价的剧本代码,让他们完成复杂的义务集并纪录它们实行剧本所花的工夫。我的测试剧本次要存眷基础操纵,如轮回,整数对照和年夜的一维、二维数组分派和初始化。用于各个注释器的测试剧本和运转它们的java程序能够在原文资本部分下载。
在基准测试中最有效的信息是,注释器完成复杂义务速率的apples-to-apples对照。假如你重点思索吞吐量,基准数将非常主要。对每种剧本言语,我全力编写了解的测试代码。测试利用Java1.4.2在东芝Tecra8100条记本上运转,CPU为PIII700MHz,内存256MB。启动JVM时利用了默许的堆尺寸。出于向你展现注释器究竟有多快仍是多慢的乐趣,我编写了测试用例的java代码,并在java1.4.2上运转了。测试集包含:
1到1,000,000的计数
1,000,000次整数相称对照
分派并初始化包括100,000个元素的数组
分派并初始化一个500*500的二维数组
在2002年后有进步么?
在告知你哪一个注释器最快之前,我们先看看,这个条状图列出了良多耗时义务的了局:1百万次整数相称对照。对2002年文章中报告的4种剧本注释器,我给出了在Java1.3.1JVM和Java1.4.2上运转所需的工夫。十分风趣的是,测试Jython时用的是统一个版本的剧本注释器,了局标明新版JVM上速率提拔了25%。在加上我利用了和前一次测试完整不异的硬件,以是能够一定JVM1.4.2削减了运转基本测试所需的工夫。如今看看Rhino,BeanShell和Jacl产生了甚么:新版Rhino在1.4.2的JVM上比在1.3.1的JVM上运转的旧版本康乐86%,Jacl的这个数字是76%。能够看出,功能进步了良多。
四项义务的总工夫
因为注释器在速率方面都非常类似(最少对我的基准测试是如许),我把各注释器完成四项基准测试所耗的总工夫算出来并在中给出。
多变的标记
对这些复杂测试,Rhino,Pnuts和Jytho一直是最快的,紧跟在前面的时Groovy,然后是JudoScript,然后是其他的。这些功能参数对你是不是有效,取决于你但愿剧本言语做的事变。假如你的剧本函数包括大批的迭代,而且用户要守候了局,你就必要存眷速率最快的注释器,大概你就该思索用java完成高功能请求的算法,而不是剧本代码。假如你的剧本只必要很少的反复操纵,这些注释器速率的差别就不是那末主要了,疾速的硬件也会使成绩变得分歧。
另有一点必要指出的是,即便最快的注释器,完成下面测试所用的工夫也是一样功效java代码所用工夫的约莫40倍。假如速率是你最次要的成绩,你必需分明,最成心义的事变是用java取代剧本代码完成关头算法。
一些剧本注释器撑持剧本代码间接编译成字节码。我对这将会发生多年夜的功能差别十分猎奇,以是我举行了另外一项测试。我用Rhino剧本注释器把基准测试剧本编译成了字节码,然后我把全部基准测试集用剧本和剧本发生的字节码分离运转了10遍。使人惊异的是,与间接运转剧本比拟,剧本码编译成字节码再运转仅仅节俭了10%的工夫。我最后义务,JVM的魔咒占用了运转测试集的年夜部分工夫,但进一步的反省发明JVM魔咒自己只占测试集运转总工夫的20%。复杂剧本代码编译成字节码看起来会有主动的意义,但这其实不必定是明显进步功能的银弹。大概在更长的大概,加倍盘算中央的剧本中,会看到分歧的了局。
第二个尺度:集成难度
第三个尺度:允许证
英文原文:
http://www.javaworld.com/javaworld/jw-03-2005/jw-0314-scripting.html
认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点, |
|