JAVA编程:挑选符合的java剧本言语
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
认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点, 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 是一种突破用户端机器环境和CPU J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 是一种使网页(Web Page)产生生动活泼画面的语言 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 Java是一种计算机编程语言,拥有跨平台、面向对java Java 编程语言的风格十分接近C、C++语言。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 是一种语言,用以产生「小应用程序(Applet(s)) 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
页:
[1]
2