U lançua Ruby 3.1.0, një gjuhë programimi dinamike dhe objekt-orientuese, e cila shquhet për efikasitetin e saj të lartë në zhvillimin e aplikacioneve 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 i referohet versionit më të fundit të licencës GPL dhe është plotësisht e përputhshme me GPLv3.
Përmirësimet kryesore:
- ĂshtĂ« shtuar njĂ« kompiler i ri eksperimental JIT nĂ« procesin e brendshĂ«m YJIT, e krijuar nga zhvilluesit e platformĂ«s sĂ« tregtisĂ« elektronike Shopify si pjesĂ« e njĂ« iniciative pĂ«r tĂ« rritur performancĂ«n e aplikacioneve Ruby qĂ« pĂ«rdorin kadrin Rails dhe bĂ«jnĂ« thirrje pĂ«r shumĂ« metoda. Dallimi kyç nga kompileri i mĂ«parshĂ«m JIT MJIT, i cili bazoheshin nĂ« pĂ«rpunimin e metodave tĂ« tĂ«ra dhe pĂ«rdorte njĂ« kompiler tĂ« jashtĂ«m nĂ« gjuhĂ«n C, Ă«shtĂ« se YJIT aplikon versionimin e blloqeve bazĂ« (LBBV â Lazy Basic Block Versioning) dhe pĂ«rmban njĂ« kompiler JIT tĂ« integruar. FalĂ« LBBV, JIT fillon tĂ« kompilohet vetĂ«m nĂ« fillim tĂ« metodĂ«s, ndĂ«rsa pjesa tjetĂ«r kompilohet pas njĂ« kohe, pasi gjatĂ« ekzekutimit tĂ« pĂ«rcaktohen llojet e variablave dhe argumenteve qĂ« pĂ«rdoren. Me pĂ«rdorimin e YJIT Ă«shtĂ« vĂ«nĂ« re njĂ« rritje e performancĂ«s gjatĂ« ekzekutimit tĂ« testit railsbench me 22% dhe tĂ« testit liquid-render me 39%. YJIT aktualisht Ă«shtĂ« e kufizuar nĂ« mbĂ«shtetje pĂ«r OS tĂ« ngjashĂ«m me unix nĂ« sisteme me arkitekturĂ« x86-64 dhe Ă«shtĂ« e çaktivizuar si parazgjedhje (pĂ«r ta aktivizuar, duhet tĂ« jepni flag-un ââyjitâ nĂ« linjĂ«n e komandave).
- PerformancĂ«n e kompjuterit JIT tĂ« vjetĂ«r MJIT e pĂ«rmirĂ«suar. PĂ«r projektet qĂ« pĂ«rdorin Rails, madhĂ«sia maksimale e cache-it (âjit-max-cache) tani Ă«shtĂ« rritur nga 100 nĂ« 10000 instrukcione si parazgjedhje. Ndalimi i pĂ«rdorimit tĂ« JIT pĂ«r metodat qĂ« pĂ«rfshijnĂ« mĂ« shumĂ« se 1000 instrukcione Ă«shtĂ« ndĂ«rprerĂ«. PĂ«r tĂ« mbĂ«shtetur Zeitwerk tĂ« Rails, kodi i formuar nĂ« JIT nuk hidhet mĂ«, nĂ«se pĂ«r ngjarjet e klasĂ«s Ă«shtĂ« aktivizuar TracePoint.
- Në përbërje është includuar një debugger i ri që është rrewrite-uar plotësisht, debug.gem, i cili mbështet debugging të largët, nuk ngadalëson aplikacionin që po debug-zohet, mbështet integrimin me ndërfaqet e avancuara të debugging (VSCode dhe Chrome), mund të përdoret për debugging të aplikacioneve me shumë fije dhe shumë procese, ofron një ndërfaqe për ekzekutimin e kodit REPL, ofron mundësi të avancuara për gjurmimin, dhe mund të regjistrojë dhe ripërsërisë fragmente të kodit. Debugger-i lib/debug.rb që është ofruar më parë është larguar nga paketimi bazë.

- ĂshtĂ« realizuar njĂ« theks i dukshĂ«m i gabimeve nĂ« raportet e kthimeve tĂ« thirrjeve. Theksi i gabimeve sigurohet pĂ«rmes paketĂ«s sĂ« integruar dhe tĂ« aktivizuar si parazgjedhje, error_highlight. PĂ«r tĂ« çaktivizuar theksimin e gabimeve, mund tĂ« pĂ«rdorni cilĂ«simin «âdisable-error_highlight». $ ruby test.rb test.rb:1:in «
»: metode e paqartë «time» për 1:Integer (NoMethodError) 1.time {} ^^^^^ A keni dashur të thoni? times - Në shellin e llogaritjeve interaktive IRB (REPL, Read-Eval-Print-Loop) është realizuar plotësimi automatik i kodit të futur (ndërsa shkruani, shfaqet një sugjerim me opsionet e vazhdimit të futjes, midis të cilave mund të lëvizni me çelësin Tab ose Shift+Tab). Pas zgjedhjes së opsionit të vazhdimit, shfaqet një dialog që tregon dokumentacionin e lidhur me elementin e zgjedhur. Për t'u kaluar në dokumentacionin e plotë, mund të përdoret kombinimi i tastave Alt+d.

- Sintaksa e gjuhĂ«s tani lejon tĂ« kalohen vlerat nĂ« literalet e hash-it dhe argumentet e fjalĂ«ve kyç gjatĂ« thirrjes sĂ« funksioneve. PĂ«r shembull, nĂ« vend tĂ« shprehjes «{x: x, y: y}» tani mund tĂ« tregoni «{x:, y:}», dhe nĂ« vend tĂ« «foo(x: x, y: y)» â «foo(x:, y:)».
- Përkrahja e përshtatjeve të një vije është stabilizuar (ary => [x, y, z]), të cilat tashmë nuk kanë shenjën eksperimentale.
- Operatori «^» në përshtatje mund të përmbajë shprehje të rastësishme, për shembull: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #=>? [[3, 5], [5, 7], [11, 13]]
- Në përshtatjet e një vije lejohet të mos shënohen kllapat: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
- Në gjuhën e anotimeve të tipave RBS, e cila lejon të përcaktohet struktura e programit dhe tipet e përdorura, është shtuar mbështetje për caktimin e kufijve të sipërm të parametrave të tipit me simbolin «<», është shtuar mbështetje për pseudonimet e tipeve të përgjithshme, është realizuar mbështetje për koleksionet për menaxhimin e gem-eve, është përmirësuar performanca dhe janë prezantuar shumë nënshkrime të reja për bibliotekat e brendshme dhe standarde.
- Në analizuesin statik të tipave TypePro, i cili gjeneron anotime RBS bazuar në analizën e kodit pa informacion të qartë për tipet, është shtuar mbështetje eksperimentale për mjediset e integruara të zhvillimit (p.sh., është përgatitur një shtesë për integrimin e TypePro me redaktorin VSCode).
- Ka ndryshuar rendi i përpunimit të disa caktimeve. Për shembull, më parë komponentët e shprehjes «foo[0], bar[0] = baz, qux» përpunoheshin në rendin baz, qux, foo, bar, ndërsa tani janë foo, bar, baz, qux.
- Shtuar mbështetje eksperimentale për ndarjen e memories për vargje duke përdorur mekanizmin VWA (Variable Width Allocation).
- Përditësuar versionet e moduleve gem të integruara dhe të standardit të bibliotekës. Paketat e integruara net-ftp, net-imap, net-pop, net-smtp, matrix, prime dhe debug.
Burimi: opennet.ru


