Ruby 4.0 lansat cu izolarea Ruby Box și noul compilator ZJIT


Ruby 4.0 este acum disponibil, introducând funcția experimentală de izolare Ruby Box, noul compilator ZJIT și îmbunătățiri de performanță și concurență.

Ruby 4.0, un limbaj de programare de nivel înalt și cu scop general, a fost lansat, introducând noi tehnologii de izolare și compilare, alături de actualizări extinse de performanță, concurență și bibliotecă standard.

Noutatea principală este Ruby Box, un nou mecanism experimental conceput pentru a izola definițiile într-un proces Ruby în execuție. Când este activat prin variabila de mediu RUBY_BOX=1, Ruby Box permite ca clasele, modulele, variabilele globale, modificările prin monkey patch și chiar bibliotecile încărcate să fie confinate într-o cutie specifică.

Aceasta permite scenarii de utilizare precum rularea în siguranță a seturilor de teste atunci când sunt implicate modificări temporare (monkey patches), executarea mai multor versiuni ale unei aplicații web simultan pentru implementări blue-green sau evaluarea actualizărilor de dependențe în paralel prin compararea comportamentului la rulare.

O altă schimbare majoră este introducerea ZJIT, un nou compilator just-in-time experimental care a înlocuit YJIT. ZJIT este un JIT bazat pe metode, construit cu unități de compilare mai mari și o reprezentare intermediară bazată pe SSA, pentru a ridica plafonul de performanță pe termen lung al Ruby și a face compilatorul mai accesibil contribuabililor externi.

ZJIT necesită Rust 1.85 sau o versiune mai nouă pentru a fi compilat și poate fi activat cu opțiunea –zjit sau la rulare. În Ruby 4.0, ZJIT deja depășește interpretatorul, deși încă rămâne în urma YJIT. Echipa de bază Ruby sfătuiește să nu fie folosit în producție și recomandă experimentarea, cu scopul declarat de a face ZJIT pregătit pentru producție și mai rapid decât YJIT în Ruby 4.1.

În plus, Ruby 4.0 introduce noua clasă Ractor::Port pentru a oferi un mecanism de comunicare mai clar și mai solid între Ractori, înlocuind API-urile anterioare precum Ractor.yield și Ractor#take, care au fost acum eliminate. Ractorii beneficiază, de asemenea, de o reducere a competiției pentru blocarea globală, mai puțin stat intern partajat și un comportament îmbunătățit al cache-ului CPU, toate acestea contribuind la o performanță paralelă mai bună.

La nivel de limbaj, Ruby 4.0 include câteva modificări notabile. Operatorii logici aflați la începutul unei linii continuă acum linia anterioară, îmbunătățind lizibilitatea în condiționalele pe mai multe linii. Tratarea lui *nil a fost alinată cu alte comportamente splat, iar raportarea erorilor pentru nepotrivirea numărului de argumente a fost îmbunătățită cu backtrace-uri mai clare și fragmente de cod contextuale.

Clasele și modulele de bază beneficiază de o gamă largă de îmbunătățiri. Array-urile obțin metode de căutare mai eficiente, Enumerator devine mai conștient de dimensiunea sa, File::Stat expune timpul de creare al fișierului pe Linux atunci când este suportat de kernel și de sistemul de fișiere, iar Set a fost promovat din biblioteca standard într-o clasă de bază cu un output inspect simplificat.

Pathname este acum, de asemenea, o clasă de bază, iar suportul pentru Unicode a fost actualizat la versiunea 17.0, inclusiv Emoji 17.0. Numeroase API-uri din cadrul IO, Fiber, Thread, Socket și Kernel au fost rafinate, extinse sau curățate prin eliminarea comportamentelor vechi și demult învechite.

Biblioteca standard a fost, de asemenea, reorganizată. Mai multe gem-uri incluse au fost promovate din starea implicită, altele au fost actualizate la versiuni majore mai noi, iar unele componente au fost eliminate sau separate, cum ar fi biblioteca CGI, care nu mai este furnizată complet implicit.

Pe partea de implementare, Ruby 4.0 oferă îmbunătățiri semnificative ale performanței. Crearea obiectelor este mai rapidă, mai ales atunci când sunt implicate argumente cheie. Colectarea deșeurilor este mai eficientă pe mai multe dimensiuni, accesul la variabilele de instanță a fost optimizat intern, iar blocările au fost reduse în numeroase secvențe critice.

În sfârșit, Ruby 4.0 introduce și modificări de compatibilitate de care dezvoltatorii trebuie să fie conștienți. Mai multe API-uri învechite au fost eliminate, inclusiv comportamentele vechi de creare a proceselor și metodele mai vechi Ractor, iar unele API-uri C au fost învechite sau ajustate pentru a îmbunătăți siguranța și corectitudinea. Suportul pentru Windows necesită acum Visual Studio 2015 sau o versiune mai nouă.

Pentru mai multe informații, consultați anunțul.