Liberazione di a lingua di prugrammazione Ruby 2.7.0
Dopu un annu di sviluppu publicatu liberazione Rubinu 2.7.0, una lingua di prugrammazione dinamica, orientata à l'ughjettu, chì hè assai efficace in u sviluppu di u prugramma è incorpora e migliori funzioni di Perl, Java, Python, Smalltalk, Eiffel, Ada è Lisp. U codice di u prughjettu 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. Ruby 2.7 hè a settima liberazione maiò dopu à un prucessu di sviluppu pianificatu chì dura un annu per preparà e migliure funziunali è pruduce e versioni di mantenimentu ogni 2-3 mesi.
Sperimentale supportu currispundenza di mudellu (Corrispondenza di mudellu), chì permettenu di iterà nantu à un oggettu datu è assignà un valore s'ellu ci hè un match à u mudellu.
casu [0, [1, 2, 3]] in [a, [b, *c]] pa #=> 0
pb # => 1
pc # => [2, 3] fine
casu {a: 0, b: 1}
in {a: 0, x: 1}
: indisponible
in {a: 0, b: var}
p var # => 1
fine
A cunchiglia di calculi interattivi irb (REPL, Read-Eval-Print-Loop) presenta avà una edizione multi-linea, implementata cù una biblioteca compatibile cù readline. reline, scrittu in Ruby. U supportu rdoc hè statu integratu, chì vi permette di vede l'infurmazioni di riferimentu nantu à classi, moduli è metudi specificati in irb. Fornitu l'evidenziazione di u culore di e linee di codice mostrate attraversu Binding#irb è i risultati di l'ispezione di l'uggetti di a classe di basa.
Aggiuntu un cullettore di basura compactu (Compaction GC) chì pò defragmentà una regione di memoria, risolve i prublemi di rendiment è di cunsumu di memoria causati da a frammentazione di memoria chì si trova in alcune applicazioni Ruby multi-threaded. Per imballà l'uggetti nantu à u munzeddu prupostu U metudu GC.compact, chì permette di riduce u numeru di pagine di memoria utilizati è ottimisà u munzeddu per l'operazioni
CoW (copia in scrittura).
Compiu preparanu à separà argumenti basati nantu à a pusizione di lista ("def foo(a,b,c)") è e parolle chjave ("def foo(key: val)"). A cunversione automatica di l'argumentu basatu nantu à e parolle chjave è a pusizione hè stata deprecata è ùn serà micca supportata in a branche Ruby 3.0. In particulare, hà deprecated usendu l'ultimu argumentu cum'è paràmetri di keyword, passendu argumenti basati in keyword cum'è l'ultimu paràmetru di hash, è splitting the last argument in positional and keyword parameters.
h = {}; def foo(*a) a fine; foo(**h) # [] h = {}; def foo(a) a fine; foo(**h) # {} è avvirtimentu
h = {}; def foo(*a) a fine; foo(h) # [{}] h = {}; def foo(a) a fine; foo(h) # {}
uppurtunità utilizendu nomi di variàbili numerati per difettu per i paràmetri di blocchi.
Permette di chjamà un metudu privatu cù u literale "self"
def foo
fine
privatu :foo
self.foo
Added Enumerator::Lazy#eager metudu per generà una enumerazione regulare da un enumeratore lazy (Enumerator::Lazy).
a = %w(foo bar baz)
e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.avida
p e.class # => Enumeratore
p e.map {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]
U sviluppu di un compilatore JIT sperimentale hà cuntinuatu, chì pò migliurà significativamente u rendiment di l'applicazioni in a lingua Ruby. U compilatore JIT di Ruby scrive prima u codice C à u discu, è poi chjamà un compilatore C esternu per generà struzzioni di a macchina (supporta chjamà GCC, Clang è Microsoft VC++). A nova versione implementa un metudu per l'implementazione in linea se ne necessariu, l'applicazione selettiva di i modi di ottimisazione durante a compilazione hè assicurata, u valore predeterminatu di "--jit-min-calls" hè aumentatu da 5 à 10000, è "--jit-max- cache" da 1000 à 100 .
Prestazione mejorata di CGI.escapeHTML, Monitor è MonitorMixin.
Module#name, true.to_s, false.to_s, è nil.to_s assicuranu chì una stringa hè restituita chì ùn hè micca cambiata per l'ughjettu specificatu.
A dimensione di i schedarii binari generati da u metudu RubyVM::InstructionSequence#to_binary; hè stata ridutta.
E biblioteche sò state spustate da u pacchettu di basa à i pacchetti di gemme esterni
CMath (cmath gemma),
Scanf (scanf gem),
Shell (gemma di cunchiglia)
Synchronizer (sync gem),
ThreadsWait (aspittà gemma),
E2MM (e2mmap gem).
I moduli stdlib predeterminati sò publicati in rubygems.org:
benchmark,
cgi,
delegatu
getoptlong,
net-pop,
net-smtp
aperta 3,
pstore,
singleton. i moduli di monitor ùn sò micca spustati in rubygems.org
observatore
pausa
tracciatore
uri,
yaml, chì sò furnuti solu in ruby-core.
Custruì Ruby avà bisognu di un compilatore C chì sustene u standard C99.