Ruby

من موسوعة حسوب
نسخة 13:00، 1 ديسمبر 2018 للمستخدم جميل-بيلوني (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى: تصفح، ابحث

لغة روبي هي لغة برمجية ديناميكية وانعكاسية (reflective) وكائنية التوجه وعامية الغرض (general-purpose). أضف إلى ذلك أنَّها لغة عالية المستوى ومفتوحة المصدر. تركز روبي على البساطة والإنتاجية، إذ تملك بنيةً أنيقةً سهلة القراءة والكتابة بطريقة أقرب إلى الحياة الطبيعية البشرية. اكتسبت روبي شهرتها من جمالية بنيتها، وقوتها. فيمكنك عند الاطلاع على أي تعبير برمجي في روبي أخذ فكرة أولية عن الوظيفة التي يفعلها دون أن يكون لك خلفية مسبقة عن البرمجة!

أُطلقَت روبي عام 1995 وتطورت وازدادت شعبيتها إلى أن صنِّفت من بين اللغات العشرة الأولى عالميًّا من ناحية التطور والشعبية من بين لغات البرمجة. تدعم لغة روبي أنماط برمجة (programming paradigms) متعددة من ضمنها البرمجة الوظيفية وكائنية التوجه والأمرية. أضف إلى ذلك أنها تملك نظام أنواع ديناميكي، وإدارة تلقائية للذاكرة.

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

محتويات

تثبيت روبي

توجد طرائق عدَّة لتنزيل وتثبيت روبي على كل منصة وهي: إمَّا استعمال أنظمة مدير الحزم، أو باستعمال المثبِّتات التلقائية، أو باستعمال مدراء روبي. هنالك طريقة أخرى يمكنك بالتأكيد استعمالها لتثبيت روبي وتصريف شيفراتها وهي بنائها من الشيفرة المصدرية مباشرةً.

حول روبي

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

البنية العامة

بنية اللغة

تعد روبي مزيجًا من اللغات البرمجية التالية: Perl، و Smalltalk، و Eiffel، و Ada، و Lisp وغيرها. انبثق عن هذا المزيج لغة برمجية جديدة حققت التوازن بين البرمجة الوظيفية (functional programming) والبرمجة الأمرية (imperative programming). بنية لغة روبي مشابهة إلى حد كبير بنية لغة Perl و Python.

الفاصل السطري مهم جدًا في روبي، إذ يُعدُّ نهايةً لأي تعبير برمجي عوضًا عن الفاصلة المنقوطة. مع ذلك، يمكن استعمال الفاصلة المنقوطة لأداء الغرض ذاته. بشكل مخالف لبايثون، المسافة البادئة (indentation) غير مهمة على الإطلاق.
puts "Hello World!"
لغة روبي هي لغة كائنية التوجه، إذ يعدُّ كل شيء فيها كائنًا؛ أي يمكن أن يُعطَى كل بت من المعلومات أو الشيفرة خاصيات وأحداث خاصة به. تدعى الخاصيات في اللغة كائنية التوجه "متغيرات النسخة" (instance variables) والأحداث "توابع" (methods). يظهر ذلك جليًّا في السطر البرمجي الآتي عبر تطبيق حدثٍ على عددٍ:
5.times { print "We *love* Ruby -- it's outrageous!" }
في أغلب لغات البرمجة، لا تعد الأعداد والأنواع الأساسية كائناتٍ. أمَّا في روبي، فإنَّها تمنح جميع الأنواع فيها توابع ومتغيرات نسخة، إذ تأثرت في ذلك من لغة البرمجة Smalltalk. الكتلة block في روبي هي من أكثر الأمور التي تعطي لهذه اللغة المرونة الكبيرة. يستطيع المبرمج أن يرفق كتلة برمجية مع أي تابع لتوجيهه إلى السلوك الذي يجب على هذا التابع أن يسلكه. أُخذَت هذه الميزة من اللغات الوظيفية تحديدًا لغة Lisp. إليك المثال البسيط التالي الذي يشرح كيفية استعمال الكتلة:
search_engines =
  %w[Google Yahoo MSN].map do |engine|
    "http://www." + engine.downcase + ".com"
  end
في هذا المثال، يطبِّق التابع الكتلة - المحدَّدة بين الكلمتين do ... end - على كل كلمة من الكلمات المعطاة.

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

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

الإسناد

لكي نسند شيئًا في لغة روبي، نستخدم رمز المساواة =؛ ففي المثال التّالي، يُسنَد العدد 5 إلى المتغيّر v المحلّي:
v = 5
فالإسناد يُنشئ متغيّرًا محلّيًا جديدًا إذا لم يكن قد عُرِّفَ من قبل.

استدعاء التوابع

عندما تستدعي تابعًا في روبي، فإنّك تمرّر رسالة لكائن معيّن لأجل تنفيذ مهمّة معيّنة، ويتمّ ذلك في روبي كالتّالي:
my_method()
لاحظ أنّ استخدام الأقواس المنحنية هنا اختياريّ:
my_method
المعتمد في هذا التّوثيق أن تُستخدّم الأقواس عند وجود المعامِلات لإزالة الالتباس، إلا في حالة وجود فرق بين وجود الأقواس وحذفها.

هذا القسم يغطّي فقط كيفيّة استدعاء التوابع.

تعابير التحكم

لدى لغة روبي العديد من الطرق للتحكم في مسار تنفيذ البرنامج، وكل البنى المذكورة هنا تعيد قيمةً. بنى التحكم الموجودة في روبي هي:

الاستثناءات

يتمّ التعامل مع الاستثناءات بعد الكلمة rescue في الكتلة begin/end:
begin
 # الشيفرة التي قد تسبب ظهور استثناء برمجي
rescue
 # معالجة الاستثناء
end 
إذا كنت ضمن تابع، فلست بحاجة لاستخدام begin و end إلا إذا كنت ترغب بحدّ النّطاق الخاص بالاستثناء الذي ترغب بمعالجته:
def my_method
 # ...
rescue
 # ...
end
نفس الأمر يطبّق في الأصناف (classes) والوحدات (modules).

التعابير البرمجية

تنشئ التعابير البرمجية في لغة روبي كائنات يمكنك استخدامها في برنامجك؛ هذه التعابير تتضمّن:

التوابع

تتضمّن التوابع في لغة روبي الوظائف التي يقوم بها برنامجك. إليك هذا المثال لتعريف تابع بسيط:
def one_plus_one
 1 + 1
end
تعريف التابع يتكوّن من الكلمة المحجوزة def يتبعها اسم التابع، ثمّ جسم التابع، فالقيمة المعادة وفي النهاية الكلمة المحجوزة end. فعند تنفيذ التابع في المثال السابق، ستُعاد القيمة 2. هذا القسم سيغطّي تعريف التّوابع.

الوحدات والأصناف

تخدم الوحدات (Modules) غايتين اثنتين في لغة روبي وهما: ميّزة نطاقات الأسماء (namespace)، والخلط الضمني (mix-in) التي سنوضّحها لاحقًا. أما الأصناف، فهي وحدات إلا أنّها لا يمكن استخدامها للخلط الضمنيّ (mix-in) ضمن وحدات أو أصناف أخرى. ويمكن استخدام الأصناف كالوحدات في حجز نطاق الأسماء، كما يمكن للصنف أن يرث التوابع والثوابت من الأصناف الأكبر.

التحسينات

إن ميّزة الأصناف المفتوحة في لغة روبي تسمح لك بإعادة تعريف أو إضافة وظائف إلى أصناف معرّفة مسبقًا. وهذا ما يسمى بمصطلح "ترقيع القرد" (monkey patch). المشكلة هنا أنَّ تعديلات من هذا النوع تكون مرئيّة على المستوى العام (global)، وبالتالي جميع مستخدمي الصنف المرقّع قادرون على رؤية هذه التغييرات، ممّا قد يسبّب تأثيرات جانبيّة غير محسوبة أو حتى عطب في البرامج.

تأتي التحسينات هنا لتقلّل أثر ترقيع القرد على مستخدمي الصنف الآخرين، إذ تقدّم طريقة لتوسيع الصنف محليًّا.

الأولويات

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

صيغ متنوعة

يتطرَّق هذا القسم إلى شرح بقية الصيغ والبنى المستعملة في روبي والتي لم تُشمَل في الأقسام السابقة. ستجد فيه شرحًا حول الصيغة المستعملة في إنهاء التعبيرات البرمجية في روبي، وكيفية استعمال المسافات البادئة بالإضافة إلى شرح الكلمات المفتاحية alias، و undef، و ?defined، و BEGIN، و END.

الأصناف والوحدات

ARGF

الصنف ARGF هو مجرى (stream) صُمِّم ليُستخدَم في الملفات البرمجية (scritps) التي تُعالج الملفات المُمرَّرة إليها على شكل وسائط في سطر الأوامر (command-line arguments)، أو المُمرَّرة عبر مجرى الدخل القياسي (STDIN).

ArgumentError

يُطلق الاستثناء ArgumentError عندما تكون الوسائط (arguments) غير صالحة، ولا يكون هناك صنف Exception أكثر تحديدًا.

Array

المصفوفات هي مجموعات مُرتَّبة ومُفهرسة بالأعداد الصحيحة (integer-indexed) ومُكونة من أي نوع من الكائنات.

BasicObject

الصنف BasicObject هو الصنف الأب لجميع الأصناف في روبي، وهو صنف فارغ.

Binding

تُغلِّف كائنات الصنف Binding سياق التنفيذ (execution context) في مكان معين في الشيفرة البرمجية، وتحتفظ بذلك السياق لاستخدامه مستقبلًا. يُحتفَظ بالمتغيرات، والتوابع، وقيمةself، وربما كتلة المكرر (iterator block) وكل ما يمكن الوصول إليه في هذا السياق. يمكن إنشاء كائنات الصنف Binding باستخدام التابع Kernel.binding، واستدعاؤها بوساطة التابع Kernel.set_trace_func.

Class

تُعدُّ الأصناف كائناتٍ من الدرجة الأولى (first-class objects) في روبي، وتعدُّ جميعها نُسخٌ من الصنف Class.

ClosedQueueError

Comparable

يُستخدم المخلوط (mixin) ‏Comparable من قبل الأصناف التي يمكن ترتيب كائناتها. يجب أن يحدِّد الصنفُ المعاملَ <=> ، الذي يوازن الكائن المستقبِل (receiver) مع كائن آخر ، ويعيد ‎-1، أو 0، أو ‎+1 إن كان المُستقبِل أصغر من الكائن الآخر، أو يساويه، أو أكبر منه على التوالي. 

Complex

يمكن تمثيل الأعداد العقدية (تُسمّى أيضًا أعدادًا مركبةً [complex number]) كزوج مكون من عدد حقيقي ووحدة تخلية (العدد i) وفق الشكل a+bi، إذ a هو الجزء الحقيقي، و b هو الجزء التخيلي و i هو الوحدة الخيالية.

Complex::compatible

ConditionVariable

توسع كائنات الصنف ConditionVariable عمل الصنف Mutex. فمن الممكن باستخدام المتغيرات الشرطية إيقاف مهمة حرجة (critical section) في أثناء تنفيذها إلى حين إتاحة مورد ما.

Continuation

تُولّد الكائنات Continuation بواسطة التابع Kernel.callcc بعد استيراد continuation عبر require. تحمل هذه الكائنات عنوان العودة (return address) وسياق التنفيذ (execution context)، مما يتيح العودة إلى نهاية الكتلة callcc من أي مكان في البرنامج.

Data

الصنف Data هو صنف مهمل. كان يعدُّ الصنف الأساس لملحقات C التي تستعمل Data_Make_Struct أو Data_Wrap_Struct.

Dir

كائنات الصنف Dir هي مجاري مجلدات (directory streams) تمثِّل الجلدات في نظام الملفات الأساسي لنظام التشغيل. فهي توفر طرائق متعددة لعرض المجلدات ومحتوياتها. انظر أيضًا صفحة الصنف File لمزيد من المعلومات.

ENV

يشبه الصنف ENV الجداول Hash كثيرًا ويُستعمل للوصول إلى متغيرات البيئة.

EOFError

يٌطلَق الخطأ EOFError من طرف بعض عمليات الصنف IO عندما تصل إلى نهاية الملف.

Encoding

يمثل الصنف Encoding ترميز المحارف الذي يمكننا استخدامه في لغة روبي.

Encoding::CompatibilityError

يُرمى الاستثناء CompatibilityError من قبل توابع الصّنفين String و Encoding عندما لا يتوافق ترميز المصدر مع ترميز الهدف.

Encoding::Converter

يُستعمَل الصنف Encoding::Converter في عمليات تحويل الترميز في السلاسل النصية.

Encoding::ConverterNotFoundError

يُرمى الاستثناء ConverterNotFoundError من قبل توابع تبديل التّرميز (transcoding) عندما لا يتوافق ترميزٌ باسمٍ معيّنٍ مع محوّلٍ (converter) محدَّد.

Encoding::InvalidByteSequenceError

يُرمَى الاستنثناء InvalidByteSequenceError من قبل توابع الصّنفين String و Encoding عندما تحوي السّلسلة النّصية التي يجري تحويل ترميزها بايتًا غير صالح إما للتّرميز المصدر أو التّرميز الهدف المراد التحويل إليه.

Encoding::UndefinedConversionError

يُرمَى الاستثناء UndefinedConversionError من قبل توابع الصّنفين String و Encoding عندما تفشل عملية تبديل التّرميز (transcoding).

EncodingError

يُمثِّل الصنف EncodingError الصِّنفَ القاعديَّ (base class) لجميعِ أخطاء التّرميز (الصنف Encoding).

Enumerable

يوفر المخلوط Enumerable مجموعة من الأصناف مع توابع تنقل (traversal) وبحث عديدة قادرة على ترتيب عناصر مجموعة مع بعضها بعضًا.

Enumerator

الصنف Enumerator هو صنفٌ يسمح بتنفيذ عملية التكرار الداخلي والخارجي.

Enumerator::Generator

Enumerator::Lazy

الصنف Enumerator::Lazy هو صنف يسمح بعملية التكرار - مثل الصنف Enumerator - ولكن بالنمط الكسول (lazy fashion).

Enumerator::Yielder

Errno

تُنشَأ الوحدة Errno ديناميكيًّا لتنظيم تفاصيل الأخطاء تُبلِّغ أنظمة عنها وإرسالها إلى أصناف روبي، مع توليد صنف فرعي من الصنف SystemCallError خاص بكل رقم خطأٍ.

Exception

تُستخدَم الكائنات السليلة من الصنف Exception للتواصل بين التّابع Kernel.raise وتصريحات rescue في الكتل (blocks) من الشكل begin...end. تَحمل كائنات الصنفException معلوماتٍ عن الاستثناء المَرمي مثل نوعه (اسم صنف الاستثناء)، وسلسلةً نصيّةً وصفيّةً اختياريّة، ومعلوماتِ تتبّعٍ اختيارية.

FalseClass

القيمة false العامة (global) هي النسخة الوحيدة من الصنف FalseClass وتمثِّل قيمة الخطأ (false) في التعابير المنطقية (boolean expressions). يوفر هذا الصنف معاملات تسمح للقيمة false بالمساهمة بشكل صحيح في التعابير المنطقية.

Fiber

الألياف (Fibers) هي حقولٌ أساسيّةٌ (primitives) تُستخدم في تنفيذ تعدّد المهام التشاركي (cooperative concurrency) للمهام الخفيفة (light weight) أي التي تستهلك جزءًا صغيرًا من الذاكرة.

FiberError

يُرمى الاستثناء FiberError عند محاولة إجراء عمليّةٌ غير صحيحةٍ في الصنف Fiber، تحديدًا عند محاولة استدعاء/استئناف ليف ميِّت، أو محاولة التّوليد من الليف الجذر (root fiber)، أو استدعاء ليفٍ عبر خيوطٍ (threads).

File

الصنف File هو اختصار لأي كائن ملفٍ قابل للوصول عبر البرنامج ومرتبط عن كثب بالصنف IO

File::Constants

توفر الوحدة File::Constants ثوابت متعلقة بالملفات في روبي.

File::Stat

تتضمن كائنات الصنف File::Stat معلومات حول حالة الكائنات File.

FileTest

تجري الوحدة FileTest عمليات تحقق على الملف بشكل مشابه لتلك الموجودة في الوحدةFile::Stat. هذه الوحدة موجودة على أنَّها وحدةٌ مستقلةٌ، وتوبعها تُعدُّ مرجعًا إلى الصنف File

Float

تمثِّل كائنات الصنف Float أعدادًا حقيقيةً غير دقيقة (inexact real numbers) باستخدام التمثيل العشري ذي الدقة المضاعفة للبنية الأصلية.

FloatDomainError

يرمى الاستثناء FloatDomainError عند محاولة تحويل قيم عشرية خاصة (مثل القيمةInfinity أو NaN على وجه الخصوص) إلى أصناف رقمية لا تدعمها.

FrozenError

يرمى الاستثناء FrozenError عند محاولة تعديل كائن مجمد.

GC

توفر الوحدة GC واجهةً لتحديد ومسح آلية جمع البيانات المهملة (garbage collection) في روبي.

GC::Profiler

يوفر مُنشئ ملفات تعريف جمع البيانات المهملة GC::Profiler الوصول إلى معلومات عن تشغيلات GC بما في ذلك الوقت والطول وحجم مساحة الكائن.

Hash

النوع Hash (أو الجدول Hash كما يطلق عليه أحيانًا) هو مجموعة تشبه القاموس ويتكون من مفاتيح فريدة وقيم مرتبطة بها. كما يسمى أيضًا المصفوفات الترابطية، فهو يشبه المصفوفات، ولكن بينما تستخدمالمصفوفة فقط الأعداد الصحيحة كفهرس، يسمح النوع Hash باستخدام أيٍّ من أنواع الكائنات لاستعمالها كفهرس وربطها بقيمٍ.

IO

الصنف IO هو أساس كل عمليات الإدخال والإخراج في روبي.

IO::EAGAINWaitReadable

IO::EAGAINWaitWritable

IO::EINPROGRESSWaitReadable

IO::EINPROGRESSWaitWritable

IO::EWOULDBLOCKWaitReadable

IO::EWOULDBLOCKWaitWritable

IO::WaitReadable

IO::WaitWritable

IOError

يُطلق الاستثناء IOError عند فشل عملية إدخال/إخراج (IO operation) في روبي.

IndexError

يُطلق الخطأ IndexError عندما يكون الفهرس (index) المُعطى غير صالح.

Integer

يمثل الصنف Integer الأعداد الصحيحة. 

Interrupt

يُطلق الاستثناء Interrupt عند استقبال إشارة المقاطعة (interrupt signal)، عادةً لأن المستخدم ضغط على Ctrl-C (على معظم منصات POSIX). وعلى هذا النحو، فهو صنف فرعي منSignalException.

Kernel

تُضمَّن الوحدة Kernel من طرف الصنف Object، لذلك فتوابعها متاحة في كل كائنات روبي. توابع نسخ الصنف Kernel مُوثّقة في صفحة الصنف Object، أما توابع الوحدة Kernel فهي مُوثقة في هذا القسم.

KeyError

يُطلق الاستثناء KeyError عندما لا يكون المفتاح (key) المُحدد موجودًا، وهو صنف فرعي من IndexError.

LoadError

يُطلق الاستثناء LoadError عند فشل تحميل الملف المطلوب (شيفرة روبي، مكتبة ملحقة، ...إلخ.).

LocalJumpError

يُطلق الاستثناء LocalJumpError عندما لا تتمكن روبي من الإعادة (yield) كما هو مطلوب.

Marshal

تحوّل المكتبة Marshal مجموعات من كائنات روبي إلى مجرى من البايتات (byte stream)، مما يسمح بتخزينها خارج البرنامج النصي النشط حاليًا. يمكن بعد ذلك قراءة تلك البيانات وإعادة إنشاء الكائنات الأصلية أنشئت منها.

MatchData

الصنف MatchData هو نوع المتغير الخاص ‎$~‎ ، كما أنه نوع الكائنات المُعادة من Regexp.match و Regexp.last_match. فهو يغلف ويستوعب جميع نتائج التطابق مع تعبير نمطي. يمكن الوصول إلى النتائج من خلال المتغيرات الخاصة ‎$&‎ و ‎$'‎ و $ و ‎$`‎ و ‎$1 و ‎$2 وهكذا دواليك.

Math

تحوي الوحدة Math الدوال المثلثية والمتسامية (transcendental functions، وتدعى أيضًا الدوال اللاجبرية) الأساسية. راجع صفحة الصنف Float للحصول على قائمة الثوابت التي تحدد دقة الأعداد العشرية (floating point) في روبي.

Math::DomainError

يُطلَق الخطأ DomainError عند محاولة تقييم دالة رياضية خارج مجال تعريفها.

Method

يتم إنشاء كائنات الصنف Method بواسطة التابع Object.method، وترتبط بكائن معين (وليس بالصنف وحسب). ويمكن استخدامها لاستدعاء التابع داخل الكائن، أو ككتلة (block) مرتبطة بمكرر (iterator). كما يمكن فك ارتباطها (unbound) من كائن محدد (سيؤدي ذلك إلى إنشاء الكائن UnboundMethod) ثم ربطها بآخر.

Module

الصنف Module هو مجموعة من التوابع والثوابت. التوابع الموجودة في الوحدات Module قد تكون إما توابع نسخة (instance methods)، أو توابع وحدة (module methods). توابع النسخة تظهر كتوابع في صنفٍ عند تضمين الوحدة، وذلك على خلاف توابع الوحدة. وعلى النقيض، يمكن استدعاء توابع الوحدة دون إنشاء كائن يُغلفها، بينما قد لا يمكن فعل ذلك مع توابع النسخة. انظر صفحة module_function.

Mutex

يمكن استخدام الصنف Mutex وكائناته كواجهة لتنسيق الوصول إلى البيانات المشتركة من عدة خيوط (threads) موجودة وتعمل في نفس الوقت.

NameError

يُطلق الاستثناء NameError عندما يكون الاسم المعطى غير صالح أو غير مُعرّف.

NilClass

الصنف NilClass هو صنفٌ للكائن nil المُفرد.

NoMemoryError

يُطلق الاستثناء NoMemoryError عند الفشل في حجز جزءٍ من الذاكرة.

NoMethodError

يُطلق الاستثناء NoMethodError عند استدعاء تابعٍ مع مستقبِل (receiver) غير مُعرَّف فيه مع فشل الاستجابة للتابع method_missing.

NotImplementedError

يُطلق الاستثناء NotImplementedError عند عدم توفّر ميزة (feature) على نظام التشغيل الحالي.

Numeric

الصنف Numeric هو الصنف الذي يجب أن ترثه كل الأصناف العددية عالية المستوى.

Object

يعدُّ الصنف Object الجذر الافتراضي لكل كائنات روبي. يَرِث الصنف Object من الصنف BasicObject ما يسمح بإنشاء تسلسلات هرمية بديلة للكائن. تُتاح توابع الكائن لكل الأصناف ما لم يتم تجاهلها (overridden) صراحةً.

ObjectSpace

تحتوي الوحدة ObjectSpace على مجموعةٍ من البرامج الفرعيَّة (routines) التي تتفاعل مع وسائل جمع المهملات وتسمح لك باجتياز جميع الكائنات النشطة مع مُكرَّر (iterator). تقدِّم الوحدة ObjectSpace الدَّعم أيضًا لمُنهِيَات كائنٍ (object finalizers) وكتل procs التي تُستدعى عندما يكون كائنٌ محدَّدٌ على وشك أن يُدمَّر عبر مجمِّع المهملات.

ObjectSpace::WeakMap

يحتفظ كائن الصنف ObjectSpace::WeakMap بمراجع أيِّ كائن، لكن قد تخضع هذه الكائنات لعملية جمع المهملات (garbage collected).

Proc

كائنات الصنف Proc هي كتلٌ من الشيفرات البرمجية رُبطت إلى مجموعة من المتغيرات المحليَّة. حالما تُربط، يمكن استدعاء الشيفرة في سياقات مختلفة ويبقى الوصول متاحًا لتلك المتغيرات.

Process

تُستعمَل الوحدة Process للتعامل والتحكم بجميع العمليات في روبي.

Process::GID

تحتوي الوحدة Process::GID على مجموعة من دوال الوحدة التي يمكنها، وبشكلٍ محمول (portably)، أن تجلب، وتضبط، وتُحوِّل مُعرِّفات المجموعة (group IDs) الحقيقيَّة والفعَّالة والمحفوظة للعملية الحاليَّة.

Process::Status

تُغلِّف الوحدة Process::Status معلومات عن حالة عملية النظام النشطة أو المنتهية.

Process::Sys

تتضمَّن الوحدة Process::Sys دوالًا تتعامل مع معرِّف المستخدم (UID) ومعرِّف المجموعة (GID) عبر توفير ارتباطٍ مباشرٍ مع استدعاءات النظام التي تحمل نفس الاسم بدلًا من الإصدارات المحمولة للدوال التي تؤدي الوظيفة نفسها الموجودة في الوحدات Process، و Process::UID، و Process::GID.

Process::UID

تحتوي الوحدة Process::UID على مجموعة من دوال الوحدة التي يمكنها، وبشكلٍ محمول (portably)، أن تجلب، وتضبط، وتُحوِّل مُعرِّفات المستخدم (user IDs) الحقيقيَّة والفعَّالة والمحفوظة للعملية الحاليَّة.

Process::Waiter

Queue

يُنفِّذ الصنف Queue طوابير الانتظار متعدِّدة المنتجين (multi-producer)، ومتعدِّدة المستهلكين (multi-consumer). إنَّه مفيدٌ بشكلٍ خاصٍّ في البرمجة المعتمدة على الخيوط (threaded programming) عندما يتحتَّم على المعلومات أن تُتبادل بأمان بين خيوطٍ (threads) متعدَّدة.

Random

يزوِّد الصنف Random واجهةً لمولِّد أعدادٍ شبه عشوائيَّةٍ (pseudo-random number generator، أو يُدعى PRNG) في روبي.

Random::Formatter

Range

يمثل الصنف Range مجالًا (مجموعة) من القيم لها بداية ونهاية.

RangeError

يُطلق الاستثناء RangeError عندما تكون قيمة عددية معطاة خارج النطاق.

Rational

يمثِّل الصنف Rational الأعداد الجذرية في روبي.

Rational::compatible

Regexp

تمثل كائنات الصنف Regexp التعابير النمطية التي تُستخدم لمطابقة نمط (pattern) معيّن في سلسلة نصية

RegexpError

يُطلق الاستثناء RangeError عند إعطاء تعبير نمطي غير صالح.

RubyVM

يمثل الصنف RubyVM الآلة الافتراضية (VM، اختصار إلى virtual machine).

RubyVM::InstructionSequence

RuntimeError

يُطلق الاستثناء RuntimeError عند محاولة تنفيذ عملية غير صالحة.

ScriptError

الصنف ScriptError هو الصنف الأب (superclass) لأصناف الأخطاء التي تُطلق عندما لا يمكن تنفيذ الشيفرة بسبب إحدى الأخطاء التالية: LoadError أو NotImplementedError أو SyntaxError

SecurityError

يُطلق الاستثناء SecurityError عند محاولة تنفيذ عملية قد تكون غير آمنة.

Signal

يمثِّل الصنف Signal الإشارات المرسلة إلى العمليات التي قيد التشغيل.

SignalException

يًطللق الاستثناء SignalException عند تلقي إشارة ما.

SizedQueue

يمثل هذا الصنف طوابيرًا (queues) ذات أحجام سعة محددة.

StandardError

معظم أخطاء الأنواع تنحدر من الصنف StandardError؛ ستُعالج الكتلة rescue التي لا تحدد الصنف Exception بشكل صريح كل الأخطاء StandardError (دون غيرها).

StopIteration

يُطلق الاستثناء SecurityError لوقف عملية التكرار (iteration)، خصوصًا عبر التابعEnumerator.next.

String

يمثِّل الصنف String السلاسل النصية في روبي التي تحتوي على حرف واحد أو أكثر أو قد تحتوي على حروف أبجدية، مثل أرقام ورموز، ويكون كل حرف (أو رمز أو رقم) ممثلًا ببايت.

Struct

يُعدُّ استخدام الصنف Struct طريقةً ملائمةً لتجميع مجموعة من الخاصيات (attributes) معًا، باستخدام مداخل (accessor methods) دون الحاجة إلى كتابة صنف جديد.

Symbol

تمثل كائنات الصنف Symbol أسماء وسلاسل نصية داخل مترجم (interpreter) روبي.

SyntaxError

يطلق الاستثناء SyntaxError عند اكتشاف خطأ في صياغة الشيفرة البرمجية لروبي.

SystemCallError

يعتبر الصنف SystemCallError الصنف الأب لكل أصناف الأخطاء منخفضة المستوى المرتبطة بنظام التشغيل.

SystemExit

يُطلق الاستثناء SystemExit من قبل التعليمة exit لبدء عملية إنهاء الشيفرة البرمجية.

SystemStackError

يُطلق الاستثناء SystemExit في حال امتلاء المُكدس (stack overflow).

Thread

المهام الفرعية (Threads، وتدعى "الخيوط" أيضًا) هي الطريقة التي تنفذ بها روبي البرمجة المتزامنة (concurrent programming). البرامج التي تتطلب تنفيذ عدة مهام فرعية يمكنها استخدام الصنف Thread.

Thread::Backtrace::Location

ThreadError

يُطلق الاستثناء ThreadError في حال محاولة تنفيذ عملية غير صالحة في مهمة فرعية.

ThreadGroup

يوفر الصنف ThreadGroup وسيلة لتتبع عددٍ من الخيوط (threads) باستمرار وكأنهم مجموعة واحدة.

Time

الصنف Time هو تجريد لمفهومي التاريخ والوقت.

TracePoint

يوفر الصنف TracePoint وظائف Kernel.set_trace_func على شكل واجهة برمجية كائنية (Object-Oriented API).

TrueClass

يوفر هذا الصنف عدة معاملات تسمح باستخدام القيمة true في التعبيرات المنطقية.

TypeError

يُطلق الاستثناء TypeError عند استقبال كائن من غير النوع المتوقع.

UnboundMethod

يمثِّل الصنف UnboundMethod التوابع الحرة (unbound methods) وهي كائنات توابع غير مرتبطة بكائن معين. 

UncaughtThrowError

يُطلق الاستثناء UncaughtThrowError عندما يتم استدعاء throw مع وسم (tag) لا يحتوي على الكتلة catch المقابلة.

UnicodeNormalize

تُعرَّف الوحدة UnicodeNormalize هنا حتى لا نضطر للبحث عنها.

Warning

يمثِّل الصنف warn كافة التحذيرات (warnings) الصادرة عن روبي.

Warning::buffer

ZeroDivisionError

يرمى الاستثناء ZeroDivisionError عند محاولة تقسيم عدد صحيح على الصفر.

fatal

يُطلق الاستثناء fatal عندما تصادف روبي خطأ فادحًا (fatal error) بحيث يتوجب عليها إنهاء البرنامج فورًا، لأنه لا يمكن معالجة هذا الاستثناء.