إصدار لغة البرمجة روبي 3.2

تم إصدار Ruby 3.2.0، وهي لغة برمجة ديناميكية موجهة للكائنات ذات كفاءة عالية في تطوير البرامج وتتضمن أفضل ميزات Perl وJava وPython وSmalltalk وEiffel وAda وLisp. يتم توزيع رمز المشروع بموجب تراخيص BSD ("2-clause BSDL") و"Ruby"، والتي تشير إلى أحدث إصدار من ترخيص GPL ومتوافق تمامًا مع GPLv3.

التحسينات الرئيسية:

  • تمت إضافة منفذ أولي لمترجم CRuby، الذي يتم تجميعه في كود WebAssembly الوسيط للتشغيل في متصفح الويب أو في أوقات التشغيل المستقلة مثل Wasmtime. للتفاعل المباشر مع نظام التشغيل عند التشغيل بشكل منفصل، يتم استخدام واجهة برمجة تطبيقات WASI (WebAssembly System Interface). من بين أشياء أخرى، يتم توفير غلاف VFS أعلى WASI، والذي يسمح لك بحزم تطبيق Ruby بالكامل في عرض تقديمي على شكل ملف Wasm واحد. يمكن استخدام التشغيل في المتصفح لإنشاء خدمات ويب تدريبية وعرضية مثل TryRuby. في المرحلة الحالية من التطوير، نجح المنفذ في اجتياز مجموعات الاختبار الأساسية واختبار التمهيد، والتي لا تستخدم واجهة برمجة تطبيقات Thread. لا يدعم المنفذ أيضًا الألياف أو الاستثناءات أو تجميع البيانات المهملة.
  • تم الإعلان عن أن مترجم JIT قيد التشغيل YJIT، الذي أنشأه مطورو منصة التجارة الإلكترونية Shopify كجزء من مبادرة لزيادة أداء برامج Ruby التي تستخدم إطار عمل Rails وتستدعي الكثير من الأساليب، مستقر وجاهز للاستخدام استخدام الإنتاج. يتمثل الاختلاف الرئيسي عن مترجم MJIT JIT المستخدم سابقًا، والذي يعتمد على معالجة الأساليب بأكملها ويستخدم مترجمًا خارجيًا في لغة C، في أن YJIT يستخدم Lazy Basic Block Versioning (LBBV) ويحتوي على مترجم JIT متكامل. باستخدام LBBV، يقوم JIT أولاً بتجميع بداية الطريقة فقط، ثم يجمع الباقي في وقت لاحق، بعد تحديد أنواع المتغيرات والوسائط المستخدمة أثناء التنفيذ. YJIT متاح لبنيتي x86-64 وarm64/aarch64 على Linux وMacOS وBSD ومنصات UNIX الأخرى.

    على عكس روبي، فإن كود YJIT مكتوب بلغة Rust ويتطلب مترجم Rustc 1.58.0+ للتجميع، لذلك يتم تعطيل بناء YJIT افتراضيًا وهو اختياري. عند استخدام YJIT، تم تسجيل زيادة في الأداء بنسبة 41٪ عند تشغيل اختبار yjit-bench مقارنة باستخدام التفسير.

    إصدار لغة البرمجة روبي 3.2

  • تمت إضافة حماية إضافية ضد هجمات رفض الخدمة عند معالجة البيانات الخارجية في تعبيرات عادية (ReDoS) غير فعالة وتستغرق وقتًا طويلاً. تم تحسين خوارزمية المطابقة، التي تستخدم تقنية الحفظ، بشكل ملحوظ. على سبيل المثال، تم تقليل وقت تنفيذ التعبير '/^a*b?a*$/ =~ "a" * 50000 + "x"' من 10 إلى 0.003 ثانية. تكلفة التحسين هي زيادة في استهلاك الذاكرة، حيث يزيد استهلاكها بحوالي 10 مرات عن حجم البيانات المدخلة. الإجراء الأمني ​​الثاني هو القدرة على تحديد المهلة (على سبيل المثال، "Regexp.timeout = 1.0") والتي يجب خلالها معالجة التعبير العادي.
  • يتم تضمين وضع Syntax_suggest، الذي يساعد في تشخيص أسباب الأخطاء المرتبطة بتعبير "النهاية" المفقود أو الإضافي. "نهاية" غير متطابقة، كلمة رئيسية مفقودة ('do'، `def`، `if`، وما إلى ذلك)؟ 1 صنف كلب > 2 ديفبارك > 3 نهاية 4 نهاية
  • تمت إضافة القدرة على وضع علامة على الوسائط للأخطاء المتعلقة بالأنواع والوسائط إلى وضع عرض موقع الخطأ، على سبيل المثال: test.rb:2:in `+': لا يمكن إجبار nil على عدد صحيح (TypeError) sum = ary [0] + آري [1] ^^^^^^
  • تمت إضافة صيغة جديدة لإعادة توجيه مجموعات الوسائط إلى طرق أخرى: def foo(*) bar(*) end def baz(**) quux(**) end
  • تم اقتراح Ruby_vm/mjit/compiler - وهو متغير من مترجم MJIT JIT القديم، والذي تمت إعادة كتابته بلغة روبي. التأكد من تشغيل MJIT في عملية منفصلة بدلاً من تشغيله في مؤشر ترابط عامل MJIT.
  • في Bundler 2.4، تستخدم معالجة التبعية كاشف إصدار PubGrub، والذي يُستخدم أيضًا في مدير حزم Pub للغة Dart. يستمر استخدام خوارزمية Molinillo المستخدمة مسبقًا في RubyGems، ولكن سيتم استبدالها أيضًا بـ PubGrub في المستقبل.
  • الإصدارات المحدثة من وحدات الأحجار الكريمة المضمنة وتلك المضمنة في المكتبة القياسية.

المصدر: opennet.ru

إضافة تعليق