Ruby 3.2.0, dastur ishlab chiqishda yuqori samaradorlik va Perl, Java, Python, Smalltalk, Eyfel, Ada va Lispning eng yaxshi xususiyatlarini o'zida mujassam etgan dinamik ob'ektga yo'naltirilgan dasturlash tili chiqarildi. Loyiha kodi BSD ("2-bandli BSDL") va "Ruby" litsenziyalari ostida tarqatiladi, bu GPL litsenziyasining so'nggi versiyasiga ishora qiladi va GPLv3 bilan to'liq mos keladi.
Asosiy yaxshilanishlar:
- Veb-brauzerda yoki wasmtime kabi mustaqil ish vaqtlarida ishlash uchun WebAssembly oraliq kodiga kompilyatsiya qiluvchi CRuby tarjimonining boshlang'ich porti qo'shildi. Alohida ishlayotganda operatsion tizim bilan to'g'ridan-to'g'ri o'zaro ta'sir qilish uchun WASI (WebAssembly System Interface) API ishlatiladi. Boshqa narsalar qatorida, WASI-ning tepasida VFS bog'lanishi ta'minlangan, bu sizga Ruby tilida butun dasturni bitta wasm fayli ko'rinishidagi ko'rinishga to'plash imkonini beradi. Brauzerda ishlash TryRuby kabi o'quv va demo veb-xizmatlarini yaratish uchun ishlatilishi mumkin. Rivojlanishning hozirgi bosqichida port Thread API-dan foydalanmaydigan asosiy va bootstrap test to'plamlaridan muvaffaqiyatli o'tadi. Port shuningdek, Fiber, istisnolar yoki axlat yig'ish funksiyalarini qo'llab-quvvatlamaydi.
- Shopify elektron tijorat platformasi ishlab chiquvchilari tomonidan Rails framework yordamida va ko'plab usullarni chaqirish orqali Ruby dasturlarining ishlashini yaxshilash tashabbusi doirasida yaratilgan YJIT jarayonidagi JIT kompilyatori barqaror va ishlab chiqarishda foydalanishga tayyor deb e'lon qilindi. Ilgari ishlatilgan, butun usullarni qayta ishlashga asoslangan va tashqi C kompilyatoridan foydalanadigan MJIT JIT kompilyatoridan asosiy farqi shundaki, YJIT Lazy Basic Block Versioning (LBBV) dan foydalanadi va o'rnatilgan JIT kompilyatorini o'z ichiga oladi. LBBV tufayli JIT dastlab faqat usulning boshlanishini kompilyatsiya qiladi va qolganlarini keyinroq, ishlatilgan o'zgaruvchilar va argumentlarning turlari bajarilish paytida aniqlangandan so'ng kompilyatsiya qiladi. YJIT x86-64 va arm64/aarch64 arxitekturalari uchun mavjud. Linux, MacOS, BSD va boshqa UNIX platformalari.
CRuby-dan farqli o'laroq, YJIT kodi Rust tilida yozilgan va kompilyatsiya qilish uchun rustc 1.58.0+ kompilyatorini talab qiladi, shuning uchun YJIT kompilyatsiyasi sukut bo'yicha o'chirilgan va ixtiyoriy. YJIT-dan foydalanganda, yjit-bench testini o'tkazishda talqindan foydalanish bilan solishtirganda ishlashning 41% ga o'sishi qayd etildi.

- Samarasiz va uzoq muddatli muntazam ifodalarda (ReDoS) tashqi ma'lumotlarni qayta ishlashda xizmat ko'rsatishni rad etishga olib keladigan hujumlardan qo'shimcha himoya qo'shildi. Yodlash texnikasidan foydalanadigan mos keladigan algoritm sezilarli darajada yaxshilandi. Masalan, '/^a*b?a*$/ =~ "a" * 50000 + "x"' ifodasini bajarish vaqti 10 dan 0.003 soniyagacha qisqartirildi. Optimallashtirish narxi - bu xotira iste'molining oshishi, uning iste'moli kiritilgan ma'lumotlarning hajmidan taxminan 10 baravar yuqori. Ikkinchi xavfsizlik chorasi - bu vaqt tugashini belgilash qobiliyati (masalan, "Regexp.timeout = 1.0"), buning uchun muntazam ifodani qayta ishlash uchun vaqt bo'lishi kerak.
- Sintaksis_suggest rejimi etishmayotgan yoki ortiqcha "tugatish" yopilish bayonoti bilan bog'liq xatolar sabablarini aniqlashga yordam berish uchun kiritilgan. Mos kelmaydigan `end', etishmayotgan kalit so'z (`do', `def`, `if` va hokazo) ? 1 sinf It > 2 defbark > 3 end 4 end
- Xato joylashuvi rejimiga turlar va argumentlar bilan bogβliq xatoliklarda argumentlarni belgilash imkoniyati qoβshildi, masalan: test.rb:2:in `+': nil Integer (TypeError) sum = ary [ 0] + ary [1] ^^^^^^
- Argumentlar toβplamining boshqa usullariga yoβnaltirish uchun yangi sintaksis qoβshildi: def foo(*) bar(*) end def baz(**) quux(**) end
- Ruby_vm/mjit/compiler taklif qilindi - eski MJIT JIT kompilyatorining Ruby tilida qayta yozilgan varianti. MJIT ishchi oqimida bajarish o'rniga, alohida jarayonda MJIT bajarilishini ta'minladi.
- Bundler 2.4 da qaramlikni qayta ishlash PubGrub versiyasini topuvchidan foydalanadi, u Dart uchun pub paketlar menejeri tomonidan ham qo'llaniladi. Ilgari ishlatilgan Molinillo algoritmi RubyGems-da foydalanishda davom etmoqda, ammo kelajakda PubGrub bilan almashtiriladi.
- O'rnatilgan va standart kutubxona qimmatbaho modullarining yangilangan versiyalari.
Manba: opennet.ru
