في الآونة الآخيرة أصبحت أشاهد الكثير من المواضيع والنقاشات التي تتكلم عن JRuby وميزاتها وماذا سيفيدنا استخدامها وبعد بحث مطوّل قررت كتابة موضوع تعريفي بسيط عن JRuby.
JRuby هي JAVA implement مفتوح المصدر من لغة Ruby! أي أننا سنبرمج ونكتب برامجنا باستخدام لغة روبي مع دعم كامل من لغة جافا ومكتباتها وهذا سيمكننا من:
أولا تحويل برنامجنا المبرمجة بلغة روبي الى JVM bytecode والبرنامج الذي برمجناه سيعمل على أي نظام يحتوي على Java Virtual Machine دون الحاجة لوجود مفسّر روبي منصّب على الجهاز وهذا خيار ممتاز ليسهّل علينا تصدير البرامج دون الحاجة للقلق من اعداد البيئة المناسبة لعملها
ثانياً أداء برامجنا سيكون أفضل! هذه هي الميزة الرئيسية التي دعتني للتفكير في JRuby فمن المعروف أن لغة روبي بطيئة نوعا ما مقارنة مع غيرها من لغات البرمجة ومبرمجي روبي يرددون العبارة "روبي سريعة بما فيه الكفاية" (رغم تحسّن الوضع في الاصدار 1.9) لكن ما يجب معرفته هنا أن JRuby أسرع بمراحل من مفسّر MRI الخاص بالاصدار 1.8.6 ويصل لسرعة YARV بالاصدار 1.9 ان لم أقل أسرع في بعض الأحيان مع العلم أن أداء JRuby في تحسّن مستمر!
ثالثاً سنتمكّن من استخدام آلاف المكتبات الخاصة بلغة Java التي تأتي بامتداد jar داخل برنامجنا المكتوب بلغة Ruby! وأجل سنتمكن من استخدام مكتبة SWING و SWT لبرمجة برامج cross-platform GUI بكل سهولة تعمل على جميع الأنظمة التي تحتوي JVM وأصبحنا قادرين على برمجة ألعاب 3D باستخدام لغة روبي عن طريق استخدام احدى محركات الـ 3D الخاصة بلغة Java - حسب معلوماتي لا يوجد محرّك 3D للغة روبي.
طبعاً هذه ليست كامل الميزات فبالاضافة لكل مما سبق في JRuby سنحصل على Real Threads بالاضافة للكثير من الخيارات المتاحة أمامنا ومن يتعامل مع Ruby On Rails فعليه أخذ نظره على JRuby On Rails خصوصاً فيما يتعلّق بموضوع الأداء, فكّر بـ JRuby كأننا حصلنا على قوة لغة جافا بسهولة روبي!
للميزات السابقة بعض السلبيات, في JRuby لن نتمكّن من استخدام اضافات روبي المكتوبة بلغة C وبهذه الحالة سنتعين باحدى مكتبات لغة JAVA عواضاً عنها.
أتوقّع أن البعض تحمّس لـ JRuby ما رأيكم ببعض التطبيق؟
في البداية كل ماعلينا هو تحميل JRuby من الموقع (يمكن تحميل السورس كود وبناؤه من المصدر أو تحميل الـ Binary جاهز للنظام الذي تستخدمه أو تنصيب JRuby عن طريق مدير الحزم لكنها قد تكون بااصدارات أقدم).
http://jruby.org/download
بالمناسبة JRuby تأتي مدمجة مع NetBeans بشكل افتراضي.
بما أنني أستخدم نظام لينوكس فلقد حمّلت jruby-bin-1.4.0.tar.gz بالاضافة لـ jruby-complete-1.4.0.jar (سنحتاجها لتشغيل البرامج التي قمنا بتحويلها لـ JVM bytecode)
الاصدار الحالي هو 1.4.0 (تأكد من تحميل آخر اصدار متوفّر فحسب متابعتي JRuby تطوّر بشكل سريع جداً!), بعد فك الضغط سنجد داخل المجلد bin مفسّر jruby و jirb بالاضافة لعدّة أدوات أخرى.
الآن لتجربة JRuby كل ماعلينا هو انشاء ملف باسم helloworld.jrb (فضّلت استخدام الامتداد jrb لنميّز بين Ruby و JRuby لكن فعليّاً الامتداد لا يهم) وسنكتب فيه:
include Java
import javax.swing.JFrame
import javax.swing.JLabel
frame = JFrame.new "JRuby Message"
msg = JLabel.new "JRuby Rocks"
frame.content_pane.add(msg)
frame.default_close_operation = JFrame::EXIT_ON_CLOSE
frame.pack
frame.visible = true
- المثال من كتاب JRuby Cookbook بتعديلات بسيطة
ثم سنشغّله من داخل المجلد bin باستخدام الأمر:
والآن مبروك أول تطبيق باستخدام روبي ومكتبة SWING! أفضل وأجمل بكثير من الـ Syntax المستخدم في لغة Java صحيح؟
الميزة التي أعجبتني في JRuby هي قدرتنا على عمل كومبايل لكود روبي وتحويله لـ JVM bytecode باستخدام jrubyc وبهذه الحالة سنتمكن من حماية الكود المصدري لبرنامجنا (تقريباً لأننا نستطيع عمل Decompile لـ JVM bytecode بسهولة) بالاضافة لتحسين أداؤه وتشغيله على الأنظمة التي تحتوي Java Virtual Machine دون الحاجة لتنصيب Ruby!
الآن سنحصل على app_dot_jrb.class ولتشغيله ننفذ الأمر:
java -cp jruby-complete-1.4.0.jar org.jruby.Main app_dot_jrb.class
البرنامج الآن يعمل على Java Virtual Machine دون أي حاجة لمفسّر روبي أو jruby فلغة روبي بكاملها موجودة داخل المكتبة jruby-complete ! ويمكننا باستخدام gem تدعى rawr تحويل برنامجنا لملف exe أو ملف تنفيذي لنظام لينوكس أو Mac OS X وحتى ملف jar!
هل يوجد كتاب جيد عن JRuby ؟
حتى الآن يوجد كتابين الأول JRuby Cookbook ويحتوي على أغلب المعلومات التي تحتاجها ويشرح JRuby بطريقة مناسبة عن طريق طرح المشكلة وكيفية حلّها, الكتاب الثاني هو JRuby On Rails أتوقع أن اسمه واضح لكني لم أطّلع عليه لعدم اهتمامي بـ Rails حالياً وأفضل انتظار الاصدار 3.0 قبل أن أبدأ تعلّمه بشكل فعلي!
هذا كل ما لدي حتى الآن... أي اضافات مرحب بها أي أسئلة عندكم Google
