Interested Article - Rhino

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 Engine .

Для работы под управлением ОС 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[0]);
            engine.eval("print('Hello ' + name + '!')");
        } catch (ScriptException ex) {
            ex.printStackTrace();
        }    
    }
}

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

Примечания

  1. (англ.) . Дата обращения: 20 февраля 2010. Архивировано из 5 декабря 2008 года.
  2. (англ.) . Дата обращения: 20 февраля 2010. Архивировано из 18 апреля 2012 года.
  3. (англ.) . Дата обращения: 20 февраля 2010. Архивировано из 18 апреля 2012 года.
  4. John O'Conner . Sun Developer Network (июль 2006). Дата обращения: 14 мая 2012. Архивировано из 30 июня 2012 года.
  5. (англ.) . Mozilla Foundation . Дата обращения: 21 февраля 2010. Архивировано из 18 апреля 2012 года.
  6. (англ.) . Дата обращения: 20 февраля 2010. Архивировано из 18 апреля 2012 года. — обложка книги
  7. (англ.) . Mozilla Foundation . Дата обращения: 21 февраля 2010. Архивировано из 5 апреля 2008 года.
  8. . Дата обращения: 3 мая 2014. 3 мая 2014 года.
  9. Paul Krill. . InfoWorld (5 октября 2011). Дата обращения: 15 мая 2012. Архивировано из 30 июня 2012 года.
  10. Том МакКвини. . IBM developerWorks (29 мая 2008). Дата обращения: 15 мая 2012. Архивировано из 30 июня 2012 года.
  11. . Дата обращения: 15 мая 2012. 30 сентября 2013 года.
  12. Avi Deitcher. // Linux Journal . — April 2011. — № 204 . 8 мая 2012 года.
  13. от 10 июня 2015 на Wayback Machine , Javascript on AppEngine
  14. Tony Mobily. (15 марта 2012). Дата обращения: 15 мая 2012. Архивировано из 30 июня 2012 года.

Литература

  • Том МакКвини. . IBM developerWorks (сентябрь 2008). Дата обращения: 14 мая 2012. Архивировано из 27 мая 2012 года.
  • Андрей Чиорояну. . IBM developerWorks (июнь 2010). Дата обращения: 14 мая 2012. 27 мая 2012 года.
  • Ted Neward. . IBM developerWorks (27 июля 2010). Дата обращения: 14 мая 2012. Архивировано из 30 июня 2012 года.

Ссылки

  • (англ.)
Источник —

Same as Rhino