Doli Ruby 3.3.0, një gjuhë programimi dinamike e orientuar drejt objekteve, e cila karakterizohet nga një efikasitet i lartë në zhvillimin e programeve dhe përfshin karakteristikat më të mira të Perl, Java, Python, Smalltalk, Eiffel, Ada dhe Lisp. Kodi i projektit shpërndahet nën licencat BSD ("2-clause BSDL") dhe "Ruby", e cila referon versionin e fundit të licencës GPL dhe është plotësisht e përputhshme me GPLv3.
Përmirësimet kryesore:
- Në përbërjen kryesore është përfshirë parseri Prism, i implementuar si një bibliotekë C, libprism, e cila përdoret në interpreterin CRuby, dhe si një paketë gem në gjuhën Ruby, që ofron një API të hapur për analizimin rekurziv të kodit në gjuhën Ruby, e përshtatshme për përdorim në projekte punuese në vend të parserit Ripper. Avantazhet e Prism përfshijnë portabilitet të mirë dhe përpunim të fleksibilshëm të gabimeve në kod. Për të përfshirë parserin e ri, mund të përdoret opsioni "ruby --parser=prism" ose variabla e mjedisit RUBYOPT="--parser=prism". Për analizimin e kodit në programet tuaja janë të disponueshme metodat Prism.parse(source) për të marrë paraqitjen AST të kodit, Prism.parse_comments(source) për të nxjerrë komentet nga kodi dhe Prism.parse_success?(source) për të kontrolluar praninë e gabimeve në kod.
- Në vend të paketës së jashtme Bison për gjenerimin e parserëve, është përdorur projekti Lrama, i cili ofron implementimin e algoritmit LALR në gjuhën Ruby, duke mbështetur përkufizimet e gramatikës në përputhje me Bison (parse.y), të përdorura në CRuby, dhe duke ofruar mundësi të zgjeruara, si përpunimi i gabimeve dhe rregullat e parametrizuara (?, *, +).
- ĂshtĂ« bĂ«rĂ« njĂ« optimizim i konsiderueshĂ«m i performancĂ«s sĂ« JIT-kompilatorit YJIT, i zhvilluar nga zhvilluesit e platformĂ«s sĂ« tregtisĂ« elektronike Shopify, si pjesĂ« e njĂ« inicerative pĂ«r tĂ« rritur performancĂ«n e programeve Ruby qĂ« pĂ«rdorin framework-un Rails dhe qĂ« thĂ«rrasin shumĂ« metoda. NĂ« krahasim me JIT-kompilatorin e mĂ«parshĂ«m MJIT, YJIT-i ri pĂ«rdor versionimin e blloqeve bazĂ« (LBBV â Lazy Basic Block Versioning) nĂ« vend tĂ« pĂ«rpunimit tĂ« plotĂ« tĂ« metodave dhe Ă«shtĂ« implementuar si njĂ« JIT-kompilator i integruar, i shkruar nĂ« gjuhĂ«n Rust. FalĂ« LBBV, JIT fillimisht kompilon vetĂ«m fillimin e metodĂ«s, ndĂ«rsa pjesa tjetĂ«r kompiloohet pas njĂ« periudhe kohe, pasi nĂ« procesin e ekzekutimit janĂ« pĂ«rcaktuar tipet e variablave dhe argumenteve tĂ« pĂ«rdorura.
Në testimin e ekzekutimit të emulatorit Optcarrot, performanca gjatë përdorimit të YJIT ishin më shumë se tri herë më e lartë se ekzekutimi nëpërmjet interpreterit. Në versionin e ri është siguruar memorizimi i regjistrave për operacionet në stivën e makinës virtuale, është zgjeruar gama e thirrjeve të kompilueshme me argumente opsionale, është realizuar zhvillimi inline i metodave bazë dhe të specializuara, dhe janë shtuar optimizime të veçanta për operacionet "Integer#*", "Integer#!=", "String#!=", "String#getbyte", "Kernel#block_given?", "Kernel#is_a?", "Kernel#instance_of?" dhe "Module#===". Shpejtësia e kompilimit është rritur ndjeshëm.
Konsumimi i memories pĂ«r ruajtjen e metadatat Ă«shtĂ« reduktuar ndjeshĂ«m dhe Ă«shtĂ« realizuar gjenerimi i kodit mĂ« kompakt pĂ«r arkitekturĂ«n ARM64. Me default Ă«shtĂ« çaktivizuar grumbulluesi i mbeturinave Code ("--yjit-code-gc"), i cili liçon dinamik kodin e gjeneruar qĂ« nuk pĂ«rdoret, por qĂ« shkakton rĂ«nie tĂ« performancĂ«s gjatĂ« grumbullimit tĂ« mbeturinave. ĂshtĂ« shtuar metoda RubyVM::YJIT.enable pĂ«r menaxhimin e aktivizimit tĂ« YJIT gjatĂ« ekzekutimit, pa pasur nevojĂ« pĂ«r tĂ« filluar me njĂ« opsion tĂ« caktuar tĂ« linjĂ«s sĂ« komandĂ«s ose variablĂ«s sĂ« mjedisit. ĂshtĂ« zgjeruar statistika qĂ« jepet me opsionin "--yjit-stats". JanĂ« shtuar modulet e profilizimit tĂ« performancĂ«s (---yjit-perf) dhe gjurmimit (---yjit-trace-exits).
- ĂshtĂ« propozuar njĂ« JIT-kompilator i ri RJIT, i shkruar tĂ«rĂ«sisht nĂ« gjuhĂ«n Ruby dhe qĂ« zĂ«vendĂ«son MJIT, por qĂ«, nĂ« kundĂ«rshtim me kĂ«tĂ« tĂ« fundit, nuk kĂ«rkon njĂ« kompilator C pĂ«r t'u pĂ«rdorur. RJIT mbĂ«shtet vetĂ«m arkitekturĂ«n x86-64 dhe platformat e ngjashme me Unix.
- ĂshtĂ« shtuar njĂ« planifikues i_thread-ve "M:N", qĂ« lejon qĂ« pĂ«r tĂ« ulur kostot e krijimit dhe menaxhimit tĂ« thread-eve tĂ« pĂ«rdoren njĂ« numĂ«r i kufizuar thread-esh tĂ« sistemit operativ pĂ«r tĂ« pĂ«rpunuar thread-et e kodit nĂ« gjuhĂ«n Ruby. Me default, pĂ«rdoren 8 thread-e tĂ« OS (mund tĂ« ndryshohet pĂ«rmes variablĂ«s sĂ« mjedisit RUBY_MAX_CPU). PĂ«rdorimi i planifikuesit "M:N" mund tĂ« shkaktojĂ« probleme me pĂ«rputhshmĂ«rinĂ« me zgjerimet nĂ« gjuhĂ«n C, prandaj Ă«shtĂ« çaktivizuar me default pĂ«r klasĂ«n kryesore (main) Ractor, por Ă«shtĂ« aktivizuar pĂ«r ato jo-kryesore (non-main). PĂ«r tĂ« aktivizuar me forcĂ« planifikuesin "M:N", duhet tĂ« vendoset variabla e mjedisit RUBY_MN_THREADS=1.
- Shtohen mundësitë e shell-it interaktiv të llogaritjes IRB (REPL, Read-Eval-Print-Loop). Shtohet moda e dehjes irb:rdbg, e cila është ekuivalente në mundësitë e saj me debugin e pry-byebug. Shtohet mbështetje për shikimin shumëfaqësh të daljes së komandave ls, show_source dhe show_cmds. Implementohet mbështetje eksperimentale për tamamimin automatik të hyrjes, duke marrë parasysh tipet e të dhënave. Ofrohen komanda për të ndryshuar ngjyrën dhe stilin e fontit.
- Deklarohet i vjetruar thirrja e metodës 'it' pa argumente në një bllok pa parametra (p.sh., '[1, 2, 3].each { puts it }').
- Në RubyGems dhe Bundler, përfshihet një paralajmërim kur specifikohen në 'require' paketat gem abbrev, base64, bigdecimal, csv, drb, getoptlong, mutex_m, nkf, observer, racc, resolv-replace, rinda dhe syslog, nëse ato nuk janë shtuar në Gemfile ose gemspec. Në versionet e ardhshme të Ruby, këto paketa gem do të integrohen në përbërjen kryesore.
- Versionet e moduleve të integruar dhe atyre që përfshihen në bibliotekën standarde janë përditësuar.
Burimi: opennet.ru
