Ruby 3.2.0 on vĂ€lja antud, see on dĂŒnaamiline objekti-orienteeritud programmeerimiskeel, mis pakub suurt effektiivsust programmide arendamisel ja sisaldab parimaid omadusi keeltest nagu Perl, Java, Python, Smalltalk, Eiffel, Ada ja Lisp. Projekti kood levitatakse BSD ("2-clause BSDL") ja "Ruby" litsentside alusel, viidates viimane versioon GPL-ist ja olles tĂ€ielikult ĂŒhilduv GPLv3-ga.
Peamised parandused:
- Algne CRuby tĂ”lgendi port, mis kompileeritakse WebAssembly vahelaudadeks, et kĂ€itada veebibrauseris vĂ”i eraldi runtime keskkondades nagu wasmtime, on lisatud. OperatsioonisĂŒsteemiga otsese suhtlemise jaoks eraldi kĂ€ivitamisel kasutatakse WASI (WebAssembly System Interface) API-d. Lisaks on pakutud VFS mĂ€his ĂŒle WASI, mis vĂ”imaldab Ruby keeles kirjutatud rakendust pakendada ĂŒhte wasm-faili. Brauseris kĂ€itamist saab kasutada koolitus- ja demonstreerimisveebiteenuste loomiseks, nagu TryRuby. Selle arengu hetkel lĂ€bib port edukalt pĂ”hiseadmete ja alglaadimise testide komplekti, kus ei kasutata Thread API-t. Port ei toeta ka töölauad (Fiber), erandeid ega prĂŒgikogumist.
- Stabiilseks kuulutatud ja töösse valmis sisemise JIT-kompilaatori YJIT, mille on loonud e-kaubanduse platvormi Shopify arendajad, et suurendada Ruby programmide, mis kasutavad Rails raamistikku ja kutsuvad palju meetodeid, jĂ”udlust. Peamine erinevus varasemalt kasutatud MJIT JIT kompilaatorist, mis pĂ”hineb meetodite tĂ€ielikul töötlemisel ja kasutab vĂ€liskompilaatorit C keeles, on see, et YJIT rakendab alusskeemide versioonimisstrateegiat (LBBV â Lazy Basic Block Versioning) ja sisaldab integreeritud JIT-kompilaatorit. LBBV tĂ”ttu kompileerib JIT esmalt ainult meetodi alguse, kuna ĂŒlejÀÀnud osa kompileeritakse hiljem, pĂ€rast seda, kui kĂ€itamise kĂ€igus on kindlaks tehtud kasutatavate muutujate ja argumentide tĂŒĂŒbid. YJIT on saadaval x86-64 ja arm64/aarch64 arhitektuuridega Linuxis, MacOS-is, BSD-s ja teistes UNIX-platvormides.
Erinevalt CRuby-st on YJIT-i kood kirjutatud Rustis ja selle kompileerimiseks on vajalik rustc 1.58.0+ kompilaator, seetÔttu on YJIT-i kogumine vaikimisi keelatud ja see on valikuline. YJIT-i kasutamisel on yjit-bench testis fikseeritud 41% parema jÔudluse suurenemine vÔrreldes tÔlkimisega.

- Lisatud on tĂ€iendav kaitse teenusekeeldude rĂŒnnakute vastu, kui töödeldakse vĂ€liseid andmeid ebaefektiivsete ja kaua kestvate regulaarsete vĂ€ljendite (ReDoS) korral. Oluliselt on tĂ€iustatud vastavuse algoritmi, kus on kasutatud memoreerimise tehnikat. NĂ€iteks on vĂ€ljendi â/^a*b?a*$/ =~ "a" * 50000 + "x"â tĂ€itmise aeg vĂ€henenud 10-lt 0.003 sekundi peale. Optimeerimise hind on suurem mĂ€lu tarbimine, mis on umbes kĂŒmme korda suurem kui sisendandmete suurus. Teiseks kaitsemeetmeks on regulaarse vĂ€ljendi töötlemiseks aja mÀÀramine (nĂ€iteks "Regexp.timeout = 1.0").
- Koosseisu on lisatud syntax_suggest reĆŸiim, mis aitab diagnoosida vigu, mis on seotud puuduvate vĂ”i liigsete sulgemisavaldustega "end". Unmatched `endâ, missing keyword (`doâ, `def`, `if`, jne.) ? 1 class Dog > 2 defbark > 3 end 4 end
- Vigade nĂ€itamise reĆŸiimi on lisatud vĂ”imalus mĂ€rkida argumente, kui need on seotud tĂŒĂŒpide ja argumentide vigadega, nĂ€iteks: test.rb:2:in `+â: nil canât be coerced into Integer (TypeError) sum = ary[0] + ary[1] ^^^^^^
- Lisatud on uus sĂŒntaks argumentide suunamiseks teistesse meetoditesse: def foo(*) bar(*) end def baz(**) quux(**) end
- Esitatud ruby_vm/mjit/kompilaator â vana JIT-kompillari MJIT variant, mis on ĂŒmber kirjutatud Ruby keeles. Tagatud on MJIT-i tĂ€itmine eraldi protsessis, mitte MJIT töötaja tahkis.
- Bundler 2.4-s on sÔltuvuste töötlemisel kasutatud versiooni mÀÀratlemise mehhanismi PubGrub, mis on samuti kasutusel Dart keele pakihalduris pub. Varem kasutatud algoritm Molinillo jÀtkab RubyGems-is kasutamist, kuid tulevikus asendatakse see ka PubGrubiga.
- Sisseehitatud ja standardraamatukogu gem-modulite versioonid on ajakohastatud.
Allikas: opennet.ru

