24

私はubuntu10.04がスパイダーモンキーパッケージを削除したことに気づきました。Rhinoはまだそこにあるように見えます。サイとスパイダーモンキーの違いは何ですか(どの言語で書かれているのかを除いて)。そして、なぜ彼らはスパイダーモンキーを削除したのですか?

4

3 に答える 3

18

違いは、彼らが書かれている言語、またはそれが何を意味するのかということです。人々はC/C ++を使用してあらゆる種類のもの(Firefoxなど)を記述しますが、Javaはアプリケーションサーバーで最も普及しています。http://en.wikipedia.org/wiki/Rhino_%28JavaScript_engine%29から:

RhinoはJavaScriptスクリプトをJavaクラスに変換します。Rhinoは、コンパイルモードとインタプリタモードの両方で動作します。サーバーサイドアプリケーションでの使用を目的としているため、JavaScriptに一般的に関連付けられているブラウザオブジェクトのサポートは組み込まれていません。

ここには3つの重要な部分があります。まず、DOMはありません(SpiderMonkeyにも当てはまります)。第二に、サーバー側が意図された使用法です。大企業向けのアプリケーションでRhinoを使用して、アドホックベースで自動化できるはずです。最後に、Javascriptは他のJavaクラス階層と同じようにクラスになり、Javaクラスと対話できます(そのページのコードサンプルを参照してください)。

つまり、POJO /JPAベースのオブジェクト/メッセージBean/「エンタープライズ」Javaクラスと呼びたいものはすべて、Rhinoを介して実行されるjavascript内から非常に簡単に操作できます。これを、Python構文とクラスを使用してJavaと対話できるJythonと比較してください。何もすることなくオフィスを駆け巡るJavaScript/Pythonの気まぐれがある場合に便利です。

対照的に、SpiderMonkeyはLUAに似ています。これはスクリプト言語です。違いは何ですか?ええと、私はあなたが直接printfにアクセスできるとは思えません。Javaクラスに直接アクセスできるのではなく、C /C++クラスに直接アクセスすることはできません。むしろ、C /C++を使用して言語の追加機能をプログラムします。

つまり、Rhinoを使用すると、JSがコードを操作できるようになります。SpiderMonkeyは、多くの人が知っている標準言語がすでに構築されており、それにカスタマイズを追加するだけでよいという追加の利点を備えた、日曜大工のコンパイラキットのようなものです。

于 2010-12-12T14:02:58.757 に答える
6

特にUbuntuでJavaScriptシェル/インタープリターに関する基本的な例を見つけるのは非常に難しいので、rhinoこれをここに投稿します...

基本的に、何をインストールするか、どのようなコマンドラインを呼び出すかについて少し混乱していました:)

まず、rhino(Ubuntu)でバグ#705339を見つけました:「RhinoシェルがNullPointerExceptionでクラッシュします」</a>-そして、OpenJDKが実際にrhino.jarJavaアーカイブをインストールすることに気づきました。したがって、それがある場合は、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()

 

そして、これはすべて基本的なものには十分です...ただし、DOMwindowオブジェクトまたはsetTimeout()関数を使用する場合は、基本的に、これらは「ブラウザー固有の実装」(については、 setTimeoutSO:7286178も参照)であり、スクリプトエンジンはありません。ブラウザはそれらについて「知りません」。

 

ただし、少なくともrhino、これはEnvjsの「ブラウザ環境」ライブラリによって修正されます。このライブラリの最新リリースrhino-1.2はenv.rhino.jsです(のSO :6170676参照setTimeoutrhino)。

したがって、次のようなことができます。

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

...そしてooops-それは機能しません:)しかし、それはgetCurrentContextエラーのために1.2を実行できませんで明確にされています。--Env.js | Googleグループ

申し訳ありませんが、Envjsはjavaにバンドルされたrhinoでは実行できません。ここから入手できる1.7rc2を使用する必要があります。

http://www.mozilla.org/rhino/download.html

ありがたいことに、Ubuntuでは、ソースからビルドする代わりに、次のことを直接行うことができます。

sudo apt-get install rhino

... rhinoファイルリストに記載されているように、このパッケージは。をインストールしますjs-1.7R2.jarrhinoこのパッケージは、基本的にこれらの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ガイドで多少示唆されています(注:そのページで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]

...最終的には機能します:)編集:を使用すると、stdoutへの書き込みにenv.rhino.1.2.jsも使用できます。console.log()編集:rhinoJavaデバッガーを実行するには、特定の.jarがインストールされている場所の使用を参照してからless $(which rhino)直接呼び出しjavaます(スクリプトは別のコマンドラインスイッチのセットを使用するため、デバッガーを呼び出すように説得することはできません):rhino

java -cp /usr/share/java/js.jar org.mozilla.javascript.tools.debugger.Main test.js

 

今すぐ同じスクリプトを実行しようとすると( Ubuntu11.04でspidermonkeyjsを取得するためspidermonkeyの最良の方法のPPA手順も参照してください)、次のようになります。

$ js test.js
env.rhino.1.2.js:1247: ReferenceError: Packages is not defined

...つまり、では機能しspidermonkeyませenv.rhino.1.2.js

 

さて、これが誰かを助けることを願っています、
乾杯!

于 2011-09-03T10:31:07.320 に答える
-1

開発された言語に基づいて、開発者はスパイダーモンキーを使用してメモリを明示的に処理する必要があります。rhinoは自動ガベージコレクションを含むJavaで開発されており、JVMの[Java仮想マシン]はJava1.6バージョンのcまたはc++よりも高速に実行されるように調整されています。

于 2010-12-06T12:05:36.730 に答える