Efter et års udvikling offentliggjort релиз Ruby 2.7.0, et dynamisk, objektorienteret programmeringssprog, der er yderst effektivt i programudvikling og inkorporerer de bedste funktioner fra Perl, Java, Python, Smalltalk, Eiffel, Ada og Lisp. Projektkoden distribueres under BSD ("2-klausul BSDL") og "Ruby"-licenser, som refererer til den seneste version af GPL-licensen og er fuldt ud kompatibel med GPLv3. Ruby 2.7 er den syvende store udgivelse efter en planlagt udviklingsproces, der tager et år at forberede funktionsforbedringer og producerer vedligeholdelsesudgivelser hver 2.-3. måned.
Eksperimentel støtte mønstermatchning (Mønster matchende), som giver dig mulighed for at iterere over et givent objekt og tildele en værdi, hvis der er et match til mønsteret.
case [0, [1, 2, 3]] i [a, [b, *c]] pa #=> 0
pb #=> 1
pc #=> [2, 3] ende
case {a: 0, b: 1}
i {a: 0, x: 1}
: ikke tilgængelig
i {a: 0, b: var}
p var #=> 1
ende
Skallen af interaktive beregninger irb (REPL, Read-Eval-Print-Loop) har nu multi-line redigering, implementeret ved hjælp af et readline-kompatibelt bibliotek reline, skrevet i Ruby. rdoc-understøttelse er blevet integreret, så du kan se referenceoplysninger om specificerede klasser, moduler og metoder i irb. Forudsat farvefremhævning af kodelinjer vist gennem Binding#irb og resultaterne af inspektion af basisklasseobjekter.
Tilføjet en kompakt skraldeopsamler (Compaction GC), der kan defragmentere et område af hukommelsen, og løse problemerne med ydeevne og hukommelsesforbrug forårsaget af hukommelsesfragmentering, der forekommer i nogle flertrådede Ruby-applikationer. At pakke genstande på dyngen foreslog GC.compact metode, som giver dig mulighed for at reducere antallet af brugte hukommelsessider og optimere heapen til operationer
CoW (copy-on-write).
Udført forbereder at adskille argumenter baseret på listeposition ("def foo(a,b,c)") og nøgleord ("def foo(key: val)"). Automatisk argumentkonvertering baseret på søgeord og position er blevet forældet og vil ikke blive understøttet i Ruby 3.0-grenen. Specifikt har den udfaset brugen af det sidste argument som søgeordsparametre, videregivelse af søgeordsbaserede argumenter som den sidste hash-parameter og opdeling af det sidste argument i positions- og søgeordsparametre.
h = {}; def foo(*a) en ende; foo(**h) # [] h = {}; def foo(a) a end; foo(**h) # {} og advarsel
h = {}; def foo(*a) en ende; foo(h) # [{}] h = {}; def foo(a) a end; foo(h) # {}
Opportunity bruger nummererede variabelnavne som standard for blokparametre.
[1, 2, 3].hver { sætter @1 } # samme som [1, 2, 3].hver { |i| sætter i}
Tilladt at kalde en privat metode med det bogstavelige "selv"
def foo
ende
privat :foo
self.foo
Tilføjet Enumerator::Lazy#eager metode til at generere en regulær optælling fra en doven enumerator (Enumerator::Lazy).
a = %w(foo bar baz)
e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.ivrige
p e.klasse #=> Enumerator
p e.kort {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]
Udviklingen af en eksperimentel JIT-kompiler er fortsat, som kan forbedre ydeevnen af applikationer på Ruby-sproget markant. Rubys JIT-kompiler skriver først C-kode til disken og kalder derefter en ekstern C-kompiler for at generere maskininstruktioner (understøtter kald af GCC, Clang og Microsoft VC++). Den nye version implementerer en metode til inline-implementering om nødvendigt, selektiv anvendelse af optimeringstilstande under kompilering er sikret, standardværdien for "--jit-min-calls" øges fra 5 til 10000, og "--jit-max- cache” fra 1000 til 100 .
Forbedret ydeevne af CGI.escapeHTML, Monitor og MonitorMixin.
Modul#name, true.to_s, false.to_s og nil.to_s sikrer, at der returneres en streng, der er uændret for det angivne objekt.
Størrelsen af binære filer genereret af RubyVM::InstructionSequence#to_binary; metoden er blevet reduceret.
Opdaterede versioner af indbyggede komponenter, herunder
Bundler 2.1.2, RubyGems 3.1.2,
Racc 1.4.15,
CSV 3.1.2, REXML 3.2.3,
RSS 0.2.8,
StringScanner 1.0.3;
Biblioteker er blevet flyttet fra basispakken til eksterne ædelstenspakker
CMath (cmath perle),
Scanf (scanf gem),
Skal (skalperle)
Synchronizer (sync perle),
ThreadsWait (thwait perle),
E2MM (e2mmap perle).
Standard stdlib-modulerne er udgivet på rubygems.org:
benchmark,
cgi,
delegeret,
getoptlong,
net-pop,
net-smtp
åben 3,
pstore,
singleton. monitormoduler er ikke flyttet til rubygems.org
observatør
tiden er gået
sporstof,
uri,
yaml, som kun leveres i rubinkerne.
Building Ruby kræver nu en C-compiler, der understøtter C99-standarden.