VĂ€lja anti Ruby 3.2.0, dĂŒnaamiline objektorienteeritud programmeerimiskeel, mis on programmide arendamisel vĂ€ga tĂ”hus ja sisaldab Perli, Java, Pythoni, Smalltalki, Eiffeli, Ada ja Lispi parimaid omadusi. Projekti koodi levitatakse litsentside BSD ("2-klausliga BSDL") ja "Ruby" all, mis viitab GPL-i litsentsi uusimale versioonile ja ĂŒhildub tĂ€ielikult GPLv3-ga.
Peamised tÀiustused:
- Lisatud on CRuby interpreteri esialgne port. See kompileerub WebAssembly vahekoodiks, et see töötaks veebibrauseris vĂ”i eraldi kĂ€ituskeskkondades, nĂ€iteks wasmtime. WASI (WebAssembly System Interface) API-t kasutatakse otseseks suhtluseks operatsioonisĂŒsteemiga iseseisva kĂ€ivitamise ajal. Muuhulgas pakutakse WASI kohal VFS-ĂŒmbrist, mis vĂ”imaldab kogu Ruby rakenduse pakkida ĂŒhte .wasm-failina. Brauseris töötades saab luua koolitus- ja demonstratsiooniveebiteenuseid, nĂ€iteks TryRuby. Praeguses arendusjĂ€rgus lĂ€bib port edukalt pĂ”hi- ja alglaadimistestid, mis ei kasuta Thread API-t. Samuti ei toeta port fiibereid, erandeid ega prĂŒgikoristust.
- Shopify e-kaubandusplatvormi arendajate loodud YJIT-i protsessisisene JIT-kompilaator, mille eesmĂ€rk on parandada Ruby programmide jĂ”udlust Railsi raamistiku ja paljude meetodite abil, on kuulutatud stabiilseks ja tootmiskasutuseks valmis olevaks. Peamine erinevus varem kasutatud MJIT JIT-kompilaatorist, mis pĂ”hineb tervete meetodite töötlemisel ja kasutab vĂ€list C-kompilaatorit, on see, et YJIT kasutab Lazy Basic Block Versioning'ut (LBBV) ja sisaldab integreeritud JIT-kompilaatorit. TĂ€nu LBBV-le kompileerib JIT esialgu ainult meetodi alguse ja ĂŒlejÀÀnu hiljem, pĂ€rast seda, kui kasutatavate muutujate ja argumentide tĂŒĂŒbid on tĂ€itmise ajal kindlaks mÀÀratud. YJIT on saadaval x86-64 ja arm64/aarch64 arhitektuuridele. Linux, MacOS, BSD ja muud UNIX platvormid.
Erinevalt CRubyst on YJIT kirjutatud Rustis ja vajab kompileerimiseks rustc 1.58.0+ kompilaatorit. SeetÔttu on YJITi ehitamine vaikimisi keelatud ja valikuline. YJITi kasutamine on nÀidanud yjit-bench vÔrdlustesti tulemuste paranemist 41% vÔrreldes interpreteeritud koodiga.

- Lisatud on tĂ€iendav kaitse teenusetĂ”kestusrĂŒnnakute (ReDoS) vastu vĂ€liste andmete töötlemisel ebaefektiivsetes ja pikalt töötavates regulaaravaldistes. MĂ€rkimisvÀÀrselt on tĂ€iustatud sobitamise algoritmi, mis kasutab meeldejĂ€tmise tehnikat. NĂ€iteks on avaldise '/^a*b?a*$/ =~ "a" * 50000 + "x"' tĂ€itmisaega vĂ€hendatud 10-lt 0.003 sekundile. Selle optimeerimise maksumus on suurenenud mĂ€lukasutus, mis on ligikaudu 10 korda suurem kui sisendandmete suurus. Teine leevendusmeede on vĂ”imalus mÀÀratleda ajalĂ”pp (nt "Regexp.timeout = 1.0"), mille jooksul regulaaravaldis tuleb töödelda.
- NĂŒĂŒd on lisatud syntax_suggest reĆŸiim, mis aitab diagnoosida puuduva vĂ”i mittevajaliku sulgeva "end" lausega seotud vigade pĂ”hjuseid. Sobimatu "end", puuduv mĂ€rksĂ”na ('do', 'def', 'if' jne)? 1 class Dog > 2 defbark > 3 end 4 end
- Vea asukoha kuvamise reĆŸiimile on lisatud vĂ”imalus mĂ€rkida argumente tĂŒĂŒpide ja argumentidega seotud vigade korral, nĂ€iteks: test.rb:2:in `+': nil can't be coerced into Integer (TypeError) sum = ary[0] + ary[1] ^^^^^^^
- Lisatud uus sĂŒntaks argumentide komplektide edastamiseks teistele meetoditele: def foo(*) bar(*) end def baz(**) quux(**) end
- ruby_vm/mjit/compiler on vana MJIT JIT kompilaatori Ruby-pĂ”hine ĂŒmberkirjutus. See kĂ€itab MJIT-i eraldi protsessina, mitte MJIT töölĂ”ime sees.
- Bundler 2.4 kasutab nĂŒĂŒd sĂ”ltuvuste kĂ€sitlemisel PubGrubi versioonikontrollijat, mida kasutatakse ka Darti keele pubipaketihalduris. Varem kasutatud Molinillo algoritmi kasutatakse jĂ€tkuvalt RubyGemsis, kuid tulevikus asendatakse see samuti PubGrubiga.
- Sisseehitatud kalliskivimoodulite vÀrskendatud versioonid ja need, mis sisalduvad standardraamatukogus.
Allikas: opennet.ru

