Lansarea limbajului de programare Ruby 3.1

A fost lansat Ruby 3.1.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:

  • A fost adăugat un nou compilator JIT experimental în proces, YJIT, creat de dezvoltatorii platformei de comerț electronic Shopify, ca parte a unei inițiative de îmbunătățire a performanței programelor Ruby care utilizează cadrul Rails și apelează o mulțime de metode. 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. La utilizarea YJIT, a fost înregistrată o creștere de 22% a performanței la rularea testului railsbench și o creștere cu 39% a testului de redare lichidă. YJIT este în prezent limitat la suport pentru sisteme de operare asemănătoare Unix pe sisteme cu arhitectură x86-64 și este dezactivat în mod implicit (pentru activare, specificați indicatorul „--yjit” în linia de comandă).
  • Performanță îmbunătățită a vechiului compilator MJIT JIT. Pentru proiectele care utilizează Rails, dimensiunea maximă implicită a cache-ului (--jit-max-cache) a fost mărită de la 100 la 10000 de instrucțiuni. S-a oprit din utilizarea JIT pentru metode cu mai mult de 1000 de instrucțiuni. Pentru a sprijini Zeitwerk of Rails, codul JIT nu mai este eliminat atunci când TracePoint este activat pentru evenimentele de clasă.
  • Include un depanator complet rescris debug.gem, care acceptă depanarea la distanță, nu încetinește aplicația depanată, acceptă integrarea cu interfețe avansate de depanare (VSCode și Chrome), poate fi folosit pentru depanarea aplicațiilor cu mai multe fire și mai multe procese, oferă o interfață de execuție a codului REPL, oferă capabilități avansate de urmărire, poate înregistra și reda fragmente de cod. Debuggerul oferit anterior lib/debug.rb a fost eliminat din distribuția de bază.
    Lansarea limbajului de programare Ruby 3.1
  • S-a implementat evidențierea vizuală a erorilor în rapoartele de urmărire a apelurilor înapoi. Semnalarea erorilor este furnizată folosind pachetul de pietre prețioase încorporat și activat implicit error_highlight. Pentru a dezactiva semnalarea erorilor, puteți utiliza setarea „--disable-error_highlight”. $ ruby ​​​​test.rb test.rb:1:in „”: metoda nedefinită „timp” pentru 1:Integer (NoMethodError) 1.time {} ^^^^^ V-ați referit? ori
  • Shell-ul de calcule interactive IRB (REPL, Read-Eval-Print-Loop) implementează completarea automată a codului introdus (pe măsură ce tastați, este afișat un indiciu cu opțiuni pentru continuarea introducerii, între care vă puteți deplasa cu Tab sau Shift+ tasta Tab). După selectarea opțiunii de continuare, în apropiere este afișată o casetă de dialog care afișează documentația asociată articolului selectat. Comanda rapidă de la tastatură Alt+d poate fi folosită pentru a accesa documentația completă.
    Lansarea limbajului de programare Ruby 3.1
  • Sintaxa limbajului permite acum să omite valorile din literalele hash și argumentele cuvintelor cheie atunci când se apelează funcții. De exemplu, în loc de expresia „{x: x, y: y}” puteți specifica acum „{x:, y:}”, iar în loc de „foo(x: x, y: y)” - foo( X y: )".
  • Suport stabilizat pentru potrivirile de model pe o singură linie (ary => [x, y, z]), care nu mai sunt marcate ca experimentale.
  • Operatorul „^” din potrivirile de model poate conține acum expresii arbitrare, de exemplu: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • În potrivirile de model pe o singură linie, puteți omite parantezele: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • Limbajul de adnotare tip RBS, care vă permite să determinați structura programului și tipurile utilizate, a adăugat suport pentru specificarea limitei superioare a parametrilor de tip folosind simbolul „<”, a adăugat suport pentru aliasuri de tipuri generice, a implementat suport pentru colecții pentru gestionarea pietrelor prețioase, a îmbunătățit performanța și a implementat multe semnături noi pentru bibliotecile încorporate și standard.
  • Suport experimental pentru mediile de dezvoltare integrate a fost adăugat la analizatorul de tip static TypePro, care generează adnotări RBS bazate pe analiza codului fără informații explicite de tip (de exemplu, a fost pregătit un add-on pentru integrarea TypePro cu editorul VSCode).
  • Ordinea de procesare a sarcinilor multiple a fost schimbată. De exemplu, anterior componentele expresiei „foo[0], bar[0] = baz, qux” erau procesate în ordinea baz, qux, foo, bar, dar acum foo, bar, baz, qux.
  • S-a adăugat suport experimental pentru alocarea memoriei pentru șiruri folosind mecanismul VWA (Variable Width Allocation).
  • Versiuni actualizate ale modulelor de pietre prețioase încorporate și cele incluse în biblioteca standard. Pachetele net-ftp, net-imap, net-pop, net-smtp, matrix, prime și debug sunt încorporate.

Sursa: opennet.ru

Adauga un comentariu