首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >犀牛vs蜘蛛猴

犀牛vs蜘蛛猴
EN

Stack Overflow用户
提问于 2010-08-25 15:58:34
回答 3查看 12.1K关注 0票数 24

我注意到ubuntu 10.04删除了spidermonkey包。不过,犀牛看起来还在那儿。犀牛和蜘蛛猴有什么不同(除了它们是用什么语言写的)。他们为什么要除掉蜘蛛猴?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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编译器工具包,它的另一个优势是,许多人都知道已经构建了一种标准语言,您只需在其中添加您的定制即可。

票数 18
EN

Stack Overflow用户

发布于 2011-09-03 18:31:07

由于我很难在Ubuntu /解释器中找到基本的例子,尤其是rhino,所以我将在这里发布这篇文章……

基本上,我对安装什么以及调用哪种命令行感到有点困惑:)

首先,我找到了Bug #705339 in rhino (Ubuntu): “Rhino shell crashes with NullPointerException”,并意识到OpenJDK实际上安装了一个rhino.jar Java归档。因此,如果您有这样的功能,您可以立即在bash终端shell中执行以下操作:

代码语言:javascript
复制
$ 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“浏览器环境”库补救的,它的rhinoLatest release - 1.2env.rhino.js (参见rhino中的setTimeout的 )。

所以我们可以这样做:

代码语言:javascript
复制
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中,我们可以直接做以下事情,而不是从源代码构建:

代码语言:javascript
复制
sudo apt-get install rhino

..。因为如rhino filelist所述,此程序包安装js-1.7R2.jar。这个包还安装了一个脚本rhino,它本质上是这些Java归档文件的外壳包装(参见less $(which rhino)) -所以我们可以方便地使用它,而不是键入java -jar ...等:

代码语言:javascript
复制
$ 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

代码语言:javascript
复制
load('env.rhino.1.2.js'); // takes a while to load
print("loaded " + 1.2); 
print(window);

并尝试对其调用rhino

代码语言:javascript
复制
$ 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

对-所以最后,我们只需添加此优化设置,然后:

代码语言:javascript
复制
$ 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脚本使用一组不同的命令行开关,因此无法说服其调用调试器):

代码语言:javascript
复制
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说明),您将得到:

代码语言:javascript
复制
$ js test.js
env.rhino.1.2.js:1247: ReferenceError: Packages is not defined

..。也就是说,spidermonkey不能与env.rhino.1.2.js一起工作。

好吧,希望这能帮到别人,

干杯!

票数 6
EN

Stack Overflow用户

发布于 2010-12-06 20:05:37

基于他们已经开发的语言,开发人员需要显式地使用spidermonkey来处理内存。由于rhino是用java开发的,它包括自动垃圾收集和JVM的Java虚拟机已经调优为比Java1.6版本中的c或c++执行得更快。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3563909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档