Ruby programmeerimiskeele 3.2 väljalase

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 CRuby tõlgi esialgne port, mis kompileerib WebAssembly vahekoodiks veebibrauseris või eraldiseisvates käitustingimustes (nt wasmtime) töötamiseks. Operatsioonisüsteemiga vahetuks suhtlemiseks eraldi käitamisel kasutatakse WASI (WebAssembly System Interface) API-d. Muuhulgas on WASI peal ka VFS-ümbris, mis võimaldab terve Ruby rakenduse pakendada esitlusse ühe wasm-failina. Brauseris töötamist saab kasutada koolitus- ja demoveebiteenuste (nt TryRuby) loomiseks. Praeguses arendusetapis läbib port edukalt põhi- ja bootstrap-testikomplektid, mis ei kasuta Thread API-t. Samuti ei toeta sadam Fibersi, erandeid ega prügivedu.
  • YJIT protsessisisene JIT-kompilaator, mille Shopify e-kaubanduse platvormi arendajad lõid osana algatusest, mille eesmärk on suurendada Rails raamistikku kasutavate ja palju meetodeid kutsuvate Ruby programmide jõudlust, on kuulutatud stabiilseks ja kasutamiseks valmis. tootmiskasutus. Peamine erinevus varem kasutatud MJIT JIT kompilaatorist, mis põhineb tervete meetodite töötlemisel ja kasutab välist kompilaatorit C-keeles, on see, et YJIT kasutab Lazy Basic Block Versioning (LBBV) ja sisaldab integreeritud JIT-kompilaatorit. LBBV-ga kompileerib JIT esmalt ainult meetodi alguse ja ülejäänu mõni aeg hiljem, pärast seda, kui kasutatavate muutujate ja argumentide tüübid on täitmise käigus kindlaks määratud. YJIT on saadaval x86-64 ja arm64/aarch64 arhitektuuridele Linuxi, MacOS-i, BSD ja teiste UNIX-i platvormidel.

    Erinevalt Rubyst on YJIT-i kood kirjutatud Rust-keeles ja selle kompileerimiseks on vaja rustc 1.58.0+ kompilaatorit, seega on YJIT-i ehitamine vaikimisi keelatud ja valikuline. YJITi kasutamisel registreeriti yjit-pingi testi läbiviimisel jõudluse kasv 41% võrreldes tõlgendamise kasutamisega.

    Ruby programmeerimiskeele 3.2 väljalase

  • Lisatud täiendav kaitse teenuse keelamise rünnakute eest, kui töödeldakse väliseid andmeid ebaefektiivsete ja aeganõudvate regulaaravaldiste (ReDoS) korral. Oluliselt on täiustatud meeldejätmise tehnikat kasutavat sobitamisalgoritmi. Näiteks avaldise '/^a*b?a*$/ =~ "a" * 50000 + "x"' täitmise aega vähendati 10 sekundilt 0.003 sekundile. Optimeerimise maksumus on mälutarbimise suurenemine, mille tarbimine on ligikaudu 10 korda suurem kui sisendandmete suurus. Teine turvameede on võimalus määratleda ajalõpp (näiteks "Regexp.timeout = 1.0"), mille jooksul regulaaravaldist tuleb töödelda.
  • Kaasatud on režiim Syntax_suggest, mis aitab diagnoosida puuduva või täiendava sulgemisavaldisega seotud vigade põhjuseid. Sobimatu "lõpp", puuduv märksõna ("do", "def", "if" jne)? 1 klass Koer > 2 haukumist > 3 otsa 4 otsa
  • Tõrke asukoha kuvamisrežiimile on lisatud võimalus märkida argumente tüüpide ja argumentidega seotud vigade puhul, näiteks: test.rb:2:in `+': nulli ei saa täisarvuks (TypeError) summ = ary sundida [0] + ary [1] ^^^^^^
  • Lisatud uus süntaks argumentide komplektide ümbersuunamiseks teistele meetoditele: def foo(*) bar(*) end def baz(**) quux(**) end
  • Pakutakse välja Ruby_vm/mjit/compiler – vana MJIT JIT kompilaatori variant, mis on ümber kirjutatud Ruby keeles. Tagati, et MJIT töötab eraldi protsessis, mitte ei tööta MJIT-i töötaja lõimes.
  • Bundler 2.4 puhul kasutab sõltuvuse töötlemine PubGrubi versioonidetektorit, mida kasutatakse ka Darti keele pubipaketihalduris. RubyGemsis kasutatakse jätkuvalt varem kasutatud Molinillo algoritmi, kuid see asendatakse tulevikus ka PubGrubiga.
  • Sisseehitatud kalliskivimoodulite värskendatud versioonid ja need, mis sisalduvad standardraamatukogus.

Allikas: opennet.ru

Lisa kommentaar