Lansarea limbajului de programare Ruby 3.2

A fost lansat Ruby 3.2.0, un limbaj de programare dinamic orientat pe obiecte care este foarte eficient în dezvoltarea programelor și încorporează cele mai bune caracteristici ale Perl, Java, Python, Smalltalk, Eiffel, Ada și Lisp. Codul proiectului este distribuit sub licențele BSD („2-clause BSDL”) și „Ruby”, care se referă la cea mai recentă versiune a licenței GPL și este pe deplin compatibil cu GPLv3.

Principalele îmbunătățiri:

  • S-a adăugat un port inițial al interpretului CRuby, care se compilează în codul intermediar WebAssembly pentru a rula într-un browser web sau în runtime autonome, cum ar fi wasmtime. Pentru interacțiunea directă cu sistemul de operare atunci când rulează separat, se utilizează API-ul WASI (WebAssembly System Interface). Printre altele, pe deasupra WASI este furnizat un wrapper VFS, care vă permite să împachetați întreaga aplicație Ruby într-o prezentare sub forma unui singur fișier wasm. Rularea într-un browser poate fi folosită pentru a crea servicii web de formare și demonstrații, cum ar fi TryRuby. În stadiul actual de dezvoltare, portul trece cu succes suitele de testare de bază și bootstrap, care nu folosesc API-ul Thread. Portul nu acceptă, de asemenea, fibre, excepții sau colectare de gunoi.
  • Compilatorul YJIT în proces JIT, creat de dezvoltatorii platformei de comerț electronic Shopify, ca parte a unei inițiative de creștere a performanței programelor Ruby care utilizează cadrul Rails și apelează o mulțime de metode, a fost declarat stabil și gata pentru utilizare în producție. Diferența cheie față de compilatorul MJIT JIT folosit anterior, care se bazează pe procesarea unor metode întregi și folosește un compilator extern în limbajul C, este că YJIT folosește Lazy Basic Block Versioning (LBBV) și conține un compilator JIT integrat. Cu LBBV, JIT compilează mai întâi doar începutul metodei, iar restul compilează ceva timp mai târziu, după ce tipurile de variabile și argumente utilizate sunt determinate în timpul execuției. YJIT este disponibil pentru arhitecturile x86-64 și arm64/aarch64 pe Linux, MacOS, BSD și alte platforme UNIX.

    Spre deosebire de Ruby, codul YJIT este scris în limbajul Rust și necesită compilatorul rustc 1.58.0+ pentru compilare, astfel încât construcția YJIT este dezactivată implicit și este opțională. La utilizarea YJIT, s-a înregistrat o creștere de 41% a performanței la rularea testului yjit-bench comparativ cu utilizarea interpretării.

    Lansarea limbajului de programare Ruby 3.2

  • S-a adăugat protecție suplimentară împotriva atacurilor de tip denial of service la procesarea datelor externe în expresii regulate (ReDoS) ineficiente și consumatoare de timp. Algoritmul de potrivire, care folosește tehnica de memorare, a fost îmbunătățit semnificativ. De exemplu, timpul de execuție al expresiei '/^a*b?a*$/ =~ "a" * 50000 + "x"' a fost redus de la 10 la 0.003 secunde. Costul optimizării este o creștere a consumului de memorie, al cărui consum este de aproximativ 10 ori mai mare decât dimensiunea datelor de intrare. A doua măsură de securitate este capacitatea de a defini un timeout (de exemplu, „Regexp.timeout = 1.0”) în timpul căruia expresia regulată trebuie procesată.
  • Este inclus modul syntax_suggest, care ajută la diagnosticarea cauzelor erorilor asociate cu o expresie „sfârșit” de închidere lipsă sau suplimentară. „sfârșit” nepotrivit, cuvânt cheie lipsă („do”, „def”, „dacă”, etc.)? 1 clasă Câine > 2 defbark > 3 capăt 4 capăt
  • Capacitatea de a marca argumente pentru erori legate de tipuri și argumente a fost adăugată în modul de afișare a locației erorilor, de exemplu: test.rb:2:in `+': nil nu poate fi forțat în Integer (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • S-a adăugat o nouă sintaxă pentru redirecționarea seturilor de argumente către alte metode: def foo(*) bar(*) end def baz(**) quux(**) end
  • Se propune Ruby_vm/mjit/compiler - o variantă a vechiului compilator MJIT JIT, rescris în limbajul Ruby. S-a asigurat că MJIT rulează într-un proces separat în loc să ruleze într-un fir de lucru MJIT.
  • În Bundler 2.4, procesarea dependenței folosește detectorul de versiune PubGrub, folosit și în managerul de pachete pub pentru limbajul Dart. Algoritmul Molinillo folosit anterior continuă să fie folosit în RubyGems, dar va fi înlocuit și de PubGrub în viitor.
  • Versiuni actualizate ale modulelor bijuterie de bibliotecă încorporate și standard.

Sursa: opennet.ru

Adauga un comentariu