Po roce vývoje uvolnění , dynamický objektově orientovaný programovací jazyk, který je vysoce efektivní při vývoji programů a obsahuje nejlepší vlastnosti Perlu, Javy, Pythonu, Smalltalku, Eiffel, Ada a Lisp. Kód projektu je distribuován pod licencemi BSD ("2-klauzule BSDL") a "Ruby", která odkazuje na nejnovější verzi licence GPL a je plně kompatibilní s GPLv3. Ruby 2.7 je sedmá hlavní verze, která má být vytvořena jako součást plánovaného vývojového procesu, který zahrnuje vyčlenění jednoho roku na vylepšení funkcí a 2–3měsíční vydání oprav.
hlavní :
- experimentální shoda vzorů () pro iteraci daného objektu a přiřazení hodnoty, pokud existuje shoda vzoru.
případ [0, [1, 2, 3]] v [a, [b, *c]] pa #=> 0
pb #=> 1
pc #=> [2, 3] konecpřípad {a: 0, b: 1}
v{a:0,x:1}
:nedosažitelný
v {a: 0, b: var}
p var #=> 1
konec - Shell interaktivních výpočtů irb (REPL, Read-Eval-Print-Loop) má nyní možnost víceřádkové editace, implementované pomocí knihovny kompatibilní s readline napsáno v Ruby. Byla integrována podpora pro rdoc, která umožňuje prohlížení referenčních informací o specifikovaných třídách, modulech a metodách v irb. K dispozici je barevné zvýraznění řádků s kódem zobrazeným prostřednictvím Binding#irb a výsledky kontroly objektů základní třídy.
- Přidán kompaktní garbage collector (Compaction GC), který dokáže defragmentovat oblast paměti, čímž řeší problémy s pomalým výkonem a zvýšenou spotřebou paměti v důsledku fragmentace paměti, ke které dochází při provozu některých vícevláknových aplikací Ruby. K balení předmětů na hromadě Metoda GC.compact ke snížení počtu použitých stránek paměti a optimalizaci haldy pro operace
CoW (copy-on-write). - příprava na oddělení argumentů na základě pozice v seznamu ("def foo(a,b,c)") a klíčových slov ("def foo(klíč: val)"). Automatická konverze argumentů na základě klíčových slov a pozice byla zastaralá a nebude podporována ve větvi Ruby 3.0. Zejména bylo zavrženo používání posledního argumentu jako parametrů klíčových slov, předávání argumentů založených na klíčových slovech jako posledního hashovacího parametru a rozdělení posledního argumentu na poziční parametry a parametry klíčových slov.
def foo(klíč: 42); konec; foo({klíč: 42}) #varován
def foo(**kw); konec; foo({klíč: 42}) #varován
def foo(klíč: 42); konec; foo(**{klíč: 42}) # OK
def foo(**kw); konec; foo(**{klíč: 42}) # OKdef foo(h, **kw); konec; foo(klíč: 42) #varován
def foo(h, klíč: 42); konec; foo(klíč: 42) # varován
def foo(h, **kw); konec; foo({klíč: 42}) # OK
def foo(h, klíč: 42); konec; foo({klíč: 42}) # OKdef foo(h={}, klíč: 42); konec; foo("klíč" => 43, klíč: 42) #varováno
def foo(h={}, klíč: 42); konec; foo({"klíč" => 43, klíč: 42}) # varován
def foo(h={}, klíč: 42); konec; foo({"klíč" => 43}, klíč: 42) # OKdef foo(opt={}); konec; foo( klíč: 42 ) # OK
def foo(h, **nula); konec; foo(klíč: 1) # ArgumentError
def foo(h, **nula); konec; foo(**{klíč: 1}) # ArgumentError
def foo(h, **nula); konec; foo("str" => 1) # ArgumentError
def foo(h, **nula); konec; foo({klíč: 1}) # OK
def foo(h, **nula); konec; foo({"str" => 1}) # OKh = {}; def foo(*a) konec; foo(**h) # [] h = {}; def foo(a) konec; foo(**h) # {} a varování
h = {}; def foo(*a) konec; foo(h) # [{}] h = {}; def foo(a) konec; foo(h) # {} - použití číslovaných výchozích názvů proměnných pro parametry bloku.
[1, 2, 3].každý { vloží @1 } # jako [1, 2, 3].každý { |i| klade i}
- Experimentální podpora pro rozsahy bez počáteční hodnoty.
ary[..3] # podobné jako ary[0..3] rel.where(prodej: ..100)
- Přidána metoda Enumerable#tally, která počítá, kolikrát se každý prvek vyskytuje.
["a", "b", "c", "b"]
#=> {"a"=>1, "b"=>2, "c"=>1} - Volání soukromé metody je povoleno s literálem "self".
deffoo
konec
soukromý :foo
self.foo - Přidána metoda Enumerator::Lazy#eager pro generování pravidelného výčtu z líného enumerátoru (Enumerator::Lazy).
a = %w(foo bar baz)
e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.dychtivý
p e.class #=> Enumerator
e.map {|x| x + "?" } #=> [“FOO!?”, “BAR!?”, “BAZ!?”] - Pokračoval vývoj experimentálního JIT kompilátoru, který může výrazně zlepšit výkon aplikací v jazyce Ruby. JIT kompilátor Ruby nejprve zapíše kód C na disk a poté zavolá externí kompilátor C, aby vygeneroval strojové instrukce (podporuje volání GCC, Clang a Microsoft VC++). Nová verze implementuje metodu pro inline nasazení v případě potřeby, je zajištěna selektivní aplikace optimalizačních režimů při kompilaci, výchozí hodnota „--jit-min-calls“ je zvýšena z 5 na 10000 a „--jit-max- cache“ od 1000 do 100 .
- Vylepšený výkon CGI.escapeHTML, Monitor a MonitorMixin.
- Module#name, true.to_s, false.to_s a nil.to_s zajišťují, že je vrácen řetězec, který je pro zadaný objekt nezměněn.
- Velikost binárních souborů generovaných metodou RubyVM::InstructionSequence#to_binary byla zmenšena;
- Aktualizované verze vestavěných komponent, včetně
Bundler 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; - Knihovny byly přesunuty ze základního balíčku do externích balíčků drahokamů
CMath (drahokam cmath),
Scanf (skenovat drahokam),
Shell (skořápka drahokam),
Synchronizátor (synchronizační drahokam),
ThreadsWait (thwait drahokam),
E2MM (drahokam e2mmap). - Výchozí moduly stdlib jsou publikovány na rubygems.org:
měřítko,
cgi,
delegát,
getoptlong,
net-pop,
čistý smtp,
open3,
pstore,
jedináček. Monitorovací moduly nebyly přesunuty na rubygems.org
pozorovatel,
Časový limit
značkovač,
nenávist,
yaml, které jsou dodávány pouze s rubínovým jádrem. - Sestavení Ruby nyní vyžaduje kompilátor C, který podporuje standard C99.
Zdroj: opennet.ru
