我注意到ubuntu 10.04刪除了spidermonkey包。雖然犀牛看起來仍然存在。犀牛和spidermonkey之間有什麼區別(除了它們寫的是什麼語言)。爲什麼他們刪除spidermonkey?rhino vs spidermonkey
回答
恐怕不同之處在於它們寫入的語言或其含義。人們使用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更像是一個自己動手的編譯器套件,它具有額外的優勢,即許多人知道的標準語言已經建立,您只需將定製添加到它。
感謝 - 有趣且有幫助,但Ubuntu經常有多個包來解決特定問題,所以問題依然存在:「爲什麼要刪除spidermonkey」? – nealmcb 2012-11-15 15:23:27
@nealmcb我老實不確定。也許維護Ubuntu軟件包的人停止了這樣做,他們放棄了它?我認爲「主要」的要求是足夠的定期維護和跟蹤上游等等。從我寫這篇文章開始就已經有一段時間了,因爲我已經使用了Ubuntu,但是當我回來的時候,我記得有很多包由於維護問題而從「主」降到「宇宙」。我懷疑鑑於PPA的興起,如果你願意的話,你可能會抓住SpiderMonkey。 – 2012-11-15 19:50:35
基於開發語言,開發人員需要使用spidermonkey顯式處理內存。由於犀牛已經在Java中開發,其中包括自動垃圾收集,並且JVM的[Java虛擬機]已經被調整爲比Java 1.6版本中的c或C++更快的執行速度。
-1對於虛假陳述:「開發者需要明確處理記憶使用spidermonkey「。 JavaScript是一種垃圾收集語言,無論它實現什麼語言。Spidermonkey外殼特別是在全局對象上暴露了以下功能:gczeal(level) - 「垃圾收集器應該是多麼的熱情」。所以Spidermonkey顯然也有垃圾收集。另外,聲明中還需要引用:「JVM的調優速度比Java 1.6版的c或C++更快」。根據http://bit.ly/fyyrTX – jbeard4 2010-12-08 12:26:39
將不會更新一旦我得到鏈接..謝謝你的信息 – 2010-12-09 06:07:57
https://developer.mozilla.org/en/SpiderMonkey_Garbage_Collection_Tips這個鏈接清楚地給出處理記憶的一些提示!另外,我想問題是關於與API集成。請查看 – 2010-12-09 06:11:47
因爲我有很大的困難找到關於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 '瀏覽器環境' 庫,rhino
其Latest release - 1.2是env.rhino.js(在rhino
看到SO:6170676爲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捆綁的犀牛一起運行。你需要使用 1.7rc2從這裏得到:
值得慶幸的是,而不是從源代碼構建,在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
一起使用。
好了,希望這可以幫助別人,
乾杯!
你做了我的一天,謝謝! – Rafa 2013-05-31 14:38:13
- 1. 犀牛VS SpiderMonkey的性能測試
- 2. Rhino JS解釋器和SpiderMonkey解釋器 - 不同的返回值
- 3. Rhino和Spidermonkey JavaScript引擎有什麼區別?
- 4. Rhino Mocks vs Moq for Silverlight
- 5. Spidermonkey中的文件I/O
- 6. Spidermonkey TypeError
- 7. 嵌入SpiderMonkey JS
- 8. Spidermonkey和getElementsByTagName
- 9. SpiderMonkey變量列表
- 10. SpiderMonkey編譯錯誤
- 11. PhantomJS山貓的SpiderMonkey
- 12. Spidermonkey:實施「這個」?
- 13. Spidermonkey中的線程
- 14. Rhino Commons和Rhino Mocks參考文檔?
- 15. 驗證事件處理程序存在於Moq vs Rhino Mocks
- 16. Mozilla SpiderMonkey AST完整結構
- 17. E4X過濾在SpiderMonkey的
- 18. SpiderMonkey JS引擎C故障
- 19. DOM與SpiderMonkey一起使用?
- 20. Spidermonkey和垃圾回收
- 21. spidermonkey全局對象圖像
- 22. Javascript/ECMAscript/Spidermonkey:範圍與此?
- 23. Spidermonkey字節碼文檔
- 24. SpiderMonkey垃圾收集器
- 25. Rhino Mocks的Arg.Property
- 26. Rhino Mocks,VerifyAllExpectations
- 27. Android上的Rhino
- 28. Rhino Mocks&Compact Framework
- 29. Rhino Mocks nant error
- 30. SSAS與Rhino ETL?
相關的Ubuntu Bug報告討論[這裏](https://bugs.launchpad.net/ubuntu/+source/xulrunner-1.9.2/+bug/536950) – richaux 2010-12-08 13:27:27