Rilascio del linguaggio di programmazione Ruby 3.1

È stato rilasciato Ruby 3.1.0, un linguaggio di programmazione dinamico orientato agli oggetti che è altamente efficiente nello sviluppo di programmi e incorpora le migliori funzionalità di Perl, Java, Python, Smalltalk, Eiffel, Ada e Lisp. Il codice del progetto è distribuito sotto le licenze BSD ("BSDL a 2 clausole") e "Ruby", che si riferisce all'ultima versione della licenza GPL ed è completamente compatibile con GPLv3.

Principali miglioramenti:

  • È stato aggiunto un nuovo compilatore JIT sperimentale in-process, YJIT, creato dagli sviluppatori della piattaforma di e-commerce Shopify come parte di un'iniziativa per migliorare le prestazioni dei programmi Ruby che utilizzano il framework Rails e chiamano molti metodi. La differenza fondamentale rispetto al compilatore JIT MJIT utilizzato in precedenza, che si basa sull'elaborazione di interi metodi e utilizza un compilatore esterno nel linguaggio C, è che YJIT utilizza Lazy Basic Block Versioning (LBBV) e contiene un compilatore JIT integrato. Con LBBV, JIT compila prima solo l'inizio del metodo e compila il resto qualche tempo dopo, dopo che i tipi di variabili e argomenti utilizzati sono stati determinati durante l'esecuzione. Utilizzando YJIT, è stato registrato un aumento delle prestazioni del 22% durante l'esecuzione del test su rotaia e un aumento del 39% nel test di rendering liquido. YJIT è attualmente limitato al supporto per sistemi operativi unix-like su sistemi con architettura x86-64 ed è disabilitato per impostazione predefinita (per attivarlo, specificare il flag "--yjit" nella riga di comando).
  • Prestazioni migliorate del vecchio compilatore MJIT JIT. Per i progetti che utilizzano Rails, la dimensione massima predefinita della cache (--jit-max-cache) è stata aumentata da 100 a 10000 istruzioni. Interruzione dell'utilizzo di JIT per metodi con più di 1000 istruzioni. Per supportare Zeitwerk of Rails, il codice JIT non viene più scartato quando TracePoint è abilitato per gli eventi di classe.
  • Include un debugger debug.gem completamente riscritto, che supporta il debug remoto, non rallenta l'applicazione sottoposta a debug, supporta l'integrazione con interfacce di debug avanzate (VSCode e Chrome), può essere utilizzato per il debug di applicazioni multi-thread e multi-processo, fornisce un'interfaccia di esecuzione del codice REPL, offre funzionalità di tracciamento avanzate, può registrare e riprodurre frammenti di codice. Il debugger precedentemente offerto lib/debug.rb è stato rimosso dalla distribuzione di base.
    Rilascio del linguaggio di programmazione Ruby 3.1
  • Implementata l'evidenziazione visiva degli errori nei report di traccia delle richiamate. La segnalazione degli errori viene fornita utilizzando il pacchetto gem integrato e abilitato per impostazione predefinita error_highlight. Per disabilitare la segnalazione degli errori, puoi utilizzare l'impostazione "--disable-error_highlight". $ rubino test.rb test.rb:1:in " ": metodo non definito "time" per 1:Integer (NoMethodError) 1.time {} ^^^^^ Intendevi? volte
  • La shell di calcoli interattivi IRB (REPL, Read-Eval-Print-Loop) implementa il completamento automatico del codice inserito (durante la digitazione viene visualizzato un suggerimento con le opzioni per continuare l'input, tra le quali è possibile spostarsi con Tab o Shift+ tasto Tab). Dopo aver selezionato l'opzione di continuazione, nelle vicinanze viene visualizzata una finestra di dialogo che visualizza la documentazione associata all'elemento selezionato. La scorciatoia da tastiera Alt+d può essere utilizzata per accedere alla documentazione completa.
    Rilascio del linguaggio di programmazione Ruby 3.1
  • La sintassi del linguaggio ora consente di saltare i valori nei valori letterali hash e negli argomenti delle parole chiave quando si chiamano le funzioni. Ad esempio, invece dell'espressione “{x: x, y: y}” ora puoi specificare “{x:, y:}”, e invece di “foo(x: x, y: y)” - foo( x:, y: )".
  • Supporto stabilizzato per corrispondenze di pattern a riga singola (ary => [x, y, z]), che non sono più contrassegnate come sperimentali.
  • L'operatore "^" nelle corrispondenze dei modelli ora può contenere espressioni arbitrarie, ad esempio: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • Nelle corrispondenze di schemi a riga singola, puoi omettere le parentesi: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • Il linguaggio di annotazione dei tipi RBS, che consente di determinare la struttura del programma e i tipi utilizzati, ha aggiunto il supporto per specificare il limite superiore dei parametri di tipo utilizzando il simbolo "<", aggiunto il supporto per alias di tipi generici, implementato il supporto per raccolte per la gestione delle gemme, prestazioni migliorate e implementate molte nuove firme per le librerie integrate e standard.
  • È stato aggiunto il supporto sperimentale per ambienti di sviluppo integrati all'analizzatore di tipo statico TypePro, che genera annotazioni RBS basate sull'analisi del codice senza informazioni esplicite sul tipo (ad esempio, è stato preparato un componente aggiuntivo per l'integrazione di TypePro con l'editor VSCode).
  • L'ordine di elaborazione di più incarichi è stato modificato. Ad esempio, prima i componenti dell'espressione “foo[0], bar[0] = baz, qux” venivano elaborati nell'ordine baz, qux, foo, bar, ora foo, bar, baz, qux.
  • Aggiunto supporto sperimentale per l'allocazione della memoria per le stringhe utilizzando il meccanismo VWA (Variable Wide Allocation).
  • Versioni aggiornate dei moduli gem integrati e di quelli inclusi nella libreria standard. I pacchetti net-ftp, net-imap, net-pop, net-smtp, matrice, prime e debug sono integrati.

Fonte: opennet.ru

Aggiungi un commento