بعد عام من التطوير نشرت الإفراج عن روبي 2.7.0، لغة برمجة ديناميكية موجهة للكائنات تتميز بالكفاءة العالية في تطوير البرامج وتضم أفضل ميزات Perl و Java و Python و Smalltalk و Eiffel و Ada و Lisp. يتم توزيع رمز المشروع بموجب تراخيص BSD ("BSDL المكونة من فقرتين") و "Ruby" ، والتي تشير إلى أحدث إصدار من ترخيص GPL ومتوافق تمامًا مع GPLv2. Ruby 3 هو الإصدار الرئيسي السابع الذي يتم إنتاجه كجزء من عملية التطوير المخطط لها والتي تتضمن تخصيص عام لتحسينات الميزات وإصدار التصحيح لمدة 2.7-2 أشهر.
تجريبي دعم نمط مطابقة (نمط مطابقة) للتكرار على الكائن المحدد وتعيين قيمة إذا كان هناك تطابق في النمط.
الحالة [0 ، [1 ، 2 ، 3]] في [a، [b، * c]] pa # => 0
pb # => 1
pc # => [2، 3] نهاية
الحالة {أ: 0 ، ب: 1}
في {أ: 0 ، س: 1}
: لا يمكن الوصول إليه
في {أ: 0 ، ب: فار}
ف فار # => 1
النهاية
غلاف العمليات الحسابية التفاعلية irb (REPL ، Read-Eval-Print-Loop) لديه الآن إمكانية التحرير متعدد الأسطر ، ويتم تنفيذه باستخدام مكتبة متوافقة مع readline تتغذىمكتوب في روبي. تم دمج دعم rdoc ، والذي يسمح بعرض المعلومات المرجعية حول الفئات والوحدات والأساليب المحددة في irb. يتم توفير تمييز ملون للخطوط مع رمز موضح من خلال Binding # irb ونتائج فحص كائنات الفئة الأساسية.
تمت إضافة أداة تجميع نفايات مضغوطة (Compaction GC) يمكنها إجراء إلغاء تجزئة لمنطقة من الذاكرة ، وحل مشاكل الأداء البطيء وزيادة استهلاك الذاكرة بسبب تجزئة الذاكرة التي تحدث أثناء تشغيل بعض تطبيقات Ruby متعددة الخيوط. لحزم الأشياء على الكومة مقترح GC.compact لتقليل عدد صفحات الذاكرة المستخدمة وتحسين كومة العمليات
CoW (نسخ عند الكتابة).
تم تنفيذها التحضير لفصل الحجج على أساس الموضع في القائمة ("def foo (a، b، c)") والكلمات الرئيسية ("def foo (key: val)"). تم إهمال التحويل التلقائي للوسيطة استنادًا إلى الكلمات الأساسية والموضع ولن يتم دعمه في فرع Ruby 3.0. على وجه الخصوص ، تم إهمال استخدام الوسيطة الأخيرة كمعلمات للكلمات الرئيسية ، لتمرير الوسائط القائمة على الكلمات الرئيسية كمعامل التجزئة الأخير ، ولتقسيم الوسيطة الأخيرة إلى معلمات موضعية وكلمات رئيسية.
يُسمح باستدعاء الطريقة الخاصة باستخدام حرفية "ذاتية"
ديفو
النهاية
خاص: foo
self.foo
تمت إضافة العداد :: طريقة Lazy # حريصة لإنشاء تعداد منتظم من التعداد البطيء (Enumerator :: Lazy).
أ =٪ w (foo bar baz)
e = a.lazy.map {| x | x.upcase} .map {| x | x + "!" }.مشتاق
p e.class # => العداد
خريطة إلكترونية {| x | x + "؟" } # => ["FOO !؟" ، "BAR !؟" ، "BAZ !؟"]
استمر تطوير مترجم JIT التجريبي ، والذي يمكن أن يحسن بشكل كبير أداء التطبيقات في لغة روبي. يقوم مترجم JIT المقترح في Ruby أولاً بكتابة كود C على القرص ، وبعد ذلك يقوم باستدعاء مترجم C خارجي لإنشاء تعليمات الجهاز (يتم دعم GCC و Clang و Microsoft VC ++). يطبق الإصدار الجديد طريقة للنشر المضمّن إذا لزم الأمر ، وتطبيق انتقائي لأوضاع التحسين أثناء التجميع ، وزيادة القيمة الافتراضية لـ "--jit-min-calls" من 5 إلى 10000 ، و "--jit-max-cache" من 1000 إلى 100.
تحسين أداء CGI.escapeHTML و Monitor و MonitorMixin.
Module # name، true.to_s، false.to_s، و nil.to_s تضمن إرجاع سلسلة بدون تغيير للكائن المحدد.
تم تقليل حجم الملفات الثنائية التي تم إنشاؤها بواسطة طريقة RubyVM :: InstructionSequence # to_binary ؛
إصدارات محدثة من المكونات المضمنة ، بما في ذلك
Bundler 2.1.2 ، RubyGems 3.1.2 ،
Racc 1.4.15 ،
CSV 3.1.2 ، REXML 3.2.3 ،
RSS 0.2.8 ،
سلسلة الماسح 1.0.3 ؛
انتقلت المكتبات من التوزيع الأساسي إلى حزم الأحجار الكريمة الخارجية
CMath (جوهرة cmath) ،
Scanf (جوهرة المسح الضوئي) ،
شل (جوهرة قذيفة) ،
المزامن (مزامنة جوهرة) ،
خيوط انتظر (مع جوهرة) ،
E2MM (جوهرة e2mmap).
يتم نشر وحدات stdlib الافتراضية على rubygems.org:
المؤشر،
CGI
مندوب
getoptlong ،
صافي البوب
صافي بروتوكول نقل البريد الإلكتروني ،
open3 ،
pstore
مفرد. لم يتم نقل وحدات المراقبة إلى rubygems.org
مراقب،
نفذ الوقت،
المتتبع
أوري
yaml ، والتي يتم شحنها فقط مع قلب الياقوت.