:: كل المقالات ::

Tue, 13 Dec 2016

بيرل او روبي ؟

بسم الله الرحمن الرحيم

كتبت المقالة الاصلية في العام 2010 ... جوابا على سؤال احد اخواني الاعزاء
دائما السؤال عن لغتين برمجة صعب فكل لغة تتميز باشياء قد لا تجدها في اللغة الاخرى او تجدها و لكن بشكل اكثر صعوبة . و لكن اهم نقطة يجب الاننتباه لها هي ان ما تستطيع فعله في لغة برمجة تستطيع فعله في لغة برمجة اخرى في اغلب الاحيان و خاصة اذا كانت اللغتان بيرل و روبي ! عليه سأتكلم فقط عن بعض الخصائص المهمة لكل مبرمج عند اختيار لغة برمجة و اترك التفاصيل .
دعم نماذج البرمجة :
كلا اللغتين متعددة النماذج ، فاللغتان توفران دعما لاهم نماذج البرمجة : البرمجة الاجرائية و البرمجة الكائنية و البرمجة الوظيفية.
دعم البرمجة الشيئية :
روبي لغة برمجة كائنية صرفة اي ان كل شيء هو كائن حتى الكلاسات و البيانات التي تعتبرها لغات البرمجة الاخرى بيانات اولية تعاملها روبي على انها اشياء فهي في هذا تشبه "سمولتولك" هذا امر له ما له و عليه ما عليه و لسنا في صدد المحاكمة هنا . بيرل على الجهة المقابلة تدعم البرمجة الشيئية و لكنها لا تعامل كل شيء على انه كائن . بيرل لم تكن تدعم البرمجة الكائنية ابتداءً و لكن تم اضافة هذه الميزة لاحقا في الاصدار الرابع و هناك اختلاف شديد في الاراء بين من يهزأ من هذا النظام و من يعتبره شديد الذكاء . على كل حال لنقل انه مختلف عن البقية و لكن يجب الا ننسى ان Moose سهلت البرمجة الكائنية في بيرل بشكل كبير فهذه المكتبة نستطيع ان نقول ادخلت البرمجة الكائنية على طريقة بيرل 6 و سمولتولك ، و اصبحت البرمجة الكائنية سهلة ميسرة جدا وحداثوية في بيرل و الان توجد مشاريع عملاقة في بيرل مبنية على Moose مثل Catalyst .
طبعا قد توجد بعض الاختلافات الجزئية في كيفية تطبيق مفاهيم البرمجة الشيئية بين اللغتين مثل دعم التوارث المتعدد المسموح به في بيرل و الغير مسموح به في روبي و جافا و لكن هذه الامور خارجة عن سعة هذا الموضوع.
دعم البرمجة الوظيفية:
كلا اللغتين يمكن استخدامهما كلغات وظيفية فهما توفران الدوال المجهولة و الكلوجرز .
السرعة :
لنكن واضحين من البداية لا احد يستخدم بيرل او روبي لكتابة البرامج السريعة ! لانها بكل بساطة لغات ديناميكية مفسرة، من يهمه امر السرعة كثيرا بالطبع سيذهب للسي و سي++. على كل حال في حالتنا مفسر بيرل اسرع بشكل عام في اختبارات القياس و يمكن مشاهدة بعض هذه الاختبارات هنا :
http://shootout.alioth.debian.org/
اطر برمجة الويب :
تدين روبي لروبي اون ريلز بالكثير لان هذا الاطار البرمجي هو المسوق والمروج الاقوى للغة .
روبي اون ريلز هو اطار لبرمجة الويب سهل التعلم و يسرع عملية تطوير البرامج. طبعا على الجهة الاخرى بيرل تحظى بعدد من اطر البرمجة و لكن المنافس المباشر و البديل عن الريلز هو كاتلست فهو يتمتع بالعديد من المزايا التي يستمدها مباشرة من قوة بيرل مثل السيبان و موس .
الاطاران لهما نفس الهدف و لكن ريلز اسهل و اسرع للتعلم و الانطلاق من كاتلست و تنصيب الكاتلست يوجد به صعوبة بعض الشيء لكثرة الاعتمادية على مكتبات اخرى. الكثير من المواقع تتبنى احدى الاطارين مع تفوق ملحوظ لريلز ، و ربما نعزوا هذا الى كون كاتلست ليس الاطار الوحيد في بيرل بخلاف الريلز الذي يعتبر تقريبا الاطار القياسي لمستخدمي روبي. هذا بالاضافة الى ان المواقع الكبيرة من مستخدمي بيرل مثل امازون تطور و تستخدم اطارا خاصا بها .
من ناحية التوثيق كلاهما يحظى بتوثيق جيد سواء على الانترنت او الكتب المطبوعة. على مستوى الاداء هناك نوع من التذمر على سرعة و اداء الريلز كما قرانا هذا في سلاشدوت و في الحوار مع احد مطوري تويتر ( اضخم موقع يستخدم الريلز ) ، و في اختبار قياس السرعة (ابريل 2009) :
Catalyst’s controller processing is 135% faster than Rails in single process performance and471% faster as a forking multi process.
من ناحية الامكانيات فكما قلنا ان ريلز فعلا تسهل مهاما كثيرة للمبرمج و لا تحتاج الى فترة تعلم طويلة و لكن تجدر الاشارة الى ان ريلز لا تقدم اليات سهلة اذا ما احتاج المبرمج الى مهام غير تلك التي تعالجها ريلز ابتداء.
المكتبات الجاهزة :
بيرل CPAN يوجد بها في وقت كتابة الموضوع اكثر من 20 الف موجل جاهزة للاستخدام توفر مكتبات و اكواد جاهزة للاستخدام.
روبي جيمز RubyGems ايضا لديها مكتبة عملاقة 14,494 على الرغم من انها احدث عمرا من السيبان.
هذا من ناحية العدد اما من ناحية الجودة فالامر يحتاج الى مزيد دراسة و لكن قد يكون هناك افضلية لبيرل من ناحية ان الموجلز اقدم فعليه تكون قد اختبرت اكثر من خلال الاختبارات المباشرة او الاستخدام العملي. ايضا بيرل سيبان تأتي منصبة سلفا في اغلب توزيعات لينكس .
الخلاصة:
اللغتان متشابهتان بشكل كبير و هذا الامر ليس بغريب فروبي نقلت الكثير جدا من خصائص بيرل حتى في استايل الكتابة هناك شبه كبير جدا مع بعض الاختلافات التي تجعل من اكواد روبي نوعا ما انظف و اسهل في القراءة و تبقى المسألة ذوقية هنا و لكن لمن يحبون التنظيم الشديد هناك PerlTidy . في التعابير المعتادة ايضا روبي تأخذ الكثير من بيرل ، هذا غير المواصفات المعتادة الاخرى مثل كونهما : لغات مفسرة و مفتوحة المصدر و تعمل على عدة انظمة تشغيل و تدعم مجموعة مهولة من قواعد البيانات مع تفوق في دعم اليوني كود لصالح بيرل و تحظيان بقاعدة جماهيرية للدعم الفني و تتمتعان بجامع قمامة . وعندما نعرف ان مطور لغة روبي هدفه الاساسي كان في ان يتحصل على لغة اقوى من بيرل و اكثر كائنية من بايثون نعرف سر تشابه اللغتين لدرجة ان لاري صاحب بيرل يعتبر روبي هي اللغة التي تنافس بيرل و ليس بايثون او PHP. بناء على كل هذا من الصعب فعلا الاختيار بين اللغتين و لكن شخصيا سأذهب مع بيرل لاسباب بسيطة و تبقى المسألة نسبية اكثر من كونها جزمية.
فبيرل بتاريخها الطويل لا تزال تحظى بقاعدة جماهيرية اكبر مما يسهل علي الحصول على المساعدة و المكتبات الجاهزة و الشروح لها . ايضا مجتمع روبي لديه سمعة انه مجتمع لطيف مع المبتدئين و كذلك بيرل و لكني احب مجتمع بيرل لانه فعلا يتميز بمبرمجين عمالقة لهم تاريخهم و بصمتهم سواء في عالم بيرل او يونكس او البرمجة بشكل عام و على راسهم لاري صاحب اللغة و البرفسور داميان كانوي و راندال شوارتز و كروماتك و اودري خارقة الذكاء …الخ
ايضا لا استطيع الحكم على روبي الان و لكن بيرل فعلا لغة متكاملة من كل النواحي فهي صالحة لعمليات ادارة النظم و الشل و برمجة سطح المكتب بمكتبات متعددة و برمجة الويب و الالعاب و غيرها و استطيع ان امزج نماذج برمجة متعددة بل يتعدى الامر الى ان بيرل تتيح لي القدرة على ان اكتب اكواد سي او سي++ او جافا داخل اكواد بيرل فمثلا استطيع ان اكتب برنامجا بحيث اكتب الكلاسات بلغة جافا و استدعيهم على انهم كائنات بيرل بكل سهولة و يسر باستخدام Inline::Java .
ايضا بالمناسبة بيرل 6 التي هي قيد التطوير سيتم الاعلان عن الاصدار المرشح اخيرا هذه السنة و الكل يتوقع الكثير من هذه اللغة الجديدة كليا و التي راينا تأثيرها حتى قبل اصدارها من خلال الاضافات التي تم اخذها من بيرل 6 و دمجها في بيرل5 مما احدث نقلة جديدة في عالم بيرل يسمونها Modern Perl .
هذا و الحمد لله رب العالمين .