Objavljen Ruby 4.0 s izolacijom Ruby Box i novim ZJIT kompajlerom


Ruby 4.0 je sada dostupan, uvodeći eksperimentalnu značajku izolacije Ruby Box, novi ZJIT kompajler te poboljšanja u performansama i konkurentnosti.

Ruby 4.0, programski jezik visokog nivoa za opću namjenu, je objavljen, uvodeći nove tehnologije izolacije i kompilacije uz opsežna ažuriranja performansi, konkurentnosti i standardne biblioteke.

Novitet u naslovu je Ruby Box, novi eksperimentalni mehanizam dizajniran da izolira definicije unutar pokrenutog Ruby procesa. Kada se omogući putem varijable okoline RUBY_BOX=1, Ruby Box omogućuje da klase, moduli, globalne varijable, monkey patchvi pa čak i učitane biblioteke budu ograničeni na određeni box.

Ovo omogućuje scenarije poput sigurnog pokretanja testnih paketa kada su uključeni 'monkey patches', izvršavanja više verzija web aplikacije paralelno za 'blue-green' raspoređivanje ili procjenu nadogradnji ovisnosti paralelno uspoređujući ponašanje u runtime-u.

Još jedna velika promjena je uvođenje ZJIT-a, novog eksperimentalnog just-in-time prevoditelja koji je zamijenio YJIT. ZJIT je JIT baziran na metodama, izgrađen s većim jedinicama kompajliranja i SSA baziranom međureprezentacijom, kako bi se povećao dugoročni učinak Rubyja i učinio prevoditelj pristupačnijim za vanjske suradnike.

ZJIT zahtijeva Rust 1.85 ili noviji za kompilaciju i može se omogućiti opcijom –zjit ili tijekom izvođenja. U Rubyju 4.0, ZJIT već nadmašuje interpreter, iako još uvijek zaostaje za YJIT-om. Tim za Ruby jezgru savjetuje protiv upotrebe u produkciji i preporučuje eksperimentiranje, uz navedeni cilj da ZJIT učini spremnim za produkciju i bržim od YJIT-a u Rubyju 4.1.

Štoviše, Ruby 4.0 uvodi novu klasu Ractor::Port koja pruža jasniji i robusniji mehanizam komunikacije između Ractora, zamjenjujući ranije API-je poput Ractor.yield i Ractor#take, koji su sada uklonjeni. Ractori također imaju koristi od smanjene kontencije globalne brave, manjeg dijeljenog internog stanja i poboljšanog ponašanja CPU cache-a, što sve doprinosi boljoj paralelnoj izvedbi.

Na razini jezika, Ruby 4.0 uključuje nekoliko značajnih promjena. Logički operatori na početku retka sada nastavljaju prethodni redak, čime se poboljšava čitljivost u višerednim uvjetima. Rukovanje s *nil usklađeno je s drugim `splat` ponašanjima, a prijavljivanje pogrešaka za neslaganje broja argumenata poboljšano je jasnijim tragovima poziva i kontekstualnim isječcima koda.

Osnovne klase i moduli doživljavaju širok raspon poboljšanja. Nizovi dobivaju učinkovitije metode pretraživanja, Enumerator dobiva bolje prepoznavanje veličine, File::Stat prikazuje vrijeme stvaranja datoteke na Linuxu kada ga podržava kernel i datotečni sustav, a Set je promoviran iz standardne biblioteke u osnovnu klasu s pojednostavljenim inspect izlazom.

Pathname je sada također osnovna klasa, a podrška za Unicode ažurirana je na verziju 17.0, uključujući Emoji 17.0. Brojni API-ji u IO, Fiber, Thread, Socket i Kernel su poboljšani, prošireni ili očišćeni uklanjanjem dugo zastarjelih ponašanja.

Standardna biblioteka je također reorganizirana. Nekoliko ugrađenih gema promovirano je iz zadane statusa, drugi su ažurirani na novije glavne verzije, a neki su dijelovi uklonjeni ili izdvojeni, kao što je CGI biblioteka, koja više nije potpuno uključena prema zadanim postavkama.

S aspekta implementacije, Ruby 4.0 donosi široka poboljšanja performansi. Kreiranje objekata je brže, posebno kada su uključeni ključni argumenti. Sakupljanje smeća je učinkovitije u više dimenzija, pristup instancijskim varijablama je interno optimiziran, a zaključavanje je smanjeno u mnogim kritičnim dijelovima koda.

Napokon, Ruby 4.0 također uvodi promjene u kompatibilnosti na koje programeri trebaju obratiti pažnju. Nekoliko zastarjelih API-ja uklonjeno je, uključujući naslijeđene načine stvaranja procesa i starije Ractor metode, a neki C API-ji su zastarjeli ili prilagođeni kako bi se poboljšala sigurnost i ispravnost. Podrška za Windows sada zahtijeva Visual Studio 2015 ili noviji.

Za više informacija, pogledajte najavu.