العديد من المترجمين الفوريين وأوقات تشغيل لغة برمجة روبي

نشرت: 2022-03-11

مقدمة

مثلما يوجد العديد من ظلال حجر الياقوت ، هناك تطبيقات متعددة لمترجم روبي.

مترجم روبي الأكثر شيوعًا هو التطبيق المرجعي ، روبي التصوير بالرنين المغناطيسي ، الذي تم تطويره في لغة سي من قبل مبتكر روبي (يوكيهيرو ماتسوموتو) وفريق روبي الأساسي.

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

قائمة بمترجمي Ruby وأوقات التشغيل بما في ذلك mruby و JRuby و RubyMotion و Rubinius و Ruby MRI

محفوظات إصدارات Ruby (وكيف تؤثر على عمليات التنفيذ البديلة)

للأسف ، لا يوجد ما يعادل مرجع لغة Python لـ Ruby (يصف ISO / IEC 30170: 2012 Ruby 1.8 / Ruby 1.9 ، ولكن لا توجد مواصفات مقابلة لـ Ruby 2.x). في حالة عدم وجود أي مواصفات لغوية من هذا القبيل ، يعتمد منفذي Ruby عادةً بدلاً من ذلك على RubySpec الذي يحركه المجتمع والذي يحدد السلوكيات المتوقعة للغة Ruby من خلال الاختبارات التي يمكن إجراؤها في أي مترجم Ruby. لذلك يتم استخدام RubySpec بواسطة منفذي Ruby للتحقق من الامتثال السلوكي لتطبيقات Ruby الخاصة بهم مع المعيار الفعلي.

نظرًا لعدم وجود مواصفات رسمية ، غالبًا ما تتوافق الإصدارات الجديدة من Ruby مع الإصدارات الجديدة من Ruby MRI. تجدر الإشارة إلى أن هناك مشكلة مفتوحة تناقش عملية تصميم لفصل Ruby (اللغة) عن Ruby MRI.

وبالنظر إلى الاقتران الضيق الحالي ، على الرغم من ذلك ، بين لغة روبي والتطبيق المرجعي للتصوير بالرنين المغناطيسي ، فإن مطوري تطبيقات Ruby البديلة يكافحون أحيانًا لمواكبة التغييرات اللغوية المقدمة في كل إصدار جديد للتصوير بالرنين المغناطيسي.

لم يكن هذا أصعب مما كان عليه في الانتقال بين Ruby 1.8 و Ruby 1.9. في عام 2007 ، في محاولة لتنظيف وتوحيد بناء جملة روبي (حيث تطورت اللغة في العقد الذي تلا إصدار روبي 1.0) ، أصدر فريق روبي الأساسي روبي 1.9.0 ، وهو إصدار أدخل العديد من حالات عدم التوافق في اللغة. . نتيجة لذلك ، لم تستثمر جميع تطبيقات Ruby الجهد اللازم لتحقيق قفزة نحوية من 1.8 إلى 1.9. على هذا النحو ، هناك العديد من تطبيقات Ruby المستندة إلى 1.8 والتي لم يعد يستخدمها المجتمع بعد الآن ، ولكن قد تجدها على الإنترنت أو تتحدث عنها أيدي روبي القديمة.

يتم إصدار نسخة جديدة من Ruby MRI كل عيد الميلاد ، وفقًا لمبدأ النسخ الدلالية. قدم كل من Ruby 2.0 (إصدار 2013) و 2.1 (إصدار 2014) ميزات لغة إضافية يمكن لمطوري Ruby الاستفادة منها ، دون التخلي عن التوافق مع الإصدارات السابقة مع Ruby 1.9.

لماذا استخدام تطبيق Ruby البديل؟ ما الخطأ في التصوير بالرنين المغناطيسي؟

هناك مجموعة متنوعة من تطبيقات Ruby البديلة ، والتي تدعم مجموعة واسعة من حالات الاستخدام والبيئات. بيئات Java Enterprise. تطبيقات الهاتف الجوال. تطبيقات جافا سكريبت. أجهزة منخفضة لوحدة المعالجة المركزية / ذاكرة الوصول العشوائي. بالإضافة إلى دعم حالات الاستخدام هذه ، يمكن أن تقدم عمليات التنفيذ البديلة أحيانًا زيادة إضافية في السرعة أو استخدامًا أكثر كفاءة للذاكرة ، اعتمادًا على خصائص التطبيق الخاص بك.

لفترة طويلة ، استخدم العديد من مطوري Ruby on Rails إصدار Ruby Enterprise Edition (REE) بدلاً من التصوير بالرنين المغناطيسي ، مستفيدين من تقنيات إدارة الذاكرة الأفضل في REE مقارنةً بإصدار التصوير بالرنين المغناطيسي في ذلك الوقت. (تم إيقاف REE لاحقًا على الرغم من ذلك في عام 2012.)

في حين أن التصوير بالرنين المغناطيسي هو تطبيق Ruby الافتراضي ، فإنه ليس بالضرورة الخيار الصحيح لجميع البيئات والسيناريوهات. على سبيل المثال ، دعم التزامن في التصوير بالرنين المغناطيسي أدنى من دعم JRuby أو Rubinius. أيضًا ، على الرغم من أن ذاكرة التصوير بالرنين المغناطيسي وأنظمة جمع القمامة تتحسن باستمرار ، إلا أنها لا تزال تواجه بعض المشكلات.

يهدف مسح تطبيقات Ruby التالي إلى مساعدتك في اختيار المترجم الأنسب للأهداف والقيود التشغيلية لمشروعك.

مترجم ماتز روبي (MRI) / كروبي

كتبه فريق Ruby الأساسي بقيادة يوكيهيرو ماتسوموتو ("Matz" ، مبتكر Ruby) باللغة C ، وهو التطبيق المرجعي لـ Ruby والذي يعمل كمعيار واقعي. إذا كان بائع نظام التشغيل يتضمن إصدارًا من Ruby كجزء من برنامج نظام التشغيل المثبت ، على سبيل المثال ، فهو عادةً إصدار التصوير بالرنين المغناطيسي. يستفيد التصوير بالرنين المغناطيسي من أعضاء الفريق الأساسي المدفوع الأجر أكثر من أي تطبيق آخر لـ Ruby ، ​​بالإضافة إلى الموارد المساهمة المخصصة من الأشخاص أو الشركات التي ترغب في تحسين نظام Ruby البيئي.

يتم إصدار إصدار جديد من Ruby MRI - غالبًا ما يتم تطبيق ميزات لغة جديدة ، بالإضافة إلى تغييرات المكتبة القياسية - كل عيد الميلاد. يتم تنفيذ الميزات في Ruby MRI أولاً ، وعادةً ما تستند إلى المناقشات حول القائمة البريدية لمطوري Ruby core. تطبيقات Ruby الأخرى متخلفة ، في بعض الحالات حتى سنوات.

جي روبي

JRuby هو إصدار من Ruby يتم تنفيذه أعلى Java Virtual Machine (JVM). نظرًا لأنه أصبح شائعًا للغات بخلاف Java فقط لتشغيلها في أعلى JVM (أنا أتطلع في اتجاهك ، Clojure و Scala) ، فمن المرجح أن يكتسب تطبيق Ruby المستند إلى JVM شعبية.

تعني Ruby في JVM أيضًا أنه يمكن تشغيل Ruby في أي مكان يمكن تشغيل Java فيه (مثل هواتف Android ، باستخدام Ruboto على سبيل المثال). بالإضافة إلى ذلك ، بفضل قابلية التشغيل البيني لـ JVM ، يمكن لـ JRuby code الاستفادة من نظام Java الأساسي ، بما في ذلك المكتبات القياسية ومكتبات الجهات الخارجية.

يعد JRuby مفيدًا أيضًا في جلب حل قائم على ريلز إلى بيئة نشر جافا فقط ، أو حزم تطبيق ريلز كملف .war للنشر في حاوية Tomcat ، أو كبرنامج Java صغير يعمل كجزء من واجهة الويب الأمامية الخاصة بك ، علي سبيل المثال.

بالنسبة لأولئك الذين لم يعتادوا على JVM ، على الرغم من ذلك ، تقدم JRuby المشكلات القياسية المتعلقة بـ JVM مثل بدء التشغيل البطيء لمترجم Ruby ، ​​وتصحيح مشكلات CLASSPATH إذا كنت تستخدم مكتبات Java لجهات خارجية ، واستخدام أكبر للذاكرة ، وحقيقة أن الكود الخاص بك الآن يجب كتابته مع مراعاة اعتبارات سلامة الخيط.

أيضًا ، لم يتم تنفيذ بعض ميزات Ruby (C APIs ، وواحدة من أدوات الاستبطان القوية في Ruby ، ​​وحدة ObjectSpace) في JRuby.

بعد كل ما قيل ، قد تفوق مزايا استخدام JVM عيوب بعض المواقف أو المشاريع. يسمح JVM بالعديد من تحسينات الأداء ، مثل تشغيل مترجم JIT ، أو استخدام كائنات Java الأصلية وواجهات برمجة التطبيقات.

كمثال على حالة استخدام JRuby مقنعة ، كان أحد زملائي السابق في العمل يعاني من مشكلة كثيفة في وحدة المعالجة المركزية حلها في البداية باستخدام خيوط في Ruby 1.9.3. عندما انتقل إلى JRuby واستخدم java.util.concurrent.Executors . المنفذين ، لاحظ تحسنًا في أداء عدة أوامر من حيث الحجم (أسرع بعشرات الآلاف من المرات) لهذه العملية. شاهد تجربته هنا.

روبينيوس

Rubinius هو تطبيق لـ Ruby يقوم بتنفيذ وقت تشغيل عام للغات الديناميكية فوق جهاز افتراضي منخفض المستوى (LLVM). باستخدام هذه البنية الأساسية وتقنية مترجم JIT ، يمكن لـ Rubinius غالبًا تشغيل كود Ruby بأقل تكلفة من التصوير بالرنين المغناطيسي.

تم تصميم Rubinius أيضًا باستخدام أكبر قدر ممكن من Ruby لجعل تطوير المترجم الفوري / وقت التشغيل أسرع وأسهل.

حقيقة ممتعة: ظهر RubySpec في البداية في عملية تطبيق Rubinius.

مثل JRuby ، ​​يشتمل Rubinius على مترجم JIT وإدارة أفضل للذاكرة وجهاز افتراضي أكثر نضجًا من Ruby MRI. ومع ذلك ، على عكس JRuby ، ​​يدعم Rubinius مكتبات Ruby C ويتم كتابة أسس Rubinius بلغة C ++ ، وليس Java.

قد يكون Rubinius حلًا وسطيًا جيدًا عندما تحتاج إلى أداء عالٍ على خوادم Rails الخاصة بك دون منحنى التعلم أو عيوب JRuby الأخرى.

ربي

تم تصميم mruby ليكون نسخة قابلة للتضمين من Ruby (تدعم Ruby 1.9.3). مع mruby ، ​​يمكنك تقديم Ruby كلغة برمجة / أتمتة في التطبيقات الأصلية ، واستخدامها في البرمجة النصية للألعاب ، وحتى في برمجة لوحات التحكم الدقيقة مثل Raspberry Pi.

إذا كان النظام الأساسي الخاص بك به قيود شديدة على الموارد ، فقد يكون mruby مجرد مترجم Ruby المناسب لك. يستخدم mruby أيضًا في:

  • بناء تطبيقات iOS (كمنافس لـ RubyMotion ، تمت مناقشته أدناه)
  • قم بتضمين Ruby في تطبيقات iOS ، من أجل سرعة التطوير
  • قدم للمستخدمين النهائيين لغة برمجة نصية مضمنة لأغراض الأتمتة

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

أوبال

أوبال هو ناقل لتحويل روبي إلى جافا سكريبت.

مع ظهور Coffeescript ، يتعلم المطورون أنه ليس عليهم كتابة JavaScript للحصول على JavaScript. على الرغم من أن Coffeescript له مزايا من المسلم به ، فاستخدمه لفترة كافية ومن المؤكد أنك ستصطدم بأشياء لا تعجبك في اللغة.

أدخل أوبال: اكتب روبي ، احصل على جافا سكريبت . لطيف جدا.

يسعى Opal إلى أن يكون متسقًا قدر الإمكان مع تطبيقات Ruby الأخرى ، وبالتالي يتم اختباره أيضًا مقابل مجموعة فرعية من RubySpec. توجد بعض حالات عدم التوافق ، بالرغم من ذلك ، ناشئة عن طبيعة أوقات تشغيل JavaScript و JavaScript. على سبيل المثال ، السلاسل والرموز في أوبال متساوية ، ولا يوفر أوبال أي آليات تنفيذ خيوط المعالجة أو الصدفة.

يعمل أوبال بشكل مستقل أو يمكن استخدامه كجزء من خط أنابيب أصول ريلز (على سبيل المثال ، لتحويل ملف somefile.js.rb تلقائيًا إلى JavaScript).

ربما لديك مجال مشكلة مناسب تمامًا لنمط التزامن غير المتزامن لجافا سكريبت (مثل خدمة Node.js صغيرة) ولكنك تريد اللغة أو بعض الأحجار الكريمة من مساحة روبي. قد يكون الأوبال حلاً جيدًا لك في هذه الحالة.

أو ربما تريد كتابة تطبيق ويب Ruby كامل المكدس. مع أوبال ، يمكنك ذلك. احصل على مترجم واحد من Ruby يقوم بتشغيل كود Ruby من جانب الخادم ثم اجعل Opal يقوم بإنشاء JavaScript ليتم تشغيله على جانب العميل.

تدرك أوبال أنك ستتفاعل على الأرجح مع واجهات برمجة تطبيقات جافا سكريبت أخرى (مثل DOM أو Node.js). لذلك فهو يجعل من السهل الانتقال إلى JavaScript ويوفر بعض السكر النحوي لـ Ruby عبر مكتبات JavaScript الشائعة مثل jQuery.

ومع ذلك ، فإن طبيعة أوبال المتمحورة حول JavaScript هي قوتها وضعفها. على الجانب السلبي ، فإن وقت تشغيل Opal هو وقت تشغيل JavaScript ، ويتم إعلام Opal بقرارات تصميم JavaScript. لذا ، إذا كنت تبحث عن تطبيق جيد لـ Ruby لكتابة نص برمجي صغير به ، أو تبحث عن وقت تشغيل Ruby أفضل لتطبيق Rails الخاص بك ، فربما لا يكون Opal خيارك الأفضل.

روبي موشن

RubyMotion عبارة عن (أ) تطبيق Ruby (مكتوب باستخدام Objective-C و Cocoa) و (ب) مجموعة من روابط اللغة بحيث يمكن للمطورين الوصول إلى واجهات برمجة تطبيقات Cocoa من خلال Ruby.

RubyMotion هو منتج تجاري يمكّنك من كتابة تطبيقات Cocoa الأصلية في Ruby. يتيح لك RubyMotion 2.0 كتابة تطبيقات iOS و Mac OS X في Ruby ، ​​ويعد RubyMotion 3 بتقديم هذا الدعم نفسه لنظام Android.

تقوم RubyMotion بتنفيذ الإصدار 1.9 من لغة Ruby.

تطبيقات البائدة

على مر السنين منذ تقديم Ruby لأول مرة ، تم التخلي عن بعض تطبيقات Ruby التي ظهرت إلى الوجود أو توقفت ، مثل:

  • روبي انتربرايز إيديشن (REE). كانت REE شوكة لـ MRI 1.8 من الأشخاص في Phusion Passenger التي نفذت العديد من تحسينات الذاكرة وجمع البيانات المهملة لمطوري الويب. لعدة سنوات ، كان تطبيق Ruby الافتراضي الذي تم نشره لمواقع Rails للإنتاج. لم يتم تحديثه مطلقًا لـ Ruby 1.9 أو Ruby 2.0 ، على الرغم من ذلك ، وتم إيقافه في النهاية في عام 2012.
  • حديد روبي. IronRuby هو تطبيق Ruby أعلى Microsoft .NET ، مكتوب بلغة C # ، ولفترة من الوقت تم تمويل المشروع من قبل Microsoft. تم التخلي عن شركة IronRuby في عام 2011 ، وكانت آخر مرة دعمت فيها Ruby 1.8.6.

يتم إحتوائه

هناك مجموعة متنوعة من أوقات التشغيل والمترجمين الفوريين للاختيار من بينها في مشهد روبي. بالنسبة لمعظم مشاريع Ruby ، ​​يظل تطبيق Ruby المرجعي (Ruby MRI) هو المترجم المختار. ومع ذلك ، قد تكون تطبيقات Ruby البديلة هي الاختيار الصحيح لمشروعك ، اعتمادًا على أهدافك وقيودك الوظيفية والتقنية.

في دوره كتطبيق مرجعي لـ Ruby ، ​​يحصل التصوير بالرنين المغناطيسي على ميزات لغوية جديدة بشكل أسرع ، ولديه قصص التزامن وذاكرة جيدة بما يكفي (تتحسن فقط) ، ولديه أكبر توافق مع الأحجار الكريمة (بعضها مكتوب جزئيًا في C). بشكل عام ، يعد التصوير بالرنين المغناطيسي خيارًا قويًا يمكن الاعتماد عليه للأغراض العامة لرمز روبي.

بالنسبة لعمليات النشر الأكبر حجمًا ، أو في المواقف التي تحتاج فيها إما إلى التفاعل مع كود Java (أو لغات JVM الأخرى) أو تحتاج إلى أنماط التزامن متطورة للغاية ، فإن JRuby يعد خيارًا مقنعًا.

وبالطبع ، إذا كانت لديك احتياجات فريدة (على سبيل المثال ، كتابة JavaScript ، وتشغيل الجيل الحالي من الأجهزة المضمنة ، وما إلى ذلك) ، فقد تكون بدائل Ruby الأخرى هي ما تبحث عنه تمامًا.

مع مجموعة متنوعة من أوقات تشغيل Ruby والمترجمين الفوريين للاختيار من بينها ، تُظهر Ruby نفسها على أنها لغة مرنة ومفيدة لمجموعة واسعة من بيئات الحوسبة ، بدءًا من متجر نشر Java كبير للشركة ، إلى البرامج التي تتحكم في نقطة التوقف في مكتبك قمت بتوصيل Raspberry Pi الخاص بك في عطلة نهاية الأسبوع الماضية. يعد اختيار الأداة المناسبة للغرض الصحيح أمرًا ضروريًا ، نعم ، ولكن نأمل أن توضح لك هذه المقالة أن Ruby هو أكثر بكثير من مترجم Ruby الافتراضي الذي يأتي مع نظام التشغيل الخاص بك.

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