معلومات إضافية عن روبي

من موسوعة حسوب
اذهب إلى: تصفح، ابحث

هل تساءلت يومًا لماذا روبي مشهورة إلى هذا الحد؟ يقول المعجبون بها أنَّها لغة جميلة وذات بنية متقنة. ويقولون أيضًا أنَّها لغة عملية وسهلة الاستعمال. فماذا تعطي وبماذا تتمتع؟

مثالية منشئ لغة روبي

حققت لغة روبي توازنًا دقيقًا بين لغات البرمجة. عمل منشئ هذا اللغة - الياباني Yukihiro “Matz” Matsumoto - على دمج أجزاءٍ من لغات البرمجة المفضلة لديه (Perl، و Smalltalk، و Eiffel، و Ada، و Lisp) لإنشاء لغة جديدة تحقق التوازن بين البرمجة الوظيفية (functional programming) والبرمجة الأمرية (imperative programming).

كان Matz يقول دومًا أنَّه يحاول جعل روبي لغة طبيعية - وليس لغةً سهلةً - بطريقة تعكس حياة ولغة البشر. أضاف أيضًا: "روبي لغةٌ سهلةٌ من الخارج (الظاهر) ومعقدةٌ جدًا من الداخل مثل أجسادنا البشرية تمامًا".

تطور ونمو روبي

بدءًا من إطلاق روبي إلى العموم في عام 1995، جذبت روبي مبرمجين مخلصين ومحبين لها من جميع بقاع الأرض. في عام 2006، حققت روبي قبولًا ضخمًا بين المبرمجين في أوساط عالم البرمجة. تشكل نتيجةً لذلك مجموعات من المستخدمين النشطين في أكبر مدن العالم وأُنشئَت مؤتمرات حول روبي جذبت الكثير من المهتمين والمبرمجين حتى لم تعد القاعات تتسع لهم.

وصلت قائمة البريد الأساسية المخصصة للنقاش حول روبي إلى 200 رسالة وسطيًّا خلال اليوم الواحد في عام 2006. شكَّل ذلك مجتمعًا كبيرًا لروبي يعمل على طرح نقاشات حول اللغة والذي أسهم بشكل كبير في تطور اللغة.

صُنِّفت روبي على أنَّها من بين لغات البرمجة العشرة الأكثر تطورًا وشعبيةً حول العالم (مثل مقياس TIOBE). يعزى نمو لغة روبي إلى شعبية البرامج التي كُتبَت بها، وشعبية إطار الويب Rails.

أضف إلى ذلك أنَّ روبي هي لغة مجانية تمامًا. ليست مجانية الشراء فقط، بل مجانية الاستعمال، والنسخ، والتعديل، وإعادة النشر أيضًا.

رؤية كل شيء على أنَّه كائن

في البداية، بحث Matz على لغات برمجية ذات صياغة مثالية لاستعمالها؛ كان يقول دومًا في هذا الخصوص: "لطالما أردت لغة برمجة أقوى من Perl، وأكثر كائنية من Python".

في روبي، كل شيء يُنظَر إليه على أنَّه كائن. كل بت من المعلومات والشيفرة يمكن أن يُعطَى خاصيات وأحداث. تدعو لغة البرمجة كائنية التوجه الخاصيات بالاسم "متغيرات نسخة" (instance variables) والأحداث بالاسم "توابع" (methods). يمكن أخذ فكرة عن كائنية التوجه النقية في روبي عبر السطر البرمجي التالي:
5.times { print "We *love* Ruby -- it's outrageous!" }
في أغلب لغات البرمجة، لا تعد الأعداد وأنواع البيانات الأخرى كائنات. تَبِعَت روبي خطى لغة البرمجة Smalltalk بإعطاء توابع ومتغيرات نسخة إلى كل الأنواع المتواجدة فيها. هذا يسهل استخدام روبي، لأنَّ القواعد المطبَّقة على الكائنات تطبَّق أيضًا على كل شي في روبي.

مرونة لغة روبي

تعدُّ لغة روبي لغةً مرنةً لأنها تسمح للمستخدمين بتعديل أجزائها كما يشاؤون. يمكن حذف أو تعديل أجزاءٍ مهمة وأساسية في روبي بناءً على رغبة المستخدم. يمكن أيضًا إضافة أي شيء إلى أجزاء موجودة مسبقًا. لذلك، لا تحاول روبي فرض أي قيود على المبرمج.

على سبيل المثال، تنفَّذ عملية الجمع باستعمال المعامل + (معامل الجمع). ولكن، إن أردت استعمال الكلمة plus عوضًا عنه، فيمكنك إضافة مثل هذا التابع إلى الصنف Numeric المدمج ضمنيًّا في روبي بالشكل التالي:
class Numeric
  def plus(x)
    self.+(x)
  end
end

y = 5.plus 6
# y is now equal to 11
بذلك، يمكن إعادة تعريف المعامل في روبي لتصبح عبارة عن كلمات مفهومة وذات معنى.

الكتل في روبي: ميزة مهمة جدًا

تعدُّ الكتل (blocks) في روبي مصدرًا لمرونة اللغة أيضًا. يمكن للمبرمج أن يرفق كتلةً برمجية بأي تابع لتعرِّف السلوك الذي يجب على هذا التابع أن يسلكه. وبالتالي، أصبحت الكتل إحدى أشهر ميزات لغة روبي لأولئك القادمين من لغات أمرية أخرى مثل لغة PHP أو Visual Basic.

أُخذَت فكرة الكتل من اللغات الوظيفية، إذ قال Matz: "بالنسبة للكتل في روبي، أردت أن احترم ثقافة لغة Lisp".
search_engines =
  %w[Google Yahoo MSN].map do |engine|
    "http://www." + engine.downcase + ".com"
  end
في هذه الشيفرة، تعرَّف وتضاف الكتلة ضمن do...end. يطبق التابع map الكتلة على كل كلمة في قائمة الكلمات المعطاة. تترك العديد من التوابع الأخرى في روبي مجالًا مفتوحًا للمبرمج لكتابة الكتلة التي يريد بها أن تخبر هذا التابع بالأمور التي يجب عليه أن يفعلها.

روبي والمخلوط

خلافًا للعديد من لغات البرمجة كائنية التوجه، تتميز روبي بالوراثة الفردية (single inheritance) فقط عن قصد. ولكن تعرف روبي تمامًا مبدأ الوحدات (تدعى الفئات [Categories] في Objective-C). فالوحدات في روبي هي مجموعة من التوابع.

تستطيع الأصناف أن تخلط (mixin) وحدةً ضمنها وأن تستقبل جميع توابعها بحرِّيَّة تامة. على سبيل المثال، أي صنف ينفِّذ التابع each يمكنه أن يخلط الوحدة Enumerable التي تضيف مجموعة من التوابع التي تستعمل التابع each لعملية التكرار.
class MyArray
  include Enumerable
end
عمومًا، يرى بعض هواة روبي أن هذا الأمر أفضل وأوضح من الوراثة المتعددة التي تعدُّ وسيلةً معقدةً وتحمل الكثير من القيود.

شكل روبي الظاهري

رغم أنَّ روبي تستعمل علامات الترقيم بشكل محدود جدًا وتفضِّل عوضًا عنها استعمال كلمات مفتاحية ذات معنًى إلا أنَّ هنالك بعض علامات الترقيم المستعملة حقيقةً لتزيين روبي. لا تحتاج في روبي إلى التصريح عن أي متغير؛ إنَّها تستعمل اصطلاحات تسيمة بسيطة للدلالة على نطاق المتغير وهي:

  • var: يمكن أن يكون متغيِّرًا محليًّا.
  • var@: هو متغير نسخة.
  • var$: هو متغير عام.

هذه الرموز المستعملة تحسِّن من قابلية القراءة عبر السماح للمبرمج بالتعرف بسهولة على نطاق ودور كل متغير. أصبح أيضًا من غير الضروري استعمال السابقة .self مع كل نسخة.

ما بعد الأساسيات

تملك روبي الكثير من الميزات الأخرى منها:

  • تملك روبي ميزة معالجة الاستثناءات مثل Java أو Python مما يجعل معالجة الأخطاء الحاصلة أمرًا سهلًا للغاية.
  • تتميز روبي باحتوائها على مجمع مهملات لجميع كائنات روبي. وبذلك، ليس هنالك حاجة للحفاظ على عدادات مرجعية (reference counts) في المكتبات الملحقة. فكما قال Matz: "هذا أفضل من أجل صحتك".
  • كتابة الملحقات بلغة C في روبي أسهل بكثير من كتابتها في Perl أو Python مع وجود واجهة برمجية أنيقة لاستدعاء روبي من C. هذا يتضمن الاستدعاءات من أجل تضمين روبي في البرامج من أجل استعمالها بشكل مشابه للسكربتات. الواجهة SWIG متاحةٌ أيضًا.
  • يمكن لروبي تحميل مكتبات ملحقة بشكل ديناميكي إن كان نظام التشغيل يسمح بذلك.
  • تتميز روبي باستقلاليتها عن خيوط (threading) نظام التشغيل. بناءً على ذلك، في جميع المنصات التي تعمل عليها روبي، يمكنك أن تنشئ خيوطًا متعددة وتشغِّل عدة عمليات في آن واحد بغض النظر إن كان نظام التشغيل يدعم ذلك أم لا (حتى إن كان نظام التشغيل هو MS-DOS نفسه!).
  • تتمتع روبي بخاصة المحمولية (portable)؛ فصحيح أنَّها طُورِّت في الأساس على لينكس، ولكنها تعمل على أغلب الأنظمة المشتقة من يونكس، بالإضافة إلى أنظمة maxOS وويندوز، و DOS، و BeOS، و OS/2، وغيرها الكثير.

ماذا أيضًا؟

تملك روبي - كلغة برمجة - بعض التنفيذات المختلفة. سيناقش هذا التوثيق التنفيذ المرجعي (الرئيسي) والذي يشار إليه من قبل المجتمع بالاختصار MRI (اختصارٌ للعبارة Matz’s Ruby Interpreter) أو CRuby (بما أنَّها كتبت باستعمال لغة C). على أي حال، هنالك تنفيذات أخرى غير هذا التنفيذ والتي قد تكون مفيدة في بعض الحالات، إذ توفر تكاملًا إضافيًا مع لغات أو بيئات أخرى أو تملك ميزات إضافية غير موجودة في MRI.

إليك قائمة قصيرة ببعض بأشهر التنفيذات المتوافرة:

  • JRuby: هو تنفيذ روبي فوق JVM (اختصار للعبارة Java Virtual Machine)، إذ تستعمل مفسرات JIT المحسِّنة التي تخص JVM، ومجمعات المهملات، والخيوط المتزامنة، وأدوات إدارة البيئة، ومجموعة واسعة من المكتبات.
  • Rubinius: هو روبي مكتوب بلغة روبي! بني على LLVM، إذ تدعم آلة افتراضية فعالة بنيت عليها لغات برمجية أخرى أيضًا.
  • TruffleRuby: هو تنفيذ ذو أداء مرتفع للغة روبي فوق GraalVM.
  • mruby: هو تنفيذ خفيف للغة روبي يمكن ربطه وتضمينه ضمن تطبيقٍ. أديرَت عملية تطويره من قبل Matz -منشئ لغة روبي نفسه -.
  • IronRuby: هو تنفيذ متكامل بشكل كامل ومحكم مع الإطار NET..
  • MagLev: هو تنفيذ سريع ومستقر لروبي مع كائن متكامل لذاكرة مخبئية (cach) دائمة وموزَّعة.
  • Cardinal: هو مفسر روبي من أجل الآلة الافتراضية Parrot.

للاطلاع على القائمة الكاملة، انتقل إلى هذه الصفحة.

مصادر