راينو (محرك جافا سكريبت)

راينو  هو محرك جافا سكريبت مفتوح المصدر مكتوب بلغة جافا ويُدار من طرف مؤسسة موزيلا. والتي توفر محركا آخر للجافاسكريبت مكتوب بلغة سي والذي يعرف بـسبايدر مونكي.

راينو يقوم بتحويل برمجيات الجافاسكربت إلى أصناف (class) برمجية. وهو يعمل بكلا من نمطي الـ (compiled) والـ (interpreted) وقد خُطط لجعله يعمل لإعداد تطبيقات برمجية تعمل على الخادم (Server) كما في اي اس بي دوت نيت وبي اتش بي غير أنه لن تكون حاجة لدعم إضافي في متصفح الانترنت البراوزر.

إصدار حديث من راينو (راينو 1.6) تم إصداره لتتم كتابة الكود الخاصة به بواسطة لغة جافا وقد أنتجته الشركة المالكة لجافا صن ميكروسيستمز وتم دمجه مع جافا 6 في سنة 2006 مما جعل التعامل مع الجافاسكربت عن طريق لغة البرمجة جافا امرا سهلا.

نبذة تاريخية 
بدأ مشروع راينو في سنة 1997 بمؤسسة نيتسكيب للاتصالات، والتي كانت تخطط لإنتاج إصدار من متصفح نيتسكيب المكتوب بلغة جافا كلية وبناء على ذلك فقد احتاجت إلى دمج الجافاسكربت ضمن لغة الجافا. وعندما توقف المشروع وترك العمل على المتصفح الجديد، تم إنهاء محرك راينو وقامت صن ميكروسيستمز بشراء المشروع ودفع ثمن الرخصة لإكمال العمل عليه.

في الأصل تم دمج جميع كودات الجافاسكربت ضمن الجافا ضمن كلاس (صنف) برمجي خاص بذلك وكان العمل بجودة عالية جدا تتفوق على دمج الجافاسكربت ضمن لغة سي. غير أن المحرك عانى من مشكلتين: أولاهما أن التنفيذ كان يستغرق وقتا طويلا لأن كلاس الجافاسكربت كان كبير الحجم. وأيضا فقد كان هناك مشكلة [[تسرب في الذاكرة) (memory leak) لأن معظم مشغلات الجافا لا تتضمن تطبيق جامع للقمامة (Garbage collection).

وبذلك فقد تمت إضافة نمط التشغيل الجديد للجافاسكربت في سنة 1998 (interpretive mode) وتم تحويل الكلاس إلى نمط اختياري وضمن مكتبة مدمجة (Dll) وبذلك زادت سرعة التنفيذ عن السابق ولم يعد التعامل مع الجافاسكربت داخل الجافا كبقية مكونات الجافا.
وتم نشر الإصدار الأول من موزيلا في سنة 1998 وتم حجز الإصدار المصنف الذي يحتوي على كلاسات (اصناف) برمجية والذي عانى من مشاكل، واليوم وافقت موزيلا على نشر راينو بما فيه الإصدار الذي يحتوي على كلاسات كمشروع مفتوح المصدر قابل للتعديل (Open Source Project)ـ

مثال 
المثال التالي مكتوب بلغة الجافا حيث يستخدم ""راينو"" من أجل تنفيذ عملية حسابية مكتوبة بلغة الجافاسكريبت:

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();
        // Now we can go and get a script engine we want. 
        // This can be done either by finding a factory that supports 
        // our required scripting language 
        // (engine = factory.getScriptEngine();)
        // or by requesting a script engine that supports a 
        // given language by name from the script engine manager.
        ScriptEngine engine = mgr.getEngineByName("JavaScript");
        
        // Now we have a script engine instance that 
        // can execute some JavaScript
        try {
            engine.put("name", args[0]);
            engine.eval("print('Hello ' + name + '!')");
        } catch (ScriptException ex) {
            ex.printStackTrace();
        }    
    }
}

المصادر

وصلات خارجية 
 
 Rhino - JavaScript for Java
 Download Rhino 
 Download Archive (Main download page above doesn't work currently)
 5 things you didn't know about... the Java Scripting API by Ted Neward

برمجيات متعددة المنصات
محركات جافا سكريبت
موزيلا