我注意到ubuntu 10.04删除了spidermonkey包。不过,犀牛看起来还在那儿。犀牛和蜘蛛猴有什么不同(除了它们是用什么语言写的)。他们为什么要除掉蜘蛛猴?
发布于 2010-12-12 22:02:59
我担心它们的不同之处在于它们是用什么语言写的,或者它意味着什么。人们使用C/C++来编写各种形式的东西(如Firefox),而Java在应用服务器中最为流行。来自http://en.wikipedia.org/wiki/Rhino_%28JavaScript_engine%29
Java将JavaScript脚本转换为
类。Rhino在编译和解释模式下都可以工作。它旨在用于服务器端应用程序,因此没有对通常与JavaScript相关联的浏览器对象的内置支持。
这里有三个重要的部分。首先,没有DOM (SpiderMonkey也是如此)。其次,服务器端是预期的用途。您应该能够在大型的企业y应用程序中使用Rhino,以便在更特殊的基础上实现自动化。最后,Javascript成为一个类,就像Java类层次结构的其余部分一样,您可以与Java类交互(请参阅该页面上的代码示例)。
简而言之,您可以很容易地操作您的POJO/基于JPA的对象/消息Beans/任何您想称之为“企业”Java类的东西,所有这些都可以在通过Rhino运行的javascript中完成。与Jython相比,在Jython中,您可以使用Python语法和类与Java进行交互。如果你有一些JavaScript/Python高手在办公室里无所事事,那就方便了。
相比之下,SpiderMonkey更像LUA。它是一种脚本语言。有什么关系呢?好吧,我怀疑你能不能直接访问printf。不能直接访问Java类,而不能直接访问C/C++类。相反,您可以使用C/C++来编写该语言的额外功能。
简而言之,Rhino允许JS与您的代码交互。SpiderMonkey更像是一个do编译器工具包,它的另一个优势是,许多人都知道已经构建了一种标准语言,您只需在其中添加您的定制即可。
发布于 2011-09-03 18:31:07
由于我很难在Ubuntu /解释器中找到基本的例子,尤其是rhino,所以我将在这里发布这篇文章……
基本上,我对安装什么以及调用哪种命令行感到有点困惑:)
首先,我找到了Bug #705339 in rhino (Ubuntu): “Rhino shell crashes with NullPointerException”,并意识到OpenJDK实际上安装了一个rhino.jar Java归档。因此,如果您有这样的功能,您可以立即在bash终端shell中执行以下操作:
$ java -jar /usr/lib/jvm/java-6-openjdk/jre/lib/rhino.jar
Rhino 1.7 release 2 2010 11 17
js> print("answer " + 42.0);
answer 42
js> quit()这些对于基本的东西来说已经足够好了。但是,如果您想使用DOM window对象或setTimeout()函数-本质上,这些是“特定于浏览器实现”(对于setTimeout__,另请参阅),没有浏览器的脚本引擎不会“知道”它们。
然而,至少对于rhino来说,这是由Envjs“浏览器环境”库补救的,它的rhino的Latest release - 1.2是env.rhino.js (参见rhino中的setTimeout的 )。
所以我们可以这样做:
wget http://www.envjs.com/dist/env.rhino.1.2.js
$ java -jar /usr/lib/jvm/java-6-openjdk/jre/lib/rhino.jar
Rhino 1.7 release 2 2010 11 17
js> load('env.rhino.1.2.js');
js: "env.rhino.1.2.js", line 1247: uncaught JavaScript runtime exception: TypeError: Cannot call property getCurrentContext in object [JavaPackage org.mozilla.javascript.Context]. It is not a function, it is "object".
at env.rhino.1.2.js:1247
at <stdin>:2
js> ^C..。但是,这在Can't run 1.2 due to getCurrentContext error. - Env.js | Google Groups中被解释清楚了:
很抱歉,Envjs不能与绑定了java的rhino一起运行。您需要使用此处提供的1.7rc2:
http://www.mozilla.org/rhino/download.html
值得庆幸的是,在Ubuntu中,我们可以直接做以下事情,而不是从源代码构建:
sudo apt-get install rhino..。因为如rhino filelist所述,此程序包安装js-1.7R2.jar。这个包还安装了一个脚本rhino,它本质上是这些Java归档文件的外壳包装(参见less $(which rhino)) -所以我们可以方便地使用它,而不是键入java -jar ...等:
$ rhino
Rhino 1.7 release 2 2010 11 17
js> load('env.rhino.1.2.js'); // takes a while to load
[ Envjs/1.6 (Rhino; U; Linux i386 2.6.38-11-generic; en-US; rv:1.7.0.rc2) Resig/20070309 PilotFish/1.2.13 ]
js> print("loaded " + 1.2);
loaded 1.2
js> window;
[Window]
js> ^C但是,现在尝试将这些相同的行作为脚本,让我们称其为test.js:
load('env.rhino.1.2.js'); // takes a while to load
print("loaded " + 1.2);
print(window);并尝试对其调用rhino:
$ rhino test.js
loaded 1.2
js: uncaught JavaScript runtime exception: ReferenceError: "window" is not defined.哦,亲爱的-又失败了,现在怎么办?:)谢天谢地,即使这在Envjs Guide中也有一些暗示(注意:一定要允许该页面使用javascript,否则代码将几乎不可见)-尤其是:
从脚本或命令运行env.rhino.js lineNote优化设置java -jar lib/js.jar -opt -1 myscript.js
对-所以最后,我们只需添加此优化设置,然后:
$ rhino -opt -1 test.js
[ Envjs/1.6 (Rhino; U; Linux i386 2.6.38-11-generic; en-US; rv:1.7.0.rc2) Resig/20070309 PilotFish/1.2.13 ]
loaded 1.2
[Window]..。最后,它可以工作了:)编辑:使用env.rhino.1.2.js,您还可以使用console.log()来写入标准输出。编辑:要运行rhino Java调试器,请参见使用less $(which rhino),其中安装了特定的.jars,然后直接调用java ( rhino脚本使用一组不同的命令行开关,因此无法说服其调用调试器):
java -cp /usr/share/java/js.jar org.mozilla.javascript.tools.debugger.Main test.js如果您现在尝试使用spidermonkey运行相同的脚本(另请参阅Best way to get spidermonkey js on Ubuntu 11.04?中的PPA说明),您将得到:
$ js test.js
env.rhino.1.2.js:1247: ReferenceError: Packages is not defined..。也就是说,spidermonkey不能与env.rhino.1.2.js一起工作。
好吧,希望这能帮到别人,
干杯!
发布于 2010-12-06 20:05:37
基于他们已经开发的语言,开发人员需要显式地使用spidermonkey来处理内存。由于rhino是用java开发的,它包括自动垃圾收集和JVM的Java虚拟机已经调优为比Java1.6版本中的c或c++执行得更快。
https://stackoverflow.com/questions/3563909
复制相似问题