Ruby dasturlash tilining chiqarilishi 3.2

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 ramkasidan foydalanadigan va ko'plab usullarni chaqiruvchi Ruby dasturlari samaradorligini oshirish tashabbusi doirasida yaratilgan YJIT jarayonidagi JIT kompilyatori barqaror va tayyor deb e'lon qilindi. ishlab chiqarishdan foydalanish. Usulni qayta ishlashga asoslangan va tashqi C kompilyatoridan foydalanadigan ilgari qo'llanilgan 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 usulning faqat boshini kompilyatsiya qiladi, qolganlarini esa bir muncha vaqt o'tgach, bajarilish jarayonida foydalaniladigan o'zgaruvchilar va argumentlar turlari aniqlangandan so'ng tuzadi. YJIT Linux, MacOS, BSD va boshqa UNIX platformalarida x86-64 va arm64/aarch64 arxitekturalari uchun mavjud.

    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.

    Ruby dasturlash tilining chiqarilishi 3.2

  • 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

a Izoh qo'shish