Rhino es un motor de JavaScript escrito íntegramente en Java y administrado por la Fundación Mozilla como software de código abierto . Es independiente del motor SpiderMonkey , que también está desarrollado por Mozilla, pero está escrito en C++ y se utiliza en Mozilla Firefox .
El proyecto Rhino se inició en Netscape en 1997. En ese momento, Netscape estaba planeando producir una versión de Netscape Navigator escrita completamente en Java y, por lo tanto, necesitaba una implementación de JavaScript escrita en Java. Cuando Netscape dejó de trabajar en Javagator , como se lo llamaba, el proyecto Rhino se terminó como motor de JavaScript. Desde entonces, un par de empresas importantes (incluida Sun Microsystems ) han licenciado Rhino para su uso en sus productos y han pagado a Netscape por ello, lo que permite que continúe el trabajo en él.
Originalmente, Rhino compilaba todo el código JavaScript en bytecode Java en archivos de clase Java generados . Esto producía el mejor rendimiento, a menudo superando a la implementación de C++ de JavaScript ejecutada con compilación justo a tiempo (JIT), pero adolecía de dos fallas. Primero, el tiempo de compilación era largo ya que generar bytecode y cargar las clases generadas era un proceso que consumía muchos recursos. Además, la implementación efectivamente perdía memoria ya que la mayoría de las máquinas virtuales Java (JVM) no recopilaban clases no utilizadas o las cadenas que se internaban como resultado de cargar un archivo de clase. [ cita requerida ] (Esto ha cambiado en versiones posteriores de Java).
Como resultado, en el otoño de 1998, Rhino agregó un modo interpretativo. El código de generación de archivos de clase se trasladó a un paquete opcional cargado dinámicamente . La compilación es más rápida y cuando los scripts ya no se utilizan, se pueden recopilar como cualquier otro objeto Java.
Rhino fue lanzado a la Fundación Mozilla en abril de 1998. Originalmente, la generación de archivos de clase de Rhino se había retrasado. Sin embargo, los licenciantes de Rhino ahora han acordado lanzar todo Rhino como código abierto , incluida la generación de archivos de clase. Desde su lanzamiento como código abierto, Rhino ha encontrado una variedad de usos y un número cada vez mayor de personas han contribuido al código. [1] El proyecto recibe su nombre del animal en la portada del libro de JavaScript de O'Reilly Media . [2] A partir de la versión 1.7R11 (mayo de 2019), Rhino es compatible con Java 8 y posteriores, y admite una serie de características de ECMAScript ES6/ES2015. [3]
Rhino convierte scripts de JavaScript en clases . Rhino funciona tanto en modo compilado como interpretado . Está pensado para usarse en aplicaciones de escritorio o del lado del servidor , por lo que no tiene compatibilidad integrada con los objetos del navegador web que se asocian comúnmente con JavaScript.
Rhino se puede utilizar como depurador mediante el shell de Rhino . El shell de JavaScript proporciona una forma sencilla de ejecutar scripts en modo por lotes o dentro de un entorno interactivo para programación exploratoria. Se puede utilizar en aplicaciones mediante la incorporación de Rhino.
Una versión ligeramente modificada de Rhino 1.6r2 viene incluida en la versión 6 de Java SE de Sun Microsystems , que se lanzó en diciembre de 2006. Esto facilita la integración de JavaScript como parte de los programas Java y el acceso a los recursos Java desde JavaScript. Otras implementaciones de Java 6 pueden diferir.