Nakon godinu dana razvoja objavljeno pustiti Ruby 2.7.0, dinamički objektno orijentisani programski jezik koji je veoma efikasan u razvoju programa i uključuje najbolje karakteristike Perl, Java, Python, Smalltalk, Eiffel, Ada i Lisp. Projektni kod se distribuira pod licencama BSD („BSDL s 2 klauzule“) i „Ruby“, što se odnosi na najnoviju verziju GPL licence i potpuno je kompatibilno sa GPLv3. Ruby 2.7 je sedmo veliko izdanje koje se proizvodi kao dio planiranog razvojnog procesa koji uključuje izdvajanje godinu dana za poboljšanja karakteristika i izdanje zakrpe od 2-3 mjeseca.
eksperimentalni podrška podudaranje uzoraka (podudaranje uzoraka) za ponavljanje preko datog objekta i dodjelu vrijednosti ako postoji podudaranje uzorka.
slučaj [0, [1, 2, 3]] u [a, [b, *c]] pa #=> 0
pb #=> 1
kom #=> [2, 3] kraj
slučaj {a: 0, b: 1}
u {a: 0, x: 1}
:nedostupno
u {a: 0, b: var}
p var #=> 1
Kraj
Ljuska interaktivnih kalkulacija irb (REPL, Read-Eval-Print-Loop) sada ima mogućnost uređivanja u više redova, implementirano korištenjem biblioteke kompatibilne sa readline-om linijanapisano u Ruby-u. Integrisana je podrška za rdoc, koja omogućava pregled referentnih informacija o određenim klasama, modulima i metodama u irb-u. Omogućeno je obojeno isticanje linija sa kodom prikazanim kroz Binding#irb i rezultati pregleda objekata osnovne klase.
Dodan je kompaktni sakupljač smeća (Compaction GC) koji može defragmentirati regiju memorije, rješavajući probleme sporih performansi i povećane potrošnje memorije zbog fragmentacije memorije koja se javlja tokom rada nekih Ruby aplikacija s više niti. Za pakiranje objekata na hrpu predložio GC.compact metoda za smanjenje broja korištenih memorijskih stranica i optimizaciju hrpe za operacije
Krava (copy-on-write).
Izvršeno priprema za razdvajanje argumenata na osnovu pozicije na listi ("def foo(a,b,c)") i ključnih reči ("def foo(key: val)"). Automatska konverzija argumenata zasnovana na ključnim riječima i poziciji je zastarjela i neće biti podržana u grani Ruby 3.0. Konkretno, zastarjelo je korištenje posljednjeg argumenta kao parametara ključne riječi, prosljeđivanja argumenata baziranih na ključnoj riječi kao posljednjeg parametra heširanja i podjele posljednjeg argumenta na pozicione i parametre ključne riječi.
Poziv privatnog metoda je dozvoljen sa "self" literalom
def foo
Kraj
privatno :foo
self.foo
Dodan metod Enumerator::Lazy#eager za generiranje redovnog nabrajanja od lijenog (Enumerator::Lazy) nabrajanja.
a = %w(foo bar baz)
e = a.lazy.map {|x| x.upcase }.mapa {|x| x + "!" }.željan
p e.class #=> Enumerator
e.mapa {|x| x + "?" } #=> [“FOO!?”, “BAR!?”, “BAZ!?”]
Nastavljen je razvoj eksperimentalnog JIT kompajlera koji može značajno poboljšati performanse aplikacija na jeziku Ruby. JIT kompajler predložen u Rubyju prvo zapisuje C kod na disk, nakon čega poziva eksterni C prevodilac da generiše mašinske instrukcije (podržani su GCC, Clang i Microsoft VC ++). Nova verzija implementira metodu za inline implementaciju ako je potrebno, selektivnu primjenu načina optimizacije tokom kompilacije, zadana vrijednost "--jit-min-calls" je povećana sa 5 na 10000, a "--jit-max-cache" od 1000 do 100.
Poboljšane performanse CGI.escapeHTML, Monitor i MonitorMixin.
Module#name, true.to_s, false.to_s i nil.to_s osiguravaju da je vraćen niz koji je nepromijenjen za navedeni objekt.
Veličina binarnih datoteka koje generiše metoda RubyVM::InstructionSequence#to_binary je smanjena;
Ažurirane verzije ugrađenih komponenti, uključujući
Bundle 2.1.2, RubyGems 3.1.2,
Racc 1.4.15,
CSV 3.1.2, REXML 3.2.3,
RSS 0.2.8,
String Scanner 1.0.3;
Biblioteke su prešle s osnovne distribucije na vanjske gem pakete
CMath (cmath dragulj),
Scanf (scanf dragulj),
Školjka (dragulj od školjke),
Sinkronizator (dragulj sinhronizacije),
ThreadsWait (thwait gem),
E2MM (e2mmap dragulj).
Zadani stdlib moduli su objavljeni na rubygems.org:
mjerilo,
cgi,
delegat,
getoptlong,
net pop,
net-smtp
open3,
Pstoran,
singleton. Moduli monitora nisu premješteni na rubygems.org
posmatrač,
vrijeme je isteklo,
tracer
uri,
yaml, koji se isporučuju samo sa ruby-jezgrom.
Izgradnja Ruby-a sada zahtijeva C kompajler koji podržava C99 standard.