Izdaja programskega jezika Ruby 3.2

Izdan je Ruby 3.2.0, dinamičen objektno usmerjen programski jezik, ki je zelo učinkovit pri razvoju programov in vključuje najboljše funkcije Perl, Java, Python, Smalltalk, Eiffel, Ada in Lisp. Projektna koda se distribuira pod licencama BSD ("2-clause BSDL") in "Ruby", ki se nanaša na najnovejšo različico licence GPL in je popolnoma združljiva z GPLv3.

Glavne izboljšave:

  • Dodana začetna vrata tolmača CRuby, ki prevede v vmesno kodo WebAssembly za izvajanje v spletnem brskalniku ali v samostojnih izvajalnih okoljih, kot je wasmtime. Za neposredno interakcijo z operacijskim sistemom, ko se izvaja ločeno, se uporablja API WASI (WebAssembly System Interface). Med drugim je zagotovljena vezava VFS na vrhu WASI, ki vam omogoča, da zapakirate celotno aplikacijo v jeziku Ruby v pogled v obliki ene same datoteke wasm. Zagon v brskalniku je mogoče uporabiti za ustvarjanje vadnic in predstavitvenih spletnih storitev, kot je TryRuby. Na trenutni stopnji razvoja vrata uspešno prestanejo osnovne in zagonske testne pakete, ki ne uporabljajo Thread API. Vrata tudi ne podpirajo optičnih vlaken, izjem ali zbiranja smeti.
  • Prevajalnik JIT v procesu YJIT, ki so ga ustvarili razvijalci platforme za e-trgovino Shopify kot del pobude za povečanje zmogljivosti programov Ruby, ki uporabljajo ogrodje Rails in kličejo številne metode, je bil razglašen za stabilnega in pripravljenega za proizvodna uporaba. Ključna razlika od prej uporabljenega prevajalnika MJIT JIT, ki temelji na obdelavi metod in uporablja zunanji prevajalnik C, je, da YJIT uporablja Lazy Basic Block Versioning (LBBV) in vsebuje integriran prevajalnik JIT. Zahvaljujoč LBBV JIT najprej prevede samo začetek metode, preostanek pa prevede čez nekaj časa, potem ko so med izvajanjem določene vrste uporabljenih 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 CRuby je koda YJIT napisana v Rust in za prevajanje potrebuje prevajalnik rustc 1.58.0+, zato je prevajanje YJIT privzeto onemogočeno in ni obvezno. Pri uporabi YJIT je bilo zabeleženo 41-odstotno povečanje učinkovitosti med izvajanjem testa yjit v primerjavi z uporabo tolmačenja.

    Izdaja programskega jezika Ruby 3.2

  • Dodana dodatna zaščita pred napadi, ki povzročijo zavrnitev storitve pri obdelavi zunanjih podatkov v neučinkovitih in dolgotrajnih regularnih izrazih (ReDoS). Bistveno izboljšan algoritem ujemanja, ki uporablja tehniko pomnjenja. Na primer, čas izvajanja izraza '/^a*b?a*$/ =~ "a" * 50000 + "x"' je bil skrajšan z 10 na 0.003 sekunde. Cena optimizacije je povečanje porabe pomnilnika, katerega poraba je približno 10-krat večja od velikosti vhodnih podatkov. Drugi varnostni ukrep je možnost definiranja časovne omejitve (na primer "Regexp.timeout = 1.0"), za katero mora imeti regularni izraz čas za obdelavo.
  • Način syntax_suggest je vključen za pomoč pri diagnosticiranju vzrokov napak, povezanih z manjkajočim ali odvečnim zaključnim stavkom "end". Neujemajoč se `end', manjka ključna beseda (`do', `def`, `if` itd.)? 1 razred pes > 2 deflajanje > 3 konec 4 konec
  • Dodana možnost označevanja argumentov v primeru napak, povezanih s tipi in argumenti, v način lokacije napake, na primer: test.rb:2:in `+': nil ni mogoče prisiliti v Integer (TypeError) sum = ary[ 0] + ari [1] ^^^^^^
  • Dodana nova sintaksa za preusmeritev na druge metode nabora argumentov: def foo(*) bar(*) end def baz(**) quux(**) end
  • Predlagani Ruby_vm/mjit/prevajalnik - različica starega prevajalnika MJIT JIT, prepisanega v jeziku Ruby. Zagotovljeno izvajanje MJIT v ločenem procesu, namesto izvajanja v delovni niti MJIT.
  • V Bundlerju 2.4 obravnava odvisnosti uporablja iskalnik različic PubGrub, ki ga uporablja tudi upravitelj paketov pub za Dart. Prej uporabljeni algoritem Molinillo se še naprej uporablja v RubyGems, vendar ga bo v prihodnosti nadomestil tudi PubGrub.
  • Posodobljene različice vgrajenih in standardnih knjižničnih modulov gem.

Vir: opennet.ru

Dodaj komentar