Rhino

Rhino — движок JavaScript с открытым исходным кодом. Он написан полностью на Java и поддерживается Mozilla Foundation[2]. Mozilla Foundation также поддерживает другую реализацию движка JavaScript, написанную на C — SpiderMonkey[3].

Rhino
Логотип программы Rhino
Тип движок JavaScript
Разработчики Mozilla Foundation / Mozilla Corporation
Написана на Java
Операционная система Кроссплатформенное программное обеспечение
Первый выпуск 1997
Аппаратная платформа Java Virtual Machine
Последняя версия 1.7.15 (апрель 2024 года)
Репозиторий github.com/mozilla/rhino
Лицензия MPL 2.0/GPL 2.0[1]
Сайт mozilla.github.io/rhino/

Rhino преобразует JavaScript-скрипты в Java-классы. Rhino работает и в компилируемом и интерпретируемом режимах. Он предназначен для использования в server-side приложениях, поэтому в нём нет встроенной поддержки для объектов браузера, которые обычно ассоциируются с JavaScript.

Rhino может использоваться как отладчик при использовании Rhino shell. Он также может использоваться в приложениях при встраивании Rhino.

Незначительно модифицированная версия Rhino 1.6r2 поставляется вместе с Sun Microsystems Java SE 6, которая была выпущена в декабре 2006[4]. Это упрощает интеграцию 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 он нашёл различные применения и большее количество людей стало вносить вклад в код[5].

Проект получил своё название от животного (носорога) на обложке книги о JavaScript, изданной O'Reilly Media[5][6].

Начиная с версии 1.7R1, Rhino основывается на платформе Java 5 и поддерживает JavaScript версии 1.7[7].

Фирма Oracle объявила, что ведётся разработка более производительной, чем Rhino, JavaScript-реализации, которая названа Nashorn и была включена в состав Java 8 в 2014 году[8][9].

Применение

править

Rhino и Java Scripting API используются для скриптинга Java-приложений[4]. Это позволяет описывать бизнес-логику на более простом, чем Java, языке (привлекая к этому специалистов в предметной области с базовым навыком программирования), обеспечить модульную, расширяемую за счёт плагинов архитектуру приложения и интеграцию в приложение ранее существующих скриптов[10].

Это также хорошее решение для JavaScript на стороне сервера при использовании Java-хостинга, несколько таких решений было создано в рамках проекта CommonJS[11][12]. В том числе Rhino можно использовать совместно с Google App Engine[13].

Для работы под управлением ОС Android поверх виртуальной машины Dalvik Rhino подходит слабо[14].

Пример

править

Вот пример 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[0]);
            engine.eval("print('Hello ' + name + '!')");
        } catch (ScriptException ex) {
            ex.printStackTrace();
        }    
    }
}

ScriptEngineManager — это основной класс, используемый при работе с пакетом скриптинга (большинство других — интерфейсы), путём создания его экземпляров. В случае использования JavaScript-движка Rhino надо задать его имя "JavaScript"[10].

Примечания

править

{{примечания|

Литература

править

Ссылки

править
  1. Rhino license - MDC (англ.). Дата обращения: 20 февраля 2010. Архивировано из оригинала 5 декабря 2008 года.
  2. Rhino - JavaScript for Java (англ.). Дата обращения: 20 февраля 2010. Архивировано из оригинала 18 апреля 2012 года.
  3. SpiderMonkey (JavaScript-C) Engine (англ.). Дата обращения: 20 февраля 2010. Архивировано из оригинала 18 апреля 2012 года.
  4. 1 2 John O'Conner Scripting for the Java Platform. Sun Developer Network (июль 2006). Дата обращения: 14 мая 2012. Архивировано из оригинала 30 июня 2012 года.
  5. 1 2 Rhino History (англ.). Mozilla Foundation. Дата обращения: 21 февраля 2010. Архивировано из оригинала 18 апреля 2012 года.
  6. JavaScript: The Definitive Guide, Fifth Edition - O'Reilly Media (англ.). Дата обращения: 20 февраля 2010. Архивировано из оригинала 18 апреля 2012 года. — обложка книги
  7. New in Rhino 1.7R1 (англ.). Mozilla Foundation. Дата обращения: 21 февраля 2010. Архивировано из оригинала 5 апреля 2008 года.
  8. Java Scripting Enhancements. Дата обращения: 3 мая 2014. Архивировано 3 мая 2014 года.
  9. Paul Krill. Oracle prepping its Nashorn JavaScript engine. InfoWorld (5 октября 2011). Дата обращения: 15 мая 2012. Архивировано из оригинала 30 июня 2012 года.
  10. 1 2 Том МакКвини. Используйте динамические языки динамично: Часть 1. Введение в Java scripting API. IBM developerWorks (29 мая 2008). Дата обращения: 15 мая 2012. Архивировано из оригинала 30 июня 2012 года.
  11. CommonJS. Дата обращения: 15 мая 2012. Архивировано 30 сентября 2013 года.
  12. Avi Deitcher. Simplicity and Performance: JavaScript on the Server // Linux Journal. — April 2011. — № 204. Архивировано 8 мая 2012 года.
  13. Rhino For Webapps Архивная копия от 10 июня 2015 на Wayback Machine, Javascript on AppEngine
  14. Tony Mobily. Writing native Android applications with Javascript? Not yet. Free Software Magazine[англ.] (15 марта 2012). Дата обращения: 15 мая 2012. Архивировано из оригинала 30 июня 2012 года.