rhino vs spidermonkey


Noté que ubuntu 10.04 eliminó el paquete spidermonkey. Rhino parece que todavía está allí. Cuáles son las diferencias entre rhino y spidermonkey (además de en qué idioma están escritos). ¿Y por qué quitaron a Spidermonkey?

Author: Tyler Gillies, 2010-08-25

3 answers

Me temo que la diferencia es el idioma en el que están escritos, o lo que significa. La gente usa C / C++ para escribir todo tipo de cosas (como Firefox), mientras que Java es más frecuente en los servidores de aplicaciones. De http://en.wikipedia.org/wiki/Rhino_%28JavaScript_engine%29 :

Rhino convierte scripts JavaScript en Clases de Java. Rhino funciona en ambos modo compilado e interpretado. Está destinado a ser utilizado en aplicaciones del lado del servidor, por lo tanto no es soporte incorporado para el navegador objetos comúnmente asociados con JavaScript.

Hay tres partes importantes aquí. En primer lugar, no hay DOM (también es cierto de SpiderMonkey). En segundo lugar, el lado del servidor es el uso previsto. Se supone que puede usar Rhino en su gran aplicación enterprise-y para automatizar cosas de forma más ad-hoc. Finalmente, el Javascript se convierte en una clase al igual que el resto de la jerarquía de clases Java y se puede interactuar con clases Java (ver el ejemplo de código en esa página).

En resumen, puede manipular fácilmente sus objetos basados en POJOs/JPA/Message Beans/como quiera llamar a su clase Java "enterprise", todo desde un javascript ejecutado a través de Rhino. Compare esto con Jython, donde puede usar la sintaxis y las clases de Python para interactuar con Java. Útil si tienes algunos whizzes JavaScript / Python dando vueltas por la oficina sin nada que hacer.

SpiderMonkey por el contrario es más como LUA. Es un scripting idioma. ¿Cuál es la diferencia? Dudo que tengas acceso directo a Printf. En lugar de poder acceder directamente a las clases de Java, no puede acceder directamente a las clases de C/C++. Más bien, utiliza C / C++ para programar características adicionales del lenguaje.

En resumen, Rhino permite que JS interactúe con su código. SpiderMonkey es más como un kit de compilador hágalo usted mismo con la ventaja adicional de que un lenguaje estándar que mucha gente conoce ya se ha construido y necesita agregar sus personalizaciones a él.

 18
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-12 14:02:58

Dado que tengo grandes dificultades para encontrar ejemplos básicos sobre shells/intérpretes de JavaScript, especialmente rhino, en Ubuntu, publicaré esto aquí...

Básicamente, estaba un poco confundido sobre qué instalar y qué tipo de línea de comandos llamar:)

En primer lugar, encontré Bug #705339 en rhino (Ubuntu): "Rhino shell se bloquea con NullPointerException" - y me di cuenta de que OpenJDK realmente instala un archivo Java rhino.jar. Así que si tienes eso, puedes inmediatamente hacer en el shell terminal 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()

 

Y todo esto es lo suficientemente bueno para cosas básicas... Sin embargo, si desea utilizar el objeto DOM window, o la función setTimeout(), esencialmente, esas son "implementaciones específicas del navegador" (para setTimeout, consulte también SO:7286178), y un motor de scripting sin un navegador no "sabría" sobre ellos.

 

Sin embargo, al menos para rhino, eso es remediado por la biblioteca Envjs 'browser environment' , cuya última versión de - 1.2 para rhino es env.Rhino.js (véase ASÍ: 6170676 para setTimeout en rhino).

Así que podemos hacer algo como esto: {[34]]}

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

... y ooops-no funciona:) Sin embargo, eso se aclara en No se puede ejecutar 1.2 debido al error getCurrentContext. - Env.js / Google Groups :

Lo sentimos, Envjs no puede ejecutarse con rhino incluido con java. usted tendrá que utilizar 1. 7rc2 disponible aquí:

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

Afortunadamente, en lugar de construir desde el código fuente, en Ubuntu podemos hacer directamente:

sudo apt-get install rhino

... dado que como indica la lista de archivos de rhino, este paquete instala js-1.7R2.jar. El paquete también instala un script rhino, que esencialmente es un envoltorio de shell para estos archivos Java (ver less $(which rhino)), por lo que podemos usarlo convenientemente, en lugar de escribir java -jar ... etc:

$ 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

 

Sin embargo, ahora intente incluyendo estas mismas líneas como un script, vamos a llamarlo test.js:

load('env.rhino.1.2.js'); // takes a while to load
print("loaded " + 1.2); 
print(window);

Y tratar de llamar rhino en él:

$ rhino test.js
loaded 1.2
js: uncaught JavaScript runtime exception: ReferenceError: "window" is not defined.

 

Oh querido - falla de nuevo, ¿ahora qué ? :) Bueno, afortunadamente, incluso esto se insinúa en Guía Envjs (nota: permite javascript para esa página, de lo contrario el código será apenas visible ) - en particular:

# Ejecutando env.Rhino.js desde un script o la línea de comandos
# Tenga en cuenta la optimización ajuste
java-jar lib / js.jar-opt -1 myscript.js

Correcto-así que finalmente, simplemente agregamos esta configuración de optimización, y:

$ 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]

... finalmente funciona:) EDIT: con env.rhino.1.2.js, también puede usar console.log() para escribir en stdout. EDITAR: Para ejecutar el depurador de Java rhino, consulte usar less $(which rhino) dónde está el particular .jars instalado, y luego llamar a java directamente ( el script rhino utiliza un conjunto diferente de conmutadores de línea de comandos, y por lo tanto no se puede persuadir a llamar al depurador):

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

 

Si intenta ejecutar el mismo script ahora con spidermonkey (vea también las instrucciones PPA en ¿La mejor manera de obtener spidermonkey js en Ubuntu 11.04?), obtendrás:

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

... es decir, spidermonkey no funcionará con env.rhino.1.2.js.

 

Bueno, espero que esto ayude a alguien,{[99]]} ¡Salud!

 6
Author: sdaau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:00:17

Basado en los lenguajes que se han desarrollado, el desarrollador necesita manejar explícitamente la memoria usando spidermonkey. Como rhino se ha desarrollado en Java, que incluye la recolección automática de basura y la máquina Virtual de JVM [Java Virtual Machine] se ha ajustado para una ejecución más rápida que c o c++ de la versión Java 1.6.

 -1
Author: Ratna Dinakar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-06 12:05:36