Buvo išleista Ruby 3.3.0, dinamiška objektinė programavimo kalba, kuri yra labai efektyvi kuriant programas ir apima geriausias Perl, Java, Python, Smalltalk, Eiffel, Ada ir Lisp savybes. Projekto kodas platinamas pagal BSD („2 sąlyga BSDL“) ir „Ruby“ licencijas, kurios nurodo naujausią GPL licencijos versiją ir yra visiškai suderinamos su GPLv3.
Pagrindiniai patobulinimai:
- Pagrindinė struktūra apima „Prism“ analizatorių, įdiegtą libprism C bibliotekos pavidalu, naudojamą „CRuby“ interpretatoriuje, ir „Gem“ paketą „Ruby“ kalba, kuris suteikia viešą API rekursiniam kodo analizei „Ruby“ kalba iš viršaus į apačią. , tinkamas naudoti gamybiniuose projektuose vietoj Ripper analizatoriaus. Prism pranašumai yra geras nešiojamumas ir lankstus klaidų tvarkymas kode. Norėdami įjungti naują analizatorių, galite naudoti parinktį „ruby —parser=prism“ arba aplinkos kintamąjį RUBYOPT=“—parser=prism“. Norėdami išanalizuoti kodą savo programose, galima naudoti Prism.parse(source) metodus, kad gautų kodo AST atvaizdą, Prism.parse_comments(source), kad ištrauktų komentarus iš kodo, ir Prism.parse_success?(source), kad patikrintų. už klaidas kode.
- Vietoj išorinio Bison paketo, analizatoriams generuoti naudojamas projektas Lrama, kuris suteikia LALR algoritmo Ruby įgyvendinimą, palaiko su Bison suderinamus gramatikos apibrėžimus (parse.y), naudojamus CRuby, ir įdiegia pažangias funkcijas, tokias kaip klaidų tvarkymas ir parametrizuotos taisyklės (?, *, +).
- YJIT JIT kompiliatorius, kurį kuria Shopify e-komercijos platformos kūrėjai, įgyvendina iniciatyvą, skirtą padidinti „Ruby“ programų, kurios naudoja „Rails“ sistemą ir iškviečia daugybę metodų, našumą, buvo atliktas reikšmingas našumo optimizavimas. Skirtingai nuo anksčiau naudoto JIT kompiliatoriaus MJIT, naujasis YJIT naudoja Lazy Basic Block Versioning (LBBV), o ne apdoroja visus metodus ir yra įdiegtas kaip integruotas JIT kompiliatorius, parašytas Rust kalba. Naudojant LBBV, JIT pirmiausia sukompiliuoja tik metodo pradžią, o likusią dalį sukompiliuoja po kurio laiko, kai vykdymo metu nustatomi naudojamų kintamųjų ir argumentų tipai.
Bandant Optcarrot emuliatoriaus vykdymą, našumas naudojant YJIT yra daugiau nei tris kartus didesnis nei naudojant interpretatorių. Naujoje versijoje pateikiamas registrų paskirstymas virtualiosios mašinos kamino operacijoms, išplečiamas kompiliuotų iškvietimų spektras su pasirenkamais argumentais, įdiegtas pagrindinių ir specializuotų metodų tiesioginis diegimas ir pridedami atskiri optimizavimai operacijoms „Integer#*“, „Integer#!=“ , "Eilutės#" !=", "String#getbyte", "Branduolis#block_given?", "Branduolis#yra?", "Branduolio#instance_of?" ir "Modulis#===". Žymiai padidintas kompiliavimo greitis.
Atminties sąnaudos metaduomenų saugojimui buvo žymiai sumažintos ir užtikrintas kompaktiškesnis kodo generavimas ARM64 architektūrai. Pagal numatytuosius nustatymus kodo šiukšlių rinktuvas („-yjit-code-gc“) yra išjungtas, o tai dinamiškai išleidžia nepanaudotą sugeneruotą mašinos kodą, bet dėl to pablogėja našumas renkant šiukšles. Pridėtas RubyVM::YJIT.enable metodas, leidžiantis valdyti, ar YJIT įjungtas vykdymo metu, nereikalaujant paleisti su konkrečia komandinės eilutės parinktimi arba aplinkos kintamuoju. Nurodant parinktį „--yjit-stats“ rodoma statistika buvo išplėsta. Pridėtas našumo profiliavimas (--yjit-perf) ir sekimo režimai (--yjit-trace-exits).
- Siūlomas naujas JIT kompiliatorius RJIT, parašytas visiškai Ruby kalba ir pakeičiantis MJIT, tačiau, skirtingai nei pastarasis, jam nereikia C kompiliatoriaus. RJIT palaiko tik x86-64 architektūrą ir į Unix panašias platformas.
- Pridėta M:N gijų planavimo priemonė, leidžianti naudoti ribotą operacinės sistemos gijų skaičių gijų apdorojimui Ruby kodu, kad sumažintumėte gijų kūrimo ir tvarkymo išlaidas. Pagal numatytuosius nustatymus naudojamos 8 OS gijos (gali būti pakeistos naudojant aplinkos kintamąjį RUBY_MAX_CPU). Naudojant M:N planuoklį gali kilti suderinamumo su C plėtiniais problemų, todėl pagal numatytuosius nustatymus pagrindinėje Ractor klasėje jis yra išjungtas, o ne pagrindinėse klasėse įjungtas. Norėdami priverstinai įjungti „M:N“ planuoklį, nustatykite aplinkos kintamąjį RUBY_MN_THREADS=1.
- Buvo išplėstos interaktyvaus skaičiavimo apvalkalo IRB (REPL, Read-Eval-Print-Loop) galimybės. Pridėtas irb:rdbg derinimo režimas, kuris savo galimybėmis prilygsta pry-byebug derintuvui. Pridėtas kelių puslapių ls, show_source ir show_cmds komandų išvesties peržiūros palaikymas. Eksperimentinis automatinio įvesties užbaigimo palaikymas įdiegtas, atsižvelgiant į duomenų tipus. Pateikiamos komandos pakeisti šrifto spalvą ir stilių.
- Metodo „it“ iškvietimas be argumentų bloke be parametrų buvo nebenaudojamas (pvz., „[1, 2, 3].each { puts it }“).
- RubyGems ir Bundler dabar apima įspėjimo išvestį, jei gem paketai abbrev, base64, bigdecimal, csv, drb, getoptlong, mutex_m, nkf, stebėjimo priemonė, racc, resolv-replace, rinda ir syslog yra nurodyti „require“, jei jie nėra įtraukti į Gemfile arba gemspec. Būsimose „Ruby“ versijose šie brangakmeniai bus integruoti į pagrindinį paketą.
- Atnaujintos integruotų brangakmenių modulių versijos ir tie, kurie yra įtraukti į standartinę biblioteką.
Šaltinis: opennet.ru
