Ilmus Ruby 3.3.0, dünaamiline objekt-orienteeritud programmeerimiskeel, mis paistab silma kõrge arendusefektiivsusega ning sisaldab parimaid omadusi keeltest nagu Perl, Java, Python, Smalltalk, Eiffel, Ada ja Lisp. Projekti kood on levitatud BSD ("2-clause BSDL") ja "Ruby" litsentside alusel, mis viitab viimasele GPL litsentsi versioonile ja on täielikult ühilduv GPLv3-ga.
Peamised parandused:
- Peamisse koosseisu on lisatud Prism parser, mis on rakendatud C teegina libprism, mida kasutatakse CRuby tõlgis, ja Ruby keeles gem-paketina, mis pakub avalikku API-d Ruby koodi allapoole rekursiivseks analüüsiks, sobivaks kasutamiseks töös projektides Ripper parseri asemel. Prisma eelisteks on hea ülekantavus ja paindlik veakäsitlus. Uue parseri lisamiseks võib kasutada valikut „ruby —parser=prism” või keskkonna muutujat RUBYOPT="—parser=prism”. Koodi analüüsimiseks oma programmides on saadaval meetodid Prism.parse(source) koodi AST-esituse saamiseks, Prism.parse_comments(source) koodi kommentaaride eraldamiseks ja Prism.parse_success?(source) koodi vigade kontrollimiseks.
- Välist Bisoni paketist parserite genereerimiseks kasutatakse projekti Lrama, mis pakub LALR algoritmi rakendust Ruby keeles, toetades Bisoniga ühilduvaid grammatikamääratlusi (parse.y), mida kasutatakse CRuby versioonis, ning rakendab laiendatud võimalusi, nagu vea töötlemine ja parameetriga reeglid (?, *, +).
- JIT-kompilaatori YJIT oluliselt parendatud jõudlust arendavad e-kaubanduse platvormi Shopify arendajad raamistiku Rails ja mitmete meetodite kutsete kasutamiseks Ruby programmide jõudluse tõhustamise algatuse raames. Erinevalt varem kasutatud JIT-kompilaatorist MJIT, rakendab uus YJIT aluse plokkide versioonimist (LBBV — Lazy Basic Block Versioning) meetodite tervikliku töötlemise asemel ja on rakendatud sisseehitatud JIT-kompilaatorina, mis on kirjutatud Rust keeles. Tänu LBBV-le kompileerib JIT alguses ainult meetodi alguse ning ülejäänud osa kompileeritakse hiljem, pärast seda, kui täitmise käigus on määratud kasutatavate muutuja ja argumentide tüübid.
Optcarrot'i emulaatori testimisel ületab YJIT kasutamise tulemuslikkus rohkem kui kolm korda tõlgendi kasutamise tulemuslikkust. Uues versioonis on tagatud registrite eraldamine virtuaalmasina virnastamise operatsioonide jaoks, laiendatud on kompileeritavate üleskutsete spektrit valikuliste argumentidega, rakendatud on inline-laiendamine põhimeetoditele ja spetsialiseeritud meetoditele, ning lisatud on eraldi optimeerimised operatsioonidele "Integer#*", "Integer#!=", "String#!=", "String#getbyte", "Kernel#block_given?", "Kernel#is_a?", "Kernel#instance_of?" ja "Module#===". Kompileerimise kiirus on märgatavalt suurenenud.
Mälu tarbimine metainfo hoidmiseks on märgatavalt vähenenud, samuti on tagatud kompaktsema koodi genereerimine ARM64 arhitektuurile. Jäätme kogumise kood ("—yjit-code-gc") on vaikimisi keelatud, mis dünaamiliselt vabastab kasutamata genereeritud masina koodi, kuid põhjustab jäätme kogumise ajal jõudluse langust. Lisatud on RubyVM::YJIT.enable meetod YJIT aktiveerimise kontrollimiseks töö ajal, ilma vajaduseta käivitada spetsiifilise käsurea parameetri või keskkonnamuutuja abil. Laiendatud statistika, mis esitatakse valiku „—yjit-stats” määramisel. Lisatud on jõudlusprofiilimise (—yjit-perf) ja jälgimise (—yjit-trace-exits) režiimid.
- Pakutud on uus JIT-kompilaator RJIT, mis on täielikult kirjutatud Ruby keeles ja asendab MJIT, kuid erinevalt viimasest ei vaja see kasutamisel C kompilaatorit. RJIT toetab ainult x86-64 arhitektuuri ja Unix-laadseid platvorme.
- Lisatud on M:N voogude planeerija, mis võimaldab vähendada voogude loomise ja haldamise kulusid, kasutades piiratud arvu operatsioonisüsteemi lõime Ruby keeles voogude töötlemiseks. Vaikimisi kasutatakse 8 OS-i lõime (seda saab muuta keskkonnamuutujaga RUBY_MAX_CPU). M:N planeerija kasutamine võib põhjustada ühilduvusprobleeme C keeles kirjutatud laienditega, seetõttu on see vaikimisi keelatud Ractori põhiklassis, kuid lubatud mitte-põhiklassis. M:N planeerija sundaktiveerimiseks tuleb seada keskkonnamuutuja RUBY_MN_THREADS=1.
- Interaktiivse arvutuse IRB (REPL, Read-Eval-Print-Loop) võimalused on laienenud. Lisatud on silumise režiim irb:rdbg, mis on oma funktsionaalsuselt ekvivalentne pry-byebug siluriga. Lisatud on mitme lehe toetamine käskude ls, show_source ja show_cmds väljundi vaatamisel. Katse toetust on rakendatud sisendi automaatkomplektide jaoks, arvesse võttes andmetüüpe. Pakutakse käske fondi värvi ja stiili muutmiseks.
- Meetodi „it“ argumentideta väljakutsumine bloki ilma parameetriteta kuulutati aegunuks (näiteks „[1, 2, 3].each { puts it }“).
- RubyGems ja Bundler hõlmavad hoiatuse väljastamist, kui „require“ kaustades on määratud gem-paketid abbrev, base64, bigdecimal, csv, drb, getoptlong, mutex_m, nkf, observer, racc, resolv-replace, rinda ja syslog, kui neid ei ole lisatud Gemfile'i või gemspeci. Tulevastes Ruby versioonides saavad need gem-paketid olema integreeritud põhikoosseisu.
- Sisseehitatud ja standardraamatukogu gem-modulite versioonid on ajakohastatud.
Allikas: opennet.ru
