初识Rhino
author:emu(黄希彤)
Rhino,就是我期盼了多年的java平台上的javascript。由于这个怪模怪样的名字和宣传的不力加上我的孤陋寡闻,居然到这几天才听说它。
前阵子我试用过另一种java平台上的脚本语言groovy,因为据说它将会成为标准。确实groovy有很多吸引人的特性,比如数据库访问、groovlet,gsp,闭包,不需要编译直接运行、动态类型都很让人振奋,可是由于在包引用上的问题和运行效率的问题上我都没有找到合适的解决方案,我暂时对它失去了兴趣,期待它以后的版本可以有更好的表现,比如可以在其中嵌入java代码,而不是在java里面嵌入groovy代码。
Rhino对我最大的诱惑是,写javascript多我来说比可能写中文还要来的简单。几乎不用学习什么新的东西(当然有一些以前脚本开发里面没有的新东西,比如print语句,可是对于java程序员来说不是问题),除了要配置一下开发环境(很多编辑器本来就都支持javascript的高亮显示,只要添加一个java org.mozilla.javascript.tools.shell.Main 用户工具就可以很方便的开始编码调试了,我用的是editplus),随便在以前的代码库里面拿一段代码出来放进去,运行起来:

var?q
=
9
?

var?i
=
[]?

var?count
=
0
?

var?d?
=
?
new
?Date();?

scan(
0
)?

print(
"
totle?results:
"
+
count)?

print(
"
time?used:
"
+
(
new
?Date()
-
d))?



function?scan(n)

{?


????if?(n==q)
{?

????????print(i)?

????????count++?

????????return?

????}?

????i[n]=0?


????while(i[n]<q)
{

????????i[n]?=?i[n]+1?


????????if?(check(n))
{

????????????scan(n+1)?

????????}?

????}?

}
?



function?check(n)

{?

????for?(var?j=0;?j<n;j++)

????????if?(i[j]==i[n]?||?i[j]-i[n]==j-n?||?i[j]-i[n]==n-j?)

????????????return?false??

????return?true?

}
?
嗯,我要承认我没什么新意,还是以前在比较groovy运行效率时用的9皇后问题,除了把document.write改成print,其他都没改。运行一下:
C:/Documents and Settings/Administrator>java org.mozilla.javascript.tools.shell.Main E:/test/queens.js
......
9,7,4,2,8,6,1,3,5
totle results:352
time used:892
比java慢了,不过groovy快。
不过注意到,在Rhino的控制台下面 load ("e:/test/queens.js") 的话运行速度会慢下来一倍,应该是load函数的问题
author:emu(黄希彤)?
。