Liberazione di a lingua di prugrammazione Ruby 3.1

Ruby 3.1.0 hè stata liberata, una lingua di prugrammazione dinamica orientata à l'ughjettu chì hè altamente efficiente in u sviluppu di u prugramma è incorpora e migliori funzioni di Perl, Java, Python, Smalltalk, Eiffel, Ada è Lisp. U codice di u prugettu hè distribuitu sottu a licenza BSD ("2-clause BSDL") è "Ruby", chì si riferisce à l'ultima versione di a licenza GPL è hè cumplettamente cumpatibile cù GPLv3.

Principali miglioramenti:

  • Un novu compilatore JIT sperimentale in u prucessu, YJIT, hè statu aghjuntu, creatu da i sviluppatori di a piattaforma di e-commerce Shopify cum'è parte di una iniziativa per migliurà u rendiment di i prugrammi Ruby chì utilizanu u framework Rails è chjamanu assai metudi. A diferenza chjave da u compilatore MJIT JIT utilizatu prima, chì hè basatu annantu à processà metudi interi è usa un compilatore esternu in lingua C, hè chì YJIT usa Lazy Basic Block Versioning (LBBV) è cuntene un compilatore JIT integratu. Cù LBBV, JIT compile prima solu u principiu di u metudu, è compile u restu qualchì tempu dopu, dopu chì i tipi di variàbili è argumenti utilizati sò determinati durante l'esekzione. Quandu si usa YJIT, un aumentu di 22% in u rendiment hè statu registratu quandu eseguisce a prova di railsbench, è un aumentu di 39% in a prova di rende liquidu. YJIT hè attualmente limitatu à supportu per i sistemi operativi Unix-like in sistemi cù l'architettura x86-64 è hè disattivatu per automaticamente (per attivà, specifichi a bandiera "--yjit" in a linea di cummanda).
  • Prestazione mejorata di u vechju compilatore MJIT JIT. Per i prughjetti chì utilizanu Rails, a dimensione massima di cache predeterminata (--jit-max-cache) hè stata aumentata da 100 à 10000 1000 istruzioni. Stopped use JIT per metudi cù più di XNUMX instructions. Per sustene Zeitwerk of Rails, u codice JIT ùn hè più scartatu quandu TracePoint hè attivatu per l'avvenimenti di classi.
  • Include un debugger debug.gem completamente riscritto, chì supporta a debugging remota, ùn rallenta micca l'applicazione debuggata, supporta l'integrazione cù interfacce di debugging avanzati (VSCode è Chrome), pò esse usatu per debugging applicazioni multi-threaded è multi-processu, furnisce una interfaccia di esecuzione di codice REPL, offre capacità avanzate di traccia, pò registrà è riproduce frammenti di codice. U debugger lib/debug.rb offrittu prima hè statu eliminatu da a distribuzione di basa.
    Liberazione di a lingua di prugrammazione Ruby 3.1
  • Evidenziazione visuale implementata di l'errori in i rapporti di traccia di richiamata. A segnalazione di errore hè furnita cù u pacchettu di gemme integratu è attivatu per difettu error_highlight. Per disattivà a marcatura d'errore, pudete aduprà l'impostazione "--disable-error_highlight". $ ruby ​​​​test.rb test.rb:1:in " ": metudu indefinitu "tempu" per 1:Integer (NoMethodError) 1.time {} ^^^^^ Vulete dì ? volte
  • A cunchiglia di calculi interattivi IRB (REPL, Read-Eval-Print-Loop) implementa a cumpleta automatica di u codice inseritu (cum'è scrive, un suggerimentu hè visualizatu cù opzioni per l'input continuu, trà quale pudete spustà cù a Tab o Shift + Tasti tabulazione). Dopu avè sceltu l'opzione di continuazione, una finestra di dialogu hè visualizata vicinu chì mostra a documentazione assuciata cù l'elementu sceltu. A scurciatoia di tastiera Alt + d pò esse usata per accede à a documentazione completa.
    Liberazione di a lingua di prugrammazione Ruby 3.1
  • A sintassi di a lingua permette avà à i valori in litterali hash è argumenti di keyword per esse saltati quandu chjamanu funzioni. Per esempiu, invece di l'espressione "{x: x, y: y}" pudete avà specificà "{x:, y:}", è invece di "foo (x: x, y: y)" - foo ( x:, y:)".
  • Supportu stabilizatu per i partiti di mudellu di una sola linea (ary => [x, y, z]), chì ùn sò più marcati cum'è sperimentali.
  • L'operatore "^" in i partiti di mudelli ponu avà cuntene espressioni arbitrarie, per esempiu: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • In i partiti di mudellu di una sola linea, pudete omette parentesi: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • A lingua di annotazione di u tipu RBS, chì permette di determinà a struttura di u prugramma è i tipi utilizati, hà aghjustatu supportu per specificà u limitu superiore di i paràmetri di tipu cù u simbulu "<", aghjustatu supportu per alias di tipi generici, supportu implementatu per cullezzione per a gestione di gemme, migliuratu u rendiment è implementatu parechje firme novi per biblioteche integrate è standard.
  • U supportu sperimentale per l'ambienti di sviluppu integratu hè statu aghjuntu à l'analizzatore di tipu static TypePro, chì genera annotazioni RBS basate nantu à l'analisi di codice senza informazioni esplicite di tipu (per esempiu, un add-on hè statu preparatu per integrà TypePro cù l'editore VSCode).
  • L'ordine di trasfurmà parechje assignazioni hè statu cambiatu. Per esempiu, prima i cumpunenti di l'espressione "foo[0], bar[0] = baz, qux" sò stati processati in l'ordine baz, qux, foo, bar, ma avà foo, bar, baz, qux.
  • Aghjunghje un supportu sperimentale per l'assignazione di memoria per i stringi cù u mecanismu VWA (Variable Width Allocation).
  • Versioni aghjurnate di moduli gemme integrati è quelli inclusi in a biblioteca standard. I pacchetti net-ftp, net-imap, net-pop, net-smtp, matrix, prime è debug sò integrati.

Source: opennet.ru

Add a comment