Ilmus Ruby 3.1.0, dünaamiline domeenipõhine programmeerimiskeel, mis eristub kõrge arendusefektiivsuse poolest ning sisaldab parimaid omadusi keeltest nagu Perl, Java, Python, Smalltalk, Eiffel, Ada ja Lisp. Projekti kood on jagatud BSD litsentside („2-clause BSDL”) ja „Ruby” litsentsi all, mis viitab viimasele GPL litsentsi versioonile ja on täielikult ühilduv GPLv3-ga.
Peamised parandused:
- Lisatud on uus eksperimentaalne sisemine JIT-kompilaator YJIT, mis on loodud e-kaubanduse platvormi Shopify arendajate poolt Ruby rakenduste jõudluse tõstmiseks, kasutades Rails raamistiku, millel on palju meetodite kutsumisi. Peamine erinevus varasemalt kasutatud JIT-kompilaatori MJIT vahel, mis põhines meetodite täisprotsessil ja kasutas välist C keeles kirjutatud kompilaatorit, seisneb selles, et YJIT rakendab alusplokkide versioonimist (LBBV - Lazy Basic Block Versioning) ja sisaldab integreeritud JIT-kompilaatorit. LBBV abil kompileerib JIT alguses ainult meetodi alguse ja kompilatsiooni ülejäänud osa teatud aja pärast, kui täitmise käigus on määratud kasutatavate muutuja ja argumendi tüübid. YJIT kasutamisel on testides railsbench saavutatud jõudluse tõus 22% ja liquid-render testis 39%. YJIT on praegu piiratud unixitaoliste operatsioonisüsteemide toe ja x86-64 arhitektuuriga süsteemide jaoks ning vaikimisi keelatud (aktiveerimiseks tuleks käsureal kasutada lippu "--yjit").
- Vana JIT-kompilaatori MJIT jõudlust on tõhustatud. Railsi projekte kasutavad rakendused saavad nüüd vaikimisi suurema vahemälu (—jit-max-cache) — 100-st 10000 käsuni. JIT-i rakendamine on lõpetatud meetodite jaoks, mis hõlmavad rohkem kui 1000 käsku. Zeitwerk'i toeks Railsis genereeritud JIT-kood ei kõrvaldata enam, kui klassi sündmustel on aktiveeritud TracePoint.
- Komplekti on lisatud täielikult ümber kirjutatud tõrkeotsingutööriist debug.gem, mis toetab kaugõpet, ei aeglusta silumise käivitamist, toetab integreerimist arenenud silumisliideste (VSCode ja Chrome) ning seda saab kasutada mitme lõime ja protsessi rakenduste silumiseks. Tööriist pakub REPL koodi käitamise liidese, täiustatud jälgimisvõimalusi ja suudab salvestada ja uuesti esitada koodilõike. Varasemalt pakutud tõrkeotsingutööriist lib/debug.rb on baaspaketist eemaldatud.

- Raportite tagastuse jälgimise vigade silmatorkav esitlemine on nüüd saadaval. Vigadest märkimine toimub vaikimisi kaasatud gem-paketi error_highlight abil. Vigade märkimise keelamiseks saab kasutada seadistust „—disable-error_highlight”. $ ruby test.rb test.rb:1:in „
”: 1:Integer jaoks määratlemata meetod „time” (NoMethodError) 1.time {} ^^^^^ Kas mõtlesite? times - IRB (REPL, Read-Eval-Print-Loop) interaktiivses arvutikeskkonnas on nüüd saadaval automaatne koodi täiendamine (sisestamise käigus kuvatakse soovitused sisendi jätkamiseks, mille vahel saab liikuda klahviga Tab või Shift+Tab). Pärast valiku tegemist kuvatakse kõrval dialoog, mis sisaldab valitud elemendiga seotud dokumentatsiooni. Täielikku dokumentatsiooni saab avada klahvikombinatsiooniga Alt+d.

- Keele süntaks lubab nüüd vahele jätta väärtused hash'i litteraalides ja võtmeargumentide puhul funktsioonide kutsumisel. Näiteks väljendi asemel „{x: x, y: y}” saab nüüd kasutada „{x:, y:}”, ja väljendi „foo(x: x, y: y)” asemel „foo(x:, y:)”.
- Üherealiste mustri sobitamiste tugi on stabiilne (ary => [x, y, z]), mis enam ei oma katse staatust.
- Sümbol „^” mustri sobitamistes võib nüüd sisaldada suvalisi väljendeid, nagu: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #=>? [[3, 5], [5, 7], [11, 13]]
- Üherealistes mustri sobitamistes on lubatud mitte märkida sulge: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
- Tüübi annotatsioonide keel RBS, mis võimaldab määrata programmi struktuuri ja kasutatavaid tüüpe, on saanud toetuse tüüpide parameetrite ülemise piiri määramise sümboli „<” kaudu, lisatud on üldiste tüüpide pseudonüümide toetus, tagatud on kogumite toetus gemide haldamiseks, parem on jõudlus ja lisatud on palju uusi allkirju sisseehitatud ja standardraamatukogude jaoks.
- Tüüpide statiline analüüsija TypePro, mis genereerib RBS-annotatsioone koodi analüüsi põhjal ilma selgete teabe tüüpide osas, on saanud eksperimentaalse toe integreeritud arenduskeskkondade jaoks (nt TypePro integreerimise täiendus VSCode redaktoriga on valmis).
- Muudetud mitme määrangu töötlemise järjekorda. Näiteks töötles varem väljendi «foo[0], bar[0] = baz, qux» komponente järjekorras baz, qux, foo, bar, kuid nüüd foo, bar, baz, qux.
- Lisatud eksperimendiline mälu eraldamise tugi tühikutega ridade jaoks VWA (Variable Width Allocation) mehhanismi abil.
- Uuendatud sisseehitatud ja standardraamatukogust pärinevate gem-moodulite versioonid. Sisseehitatud paketid: net-ftp, net-imap, net-pop, net-smtp, matrix, prime ja debug.
Allikas: opennet.ru


