Izdaja programskega jezika Ruby 3.2

Izšel je Ruby 3.2.0, dinamičen objektno usmerjen programski jezik, ki ga odlikuje zelo učinkovit razvoj. Vključuje najboljše lastnosti jezikov Perl, Java, Python, Smalltalk, Eiffel, Ada in Lisp. Koda projekta je distribuirana pod licencama BSD (2-clause BSDL) in "Ruby", ki se sklicujeta na najnovejšo različico licence GPL in sta popolnoma združljivi z GPLv3.

Glavne izboljšave:

  • Dodana je bila začetna različica interpreterja CRuby. Prevede se v vmesno kodo WebAssembly za izvajanje v spletnem brskalniku ali v ločenih izvajalnih okoljih, kot je wasmtime. API WASI (WebAssembly System Interface) se uporablja za neposredno interakcijo z operacijskim sistemom med samostojnim izvajanjem. Med drugim je na voljo ovojnica VFS prek WASI, ki omogoča, da se celotna aplikacija Ruby zapakira kot ena sama datoteka .wasm. Izvajanje v brskalniku se lahko uporabi za ustvarjanje spletnih storitev za usposabljanje in demonstracijo, kot je TryRuby. V trenutni fazi razvoja različica uspešno prestane osnovne in zagonske testne pakete, ki ne uporabljajo API-ja Thread. Prav tako ne podpira vlaken, izjem ali zbiranja smeti.
  • Prevajalnik JIT YJIT, ki ga razvijalci platforme za e-trgovino Shopify ustvarijo kot del pobude za izboljšanje delovanja programov Ruby z uporabo ogrodja Rails in klicanjem številnih metod, je bil napovedan kot stabilen in pripravljen za produkcijsko uporabo. Ključna razlika od prej uporabljenega prevajalnika JIT MJIT, ki je obdeloval celotne metode in se zanašal na zunanji prevajalnik C, je v tem, da YJIT uporablja Lazy Basic Block Versioning (LBBV) in vsebuje integriran prevajalnik JIT. Zahvaljujoč LBBV JIT sprva prevede le začetek metode, preostanek pa prevede pozneje, potem ko so med izvajanjem določene vrste spremenljivk in argumentov. YJIT je na voljo za arhitekture x86-64 in arm64/aarch64 na platformah Linux, macOS, BSD in drugih UNIX.

    Za razliko od CRubyja je YJIT napisan v Rustu in za prevajanje zahteva prevajalnik rustc 1.58.0+. Zato je gradnja YJIT privzeto onemogočena in neobvezna. Dokazano je, da uporaba YJIT izboljša zmogljivost v primerjalnem testu yjit-bench za 41 % v primerjavi z interpretirano kodo.

     Izdaja programskega jezika Ruby 3.2
  • Dodana je bila dodatna zaščita pred napadi zavrnitve storitve (ReDoS) pri obdelavi zunanjih podatkov v neučinkovitih in dolgotrajnih regularnih izrazih. Algoritem ujemanja, ki uporablja tehniko pomnjenja, je bil znatno izboljšan. Na primer, čas izvajanja izraza '/^a*b?a*$/ =~ "a" * 50000 + "x"' se je zmanjšal z 10 na 0.003 sekunde. Strošek te optimizacije je povečana poraba pomnilnika, ki je približno 10-krat večja od vhodnih podatkov. Drugi ukrep za ublažitev je možnost definiranja časovne omejitve (npr. "Regexp.timeout = 1.0"), v kateri je treba obdelati regularni izraz.
  • Vključen je način syntax_suggest, ki pomaga pri diagnosticiranju vzrokov napak, povezanih z manjkajočim ali nepotrebnim zaključnim stavkom "end". Neujemajoč se 'end', manjkajoča ključna beseda ('do', 'def', 'if' itd.) ? 1 class Dog > 2 defbark > 3 end 4 end
  • V način prikaza lokacije napake je bila dodana možnost označevanja argumentov za napake, povezane s tipi in argumenti, na primer: test.rb:2:in `+': nil ni mogoče pretvoriti v celo število (TypeError) sum = ary[0] + ary[1] ^^^^^^^
  • Dodana nova sintaksa za posredovanje nizov argumentov drugim metodam: def foo(*) bar(*) end def baz(**) quux(**) end
  • ruby_vm/mjit/compiler je prepis starega prevajalnika MJIT JIT, ki temelji na Rubyju. MJIT se izvaja v ločenem procesu in ne znotraj delovne niti MJIT.
  • Bundler 2.4 zdaj pri obravnavi odvisnosti uporablja preverjevalnik različic PubGrub, ki se uporablja tudi v upravitelju paketov pub za jezik Dart. Prej uporabljeni algoritem Molinillo se še vedno uporablja v RubyGems, vendar ga bo v prihodnosti nadomestil tudi PubGrub.
  • Različice vgrajenih modulov gem in tiste, ki so vključene v standardno knjižnico, so bile posodobljene.

Vir: opennet.ru

Dodaj komentar