Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 犀牛vs蜘蛛门钥匙_Javascript_Rhino_Ubuntu 10.04_Spidermonkey - Fatal编程技术网

Javascript 犀牛vs蜘蛛门钥匙

Javascript 犀牛vs蜘蛛门钥匙,javascript,rhino,ubuntu-10.04,spidermonkey,Javascript,Rhino,Ubuntu 10.04,Spidermonkey,我注意到ubuntu 10.04删除了spidermonkey包。犀牛看起来好像还在那里。rhino和spidermonkey之间有什么区别(除了它们是用什么语言写的)。为什么他们删除了spidermonkey?基于他们开发的语言,开发人员需要使用spidermonkey显式地处理内存。由于java已经开发了java,包括自动垃圾收集,JVM的[java虚拟机]已经被调整,以比C 1.6或C++从Java版本中更快地执行。人们使用C/C++编写各种各样的东西(比如Firefox),而Java在应

我注意到ubuntu 10.04删除了spidermonkey包。犀牛看起来好像还在那里。rhino和spidermonkey之间有什么区别(除了它们是用什么语言写的)。为什么他们删除了spidermonkey?

基于他们开发的语言,开发人员需要使用spidermonkey显式地处理内存。由于java已经开发了java,包括自动垃圾收集,JVM的[java虚拟机]已经被调整,以比C 1.6或C++从Java版本中更快地执行。人们使用C/C++编写各种各样的东西(比如Firefox),而Java在应用服务器中最为流行。发件人:

Rhino将JavaScript脚本转换为 Java类。Rhino在这两种情况下都工作 编译和解释模式。 它旨在用于 服务器端应用程序,因此 没有对浏览器的内置支持 通常关联的对象 使用JavaScript

这里有三个重要部分。首先,没有DOM(SpiderMonkey也是如此)。其次,服务器端是预期用途。您应该能够在您的大型enterprise-y应用程序中使用Rhino,以便在更特别的基础上实现自动化。最后,Javascript成为一个类,就像Java类层次结构的其余部分一样,您可以与Java类交互(参见该页上的代码示例)

简言之,您可以非常轻松地操纵基于POJO/JPA的对象/消息bean/任何您想称之为“企业”Java类的东西,所有这些都可以通过Rhino在javascript中运行。与Jython相比,Jython可以使用Python语法和类与Java交互。如果你有一些JavaScript/Python高手在办公室无所事事,那就很方便了

相比之下,SpiderMonkey更像LUA。这是一种脚本语言。有什么区别?首先,我怀疑你是否能直接访问printf。您不能直接访问C/C++类,而不能直接访问Java类。相反,您可以使用C/C++编写该语言的额外功能


简而言之,Rhino允许JS与代码交互。SpiderMonkey更像是一个自己动手的编译器工具包,它还有一个额外的优点,那就是很多人都知道的标准语言已经构建好了,您只需向其中添加自定义项即可。

因为我很难找到有关JavaScript外壳/解释器的基本示例,尤其是
rhino
,在Ubuntu上-我会在这里发布这个

基本上,我对安装什么以及调用什么样的命令行有点困惑:)

首先,我发现并意识到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
,这是由“浏览器环境”库修正的,其对于
rhino
是(请参见
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
。。。因为正如前所述,这个包安装了
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.

哦,天哪,又失败了,现在怎么办?:)好吧,谢天谢地,即使这在中也有所暗示(注意:确实允许该页面使用javascript,否则代码将几乎看不见)-特别是:

#从脚本或命令行运行env.rhino.js
#注意优化设置
java-jarlib/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$(哪个rhino)
特定的.jar安装在哪里,然后直接调用
Java
rhino
脚本使用一组不同的命令行开关,因此无法说服调用调试器):

如果您现在尝试使用
spidermonkey
运行相同的脚本(另请参见中的PPA说明),您将获得:

$ js test.js
env.rhino.1.2.js:1247: ReferenceError: Packages is not defined
。。。也就是说,
spidermonkey
将不适用于
env.rhino.1.2.js

好吧,希望这对某人有所帮助,

干杯

-1表示错误语句:“开发人员需要使用spidermonkey显式处理内存”。JavaScript是一种垃圾收集语言,不管它是用什么语言实现的。Spidermonkey shell尤其在全局对象上公开了以下函数:gczeal(level)-“垃圾收集器应该有多热情”。所以很明显Spidermonkey也有垃圾收集功能。此外,引用需要在语句中:“JVM的调整速度比C 1.6或C++从java版本快。”在大多数情况下都不是这样,根据这个链接,显然给出了一些处理内存的技巧!另外,我想问题是关于和API的集成。请review@echo-flow-Spidermonkey具有垃圾收集功能,但Ratna的重点是在javascript解释器级别进行开发(即扩展或集成)
java -cp /usr/share/java/js.jar org.mozilla.javascript.tools.debugger.Main test.js
$ js test.js
env.rhino.1.2.js:1247: ReferenceError: Packages is not defined