Введение

Rhino — это JavaScript-движок, полностью написанный на Java и поддерживаемый Mozilla Foundation как программное обеспечение с открытым исходным кодом. Он отличается от движка SpiderMonkey, который также разработан Mozilla, но написан на C++ и используется в Mozilla Firefox.

История

Проект Rhino был запущен в Netscape в 1997 году. В то время Netscape планировала выпустить версию Netscape Navigator, написанную полностью на Java, и поэтому ей требовалась реализация JavaScript, написанная на Java. Когда Netscape прекратила работу над Javagator, как он назывался, проект Rhino был завершен как движок JavaScript. С тех пор несколько крупных компаний (включая Sun Microsystems) лицензировали Rhino для использования в своих продуктах и платили Netscape за это, что позволяло продолжать работу над ним. Изначально Rhino компилировал весь код JavaScript в Java-байткод, генерируя Java-файлы классов. Это обеспечивало наилучшую производительность, часто превосходя реализацию JavaScript на C++ с использованием JIT-компиляции (компиляции "на лету"), но имело два недостатка. Во-первых, время компиляции было значительным, поскольку генерация байт-кода и загрузка сгенерированных классов были ресурсоемкими процессами. Во-вторых, реализация фактически приводила к утечке памяти, поскольку большинство виртуальных машин Java (JVM) не собирали неиспользуемые классы или строки, которые интернировались в результате загрузки файла класса. (Это изменилось в более поздних версиях Java.) В результате осенью 1998 года в Rhino был добавлен интерпретационный режим. Код генерации файлов классов был перемещен в дополнительный, динамически загружаемый пакет. Компиляция стала быстрее, и когда скрипты больше не используются, их можно собирать как любые другие объекты Java. Rhino был передан Mozilla Foundation в апреле 1998 года. Изначально выпуск генерации Java-файлов классов Rhino был отложен. Однако лицензиары Rhino теперь согласились выпустить весь Rhino как открытый исходный код, включая генерацию файлов классов. С момента выпуска в качестве открытого исходного кода Rhino нашел множество применений, и все больше людей вносят свой вклад в его код. Проект получил свое название от животного, изображенного на обложке книги JavaScript от O'Reilly Media. По состоянию на версию 1.7R11 (май 2019 года) Rhino поддерживает Java 8 и выше, а также ряд функций ECMAScript ES6/ES2015.

Использование

Rhino преобразует скрипты JavaScript в классы. Rhino работает как в компилируемом, так и в интерпретируемом режиме. Он предназначен для использования в настольных или серверных приложениях, поэтому в нем отсутствует встроенная поддержка объектов веб-браузера, обычно используемых в JavaScript. Rhino можно использовать как отладчик, используя оболочку Rhino. JavaScript-оболочка предоставляет простой способ запуска скриптов в пакетном режиме или в интерактивной среде для исследовательского программирования. Rhino можно использовать в приложениях путем его встраивания. Незначительно модифицированная версия Rhino 1.6r2 поставляется вместе с выпуском Java SE версии 6 от Sun Microsystems, который был выпущен в декабре 2006 года. Это упрощает интеграцию JavaScript в Java-программы и доступ к Java-ресурсам из JavaScript. Другие реализации Java 6 могут отличаться.