Rhino
Rhino — рушій JavaScript з відкритим сирцевим кодом. Він написаний повністю на Java та підтримується Mozilla Foundation[2]. Mozilla Foundation також підтримує іншу реалізацію рушія JavaScript, написану на C — SpiderMonkey[3].
![]() | |
Тип | рушій JavaScript |
---|---|
Розробник | Mozilla Foundation, Mozilla Corporation |
Стабільний випуск | 1.7R4 (18 червня 2012 ) |
Версії | 1.7.13 (2 вересня 2020)[1] |
Репозиторій | github.com/mozilla/rhino |
Платформа | Java Virtual Machine |
Операційна система | крос-платформовий |
Мова програмування | Java |
Стан розробки | активний |
Ліцензія | MPL |
Вебсайт | www.mozilla.org/rhino |
Rhino перетворює JavaScript скрипти в Java класи. Rhino працює і у компільованому, і інтерпретованих режимах. Він призначений для використання у застосунках на серверному боці, тому в ньому немає вбудованої підтримки для об'єктів браузера, які зазвичай асоціюються з 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].
У 2014 році платформа Java 8 одержала більш продуктивнішу бібліотеку Nashorn, яка замінила Rhino[8].
Застосування
Rhino і Java Scripting API використовуються для скриптингу Java застосунків[4]. Це дозволяє описувати бізнес-логіку простішою, ніж Java, мовою (залучаючи до цього фахівців у предметній області з базовими навичками програмування), забезпечити модульну, розширювану за рахунок плагінів архітектуру програми та інтеграцію у застосунок раніше існуючих скриптів[9].
Це також гарне рішення для JavaScript на стороні сервера при використанні Java-хостингу, кілька таких рішень було створено в рамках проєкту CommonJS[10].[11] Також Rhino можна використовувати спільно з Google App Engine[12].
Для роботи під управлінням ОС Android, поверх віртуальної машини Dalvik Rhino підходить слабо[13].
Приклад
Ось приклад 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" [9].
Виноски
- Release 1.7.13 — 2020.
- Rhino - JavaScript for Java (англ.). Архів оригіналу за 18 квітня 2012. Процитовано 20 лютого 2010.
- SpiderMonkey (JavaScript-C) Engine (англ.). Архів оригіналу за 18 квітня 2012. Процитовано 20 лютого 2010.
- John O'Conner (July 2006). Scripting for the Java Platform. Sun Developer Network. Архів оригіналу за 30 червня 2012. Процитовано 14 травня 2012.
- Rhino History (англ.). Mozilla Foundation. Архів оригіналу за 18 квітня 2012. Процитовано 21 лютого 2010.
- JavaScript: The Definitive Guide, Fifth Edition - O'Reilly Media (англ.). Архів оригіналу за 18 квітня 2012. Процитовано 20 лютого 2010. — обкладинка книги
- New in Rhino 1.7R1 (англ.). Mozilla Foundation. Процитовано 21 лютого 2010.
- Paul Krill (05 жовтня 2011). Oracle prepping its Nashorn JavaScript engine. InfoWorld. Архів оригіналу за 30 червня 2012. Процитовано 15 травня 2012.
- Том МакКвини (29.05.2008). Используйте динамические языки динамично: Часть 1. Введение в Java scripting API. IBM developerWorks. Архів оригіналу за 30.06.2012. Процитовано 15 травня 2012.
- CommonJS
- Avi Deitcher. Simplicity and Performance: JavaScript on the Server // Linux Journal. — April 2011. — № 204.
- Rhino For Webapps Архівовано 19 липня 2013 у Wayback Machine., Javascript on AppEngine
- Tony Mobily (15 березня 2012). Writing native Android applications with Javascript? Not yet. Free Software Magazine. Архів оригіналу за 30 червня 2012. Процитовано 15 травня 2012.
Література
- Том МакКвини (вересень 2008). Используйте динамические языки динамично (в 2-х частях). IBM developerWorks. Архів оригіналу за 27 травня 2012. Процитовано 14 травня 2012.
- Андрей Чиорояну (червень 2010). JavaScript EE (в 2-х частях). IBM developerWorks. Архів оригіналу за 27 травня 2012. Процитовано 14 травня 2012.
- Ted Neward (27 липня 2010). 5 things you didn’t know about … the Java Scripting API (An easier way to do scripting on the Java platform). IBM developerWorks. Архів оригіналу за 30 червня 2012. Процитовано 14 травня 2012.