È stato rilasciato il linguaggio di programmazione Ruby 3.3

È stata rilasciata la versione Ruby 3.3.0, un linguaggio di programmazione a oggetti dinamico, che si distingue per l'elevata efficienza nello sviluppo di applicazioni e integra 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:

  • Il pacchetto principale include il parser Prism, implementato come libreria C libprism, utilizzata nell'interprete CRuby, e un pacchetto gem in Ruby che fornisce un'API pubblica per l'analisi ricorsiva discendente del codice Ruby, utile per l'utilizzo in progetti lavorativi al posto del parser Ripper. Tra i vantaggi di Prism, si segnalano la buona portabilità e la flessibile gestione degli errori nel codice. Per includere il nuovo parser, è possibile utilizzare l'opzione «ruby —parser=prism» o la variabile d'ambiente RUBYOPT=»—parser=prism». I metodi disponibili per analizzare il codice nei propri programmi sono Prism.parse(source) per ottenere una rappresentazione AST del codice, Prism.parse_comments(source) per estrarre commenti dal codice e Prism.parse_success?(source) per controllare la presenza di errori nel codice.
  • Invece di utilizzare il pacchetto esterno Bison per la generazione dei parser, è stato coinvolto il progetto Lrama, che fornisce un'implementazione dell'algoritmo LALR in Ruby, supportando definizioni di grammatica compatibili con Bison (parse.y), utilizzate in CRuby, e implementando funzionalità avanzate come la gestione degli errori e le regole parametrizzate (?, *, +).
  • È stata effettuata un'ottimizzazione significativa delle prestazioni del compilatore JIT YJIT, sviluppato dagli ingegneri 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. A differenza del precedente compilatore JIT MJIT, il nuovo YJIT applica la versioning dei blocchi base (LBBV — Lazy Basic Block Versioning) invece di elaborare metodi interi ed è implementato come un compilatore JIT integrato, scritto in Rust. Grazie a LBBV, il JIT inizialmente compila solo l'inizio del metodo, mentre il resto viene compilato successivamente, una volta determinati i tipi delle variabili e degli argomenti durante l'esecuzione.

    Durante i test dell'emulatore Optcarrot, le prestazioni con YJIT superano di oltre tre volte quelle ottenute con l'interprete. Nella nuova versione è stata fornita l'allocazione di registri per le operazioni di stack della macchina virtuale, è stato ampliato l'elenco delle chiamate compilate con argomenti opzionali, è stata implementata l'espansione inline di metodi di base e specializzati, e sono state aggiunte ottimizzazioni specifiche per le operazioni «Integer#*», «Integer#!=», «String#!=», «String#getbyte», «Kernel#block_given?», «Kernel#is_a?», «Kernel#instance_of?» e «Module#===». La velocità di compilazione è aumentata considerevolmente.

    È stata notevolmente ridotta la memoria necessaria per conservare i metadati ed è stata garantita la generazione di codice più compatto per l'architettura ARM64. Per impostazione predefinita è stato disattivato il garbage collector Code («—yjit-code-gc»), che rilascia dinamicamente il codice macchina generato non utilizzato, ma che provoca un calo delle prestazioni durante la raccolta dei rifiuti. È stato aggiunto il metodo RubyVM::YJIT.enable per gestire l'attivazione di YJIT durante l'esecuzione, senza la necessità di avviare con un parametro di riga di comando specifico o una variabile d'ambiente. È stata ampliata la statistica fornita quando si specifica l'opzione «—yjit-stats». Sono stati aggiunti i modi per il profiling delle prestazioni (—yjit-perf) e la tracciatura (—yjit-trace-exits).

  • È stato proposto un nuovo compilatore JIT RJIT, interamente scritto in Ruby e che sostituisce MJIT, ma a differenza di quest'ultimo non richiede un compilatore C per l'uso. RJIT supporta solo l'architettura x86-64 e le piattaforme Unix-like.
  • È stata aggiunta una pianificazione dei thread «M:N», che consente di utilizzare un numero limitato di thread di sistema per gestire i thread nel codice Ruby, riducendo le spese generali di creazione e gestione dei thread. Per impostazione predefinita, vengono utilizzati 8 thread OS (modificabile tramite la variabile d'ambiente RUBY_MAX_CPU). L'uso del planner «M:N» può causare problemi di compatibilità con le estensioni scritte in C, quindi è disattivato di default per la classe principale (main) di Ractor, ma attivato per le classi non principali (non-main). Per forzare l'attivazione del planner «M:N», è necessario impostare la variabile d'ambiente RUBY_MN_THREADS=1.
  • Ampliata la funzionalità della shell interattiva IRB (REPL, Read-Eval-Print-Loop). Aggiunta la modalità di debug irb:rdbg, equivalente in funzionalità al debugger pry-byebug. Implementato il supporto per la visualizzazione multipagina dell'output dei comandi ls, show_source e show_cmds. Realizzato il supporto sperimentale per il completamento automatico dell'input, tenendo conto dei tipi di dati. Fornite comandi per modificare il colore e lo stile del font.
  • È stato dichiarato obsoleto il richiamo del metodo "it" senza argomenti in un blocco senza parametri (ad esempio, "[1, 2, 3].each { puts it }").
  • In RubyGems e Bundler è inclusa la visualizzazione di un avviso nel caso di specificare nei "require" i pacchetti gem abbrev, base64, bigdecimal, csv, drb, getoptlong, mutex_m, nkf, observer, racc, resolv-replace, rinda e syslog, se non sono stati aggiunti al Gemfile o al gemspec. Nelle future versioni di Ruby, questi pacchetti gem saranno integrati nel core.
  • Sono state aggiornate le versioni dei moduli gem incorporati e inclusi nella libreria standard.

Fonte: opennet.ru

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