Ruby dasturlash tilining chiqarilishi 3.1

Ruby 3.1.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:

  • Shopify elektron tijorat platformasi ishlab chiquvchilari tomonidan Rails ramkasidan foydalanadigan va ko'plab usullarni chaqiruvchi Ruby dasturlari ish faoliyatini yaxshilash tashabbusi doirasida yaratilgan yangi eksperimental jarayondagi JIT kompilyatori YJIT qo'shildi. Oldin ishlatilgan MJIT JIT kompilyatoridan asosiy farqi shundaki, u butun usullarni qayta ishlashga asoslangan va C tilida tashqi kompilyatordan foydalanadi, YJIT Lazy Basic Block Versioning (LBBV) dan foydalanadi va integratsiyalashgan JIT kompilyatorini o'z ichiga oladi. LBBV bilan 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 dan foydalanganda, relsbench testini o'tkazishda unumdorlikning 22% ga o'sishi va suyuqlikni ko'rsatish testida 39% ga o'sishi qayd etildi. YJIT hozirda x86-64 arxitekturali tizimlarda unix-ga o'xshash operatsion tizimlarni qo'llab-quvvatlash bilan cheklangan va sukut bo'yicha o'chirib qo'yilgan (faollashtirish uchun buyruq satrida “--yjit” bayrog'ini belgilang).
  • Eski MJIT JIT kompilyatorining yaxshilangan ishlashi. Rails-dan foydalanadigan loyihalar uchun standart maksimal kesh hajmi (--jit-max-cache) 100 dan 10000 1000 ko'rsatmalarga oshirildi. XNUMX dan ortiq ko'rsatmalarga ega usullar uchun JIT-dan foydalanish to'xtatildi. Zeitwerk of Rails-ni qo'llab-quvvatlash uchun TracePoint sinf voqealari uchun yoqilgan bo'lsa, JIT kodi endi o'chirilmaydi.
  • U butunlay qayta yozilgan debug.gem disk raskadrovka dasturini o'z ichiga oladi, u masofaviy disk raskadrovkani qo'llab-quvvatlaydi, disk raskadrovka qilingan dasturni sekinlashtirmaydi, ilg'or disk raskadrovka interfeyslari (VSCode va Chrome) bilan integratsiyani qo'llab-quvvatlaydi, ko'p bosqichli va ko'p jarayonli ilovalarni disk raskadrovka qilish uchun ishlatilishi mumkin, REPL kodini bajarish interfeysi, ilg'or kuzatuv imkoniyatlarini taklif qiladi, kod parchalarini yozib olishi va takrorlashi mumkin. Ilgari taklif qilingan lib/debug.rb tuzatuvchisi asosiy taqsimotdan olib tashlandi.
    Ruby dasturlash tilining chiqarilishi 3.1
  • Qayta qo'ng'iroqlar bo'yicha hisobotlardagi xatolarni vizual ta'kidlash amalga oshirildi. Xatolarni belgilash oʻrnatilgan va sukut boʻyicha yoqilgan gem paketi error_highlight yordamida taʼminlanadi. Xatolarni belgilashni o'chirish uchun siz "--disable-error_highlight" sozlamasidan foydalanishingiz mumkin. $ ruby ​​​​test.rb test.rb:1:""da: 1 uchun aniqlanmagan "vaqt" usuli:Integer (NoMethodError) 1.time {} ^^^^^ Demoqchimisiz? marta
  • Interaktiv hisob-kitoblar qobig'i IRB (REPL, Read-Eval-Print-Loop) kiritilgan kodni avtomatik ravishda to'ldirishni amalga oshiradi (siz yozganingizda, kiritishni davom ettirish variantlari bilan maslahat ko'rsatiladi, ular orasida Tab yoki Shift+ tugmalari bilan harakat qilishingiz mumkin. Tab tugmasi). Davom etish variantini tanlagandan so'ng, yaqin joyda tanlangan element bilan bog'liq hujjatlarni ko'rsatadigan dialog oynasi ko'rsatiladi. To'liq hujjatlarga kirish uchun Alt+d klaviatura yorlig'idan foydalanish mumkin.
    Ruby dasturlash tilining chiqarilishi 3.1
  • Til sintaksisi endi funksiyalarni chaqirishda xesh harflari va kalit so'z argumentlaridagi qiymatlarni o'tkazib yuborishga imkon beradi. Masalan, “{x: x, y: y}” iborasi o‘rniga endi “{x:, y:}”, “foo(x: x, y: y)” o‘rniga - foo() ni belgilashingiz mumkin. x:, y:)".
  • Bir qatorli naqsh mosliklari uchun barqarorlashtirilgan yordam (ary => [x, y, z]), ular endi tajriba sifatida belgilanmaydi.
  • Shakl moslashuvidagi "^" operatori endi ixtiyoriy ifodalarni o'z ichiga olishi mumkin, masalan: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • Bir qatorli naqsh moslashuvlarida siz qavslarni tashlab qo'yishingiz mumkin: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • Dasturning tuzilishini va foydalaniladigan turlarni aniqlashga imkon beruvchi RBS tipidagi annotatsiya tili “<” belgisidan foydalangan holda tip parametrlarining yuqori chegarasini belgilash uchun qo'shimcha qo'llab-quvvatladi, umumiy turdagi taxalluslarni qo'llab-quvvatladi, qimmatbaho toshlarni boshqarish uchun to'plamlar, yaxshilangan ishlash va o'rnatilgan va standart kutubxonalar uchun ko'plab yangi imzolarni amalga oshirdi.
  • Integratsiyalashgan ishlab chiqish muhitlarini eksperimental qo'llab-quvvatlash TypePro statik turdagi analizatoriga qo'shildi, u aniq turdagi ma'lumotlarsiz kod tahlili asosida RBS annotatsiyalarini yaratadi (masalan, TypePro-ni VSCode muharriri bilan integratsiya qilish uchun qo'shimcha tayyorlangan).
  • Bir nechta topshiriqlarni qayta ishlash tartibi o'zgartirildi. Masalan, avval “foo[0], bar[0] = baz, qux” iborasining komponentlari baz, qux, foo, bar tartibida ishlanar edi, endi esa foo, bar, baz, qux.
  • VWA (Variable Width Allocation) mexanizmidan foydalangan holda satrlar uchun xotirani ajratish uchun tajribaviy yordam qo'shildi.
  • O'rnatilgan gem modullarining yangilangan versiyalari va standart kutubxonaga kiritilgan. Net-ftp, net-imap, net-pop, net-smtp, matritsa, prime va disk raskadrovka paketlari oʻrnatilgan.

Manba: opennet.ru

a Izoh qo'shish