Rilascio del linguaggio di programmazione Ruby 3.1

È stata rilasciata la Ruby 3.1.0, un linguaggio di programmazione dinamico e orientato agli oggetti, caratterizzato da un'elevata efficienza nello sviluppo di software e che incorpora le migliori caratteristiche di Perl, Java, Python, Smalltalk, Eiffel, Ada e Lisp. Il codice del progetto è distribuito sotto le licenze BSD («2-clause BSDL») e «Ruby», che fa riferimento all'ultima versione della licenza GPL ed è completamente compatibile con GPLv3.

Miglioramenti principali:

  • È stato aggiunto un nuovo compilatore JIT intra-processo sperimentale, YJIT, sviluppato dai programmatori della piattaforma di e-commerce Shopify nell'ambito di un'iniziativa per aumentare le prestazioni delle applicazioni Ruby che utilizzano il framework Rails e invocano un numero elevato di metodi. La principale differenza rispetto al precedente compilatore JIT, MJIT, che si basava sull'elaborazione completa dei metodi e utilizzava un compilatore esterno in C, è che YJIT applica la versioning dei blocchi di base (LBBV - Lazy Basic Block Versioning) e include un compilatore JIT integrato. Grazie a LBBV, il JIT compila inizialmente solo l'inizio del metodo, mentre il resto viene compilato successivamente, dopo che durante l'esecuzione sono stati determinati i tipi delle variabili e degli argomenti utilizzati. Utilizzando YJIT, è stata registrata un aumento delle prestazioni del 22% nel test railsbench e del 39% nel test liquid-render. YJIT è attualmente limitato al supporto di sistemi operativi simili a Unix su architetture x86-64 ed è disattivato di default (per attivarlo, è necessario specificare il flag "—yjit" nella riga di comando).
  • Le prestazioni del vecchio JIT compiler MJIT sono state potenziate. Per i progetti che utilizzano Rails, la dimensione massima della cache (—jit-max-cache) è stata aumentata da 100 a 10000 istruzioni. Non è più stato disabilitato il JIT per i metodi che includono più di 1000 istruzioni. Per supportare Zeitwerk di Rails, il codice generato in JIT non viene più scartato se TracePoint è abilitato per gli eventi della classe.
  • È stato incluso un debugger completamente riscritto debug.gem, che supporta il debug remoto, non rallenta l'applicazione in fase di debug, supporta l'integrazione con interfacce di debug avanzate (VSCode e Chrome), può essere utilizzato per il debug di applicazioni multithread e multi-processo, fornisce un'interfaccia REPL per l'esecuzione di codice, offre funzionalità avanzate di tracciamento e può registrare e riprodurre frammenti di codice. Il debugger lib/debug.rb precedentemente offerto è stato rimosso dalla distribuzione di base.
    Rilascio del linguaggio di programmazione Ruby 3.1
  • È stata implementata l'evidenziazione visiva degli errori nei rapporti di tracciamento delle chiamate. La marcatura degli errori è fornita dal pacchetto gem error_highlight, abilitato di default. Per disabilitare la marcatura degli errori, è possibile utilizzare l'impostazione «—disable-error_highlight». $ ruby test.rb test.rb:1:in «
    »: metodo indefinito «time» per 1:Integer (NoMethodError) 1.time {} ^^^^^ Vuoi dire? times
  • Nella shell di calcolo interattivo IRB (REPL, Read-Eval-Print-Loop) è stata implementata la completezza automatica del codice inserito (mentre si digita, vengono visualizzati suggerimenti con opzioni di completamento, tra cui è possibile navigare con il tasto Tab o Shift+Tab). Dopo aver scelto un'opzione di completamento, viene mostrato un dialogo che visualizza la documentazione correlata all'elemento selezionato. Per accedere alla documentazione completa, è possibile utilizzare la combinazione di tasti Alt+d.
    Rilascio del linguaggio di programmazione Ruby 3.1
  • La sintassi del linguaggio ora consente di omettere valori nei letterali hash e argomenti di parole chiave durante le chiamate alle funzioni. Ad esempio, invece di «{x: x, y: y}» ora è possibile specificare «{x:, y:}», e invece di «foo(x: x, y: y)» — «foo(x:, y:)».
  • È stata stabilizzata la supporto per le corrispondenze su singola riga (ary => [x, y, z]), che non sono più indicate come sperimentali.
  • L'operatore «^» nelle corrispondenze 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 su singola riga non è necessario specificare le parentesi: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • Nel linguaggio di annotazione dei tipi RBS, che consente di definire la struttura del programma e dei tipi utilizzati, è stata aggiunta la supporto per indicare il limite superiore dei parametri di tipo tramite il simbolo «<», è stata aggiunta la supporto per alias dei tipi generici, è stata implementata la supporto per collezioni per la gestione delle gemme, è stata migliorata la performance e sono state implementate molte nuove firme per librerie incorporate e standard.
  • Nel analizzatore statico dei tipi TypePro, che genera annotazioni RBS basate sull'analisi del codice senza informazioni esplicite sui tipi, è stata aggiunta il supporto sperimentale per ambienti di sviluppo integrati (ad esempio, è stato preparato un plugin per integrare TypePro con l'editor VSCode).
  • È stato modificato l'ordine di elaborazione delle assegnazioni multiple. Ad esempio, prima le parti dell'espressione «foo[0], bar[0] = baz, qux» venivano elaborate nell'ordine baz, qux, foo, bar, mentre ora sono elaborate nell'ordine foo, bar, baz, qux.
  • È stata aggiunta una supporto sperimentale per l'allocazione della memoria per le stringhe utilizzando il meccanismo VWA (Variable Width Allocation).
  • Aggiornate le versioni dei moduli gem inclusi e standard nella libreria. Inclusi i pacchetti net-ftp, net-imap, net-pop, net-smtp, matrix, prime e debug.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster