Rhino — движок JavaScript с открытым исходным кодом. Он написан полностью на Java и поддерживается Mozilla Foundation. Mozilla Foundation также поддерживает другую реализацию движка JavaScript, написанную на C — SpiderMonkey.
Rhino преобразует JavaScript-скрипты в Java-классы. Rhino работает и в компилируемом и интерпретируемом режимах. Он предназначен для использования в server-side приложениях, поэтому в нём нет встроенной поддержки для объектов браузера, которые обычно ассоциируются с JavaScript.
Rhino может использоваться как отладчик при использовании Rhino shell. Он также может использоваться в приложениях при встраивании Rhino.
Незначительно модифицированная версия Rhino 1.6r2 поставляется вместе с Sun Microsystems Java SE 6, которая была выпущена в декабре 2006. Это упрощает интеграцию JavaScript в Java программы и доступ к Java-ресурсам из JavaScript. Другие реализации Java 6 могут иметь отличия.
История Проект Rhino был начат в Netscape в 1997 году. В то время Netscape планировала разработать версию Navigator, написанную полностью на Java и поэтому ей требовалась реализация JavaScript, написанная на Java. Когда Netscape остановила работу над «Javagator», как он был назван, проект Rhino был закончен как JavaScript движок. С того времени несколько крупных компаний (включая Sun Microsystems) лицензировали Rhino для использования в своих проектах и платили для этого Netscape, позволяя продолжать работу над ним.
Изначально Rhino компилировал весь JavaScript-код в байткод Java в сгенерированных файлах классов. Это давало лучшую производительность (при запуске на JIT часто превышавшую производительность C-реализации JavaScript), но страдала от двух недостатков. Во-первых, время компиляции было большим, поскольку генерация Java байткода и загрузка сгенерированных классов были тяжеловесным процессом. Во-вторых, реализация допускала большие утечки памяти, поскольку большинство JVM не собирало неиспользуемые классы или строки, которые интернировались как результат загрузки класс-файла.
Поэтому осенью 1998 в Rhino был добавлен интерпретируемый режим. Генерация кодов класс-файлов была перемещена в опциональную динамически-загружаемую библиотеку. Компиляция ускорилась, и когда скрипты больше не использовались, они могли быть собраны как и любые другие Java-объекты.
Rhino был передан Mozilla Foundation в апреле 1998. В результате перехода Rhino в open source он нашёл различные применения и большее количество людей стало вносить вклад в код.
Проект получил своё название от животного (носорога) на обложке книги о JavaScript, изданной O'Reilly Media — обложка книги.
Начиная с версии 1.7R1, Rhino основывается на платформе Java 5 и поддерживает JavaScript версии 1.7.
Фирма Oracle объявила, что ведётся разработка более производительной, чем Rhino, JavaScript-реализации, которая названа Nashorn и была включена в состав Java 8 в 2014 году.
Применение
Rhino и Java Scripting API используются для скриптинга Java-приложений. Это позволяет описывать бизнес-логику на более простом, чем Java, языке (привлекая к этому специалистов в предметной области с базовым навыком программирования), обеспечить модульную, расширяемую за счёт плагинов архитектуру приложения и интеграцию в приложение ранее существующих скриптов.
Это также хорошее решение для JavaScript на стороне сервера при использовании Java-хостинга, несколько таких решений было создано в рамках проекта CommonJS. В том числе Rhino можно использовать совместно с Google App EngineRhino For Webapps , Javascript on AppEngine.
Для работы под управлением ОС Android поверх виртуальной машины Dalvik Rhino подходит слабо.
Пример
Вот пример Java-кода, запускающего JavaScript print('Hello, world!')
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException;
public class RhinoEngine { public static void main(String[] args) { ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine engine = mgr.getEngineByName("JavaScript");
// Теперь у нас есть экземпляр движка и мы можем выполнить JavaScript try { engine.put("name", args); engine.eval("print('Hello ' + name + '!')"); } catch (ScriptException ex) { ex.printStackTrace();
ScriptEngineManager — это основной класс, используемый при работе с пакетом скриптинга (большинство других — интерфейсы), путём создания его экземпляров. В случае использования JavaScript-движка Rhino надо задать его имя "JavaScript".
Примечания
Литература
Ссылки Страница проекта на сайте Mozilla
Категория:JavaScript Категория:Свободное программное обеспечение, написанное на Java Категория:Проекты Mozilla Категория:Движки JavaScript