Post jaro da evoluo eldonita liberigi Rubeno 2.7.0, dinamika, objekt-orientita programlingvo kiu estas tre efika en programevoluo kaj asimilas la plej bonajn ecojn de Perl, Java, Python, Smalltalk, Eiffel, Ada, kaj Lisp. La projektkodo estas distribuita sub la permesiloj BSD ("2-paragrafo BSDL") kaj "Ruby", kiuj rilatas al la plej nova versio de la GPL-licenco kaj estas plene kongrua kun GPLv3. Ruby 2.7 estas la sepa grava eldono post laŭplana evoluprocezo, kiu daŭras jaron por prepari funkciajn plibonigojn kaj produktas prizorgajn eldonojn ĉiujn 2-3 monatojn.
Eksperimenta subteno ŝablono kongruo (Kongruo de ŝablono), kiuj ebligas al vi ripetadi super donita objekto kaj atribui valoron se estas kongruo al la ŝablono.
kazo [0, [1, 2, 3]] en [a, [b, *c]] pa #=> 0
pb # => 1
pc # => [2, 3] fino
kazo {a: 0, b: 1}
en{a:0,x:1}
:nedisponebla
en {a: 0, b: var}
p var # => 1
fino
La ŝelo de interagaj kalkuloj irb (REPL, Read-Eval-Print-Loop) nun havas plurlinian redaktadon, efektivigitan uzante readline-kongruan bibliotekon reliniskribita en Ruby. Subteno por rdoc estis integrita, kio permesas vidi referencan informon pri specifitaj klasoj, moduloj kaj metodoj en irb. Kolora reliefigo de linioj kun kodo montrita per Binding#irb kaj rezultoj de inspektado de bazklasaj objektoj estas provizita.
Aldonita kompakta rubokolektilo (Compaction GC) kiu povas malfragmenti regionon de memoro, solvante la problemojn de malrapida agado kaj pliigita memorkonsumo pro memorfragmentiĝo kiu okazas dum la funkciado de kelkaj plurfadenaj Ruby-aplikoj. Paki objektojn sur la amaso proponis GC.compact metodo por redukti la nombron da memorpaĝoj uzataj kaj optimumigi la amason por operacioj
Bovino (kopio-sur-skribi).
Kondukita prepariĝante por apartigi argumentojn bazitajn sur listpozicio ("def foo(a,b,c)") kaj ŝlosilvortoj ("def foo(ŝlosilo: val)"). Aŭtomata argumenta konvertiĝo bazita sur ŝlosilvortoj kaj pozicio estas malrekomendita kaj ne estos subtenata en la branĉo Ruby 3.0. Specife, ĝi malrekomendis uzi la lastan argumenton kiel ŝlosilvorto-parametrojn, pasante ŝlosilvorto-bazitajn argumentojn kiel la lasta hash-parametron, kaj dividante la lastan argumenton en poziciajn kaj ŝlosilvortojn parametrojn.
Permesita voki privatan metodon kun la laŭvorta "memo"
def foo
fino
private :foo
mem.foo
Aldonita Enumerator::Lazy#eager-metodo por generi regulan listigon de maldiligenta listigilo (Enumerator::Lazy).
a = %w(foo bar baz)
e = a.lazy.map {|x| x.majuskle }.mapo {|x| x + "!" }.avida
p e.class #=> Enumeralo
p e.mapo {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]
La evoluo de eksperimenta JIT-kompililo daŭris, kiu povas signife plibonigi la agadon de aplikoj en la Ruby-lingvo. La JIT-kompililo de Ruby unue skribas C-kodon al disko, kaj poste vokas eksteran C-kompililon por generi maŝininstrukciojn (subtenas voki GCC, Clang, kaj Microsoft VC++). La nova versio efektivigas metodon por enlinia deplojo se necese, selektema apliko de optimumigaj reĝimoj dum kompilo estas certigita, la defaŭlta valoro de "--jit-min-calls" estas pliigita de 5 ĝis 10000, kaj "--jit-max- kaŝmemoro” de 1000 ĝis 100 .
Plibonigita rendimento de CGI.escapeHTML, Monitor kaj MonitorMixin.
Module#name, true.to_s, false.to_s, kaj nil.to_s certigas, ke ĉeno estas resendita senŝanĝa por la specifita objekto.
La grandeco de binaraj dosieroj generitaj de la RubyVM::InstructionSequence#to_binary-metodo estis reduktita;
Bibliotekoj moviĝis de baza distribuo al eksteraj gempakaĵoj
CMath (cmath gemo),
Scanf (skanf gemo),
Ŝelo (ŝelo gemo)
Sinkronigilo (sinkroniga gemo),
ThreadsWait (atendu gemo),
E2MM (e2mmap gemo).
La defaŭltaj stdlib-moduloj estas publikigitaj ĉe rubygems.org:
komparnormo,
cgi,
delegito,
getoptlong,
reta popmuziko,
net-smtp
malfermita3,
pbutiko,
singleton. monitoraj moduloj ne movitaj al rubygems.org
observanto,
timeout
spurilo,
uri,
yaml, kiuj estas nur provizitaj en rubeno-kerno.
Konstruado de Ruby nun postulas C-kompililon kiu subtenas la C99-normon.