Egy év fejlesztés után közzétett kiadás Ruby 2.7.0, egy dinamikus objektum-orientált programozási nyelv, amely rendkívül hatékony a programfejlesztésben, és magában foglalja a Perl, Java, Python, Smalltalk, Eiffel, Ada és Lisp legjobb tulajdonságait. A projektkód a BSD ("2-clause BSDL") és a "Ruby" licencek alatt kerül terjesztésre, amelyek a GPL licenc legújabb verziójára utalnak, és teljes mértékben kompatibilisek a GPLv3-mal. A Ruby 2.7 a hetedik nagyobb kiadás, amely egy tervezett fejlesztési folyamat részeként készül, amely magában foglalja egy év elkülönítését a funkciók fejlesztésére és egy 2-3 hónapos patch kiadást.
eset [0, [1, 2, 3]] in [a, [b, *c]] pa #=> 0
pb #=> 1
pc #=> [2, 3] vége
eset {a: 0, b: 1}
in{a:0,x:1}
:elérhetetlen
in {a: 0, b: var}
p var #=> 1
végén
Az interaktív számítások irb (REPL, Read-Eval-Print-Loop) shellje immár többsoros szerkesztési lehetőséget is kínál, amelyet readline-kompatibilis könyvtár segítségével valósítanak meg sorRubinnal írva. Az rdoc támogatása integrálva van, ami lehetővé teszi a referencia információk megtekintését a megadott osztályokról, modulokról és metódusokról az irb-ben. A sorok színes kiemelése a Binding#irb-n keresztül megjelenített kóddal és az alaposztályú objektumok vizsgálatának eredményei.
Hozzáadott egy kompakt szemétgyűjtőt (Compaction GC), amely képes töredezettségmentesíteni a memória egy részét, megoldva a lassú teljesítmény és a megnövekedett memóriafelhasználás problémáit a memória töredezettsége miatt, amely egyes többszálas Ruby alkalmazások működése során jelentkezik. Tárgyak csomagolására a kupacra javasolta GC.compact módszer a felhasznált memóriaoldalak számának csökkentésére és a kupac optimalizálására a műveletekhez
CoW (másolás-írás).
Végrehajtott felkészülés az argumentumok szétválasztására a listában elfoglalt pozíció ("def foo(a,b,c)") és a kulcsszavak ("def foo(key: val)" alapján). A kulcsszavakon és pozíción alapuló automatikus argumentumkonverzió elavult, és a Ruby 3.0 ág nem támogatja. Különösen az utolsó argumentum kulcsszóparaméterként való használata, a kulcsszóalapú argumentumok utolsó hash-paraméterként való átadása, valamint az utolsó argumentum pozíció- és kulcsszóparaméterekre való felosztása elavulttá vált.
Megengedett egy privát metódus meghívása a szó szerinti "én"-vel
def foo
végén
privát :foo
self.foo
Hozzáadott Enumerator::Lazy#buzgó módszer a lusta (Enumerator::Lazy) felsorolásból rendszeres felsorolás generálására.
a = %w(foo bar baz)
e = a.lusta.térkép {|x| x.upcase }.map {|x| x + "!" }.mohó
p e.class #=> Enumerator
e.map {|x| x + "?" } #=> ["FOO!?", "BÁR!?", "BAZ!?"]
Folytatódott egy kísérleti JIT fordító fejlesztése, amely jelentősen javíthatja a Ruby nyelvű alkalmazások teljesítményét. A Rubyban javasolt JIT fordító először C kódot ír a lemezre, majd hív egy külső C fordítót, hogy gépi utasításokat generáljon (a GCC, Clang és Microsoft VC ++ támogatott). Az új verzió szükség esetén beépített telepítési módszert valósít meg, az optimalizálási módok szelektív alkalmazását a fordítás során, a "--jit-min-calls" alapértelmezett értéke 5-ről 10000-re nő, és a "--jit-max-cache" 1000-től 100-ig.
A CGI.escapeHTML, a Monitor és a MonitorMixin jobb teljesítménye.
A modul#name, true.to_s, false.to_s és nil.to_s biztosítják, hogy a megadott objektumhoz változatlan karakterlánc kerüljön visszaadásra.
A RubyVM::InstructionSequence#to_binary metódus által generált bináris fájlok mérete csökkent;
A könyvtárak az alapterjesztésről a külső drágakő csomagokba kerültek
CMath (cmath drágakő),
Scanf (scanf gem),
Shell (shell drágakő)
Szinkronizáló (sync gem),
ThreadsWait (thwait gem),
E2MM (e2mmap gem).
Az alapértelmezett stdlib modulok a rubygems.org webhelyen vannak közzétéve:
viszonyítási alap,
cgi,
küldött,
hosszúra nyúlik,
net pop,
net smtp,
nyitott 3,
pstore,
szingli. a monitormodulok nem kerültek át a rubygems.org oldalra
megfigyelő,
időtúllépés
nyomjelző,
gyűlöl,
yaml, amelyeket csak rubinmaggal szállítanak.
A Ruby felépítéséhez most olyan C fordítóra van szükség, amely támogatja a C99 szabványt.