Noté que ubuntu 10.04 eliminó el paquete spidermonkey. Sin embargo, Rhino parece que todavía está allí. ¿Cuáles son las diferencias entre rhino y spidermonkey (además del idioma en el que están escritos)? ¿Y por qué eliminaron a spidermonkey?rhino vs spidermonkey
Respuesta
Me temo que la diferencia es el idioma que están escritos en, 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 secuencias de comandos JavaScript en clases Java. Rhino funciona tanto en el modo compilado como en el modo interpretado. Está destinado a ser utilizado en las aplicaciones del lado del servidor , por lo tanto, no es compatible con los objetos del navegador comúnmente asociados con JavaScript.
Hay tres partes importantes aquí. En primer lugar, no hay DOM (también es cierto para SpiderMonkey). En segundo lugar, el lado del servidor es el uso previsto. Se supone que debes poder usar Rhino en tu gran aplicación empresarial para automatizar cosas de forma más ad-hoc. Finalmente, el Javascript se convierte en una clase como el resto de la jerarquía de clases de Java y puede interactuar con las clases de Java (vea el ejemplo del código en esa página).
En resumen, podría manipular fácilmente sus POJO/objetos basados en JPA/Message Beans/lo que quiera llamar a su clase Java "empresarial", todo desde una secuencia de JavaScript ejecutada a través de Rhino. Compare esto con Jython, donde puede usar la sintaxis y las clases de Python para interactuar con Java. Es muy útil si tiene algunos zumbidos de JavaScript/Python dando vueltas por la oficina sin nada que hacer.
SpiderMonkey por el contrario es más como LUA. Es un lenguaje de scripting. ¿Cual es la diferencia? Bueno, dudo que tengas acceso a printf directamente, por ejemplo. En lugar de poder acceder directamente a las clases de Java, no puede acceder directamente a las clases de C/C++. En su lugar, utiliza C/C++ para programar características adicionales del idioma.
En resumen, Rhino permite a JS interactuar con su código. SpiderMonkey es más como un kit de compilación de "hágalo usted mismo" con la ventaja añadida de que un lenguaje estándar que mucha gente sabe que ya se ha creado y solo necesita agregarle sus personalizaciones.
Gracias - interesante y útil. Pero Ubuntu a menudo tiene más de un paquete para resolver un problema en particular. Entonces la pregunta sigue siendo: "¿por qué eliminaron a spidermonkey"? – nealmcb
@nealmcb Honestamente, no estoy seguro. ¿Tal vez quien mantuvo el paquete para Ubuntu dejó de hacerlo y lo abandonaron? Creo que el requisito de estar en "main" es suficiente mantenimiento regular y tracking upstream, etc. Ha pasado un tiempo desde que escribí esto, y desde que usé Ubuntu, pero cuando lo hice, recuerdo una serie de paquetes que caído de "principal" a "universo" debido a problemas de mantenimiento. Sospecho que dado el aumento de PPA, probablemente pueda obtener SpiderMonkey si lo desea. –
Sobre la base de los idiomas que han sido desarrollados, desarrollador necesita manejar de forma explícita el uso de la memoria spidermonkey. Como el rinoceronte se ha desarrollado en Java, que incluye la recolección automática de basura y la máquina virtual de JVM se han ajustado para una ejecución más rápida que c o C++ desde la versión de Java 1.6.
-1 para la declaración falsa: "desarrollador necesita manejar explícitamente memoria usando spidermonkey ". JavaScript es un lenguaje recogido de basura, independientemente del idioma en el que se implemente. El shell de Spidermonkey en particular tiene la siguiente función expuesta en el objeto global: gczeal (nivel) - "Cuán celoso debe ser el recolector de basura". Entonces claramente Spidermonkey también tiene recolección de basura. Además, cita requerida en la declaración: "Las JVM se han ajustado para una ejecución más rápida que c o C++ desde la versión de Java 1.6". No es cierto en la mayoría de los casos, de acuerdo con http://bit.ly/fyyrTX – jbeard4
Se actualizará una vez que obtenga el enlace .. gracias por la información –
https://developer.mozilla.org/en/SpiderMonkey_Garbage_Collection_Tips este enlace claramente da algunos consejos para manejar la memoria Además, supongo que la pregunta era acerca de la integración con API. Por favor revise –
Ya que tengo grandes dificultades para encontrar ejemplos básicos sobre cáscaras de JavaScript/intérpretes, especialmente rhino
, en Ubuntu - Voy a poner esto aquí ...
Básicamente, yo estaba un poco confundido sobre lo que debe instalar, y qué tipo de línea de comando llamar :)
Antes que nada, encontré Bug #705339 in rhino (Ubuntu): “Rhino shell crashes with NullPointerException” - y me di cuenta de que OpenJDK realmente instala un archivo Java rhino.jar
. Así que si usted tiene que, se puede hacer de inmediato en la cáscara del 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 esto es todo lo suficientemente bueno para cosas básicas ...Sin embargo, si desea utilizar el objeto DOM window
, o la función setTimeout()
, básicamente, esas son "implementaciones específicas del navegador" (para setTimeout
, consulte también SO:7286178), y un motor de scripts sin navegador no las "conocería" .
Sin embargo, al menos por rhino
, que se subsana por la biblioteca Envjs 'navegador medio ambiente', cuyo Latest release - 1.2 para rhino
es env.rhino.js (ver SO:6170676 para setTimeout
en rhino
).
por lo que podemos hacer algo como esto:
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, esto se aclara en Can't run 1.2 due to getCurrentContext error. - Env.js | Google Groups:
Lo sentimos, Envjs puede No corras con el rinoceronte empaquetado con java. tendrá que utilizar 1.7rc2 disponibles desde aquí:
Afortunadamente, en lugar de construir desde la fuente, en Ubuntu podemos hacer directamente:
sudo apt-get install rhino
... ya como dice rhino filelist, este paquete instala js-1.7R2.jar
. El paquete también instala un script rhino
, que en esencia es una envoltura del shell para estos archivos Java (ver less $(which rhino)
) - para que podamos usar convenientemente que, 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 incluir estas mismas líneas que una secuencia de comandos, vamos a llamarlo test.js
:
load('env.rhino.1.2.js'); // takes a while to load
print("loaded " + 1.2);
print(window);
e intentar llamar rhino
en él:
$ rhino test.js
loaded 1.2
js: uncaught JavaScript runtime exception: ReferenceError: "window" is not defined.
Oh - la falla de nuevo, y ahora qué? :) Bueno, por suerte, incluso esto se hace alusión alguna a en Envjs Guide (nota: no permitir Javascript para esa página, de lo contrario el código será apenas visible) - en particular:
# Ejecución de env.rhino. js desde un script o la línea de comando
# Tenga en cuenta la configuración de optimización
java -jar lib/js.jar -opt -1 myscript.js
derecha - por lo que finalmente, sólo tenemos que añadir 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 se puede utilizar console.log()
escribir en la salida estándar . EDIT: Para ejecutar el depurador rhino
Java, consulte usando less $(which rhino)
dónde están los .jars particulares instalados, y luego llamar java
directamente (el guión rhino
utiliza un conjunto diferente de parámetros de línea de comandos, por lo que no puede ser persuadido para llamar al depurador) :
java -cp /usr/share/java/js.jar org.mozilla.javascript.tools.debugger.Main test.js
Si intenta ejecutar el mismo guión ahora con spidermonkey
(ver también las instrucciones de PPA en Best way to get spidermonkey js on Ubuntu 11.04?), obtendrá:
$ js test.js
env.rhino.1.2.js:1247: ReferenceError: Packages is not defined
... es decir, spidermonkey
no funcionan con env.rhino.1.2.js
.
Bueno, espero que esto ayude a alguien,
Salud!
has hecho mi día, gracias! – Rafa
- 1. Pruebas de rendimiento de Rhino VS Spidermonkey
- 2. SpiderMonkey vs JavaScriptCore vs.
- 3. Rhino simulacro vs Typemock vs JustMock vs
- 4. ¿Cuál es la diferencia entre los motores de JavaScript de Rhino y Spidermonkey?
- 5. nServiceBus vs Mass Transit vs Rhino Service Bus vs otro?
- 6. se burla de Rhino - Trozo .Expect vs .AssertWasCalled
- 7. Error al compilar un programa SpiderMonkey incrustado
- 8. ¿La mejor manera de obtener spidermonkey js en Ubuntu?
- 9. Rhino Commons y Rhino Mocks Documentos de referencia?
- 10. Rhino Mocks Tutoriales paso a paso
- 11. jquery en rhino
- 12. Rhino Mocks Parcial Mock
- 13. Rhino Mocks - Usar Arg.Matches
- 14. Rhino Mocks: Mocking HttpRequestBase.Files
- 15. Rhino Mocks, VerifyAllExpectations
- 16. Rhino Mocks & Compact Framework
- 17. ¿Alguien usa Rhino Security?
- 18. AssertWasCalled in rhino mocks
- 19. Tutoriales para Mozilla Rhino
- 20. Soporte de Rhino y DOM
- 21. Función de impresión de Rhino
- 22. Cómo implementar C# Rhino Security
- 23. configure rhino en javascript Eclipse
- 24. Lea el archivo con Rhino
- 25. Rhino Mocks - ¿Realmente necesitamos talones?
- 26. Rhino Mocks AAA ¿Arranque rápido?
- 27. ¿Cómo puedo generar algo en Rhino?
- 28. Mocking COM Interfaces usando Rhino Mocks
- 29. rhino-mocks - buenas aplicaciones de muestra
- 30. Obstaculizar una propiedad obtener usando Rhino Mocks
Informe de errores de Ubuntu relacionado discutido [aquí] (https://bugs.launchpad.net/ubuntu/+source/xulrunner-1.9.2/+bug/536950) – richaux