Lëshimi i Ruby 4.0.0, një gjuhë programimi dinamike e orientuar drejt objekteve, e fokusuar në efikasitetin e lartë të zhvillimit të aplikacioneve dhe përfshirjen e karakteristikave më të mira nga Perl, Java, Python, Smalltalk, Eiffel, Ada dhe Lisp. Kodi i projektit shpërndahet nën licencat BSD ("2-clause BSDL") dhe "Ruby", e cila referohet versionit më të fundit të licencës GPL dhe është e pajtueshme me GPLv3.
Përmirësimet kryesore:
- NĂ« pĂ«rbĂ«rje Ă«shtĂ« pĂ«rfshirĂ« njĂ« JIT-kompilator i ri, ZJIT, i pozicionuar si gjenerata e ardhshme e Ruby JIT. Si pikĂ« default vazhdon tĂ« pĂ«rdoret JIT-kompilatori YJIT, ndĂ«rsa ZJIT Ă«shtĂ« pĂ«rfshirĂ« si mundĂ«si (aktivizohet me flagun "âzjit"). Si YJIT, JIT-kompilatori i ri Ă«shtĂ« shkruar nĂ« gjuhĂ«n Rust nga ekipi i zhvilluesve tĂ« kompanisĂ« Shopify nĂ« kuadĂ«r tĂ« iniciativĂ«s pĂ«r rritjen e performancĂ«s sĂ« aplikacioneve Ruby qĂ« pĂ«rdorin kuadrin Rails dhe thĂ«rrasin shumĂ« metoda. NĂ« kĂ«tĂ« fazĂ« tĂ« zhvillimit, ZJIT Ă«shtĂ« mĂ« i shpejtĂ« se interpretuarori, por akoma mbetet pas YJIT nĂ« performancĂ« (pritet qĂ« nĂ« Ruby 4.1, ZJIT tĂ« stabilizohet dhe tĂ« kalojĂ« YJIT nĂ« performancĂ«).
NĂ« krahasim me YJIT, compilatori i ri JIT pĂ«rkthe bytecode-n e makinĂ«s virtuale YARV jo nĂ« njĂ« pĂ«rfaqĂ«sim tĂ« ulĂ«t tĂ« nivelit tĂ« ndĂ«rmjetĂ«m tĂ« ngjashĂ«m me kodin makinĂ«, por nĂ« njĂ« pĂ«rfaqĂ«sim tĂ« lartĂ« tĂ« ndĂ«rmjetĂ«m SSA (Static Single Assignment), i cili lejon tĂ« kryhen faza tĂ« tjera optimizimi dhe tĂ« optimizohen blloqe tĂ« mĂ«dha kodi, jo vetĂ«m operacionet aktuale. PĂ«r tĂ« tĂ«rhequr pjesĂ«marrĂ«s tĂ« rinj, ZJIT realizon arkitekturĂ«n klasike JIT, qĂ« pĂ«rdor tĂ« dhĂ«na historike tĂ« akumuluara nga interpretuese pĂ«r tipat, nĂ« vend tĂ« teknikĂ«s sĂ« komplikuar tĂ« versioneve tĂ« blloqeve bazĂ« (LBBV â Lazy Basic Block Versioning) tĂ« aplikuar nĂ« YJIT.
- Shtuar një klasë eksperimentale Ruby::Box me realizimin e mekanizmit të izolimit, i cili lejon ndarjen e ekzekutimit në një proces të klasave, moduleve dhe monkey-patches (metoda dhe atribute të klasave të zëvendësuara). Me anë të Ruby::Box gjithashtu mund të ndahen ekzekutimet e kodit të aplikacioneve nga bibliotekat Ruby, të sigurohet izolimi i testeve dhe të organizohet ekzekutimi paralel i web-handler-ve në një proces. serverit aplikacione (për shembull, për ndërrimin e gradualshëm të një versioni të kodit me një tjetër ose për përditësimin e varësive). Për të aktivizuar Ruby::Box, duhet të vendosni variablën e ambientit "RUBY_BOX=1". # foo.rb class String def self.foo = "foo" end # main.rb box = Ruby::Box.new box.require('foo')
- Implementimi i modelit tĂ« aktorĂ«ve Ractor Ă«shtĂ« modernizuar, duke ofruar njĂ« abstrahim nĂ« stilin "aktorĂ«ve" (ruby actor) pĂ«r tĂ« siguruar ekzekutimin e sigurt nĂ« shumĂ« thjeshtĂ«sira me ndĂ«rveprime midisçșżçšéèżæ¶æŻäŒ é. Klas Ractor::Port Ă«shtĂ« shtuar, i cili zgjidh problemet qĂ« lidhen me dĂ«rgimin dhe marrjen e mesazheve. Metoda Ractor.shareable_proc Ă«shtĂ« shtuar pĂ«r tĂ« thjeshtĂ«suar aksesin e pĂ«rbashkĂ«t nĂ« objektet Proc nga aktorĂ« tĂ« ndryshĂ«m. JanĂ« optimizuar strukturat e tĂ« dhĂ«nave, me qĂ«llim tĂ« reduktimit tĂ« konflikteve gjatĂ« vendosjes sĂ« bllokimeve globale dhe pĂ«rmirĂ«simin e pĂ«rdorimit tĂ« caches CPU. NĂ« vitin e ardhshĂ«m, Ractor pritet tĂ« kalojĂ« nĂ« statusin e mundĂ«sive tĂ« qĂ«ndishme. port1 = Ractor::Port.new port2 = Ractor::Port.new Ractor.new port1, port2 do |port1, port2| port1 << 1 port2 << 11 port1 << 2 port2 < 1, 2 2 herĂ«{ p port2.receive } #=> 11, 12
- Operatori «*nil» tani kthen menjëherë një array bosh («[]») pa e thirrur metodën «nil.to_a», në ngjashmëri me mënyrën se si «**nil» kthen menjëherë një hash bosh, pa thirrur «nil.to_hash».
- Lejohet ndarja e rreshtave me operatorët logjikë «||», «&&», «and» dhe «or» në atë mënyrë që rreshti i ardhshëm fillon me operatorin. if condition1 && condition2 ⊠end
- Janë shtuar metodat Array#find dhe «Array#rfind» për kërkimin më efektiv të elementeve në array, duke funksionuar më shpejt se «array.reverse_each.find» dhe «Enumerable#find».
- Klasa Set dhe Pathname janë përfshirë në klasat e integruara.
- Janë zgjeruar mundësitë e shumë klasave bazë, si Binding, Enumerator, ErrorHighlight, Fiber, File, IO, Kernel, Math, Proc, Range, Socket, String, Thread.
- Versionet e moduleve të integruar dhe atyre që përfshihen në bibliotekën standarde janë përditësuar.
Burimi: opennet.ru
