Rhino

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 та підтримується Mozilla Foundation[1]. Mozilla Foundation також підтримує іншу реалізацію рушія JavaScript, написану на C — SpiderMonkey[2].

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.

Література

  • Том МакКвини (вересень 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.

Посилання

  • Сторінка проєкту на сайті Mozilla [Архівовано 18 квітня 2012 у WebCite](англ.)

Шаблон:ECMAScript

  • п
  • о
  • р
Програмне забезпечення Mozilla

Firefox · Thunderbird · Sunbird · Firefox for mobile · Firefox Focus · Camino · Chromeless · Minimo · Prism · VPN
Інтернетовий пакет SeaMonkey: Mozilla Calendar · Mozilla Mail & Newsgroups · Mozilla Composer · ChatZilla[en] · Lightning[en]

Компоненти

Gecko · Jetpack · Necko · Servo · SpiderMonkey · Rhino · DOM Inspector · Venkman

Засоби розробки

Mozilla Skywriter[en] · Bugzilla · Bonsai · Rust · Tinderbox · XUL · XPInstall

  • п
  • о
  • р
Платформи Java
Технології Sun
Squawk · Java Development Kit · OpenJDK · JavaFX
Основні технології Java
Основні сторонні технології
JRockit · GNU Classpath · Kaffe · TopLink · Apache Harmony · Apache Struts · Spring framework · Hibernate · JBoss application server · Tapestry · Jazelle
Історія
Мови програмування JVM
BeanShell · Clojure · Groovy · Java Tcl · JRuby · Jython · Processing · Rhino · Scala · більше…
Java конференції
JavaOne