Rhino

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Rhino
Inicio de ldp para 260px50px moziyarinocrnt.jpg
Розробник(и) Mozilla Foundation, Mozilla Corporation
Стабільний випуск 1.7R4 (18 червня 2012; 860 днів тому )
Написано на Java
Операційна система крос-платформовий
Платформа Java Virtual Machine
Стан розробки активний
Тип рушій JavaScript
Ліцензія MPL
Сайт www.mozilla.org/rhino

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

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

Література[ред.ред. код]

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

Шаблон:ECMAScript