Rhinoрушій JavaScript з відкритим сирцевим кодом. Він написаний повністю на Java та підтримується Mozilla Foundation[1]. Mozilla Foundation також підтримує іншу реалізацію рушія JavaScript, написану на CSpiderMonkey[2].

Rhino
Тип рушій JavaScript
Розробник Mozilla Foundation, Mozilla Corporation
Стабільний випуск 1.7R4 (18 червня 2012; 11 років тому (2012-06-18))
Платформа Java Virtual Machine
Операційна система крос-платформовий
Мова програмування Java
Стан розробки активний
Ліцензія MPL
Репозиторій github.com/mozilla/rhino
Вебсайт www.mozilla.org/rhino

Rhino перетворює JavaScript скрипти в Java класи. Rhino працює і у компільованому, і інтерпретованих режимах. Він призначений для використання у застосунках на серверному боці, тому в ньому немає вбудованої підтримки для об'єктів браузера, які зазвичай асоціюються з JavaScript.

Rhino може використовуватися як зневаджувач при використанні Rhino Shell. Він також може використовуватися в застосунках при вбудовуванні Rhino.

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

Проєкт отримав свою назву від тварини на обкладинці книги про JavaScript, виданої O'Reilly Media[4][5].

Починаючи з версії 1.7R1, Rhino ґрунтується на платформі Java 5 і підтримує JavaScript версії 1.7[6].

У 2014 році платформа Java 8 одержала більш продуктивнішу бібліотеку Nashorn, яка замінила Rhino[7].

Застосування ред.

Rhino і Java Scripting API використовуються для скриптингу Java застосунків[3]. Це дозволяє описувати бізнес-логіку простішою, ніж Java, мовою (залучаючи до цього фахівців у предметній області з базовими навичками програмування), забезпечити модульну, розширювану за рахунок плагінів архітектуру програми та інтеграцію у застосунок раніше існуючих скриптів[8].

Це також гарне рішення для JavaScript на стороні сервера при використанні Java-хостингу, кілька таких рішень було створено в рамках проєкту CommonJS[9].[10] Також Rhino можна використовувати спільно з Google App Engine[11].

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

Приклад ред.

Ось приклад 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].

Виноски ред.

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

Література ред.

Посилання ред.

Шаблон:ECMAScript