روبي (لغة برمجة)

روبي هي لغة برمجة متعددة الأغراض مصممة مع التركيز على إنتاجية البرمجة وبساطتها. في روبي، كل شيء عبارة عن كائن ، بما في ذلك أنواع البيانات الأولية . بدأ تطوير اللغة في منتصف التسعينيات على يد يوكيهيرو "ماتز" ماتسوموتو في اليابان.

لغة روبي هي لغة تفسيرية ، عالية المستوى ، وذات كتابة ديناميكية ؛ يستخدم مُفسِّرها خاصية جمع البيانات المهملة والترجمة الفورية . تدعم روبي أنماط برمجة متعددة، بما في ذلك البرمجة الإجرائية ، والبرمجة كائنية التوجه ، والبرمجة الوظيفية . ووفقًا لمُنشئها، فقد تأثرت روبي بلغات بيرل ، وسمول توك ، وإيفل ، وآدا ، وبيسك ، وليسب . [ 8 ] [ 2 ]

تاريخ

المفهوم الأولي

بحسب ماتسوموتو، تم ابتكار لغة روبي في عام 1993. وفي منشور عام 1999 على قائمة بريد Ruby-Talk، شارك بعض أفكاره المبكرة حول اللغة: [ 9 ]

كنت أتحدث مع زميلي عن إمكانية تطوير لغة برمجة نصية كائنية التوجه. كنت أعرف لغة بيرل (بيرل 4، وليس بيرل 5)، لكنني لم أكن معجبًا بها، لأنها كانت تبدو كلغة برمجة بسيطة (ولا تزال كذلك). بدت اللغة كائنية التوجه واعدة جدًا. كنت أعرف لغة بايثون آنذاك، لكنني لم أكن معجبًا بها أيضًا، لأنني لم أعتبرها لغة كائنية التوجه حقيقية - بدت ميزات البرمجة كائنية التوجه وكأنها إضافة ثانوية. بصفتي مهووسًا باللغات ومحبًا للبرمجة كائنية التوجه منذ 15 عامًا، كنت أرغب بشدة في لغة برمجة نصية كائنية التوجه سهلة الاستخدام. بحثت عنها لكنني لم أجدها. لذلك قررت تطويرها بنفسي. 

وصف ماتسوموتو تصميم روبي بأنه يشبه لغة ليسب بسيطة في جوهرها، مع نظام كائنات مثل نظام سمول توك، وكتل مستوحاة من وظائف الرتبة العليا ، وفائدة عملية مثل تلك الموجودة في بيرل. [ 10 ]

نشأ اسم "روبي" خلال محادثة عبر الإنترنت بين ماتسوموتو وكيجو إيشيتسوكا في 24 فبراير 1993، قبل كتابة أي كود برمجي. [ 11 ] تم اقتراح اسمين مبدئيًا: "كورال" و"روبي". اختار ماتسوموتو الاسم الأخير في رسالة بريد إلكتروني لاحقة إلى إيشيتسوكا. [ 12 ] وأشار أيضًا إلى أن أحد العوامل المؤثرة في اختيار الاسم هو أن حجر ميلاد أحد الزملاء كان الياقوت . [ 13 ] [ 14 ]

الإصدارات المبكرة

أُعلن عن الإصدار الأول من لغة روبي 0.95 للجمهور عبر مجموعات الأخبار اليابانية المحلية في 21 ديسمبر 1995. [ 15 ] [ 16 ] بعد ذلك، صدرت ثلاث نسخ أخرى من روبي خلال يومين. [ 11 ] تزامن هذا الإصدار مع إطلاق قائمة بريدية باللغة اليابانية تُدعى ruby-list ، والتي كانت أول قائمة بريدية مخصصة لهذه اللغة الجديدة.

كانت العديد من الميزات المألوفة في الإصدارات اللاحقة من روبي موجودة بالفعل في هذه المرحلة من التطوير، بما في ذلك التصميم الموجه للكائنات ، والفئات ذات الوراثة، والمزيجات ، والمكررات ، والإغلاقات ، ومعالجة الاستثناءات ، وجمع البيانات المهملة . [ 17 ]

بعد إصدار روبي 0.95 في عام 1995، تم إصدار العديد من الإصدارات المستقرة من روبي في تلك السنوات. [ 11 ]

في عام 1997، نُشرت أول مقالة عن لغة روبي على الإنترنت. وفي العام نفسه، عُيّن ماتسوموتو من قبل شركة netlab.jp للعمل على لغة روبي كمطور بدوام كامل. [ 11 ]

في عام 1998، أطلق ماتسوموتو أرشيف تطبيقات روبي، إلى جانب صفحة رئيسية بسيطة باللغة الإنجليزية لروبي. [ 11 ]

في عام 1999، بدأت أول قائمة بريدية باللغة الإنجليزية من نوع Ruby-talk ، مما يشير إلى الاهتمام المتزايد باللغة خارج اليابان. [ 18 ] في نفس العام، كتب ماتسوموتو وكيجو إيشيتسوكا أول كتاب عن روبي، لغة البرمجة الشيئية روبي (オブジェクト指向スクリプト言語 روبي)، والذي تم نشره في اليابان في أكتوبر 1999. وتبعه في أوائل العقد الأول من القرن الحادي والعشرين. تم نشر حوالي 20 كتابًا عن روبي باللغة اليابانية. [ 11 ]

بحلول عام 2000، تفوقت لغة روبي على لغة بايثون في اليابان. [ 19 ] وفي سبتمبر من العام نفسه، طُبع أول كتاب باللغة الإنجليزية بعنوان "برمجة روبي" ، والذي أُتيح لاحقًا مجانًا للجمهور، مما ساهم في زيادة انتشار روبي بين الناطقين بالإنجليزية. وفي أوائل عام 2002، كانت قائمة بريد ruby-talk الإنجليزية تتلقى رسائل أكثر من قائمة بريد ruby-list اليابانية ، مما يدل على تزايد شعبية روبي في العالم غير الناطق باليابانية.

روبي 1.8 و 1.9

صدرت لغة روبي 1.8 مبدئيًا في أغسطس 2003، وظلت مستقرة لفترة طويلة، ثم توقف دعمها في يونيو 2013. [ 20 ] ورغم توقف دعمها، لا يزال هناك بعض الشيفرة البرمجية المبنية عليها. وتتوافق روبي 1.8 جزئيًا فقط مع روبي 1.9.

خضعت لغة روبي 1.8 للعديد من المعايير الصناعية. وقد طُوّرت مواصفات لغة روبي من قِبل مركز تعزيز المعايير المفتوحة التابع لوكالة تعزيز تكنولوجيا المعلومات (وهي وكالة حكومية يابانية ) لتقديمها إلى لجنة المعايير الصناعية اليابانية (JISC)، ثم إلى المنظمة الدولية للتوحيد القياسي (ISO). وقد اعتُمدت كمعيار صناعي ياباني (JIS X 3017) في عام 2011 [ 21 ] ، ومعيار دولي (ISO/IEC 30170) في عام 2012 [ 22 ] [ 23 ].

شعار روبي أون ريلز

في حوالي عام 2005، ازداد الاهتمام بلغة روبي بالتزامن مع ظهور روبي أون ريلز ، وهو إطار عمل ويب مكتوب بلغة روبي. ويُعزى الفضل في زيادة الوعي بلغة روبي إلى ريلز. [ 24 ]

ابتداءً من إصدار روبي 1.9.3، الذي صدر في 31 أكتوبر 2011، [ 25 ] تحوّل ترخيص روبي من ترخيص مزدوج بموجب رخصة روبي ورخصة جنو العمومية (GPL) إلى ترخيص مزدوج بموجب رخصة روبي ورخصة BSD ذات البندين. [ 26 ] وقد تباطأ اعتماد الإصدار 1.9 بسبب التغييرات التي طرأت على الإصدار 1.8 والتي استلزمت إعادة كتابة العديد من مكتبات الطرف الثالث الشائعة .

روبي 2

كان من المفترض أن يكون إصدار روبي 2.0 متوافقًا تمامًا مع الإصدارات السابقة من روبي 1.9.3. وحتى الإصدار الرسمي 2.0.0 في 24 فبراير 2013، لم تكن هناك سوى خمس حالات عدم توافق معروفة. [ 27 ]

ابتداءً من الإصدار 2.1.0، تغيرت سياسة إصدار Ruby لتصبح أكثر شبهاً بالإصدار الدلالي ، على الرغم من أنها تختلف قليلاً في أن الزيادات الطفيفة في الإصدار قد تكون غير متوافقة مع واجهة برمجة التطبيقات. [ 28 ]

يتضمن Ruby 2.2.0 تحسينات في السرعة، وإصلاحات للأخطاء، وتحديثات للمكتبات، كما أنه يزيل بعض واجهات برمجة التطبيقات المهملة. ومن أبرز التغييرات التي أدخلها Ruby 2.2.0 على معالجة الذاكرة ، حيث يتضمن جامع قمامة تزايدي، ودعمًا لجمع القمامة للرموز، وخيار التجميع مباشرةً باستخدام jemalloc. كما يحتوي على دعم تجريبي لاستخدام vfork (2) مع system() وspawn()، بالإضافة إلى دعم لمواصفات Unicode 7.0. ومنذ الإصدار 2.2.1، [ 29 ] تحسّن أداء Ruby MRI على معالجات PowerPC64 . [ 30 ] [ 31 ] [ 32 ] وتشمل الميزات التي أصبحت قديمة أو أُزيلت: callcc، ومكتبة DL، وDigest::HMAC، وlib/rational.rb، وlib/complex.rb، وGServer، وLogger::Application، بالإضافة إلى العديد من وظائف واجهة برمجة تطبيقات C. [ 33 ] 

يتضمن Ruby 2.3.0 العديد من التحسينات في الأداء والتحديثات وإصلاحات الأخطاء، بما في ذلك تغييرات في Proc#call، واستخدام Socket وIO لكلمات الاستثناءات، ومعالجة Thread#name، واتصالات Net::FTP السلبية الافتراضية، وإزالة Rake من المكتبة القياسية. [ 34 ] تشمل التغييرات البارزة الأخرى ما يلي:

  • القدرة على وضع علامة على جميع السلاسل النصية بأنها مجمدة افتراضيًا، مما يؤدي إلى زيادة كبيرة في أداء عمليات السلاسل النصية. [ 35 ]
  • مقارنة التجزئة للسماح بالتحقق المباشر من أزواج المفاتيح/القيم بدلاً من المفاتيح فقط.
  • عامل تنقل آمن جديد &.يمكنه تسهيل التعامل مع القيم الفارغة (على سبيل المثال، بدلاً من ، يمكننا استخدام ).ifobj&&obj.foo&&obj.foo.barif obj&.foo&.bar
  • تم تضمين جوهرة did_you_mean الآن بشكل افتراضي وهي مطلوبة عند بدء التشغيل لاقتراح تطابقات الأسماء المماثلة تلقائيًا في حالة حدوث خطأ NameError أو NoMethodError .
  • Hash#dig و Array#dig لاستخراج القيم المتداخلة بعمق بسهولة (على سبيل المثال، بالنظر إلى ، يمكن الآن استرداد القيمة Foo Baz بواسطة ).profile={social:{wikipedia:{name:'Foo Baz'}}}profile.dig(:social, :wikipedia, :name)
  • .grep_v(regexp)والذي سيطابق جميع الأمثلة السلبية للتعبير النمطي المحدد بالإضافة إلى ميزات جديدة أخرى.

يتضمن الإصدار 2.4.0 من روبي تحسينات في أداء جداول التجزئة، وArray#max، وArray#min، والوصول إلى متغيرات الكائن. [ 36 ] تشمل التغييرات البارزة الأخرى ما يلي:

  • Binding#irb: ابدأ جلسة REPL مشابهة لـ binding.pry
  • قم بتوحيد Fixnum و Bignum في فئة Integer
  • يدعم String تعيينات حالة الأحرف في Unicode، وليس فقط ASCII.
  • طريقة جديدة، Regexp#match?، وهي نسخة منطقية أسرع من Regexp#match
  • يُظهر نظام كشف حالات تعطل الخيوط الآن الخيوط مع تتبعها الخلفي وتبعياتها.

تتضمن بعض التغييرات الملحوظة في Ruby 2.5.0 استخدام عبارات rescue و ensure تلقائيًا لكتلة do-end المحيطة (الحاجة إلى كتل begin-end إضافية )، وربط الأساليب باستخدام yield_self ، ودعم تغطية الفروع وقياس تغطية الأساليب، وتحويلات Hash أسهل باستخدام Hash#slice و Hash#transform_keys. علاوة على ذلك، هناك الكثير من تحسينات الأداء مثل تمرير الكتل بشكل أسرع (أسرع بثلاث مرات)، و Mutexes أسرع، وقوالب ERB أسرع، وتحسينات على بعض أساليب الربط.

تتضمن بعض التغييرات الملحوظة في Ruby 2.6.0 مترجمًا تجريبيًا في الوقت المناسب (JIT)، و RubyVM::AbstractSyntaxTree (تجريبي).

تتضمن بعض التغييرات الملحوظة في Ruby 2.7.0 مطابقة الأنماط (تجريبية)، وتحسينات REPL، و GC للضغط، وفصل الوسائط الموضعية والكلمات الرئيسية.

روبي 3

صدرت لغة روبي 3.0.0 في يوم عيد الميلاد عام 2020. [ 37 ] تُعرف هذه النسخة باسم روبي 3x3، مما يعني أن البرامج ستعمل أسرع بثلاث مرات في روبي 3.0 مقارنةً بروبي 2.0. [ 38 ] وقد تم تطبيق بعض هذه الميزات بالفعل في الإصدارات الوسيطة خلال عملية الانتقال من روبي 2 إلى روبي 3. ولتحقيق سرعة 3x3، تأتي روبي 3 مزودة بتقنية MJIT، ولاحقًا YJIT، وهما مُجمّعان يعملان في الوقت الفعلي، وذلك لتسريع البرامج، على الرغم من وصفهما بأنهما تجريبيان ويظلان معطلين افتراضيًا (يتم تفعيلهما بواسطة علامات أثناء التشغيل).

من أهداف Ruby 3.0 الأخرى تحسين التزامن ، وقد ساهمت أداتان إضافيتان، هما Fibre Scheduler وRactor التجريبي، في تحقيق هذا الهدف. [ 37 ] يتميز Ractor بخفة وزنه وأمانه في بيئات متعددة الخيوط، حيث يتم ذلك من خلال تبادل الرسائل بدلاً من الكائنات المشتركة.

يقدم Ruby 3.0 لغة RBS لوصف أنواع برامج Ruby للتحليل الثابت . [ 37 ] وهي منفصلة عن برامج Ruby العامة.

كما تتضمن النسخة 3.0 من روبي بعض التحسينات في بناء الجملة وتغييرات في المكتبة. [ 37 ]

صدرت لغة روبي 3.1 في 25 ديسمبر 2021. [ 39 ] تتضمن هذه النسخة YJIT، وهو مُصرّف تجريبي جديد يعمل بتقنية Just-In-Time، طوّرته شركة Shopify لتحسين أداء تطبيقات الأعمال الواقعية. كما تتضمن مُصحّح أخطاء جديدًا . وتشمل هذه النسخة أيضًا بعض التحسينات على بناء الجملة وتحسينات أخرى. وقد نُقلت مكتبات الشبكة لبروتوكولات FTP و SMTP و IMAP و POP من المكتبات الافتراضية إلى المكتبات المُضمّنة. [ 40 ]

صدرت لغة روبي 3.2 في 25 ديسمبر 2022. [ 41 ] وهي تدعم التشغيل داخل بيئة WebAssembly عبر واجهة WASI. كما شهدت التعابير النمطية تحسينات، منها خوارزمية مطابقة أسرع ومُخزّنة مؤقتًا للحماية من هجمات ReDoS ، بالإضافة إلى إمكانية ضبط مهلة مطابقة التعابير النمطية. وتتضمن هذه النسخة أيضًا ميزات إضافية لتصحيح الأخطاء وبنية اللغة، مثل اقتراح بناء الجملة وتمييز الأخطاء. أُعيد تنفيذ مُصرّف MJIT كوحدة مكتبة قياسية، بينما يدعم مُصرّف YJIT، وهو مُصرّف JIT قائم على لغة Rust ، الآن المزيد من البنى على نظام Linux.

صدرت لغة روبي 3.3 في 25 ديسمبر 2023. [ 42 ] تُقدّم روبي 3.3 تحسيناتٍ كبيرةً في الأداء والوظائف. تشمل الميزات الرئيسية إضافة مُحلِّل Prism لتحليلٍ قابلٍ للنقل والصيانة، وإضافة مُصرِّف روبي JIT (RJIT) المُخصَّص للغة، وتحسيناتٍ ملحوظةً في أداء مُصرِّف YJIT. بالإضافة إلى ذلك، تُساهم التحسينات في استخدام الذاكرة، وإضافة مُجدوِل خيوط M:N، وتحديثات المكتبة القياسية في توفير بيئة روبي أكثر كفاءةً وسهولةً للمطورين.

صدرت لغة روبي 3.4 في 25 ديسمبر 2024. [ 43 ] أضافت روبي 3.4 itميزة مرجع معلمات الكتلة، وغيرت Prism كمحلل افتراضي، وأضافت دعم Happy Eyeballs الإصدار 2 لمكتبة المقابس، وحسّنت YJIT، وأضافت جامع قمامة معياري، وغير ذلك. [ 44 ]

روبي 4

صدرت روبي 4.0 في 25 ديسمبر 2025. [ 45 ] أضافت هذه النسخة ميزة ZJIT التجريبية، وهي مترجم فوري مكتوب بلغة رست، وميزة "Ruby Box" التجريبية، وهي ميزة لفصل التعريفات. وقد تقرر رفع رقم الإصدار إلى 4.0 بدلاً من 3.5 احتفالاً بالذكرى الثلاثين لروبي. [ 46 ]

علم الدلالة والفلسفة

يوكيهيرو ماتسوموتو مخترع روبي

صرح ماتسوموتو بأن لغة روبي مصممة لزيادة إنتاجية المبرمجين وإضفاء المتعة على عملية البرمجة، وذلك باتباع مبادئ تصميم واجهات المستخدم الجيدة . [ 47 ] وفي حديث تقني مع جوجل عام 2008، قال: "آمل أن أرى روبي تساعد كل مبرمج في العالم على أن يكون منتجًا، وأن يستمتع بالبرمجة، وأن يكون سعيدًا. هذا هو الهدف الأساسي للغة روبي." [ 48 ] ويؤكد على ضرورة أن يركز تصميم الأنظمة على احتياجات الإنسان، وليس احتياجات الحاسوب. [ 49 ]

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

صرح ماتسوموتو بأن هدفه التصميمي الأساسي كان ابتكار لغة يستمتع هو شخصيًا باستخدامها، وذلك بتقليل جهد المبرمجين واحتمالية حدوث أي لبس. وأوضح أنه لم يطبق مبدأ أقل قدر من الدهشة (POLA) في تصميم لغة روبي؛ [ 49 ] وفي نقاش جرى في مايو 2005 على مجموعة أخبار comp.lang.ruby، حاول ماتسوموتو النأي بروبي عن مبدأ POLA، موضحًا أنه نظرًا لأن أي خيار تصميمي سيُفاجئ البعض، فإنه يستخدم معيارًا شخصيًا في تقييم عنصر المفاجأة. وإذا ظل هذا المعيار الشخصي ثابتًا، فلن يكون هناك الكثير من المفاجآت لمن هم على دراية بالمعيار. [ 50 ]

وقد عرّفها ماتسوموتو بهذه الطريقة في مقابلة: [ 49 ]

لكل شخص خلفية مختلفة. قد يأتي أحدهم من بايثون، وآخر من بيرل، وقد يفاجأ كل منهم بجوانب مختلفة من اللغة. ثم يأتون إليّ قائلين: "لقد فوجئتُ بهذه الخاصية في اللغة، لذا فإن روبي تُخالف مبدأ أقل قدر من المفاجأة". مهلاً. مهلاً. مبدأ أقل قدر من المفاجأة ليس خاصًا بك وحدك. مبدأ أقل قدر من المفاجأة يعني مبدأ أقل قدر من المفاجأة بالنسبة لي . ويعني مبدأ أقل قدر من المفاجأة بعد أن تُتقن روبي جيدًا. على سبيل المثال، كنتُ مبرمجًا بلغة C++ قبل أن أبدأ بتصميم روبي. برمجتُ بلغة C++ حصريًا لمدة سنتين أو ثلاث سنوات. وبعد سنتين من برمجة C++، ما زلتُ أُفاجأ بها.

لغة روبي كائنية التوجه : كل قيمة فيها كائن، بما في ذلك الأصناف ومثيلات الأنواع التي تُصنفها لغات أخرى كثيرة على أنها بدائية (مثل الأعداد الصحيحة ، والقيم المنطقية، و" null "). ولأن كل شيء في روبي كائن، فإن لكل شيء فيها قدرات مُدمجة تُسمى الدوال. كل دالة هي دالة ، وتُستدعى الدوال دائمًا على كائن. الدوال المُعرّفة في النطاق الأعلى تُصبح دوالًا لصنف Object. وبما أن هذا الصنف هو سلف لكل صنف آخر، يُمكن استدعاء هذه الدوال على أي كائن. كما أنها مرئية في جميع النطاقات، ما يجعلها بمثابة إجراءات "عامة". تدعم روبي الوراثة مع الإرسال الديناميكي ، والمزيجات، والدوال الفردية (التي تنتمي إلى مثيل واحد وتُعرّف له، بدلًا من تعريفها على مستوى الصنف). مع أن روبي لا تدعم الوراثة المتعددة ، إلا أنه يُمكن للأصناف استيراد الوحدات كمزيجات.

وُصفت لغة روبي بأنها لغة برمجة متعددة الأنماط : فهي تسمح بالبرمجة الإجرائية (حيث يؤدي تعريف الدوال/المتغيرات خارج الفئات إلى جعلها جزءًا من الكائن الجذر "self")، أو البرمجة الكائنية (حيث كل شيء عبارة عن كائن)، أو البرمجة الوظيفية (حيث تحتوي على دوال مجهولة ، وإغلاقات ، واستمراريات ؛ جميع العبارات لها قيم، وتعيد الدوال آخر تقييم لها). كما تدعم روبي الاستبطان ، والبرمجة الانعكاسية ، والبرمجة الوصفية ، والخيوط القائمة على المفسر . وتتميز روبي بالكتابة الديناميكية ، وتدعم تعدد الأشكال البارامتري .

وفقًا للأسئلة الشائعة حول لغة روبي، فإن بناء الجملة مشابه للغة بيرل ، والدلالات مشابهة للغة سمول توك ، لكن فلسفة التصميم تختلف اختلافًا كبيرًا عن فلسفة لغة بايثون . [ 51 ]

سمات

بناء الجملة

تتشابه بنية لغة روبي إلى حد كبير مع بنية لغتي بيرل وبايثون . تُعرَّف الأصناف والأساليب باستخدام الكلمات المفتاحية، بينما يمكن تعريف كتل التعليمات البرمجية باستخدام الكلمات المفتاحية أو الأقواس المعقوفة. على عكس بيرل، لا تُسبق المتغيرات بعلامة بادئة إلزاميًا . عند استخدامها، تُغيّر العلامة دلالات نطاق المتغير. عمليًا، لا يوجد فرق بين التعبيرات والعبارات . [ 59 ] [ 60 ] تُعتبر فواصل الأسطر مهمة وتُستخدم كنهاية للعبارة؛ ويمكن استخدام الفاصلة المنقوطة كبديل. على عكس بايثون، لا تُعتبر المسافة البادئة مهمة.

من بين الاختلافات بين روبي وبايثون وبيرل، أن روبي تُبقي جميع متغيرات مثيلاتها خاصة تمامًا بالفئة، ولا تُتيح الوصول إليها إلا من خلال دوال الوصول ( getter attr_writer، attr_readersetter، إلخ). على عكس دوال "getter" و"setter" في لغات أخرى مثل C++ أو جافا ، يُمكن إنشاء دوال الوصول في روبي بسطر واحد من التعليمات البرمجية عبر البرمجة الوصفية ؛ ومع ذلك، يُمكن أيضًا إنشاء دوال الوصول بالطريقة التقليدية في C++ وجافا. ولأن استدعاء هذه الدوال لا يتطلب استخدام الأقواس، فمن السهل تحويل متغير مثيل إلى دالة كاملة، دون تعديل سطر واحد من التعليمات البرمجية المُستدعِية أو الحاجة إلى أي إعادة هيكلة، مما يُحقق وظائف مشابهة لخصائص C# و VB.NET .

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

التطبيقات

مترجم روبي الخاص بماتز

يُشار غالبًا إلى مترجم روبي الأصلي باسم مترجم روبي ماتز أو MRI. هذه النسخة مكتوبة بلغة C وتستخدم آلة افتراضية خاصة بها خاصة بلغة روبي .

تمت كتابة تطبيق Ruby 1.8 القياسي والمتقاعد بلغة C ، كلغة تفسيرية أحادية المرور . [ 20 ]

ابتداءً من Ruby 1.9، واستمرارًا مع Ruby 2.x وما فوق، أصبح مترجم Ruby الرسمي هو YARV ("Yet Another Ruby VM")، وقد حل هذا التنفيذ محل الآلة الافتراضية الأبطأ المستخدمة في الإصدارات السابقة من MRI.

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

اعتبارًا من عام 2026توجد عدة تطبيقات بديلة للغة روبي، بما في ذلك JRuby و Rubinius و mruby . يتبع كل منها نهجًا مختلفًا، حيث يوفر كل من JRuby و Rubinius الترجمة الفورية ، بينما يوفر mruby أيضًا الترجمة المسبقة .

توجد ثلاثة تطبيقات بديلة رئيسية للغة روبي:

  • JRuby ، هو تطبيق مختلط للغة جافا وروبي يعمل على آلة جافا الافتراضية . يستهدف JRuby حاليًا روبي 3.4.
  • TruffleRuby، تطبيق جافا يستخدم إطار عمل تطبيق لغة Truffle مع GraalVM
  • روبينيوس ، آلة افتراضية بلغة C++ تستخدم LLVM للترجمة إلى لغة الآلة أثناء التشغيل. كُتب مُترجم البايت كود ومعظم الفئات الأساسية بلغة روبي خالصة. يدعم روبينيوس حاليًا الإصدار 2.3.1 من روبي.

تتضمن تطبيقات روبي الأخرى ما يلي:

ومن بين تطبيقات روبي الأخرى التي توقفت عن العمل الآن:

The maturity of Ruby implementations tends to be measured by their ability to run the Ruby on Rails (Rails) framework, because it is complex to implement and uses many Ruby-specific features. The point when a particular implementation achieves this goal is called "the Rails singularity". The reference implementation, JRuby, and Rubinius[62] are all able to run Rails unmodified in a production environment.

Platform support

Matsumoto originally developed Ruby on the 4.3BSD-based Sony NEWS-OS 3.x, but later migrated his work to SunOS 4.x, and finally to Linux.[63][64] By 1999, Ruby was known to work across many different operating systems. Modern Ruby versions and implementations are available on all major desktop, mobile and server-based operating systems. Ruby is also supported across a number of cloud hosting platforms like Jelastic, Heroku, Google Cloud Platform and others.

Tools such as RVM and RBEnv, facilitate installation and partitioning of multiple ruby versions, and multiple 'gemsets' on one machine.

Repositories and libraries

RubyGems is Ruby's package manager. A Ruby package is called a "gem" and can be installed via the command line. Most gems are libraries, though a few exist that are applications, such as IDEs.[65] There are over 100,000 Ruby gems hosted on RubyGems.org.[66]

Many new and existing Ruby libraries are hosted on GitHub, a service that offers version control repository hosting for Git.

The Ruby Application Archive, which hosted applications, documentation, and libraries for Ruby programming, was maintained until 2013, when its function was transferred to RubyGems.[67]

See also

References

  1. 123Cooper, Peter (2009). Beginning Ruby: From Novice to Professional. Beginning from Novice to Professional (2nd ed.). Berkeley: APress. p. 101. ISBN 978-1-4302-2363-4. وبدرجة أقل، أثرت لغات البرمجة Python و LISP و Eiffel و Ada و C++ أيضًا على لغة Ruby.
  2. 1 2 "أسباب وراء روبي" . مؤتمر روبي 2008. كونفريكس (يوتيوب). 15 أبريل 2013.
  3. 1 2 3 4 5 6 بيني، أولا (2007). مشاريع عملية لتطبيقات الويب 2.0 باستخدام JRuby on Rails: نقل Ruby on Rails إلى Java . بيركلي: APress. ص 3. ISBN  978-1-59059-881-8يعتمد بشكل أساسي على ميزات من لغات البرمجة Perl و Smalltalk و Python و Lisp و Dylan و CLU .
  4. "وثائق جوليا 1.0: مقدمة" . مؤرشف من الأصل بتاريخ 16 أغسطس 2018. تم الاطلاع عليه بتاريخ 6 أكتوبر 2018 .
  5. بيركس، تيم. "حول Nu™" . برمجة Nu™ . شركة نيون ديزاين تكنولوجي. مؤرشف من الأصل بتاريخ 25-12-2018 . تم الاسترجاع بتاريخ 21-07-2011 .
  6. "التأثيرات - مرجع الصدأ" . مرجع الصدأ . مؤرشف من الأصل بتاريخ 26 يناير 2019. تم الاطلاع عليه بتاريخ 18 أبريل 2023 .
  7. لاتنر، كريس (2014-06-03). "الصفحة الرئيسية لكريس لاتنر" . كريس لاتنر. مؤرشف من الأصل في 2018-12-25 . تم الاسترجاع في 2014-06-03 . لغة Swift هي ثمرة جهد دؤوب من فريق من خبراء اللغة، ومختصي التوثيق، وخبراء تحسين المُصرّفات، ومجموعة داخلية بالغة الأهمية لتجربة اللغة داخليًا، حيث قدموا ملاحظاتهم للمساعدة في صقل الأفكار واختبارها عمليًا. وبالطبع، استفادت اللغة بشكل كبير من الخبرات المكتسبة بصعوبة من العديد من اللغات الأخرى في هذا المجال، مستمدةً أفكارها من لغات مثل Objective-C وRust وHaskell وRuby وPython وC# وCLU، وغيرها الكثير.
  8. "حول روبي" . مؤرشف من الأصل في 9 أكتوبر 2014. تم الاطلاع عليه في 15 فبراير 2020 .
  9. شوغو مايدا (17 ديسمبر 2002). "الأسئلة الشائعة الرسمية حول روبي" .
  10. ماتسوموتو، يوكيهيرو (13 فبراير 2006). "ردًا على: ميزات لغة ليسب في روبي" . مؤرشف من الأصل بتاريخ 27 أكتوبر 2018. تم الاطلاع عليه بتاريخ 15 فبراير 2020 .
  11. ١ ٢ ٣ ٤ ٥ ٦ "تاريخ روبي" . مؤرشف من الأصل بتاريخ ١٤ يوليو ٢٠١١. تم الاطلاع عليه بتاريخ ١٤ أغسطس ٢٠٠٨ .
  12. « [ للعلم: تاريخي ] اللحظة الحاسمة لاسم لغة روبي. (ردًا على: [ إعلان ] روبي 1.8.1)» (بريد إلكتروني من هيروشي سوجيهارا إلى ruby-talk). مؤرشف من الأصل بتاريخ 17 يوليو 2011. تم الاطلاع عليه بتاريخ 14 أغسطس 2008 .
  13. "1.3 لماذا اسم 'روبي'؟" . الأسئلة الشائعة الرسمية حول روبي .
  14. يوكيهيرو ماتسوموتو (11 يونيو 1999). "ردًا على: اسم روبي؟" . روبي-توك (قائمة بريدية). مؤرشف من الأصل في 25 ديسمبر 2018. تم الاطلاع عليه في 10 أبريل 2012 .
  15. "المزيد من علم اللغة الأثري: الكشف عن لغة روبي الأولية" . مؤرشف من الأصل في 6 نوفمبر 2015. تم الاطلاع عليه في 2 مايو 2015 .
  16. " [ ruby-talk:00382 ] ردًا على: تاريخ روبي" . مؤرشف من الأصل في 16 يوليو 2011. تم الاطلاع عليه في 2 مايو 2015 .
  17. " [ ruby-list:124 ] شرح - ميزات لغة روبي" . مؤرشف من الأصل بتاريخ 24 مايو 2003. تم الاطلاع عليه بتاريخ 2 مايو 2015 . 
  18. "مقابلة مع مبتكر لغة روبي" . مؤرشف من الأصل بتاريخ 8 فبراير 2008. تم الاطلاع عليه بتاريخ 11 يوليو 2007 .
  19. يوكيهيرو ماتسوموتو (أكتوبر 2000). "برمجة روبي: نحو الأمام" . مؤرشف من الأصل في 25 ديسمبر 2018. تم الاطلاع عليه في 5 مارس 2014 .
  20. ١ ٢ "نُنهي دعم Ruby 1.8.7" . مؤرشف من الأصل في 6 يونيو 2015. تم الاطلاع عليه في 2 مايو 2015 .
  21. "IPA 独立行政法人 情報処理推進機構:プレス発表 プログラム言語RubyのJIS規格(JIS X) 3017) 制定について" . مؤرشفة من الأصلي في 2 فبراير 2015 . تم الاسترجاع 2 مايو 2015 .
  22. "IPA 独立行政法人 情報処理推進機構:プレス発表"プログラム言語روبي، 国際規格として承認" . مؤرشفة من الأصلي في 1 فبراير 2015 . تم الاسترجاع 2 مايو 2015 .
  23. "ISO/IEC 30170:2012" . مؤرشف من الأصل بتاريخ 12 مارس 2017. تم الاطلاع عليه بتاريخ 10 مارس 2017 .
  24. تطوير مواقع الويب: روبي أون ريلز. مؤرشف بتاريخ ٢٤ فبراير ٢٠٠٩ في أرشيف الإنترنت . Devarticles.com (٢٢ مارس ٢٠٠٧). تم الاطلاع عليه بتاريخ ١٧ يوليو ٢٠١٣.
  25. "تم إصدار Ruby 1.9.3 p0" . ruby-lang.org. 31 أكتوبر 2011. مؤرشف من الأصل في 14 يناير 2013. تم الاطلاع عليه في 20 فبراير 2013 .
  26. "v1_9_3_0/NEWS" . مستودع مصدر Ruby Subversion . ruby-lang.org. ١٧ سبتمبر ٢٠١١. مؤرشف من الأصل في ٦ نوفمبر ٢٠١٥. تم الاطلاع عليه في ٢٠ فبراير ٢٠١٣ .
  27. إندو، يوسوكي. (24-02-2013) إصدار روبي 2.0.0-p0. مؤرشف بتاريخ 27-02-2013 في أرشيف الإنترنت . Ruby-lang.org. تم الاطلاع عليه بتاريخ 17-07-2013.
  28. "الترقيم الدلالي للإصدارات بدءًا من روبي 2.1.0" . 21 ديسمبر 2013. مؤرشف من الأصل في 13 فبراير 2014. تم الاطلاع عليه في 27 ديسمبر 2013 .
  29. غوستافو فريدريكو تمبل بيدروسا، فيتور دي ليما، ليوناردو بيانكوني (2015). "إصدار روبي 2.2.1" . مؤرشف من الأصل في 16 مايو 2016. تم الاطلاع عليه في 12 يوليو 2016 .{{cite web}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط )
  30. ^ جوستافو فريدريكو تمبل بيدروسا، فيتور دي ليما، ليوناردو بيانكوني (2015). "الإصدار 2.2.1 سجل التغيير" . أرشفة من الأصلي في 26 فبراير 2017 . تم الاسترجاع في 12 يوليو 2016 .{{cite web}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط )
  31. غوستافو فريدريكو تمبل بيدروسا، فيتور دي ليما، ليوناردو بيانكوني (2014). "تحديد السجلات غير المتطايرة لزيادة الأداء في ppc64" . مؤرشف من الأصل في 17 سبتمبر 2016. تم الاطلاع عليه في 12 يوليو 2016 .{{cite web}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط )
  32. غوستافو فريدريكو تمبل بيدروسا، فيتور دي ليما، ليوناردو بيانكوني (2014). "تحديد وحدات الماكرو لزيادة الأداء في ppc64" . مؤرشف من الأصل في 17 سبتمبر 2016. تم الاطلاع عليه في 12 يوليو 2016 .{{cite web}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط )
  33. "ruby/NEWS في الإصدار 2_2_0 · ruby/ruby" . GitHub . مؤرشف من الأصل في 1 يناير 2015. تم الاطلاع عليه في 2 مايو 2015 .
  34. "Ruby/NEWS في الإصدار 2_3_0 - ruby/ruby" . GitHub . مؤرشف من الأصل في 1 مارس 2017. تم الاطلاع عليه في 25 ديسمبر 2015 .
  35. "تغييرات وميزات Ruby 2.3.0" . التشغيل باستخدام Ruby . dev.mensfeld.pl. 14 نوفمبر 2015. مؤرشف من الأصل في 5 يناير 2016. تم الاطلاع عليه في 27 ديسمبر 2015 .
  36. "إصدار روبي 2.4.0" . www.ruby-lang.org . مؤرشف من الأصل بتاريخ 17 فبراير 2017. تم الاطلاع عليه بتاريخ 30 ديسمبر 2016 .
  37. ١ ٢ ٣ ٤ "إصدار روبي ٣.٠.٠" . لغة برمجة روبي . ٢٠٢٠-١٢-٢٥. مؤرشف من الأصل في ٢٠٢٠-١٢-٢٥ . تم الاسترجاع في ٢٠٢٠-١٢-٢٥ .
  38. شيفر، جونان (10 نوفمبر 2016). "روبي 3x3: ماتز، كويتشي، وتندرلوف يتحدثون عن مستقبل أداء روبي" . روبي . مؤرشف من الأصل في 10 مايو 2019. تم الاطلاع عليه في 18 مايو 2019 .
  39. "إصدار روبي 3.1.0" . ruby-lang.org . مؤرشف من الأصل بتاريخ 25 ديسمبر 2021. تم الاطلاع عليه بتاريخ 25 ديسمبر 2021 .
  40. "إصدار روبي 3.1.0" . مؤرشف من الأصل بتاريخ 26-12-2021 . تم الاطلاع عليه بتاريخ 26-12-2021 .
  41. "إصدار روبي 3.2.0" . مؤرشف من الأصل بتاريخ 25-12-2022 . تم الاطلاع عليه بتاريخ 25-12-2022 .
  42. "إصدار روبي 3.3.0" . مؤرشف من الأصل بتاريخ 25-12-2023 . تم الاطلاع عليه بتاريخ 25-12-2023 .
  43. "إصدار روبي 3.4.0" . 25-12-2024 . تم الاطلاع عليه بتاريخ 12-04-2025 .
  44. "أخبار - وثائق روبي 3.4" . تم الاطلاع عليه بتاريخ 12-04-2025 .
  45. "إصدار روبي 4.0.0" . 25-12-2025 . تم الاطلاع عليه بتاريخ 02-06-2026 .
  46. جيفري مورهاوس (14 يناير 2026). "كل ما تحتاج لمعرفته حول روبي 4.0" . تم الاطلاع عليه بتاريخ 2 يونيو 2026 .
  47. "لغة برمجة روبي" . مؤرشف من الأصل في 18 يناير 2020. تم الاطلاع عليه في 2 مايو 2015 .
  48. محادثات جوجل التقنية  – روبي 1.9 على يوتيوب
  49. 1 2 3 بيل فينرز. "فلسفة روبي" . مؤرشف من الأصل في 5 يوليو 2019. تم الاطلاع عليه في 2 مايو 2015 .
  50. "مرحباً بكم في RUBYWEEKLYNEWS.ORG" . 4 يوليو 2017. مؤرشف من الأصل في 4 يوليو 2017.{{cite web}}: CS1 maint: bot: حالة عنوان URL الأصلي غير معروفة ( رابط )
  51. "أسئلة وأجوبة حول لغة روبي: كيف تقارن روبي بـ...؟" . مؤرشف من الأصل بتاريخ 8 مايو 2015. تم الاطلاع عليه بتاريخ 2 مايو 2015 .
  52. بروس ستيوارت (29 نوفمبر 2001). "مقابلة مع مبتكر لغة روبي" . دار نشر أورايلي ميديا. مؤرشف من الأصل في 6 مايو 2015. تم الاطلاع عليه في 2 مايو 2015 .
  53. بيل فينرز. "الإنتاجية الديناميكية باستخدام روبي" . مؤرشف من الأصل في 5 سبتمبر 2015. تم الاطلاع عليه في 2 مايو 2015 .
  54. "بيئات تطوير اللغات: التطبيق الأمثل للغات المتخصصة؟" . martinfowler.com . مؤرشف من الأصل في 2 مايو 2021. تم الاطلاع عليه في 2 مايو 2015 .
  55. "روبي - إضافة توابع الفئة أثناء التشغيل" . مؤرشف من الأصل بتاريخ 22-09-2007 . تم الاطلاع عليه بتاريخ 01-11-2007 . 
  56. بيل فينرز. "الكتل والإغلاقات في روبي" . مؤرشف من الأصل في 18 أبريل 2015. تم الاسترجاع في 2 مايو 2015 .
  57. "الأساليب" . الأسئلة الشائعة الرسمية للغة روبي . مؤرشف من الأصل بتاريخ 28-06-2022 . تم الاطلاع عليه بتاريخ 20-06-2021 .
  58. "مكتبة روبي القياسية" .
  59. " [ ruby-talk:01120 ] ردًا على: قيمة while..." مؤرشف من الأصل بتاريخ 17-07-2011 . تم الاطلاع عليه بتاريخ 06-12-2008 . في لغة روبي، تُعتبر العبارة حالة خاصة من التعبير الذي لا يمكن أن يظهر كوسيط (مثل التعيين المتعدد).
  60. " [ ruby-talk:02460 ] ردًا على: سؤال الأسبقية" . مؤرشف من الأصل بتاريخ 22-07-2004 . تم الاطلاع عليه بتاريخ 06-12-2008 . لا يمكن أن تكون العبارة [...] جزءًا من تعبير إلا إذا كانت مُجمّعة بين قوسين.
  61. "remove/virtual_module: صُممت لجعل كود Ruby الخاص بك أسرع بأكثر من 3 مرات. نأمل ذلك . " GitHub . 21 فبراير 2020. مؤرشف من الأصل في 1 مارس 2017. تم الاطلاع عليه في 29 أغسطس 2016 .
  62. بيتر كوبر (18 مايو 2010). "لماذا وماذا وكيف تم إصدار روبينيوس 1.0" . مؤرشف من الأصل في 24 مايو 2010. تم الاطلاع عليه في 23 مايو 2010 .
  63. مايا ستودت (فبراير 2000). "IBM developerWorks – Ruby: لغة جديدة" . مؤرشف من الأصل في 18 أغسطس 2000. تم الاطلاع عليه في 3 مارس 2014 . 
  64. ^ يوكيهيرو ماتسوموتو (أغسطس 2002). "lang-Ruby-general: رد: سؤال حول التطوير الأولي لروبي" . مؤرشفة من الأصلي في 3 مارس 2014 . تم الاسترجاع 3 مارس 2014 .
  65. "مجموعة أدوات روبي" . مؤرشف من الأصل بتاريخ 2015-04-03 . تم الاطلاع عليه بتاريخ 2015-04-04 .
  66. "إحصائيات RubyGems.org، مُضيف جواهر مجتمعك" . rubygems.org . مؤرشف من الأصل بتاريخ 10 ديسمبر 2021. تم الاطلاع عليه بتاريخ 10 ديسمبر 2021 .
  67. "نُوقف دعم raa.ruby-lang.org" . 2013-08-08. مؤرشف من الأصل في 2015-12-31 . تم الاطلاع عليه في 2016-01-03 .

للمزيد من القراءة