Введение
Rhino — это JavaScript-движок, полностью написанный на Java и поддерживаемый Mozilla Foundation как программное обеспечение с открытым исходным кодом. Он отличается от движка SpiderMonkey, который также разработан Mozilla, но написан на C++ и используется в Mozilla Firefox.
Rhino is a JavaScript engine written fully in Java and managed by the Mozilla Foundation as open source software. It is separate from the SpiderMonkey engine, which is also developed by Mozilla, but written in C++ and used in 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 могут отличаться.