2010-08-25 65 views
24

我注意到ubuntu 10.04刪除了spidermonkey包。雖然犀牛看起來仍然存在。犀牛和spidermonkey之間有什麼區別(除了它們寫的是什麼語言)。爲什麼他們刪除spidermonkey?rhino vs spidermonkey

+1

相關的Ubuntu Bug報告討論[這裏](https://bugs.launchpad.net/ubuntu/+source/xulrunner-1.9.2/+bug/536950) – richaux 2010-12-08 13:27:27

回答

18

恐怕不同之處在於它們寫入的語言或其含義。人們使用C/C++編寫各種方式的東西(如Firefox),而Java在應用程序服務器中最爲流行。 From http://en.wikipedia.org/wiki/Rhino_%28JavaScript_engine%29

Rhino將JavaScript腳本轉換爲 Java類。犀牛在 編譯以及解釋模式下工作。 它旨在用於 服務器端應用程序,因此 沒有內置支持瀏覽器 通常與JavaScript關聯 的對象。

這裏有三個重要部分。首先,沒有DOM(SpiderMonkey也是如此)。其次,服務器端是預期的用途。您應該能夠在您的大型企業應用程序中使用Rhino,以便在更爲特殊的基礎上實現自動化。最後,Javascript變成一個類,就像Java類層次結構的其餘部分一樣,您可以與Java類交互(請參閱該頁面上的代碼示例)。

簡而言之,您可以非常輕鬆地操作基於POJO/JPA的對象/消息Bean /無論您想要調用您的「企業」Java類,都可以通過Rhino運行JavaScript。將此與Jython進行比較,您可以在其中使用Python語法和類與Java進行交互。如果你有一些JavaScript/Python whizzes在辦公室踢球,無所事事,那麼很方便。

SpiderMonkey相比之下更像LUA。這是一種腳本語言。有什麼不同?那麼,我懷疑你是否可以直接訪問printf。直接訪問Java類,而不是直接訪問C/C++類。相反,您使用C/C++編程語言的額外功能。

簡而言之,Rhino允許JS與您的代碼進行交互。 SpiderMonkey更像是一個自己動手的編譯器套件,它具有額外的優勢,即許多人知道的標準語言已經建立,您只需將定製添加到它。

+1

感謝 - 有趣且有幫助,但Ubuntu經常有多個包來解決特定問題,所以問題依然存在:「爲什麼要刪除spidermonkey」? – nealmcb 2012-11-15 15:23:27

+1

@nealmcb我老實不確定。也許維護Ubuntu軟件包的人停止了這樣做,他們放棄了它?我認爲「主要」的要求是足夠的定期維護和跟蹤上游等等。從我寫這篇文章開始就已經有一段時間了,因爲我已經使用了Ubuntu,但是當我回來的時候,我記得有很多包由於維護問題而從「主」降到「宇宙」。我懷疑鑑於PPA的興起,如果你願意的話,你可能會抓住SpiderMonkey。 – 2012-11-15 19:50:35

-1

基於開發語言,開發人員需要使用spidermonkey顯式處理內存。由於犀牛已經在Java中開發,其中包括自動垃圾收集,並且JVM的[Java虛擬機]已經被調整爲比Java 1.6版本中的c或C++更快的執行速度。

+2

-1對於虛假陳述:「開發者需要明確處理記憶使用spidermonkey「。 JavaScript是一種垃圾收集語言,無論它實現什麼語言。Spidermonkey外殼特別是在全局對象上暴露了以下功能:gczeal(level) - 「垃圾收集器應該是多麼的熱情」。所以Spidermonkey顯然也有垃圾收集。另外,聲明中還需要引用:「JVM的調優速度比Java 1.6版的c或C++更快」。根據http://bit.ly/fyyrTX – jbeard4 2010-12-08 12:26:39

+0

將不會更新一旦我得到鏈接..謝謝你的信息 – 2010-12-09 06:07:57

+0

https://developer.mozilla.org/en/SpiderMonkey_Garbage_Collection_Tips這個鏈接清楚地給出處理記憶的一些提示!另外,我想問題是關於與API集成。請查看 – 2010-12-09 06:11:47

6

因爲我有很大的困難找到關於JavaScript的殼/口譯員,特別是rhino基本的例子,在Ubuntu上 - 我會在這裏基本上張貼此...

,我是在安裝什麼有點迷糊了,什麼樣的命令行來調用:)

首先,我發現Bug #705339 in rhino (Ubuntu): 「Rhino shell crashes with NullPointerException」 - 並意識到OpenJDK實際上安裝了一個rhino.jar Java檔案。所以,如果你有,你可以馬上做的是bash終端外殼:

$ 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,另請參閱SO:7286178),而沒有瀏覽器的腳本引擎將不會「知道」它們。

 

然而,至少rhino,即由Envjs '瀏覽器環境' 庫,rhinoLatest release - 1.2env.rhino.jsrhino看到SO:6170676setTimeout)糾正。

因此,我們可以做這樣的事情:

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捆綁的犀牛一起運行。你需要使用 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從腳本或命令行
#注意優化設置
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()寫入到stdout 。編輯:要運行rhino Java調試器,請參閱使用less $(which rhino)安裝的特定.jars在哪裏,然後直接調用java腳本使用一組不同的命令行開關,因此無法被說服調用調試器) :

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一起使用。

 

好了,希望這可以幫助別人,
乾杯!

+0

你做了我的一天,謝謝! – Rafa 2013-05-31 14:38:13