Ndodhi lansimi i Ruby 3.2.0, një gjuhë programimi dinamike, objekt-oriented, e cila shquhet për efikasitetin e madh 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 i referohet versionit më të fundit të licencës GPL dhe është plotësisht e përputhshme me GPLv3.
Përmirësimet kryesore:
- E shtuar porti fillestar i interpreterit CRuby, i cili kompilohet në kod ndërmjetës WebAssembly për ta ekzekutuar në shfletues ose nën menaxhimin e runtime-ve të veçanta, si wasmtime. Për ndërveprimin direkt me sistemin operative gjatë ekzekutimit të veçuar përdoret API WASI (WebAssembly System Interface). Midis gjërave të tjera, është ofruar një veshje VFS mbi WASI, e cila lejon paketimin e tërë aplikacionit në gjuhën Ruby në një përfaqësim të vetëm wasm-file. Ekzekutimi në shfletues mund të përdoret për të krijuar shërbime web arsimore dhe demonstrative, si TryRuby. Në këtë fazë të zhvillimit, porta kalon me sukses grupe testuese basic dhe bootstrap, në të cilat nuk përdoret API Thread. Po ashtu, në portin nuk mbështeten fiberset (Fiber), përjashtimet dhe grumbullimi i plehrave.
- Deklaruar i qëndrueshëm dhe gati për përdorim të brendshëm, JIT-kompiluesi YJIT, i krijuar nga zhvilluesit e platformës e-commerce Shopify, në kuadër të iniciativës për rritjen e performancës së programeve Ruby që përdorin framework-un Rails dhe thërrasin shumë metoda. Dallimi kyç nga JIT-kompiluesi më parë i përdorur MJIT, i cili bazohet në përpunimin e metodave të plota dhe përdor një kompiler të jashtëm në gjuhën C, është se YJIT aplikon versionimin e bllokut bazë (LBBV - Lazy Basic Block Versioning) dhe përmban një kompiler JIT të integruar. Falë LBBV, JIT fillimisht kompilon vetëm fillimin e metodës, ndërsa pjesa tjetër e kompiluar në një kohë më vonë, pas përcaktimit të tipave të variablave dhe argumenteve të përdorura gjatë ekzekutimit. YJIT është i disponueshëm për arkitekturën x86-64 dhe arm64/aarch64 në Linux, MacOS, BSD dhe platforma të tjera UNIX.
Ndryshe nga CRuby, kodi YJIT është shkruar në gjuhën Rust dhe kërkon për kompilim prani të kompilatorit rustc 1.58.0+, kështu që ndërtimi i YJIT është nën ndihmën e default-it dhe është i opsional. Kur përdoret YJIT, është vënë re një rritje e performancës prej 41% në testin yjit-bench në krahasim me përdorimin e interpretimit.

- Shtuar njĂ« mbrojtje shtesĂ« nga sulmet qĂ« shkaktojnĂ« refuse-of-service gjatĂ« trajtimit tĂ« tĂ« dhĂ«nave tĂ« jashtme nĂ« shprehje tĂ« rregullta e joligjore (ReDoS). Ka pĂ«rmirĂ«suar ndjeshĂ«m algoritmin e pĂ«rputhjes, nĂ« tĂ« cilin pĂ«rfshihet teknika e memorizimit. PĂ«r shembull, koha e ekzekutimit pĂ«r shprehjen â/^a*b?a*$/ =~ "a" * 50000 + "x"â u shkurtua nga 10 nĂ« 0.003 sekonda. Ămimi i optimizimit Ă«shtĂ« rritja e pĂ«rdorimit tĂ« memories, konsumimi i sĂ« cilĂ«s Ă«shtĂ« rreth 10 herĂ« mĂ« i madh se madhĂ«sia e tĂ« dhĂ«nave tĂ« hyrjes. Masa e dytĂ« e mbrojtjes Ă«shtĂ« mundĂ«sia e pĂ«rcaktimit tĂ« njĂ« kufiri kohor (pĂ«r shembull, "Regexp.timeout = 1.0"), pĂ«r sa kohĂ« duhet tĂ« pĂ«rfundojĂ« pĂ«rpunimi i shprehjes sĂ« rregullt.
- PĂ«rfshirĂ« nĂ« mĂ«nyrĂ«n syntax_suggest, e cila ndihmon nĂ« diagnostikimin e shkakut tĂ« gabimeve qĂ« lidhen me mungesĂ«n ose shkakun e tepĂ«rt tĂ« shprehjes pĂ«rmbyllĂ«se "end". Unmatched `endâ, missing keyword (`doâ, `def`, `if`, etj.) ? 1 class Dog > 2 defbark > 3 end 4 end
- NĂ« mĂ«nyrĂ«n e shfaqjes sĂ« vendit tĂ« gabimeve Ă«shtĂ« shtuar mundĂ«sia e shĂ«njimit tĂ« argumenteve gjatĂ« gabimeve tĂ« lidhura me tipet dhe argumentet, pĂ«r shembull: test.rb:2:in `+â: nil nuk mund tĂ« shndĂ«rrohet nĂ« Integer (TypeError) sum = ary[0] + ary[1] ^^^^^^
- Shtuar një sintaksë të re për të drejtuar në metoda të tjera të grupeve të argumenteve: def foo(*) bar(*) end def baz(**) quux(**) end
- Propozuar ruby_vm/mjit/compiler - një variant i vjetër i JIT-kompiluesit MJIT, i rikthyer në gjuhën Ruby. Siguruar ekzekutimin e MJIT në një proces të veçantë, në vend që të ekzekutohet në thread-in MJIT punëtor.
- Në Bundler 2.4, gjatë trajtimit të varësive është përdorur përcaktuesi i versioneve PubGrub, i cili gjithashtu përdoret në menaxherin e paketave pub për gjuhën Dart. Algoritmi i mëparshëm Molinillo vazhdon të përdoret në RubyGems, por në të ardhmen do të zëvendësohet me PubGrub.
- Versionet e moduleve të integruar dhe atyre që përfshihen në bibliotekën standarde janë përditësuar.
Burimi: opennet.ru

