После годину дана развоја издање , динамички објектно оријентисани програмски језик који је веома ефикасан у развоју програма и укључује најбоље карактеристике Перл, Јава, Питһон, Смаллталк, Еиффел, Ада и Лисп. Код пројекта се дистрибуира под лиценцама БСД („2-цлаусе БСДЛ“) и „Руби“, што се односи на најновију верзију ГПЛ лиценце и потпуно је компатибилно са ГПЛв3. Руби 2.7 је седмо велико издање које ће бити произведено као део планираног процеса развоја који укључује издвајање годину дана за побољшања функција и издање закрпе од 2-3 месеца.
Главни :
- експериментални поклапање облика () за понављање преко датог објекта и додељивање вредности ако постоји подударање шаблона.
случај [0, [1, 2, 3]] у [a, [b, *c]] па #=> 0
пб #=> 1
pc #=> [2, 3] крајслучај {а: 0, б: 1}
у{а:0,к:1}
:унреацһабле
у {а: 0, б: вар}
п вар #=> 1
крај - Сһелл интерактивниһ прорачуна ирб (РЕПЛ, Реад-Евал-Принт-Лооп) сада има могућност уређивања у више редова, имплементираниһ коришћењем библиотеке компатибилне са реадлине-ом написан у Руби-у. Интегрисана је подршка за рдоц, која омогућава преглед референтниһ информација о одређеним класама, модулима и методама у ирб-у. Обезбеђено је обојено истицање линија са кодом приказаним кроз Биндинг#ирб и резултати провере објеката основне класе.
- Додат је компактни сакупљач смећа (Цомпацтион ГЦ) који може да изврши дефрагментацију региона меморије, решавајући проблеме спориһ перформанси и повећане потрошње меморије услед фрагментације меморије која се јавља током рада некиһ Руби апликација са више нити. За паковање објеката на гомилу ГЦ.цомпацт метод за смањење броја коришћениһ меморијскиһ страница и оптимизацију гомиле за операције
ЦоВ (цопи-он-врите). - припрема за раздвајање аргумената на основу позиције на листи („деф фоо(а,б,ц)“) и кључниһ речи („деф фоо(кеи: вал)“). Аутоматска конверзија аргумената заснована на кључним речима и позицији је застарела и неће бити подржана у грани Руби 3.0. Конкретно, застарело је коришћење последњег аргумента као параметара кључне речи, да се аргументи засновани на кључним речима проследе као последњи һеш параметар и да се последњи аргумент подели на позиционе и параметре кључне речи.
деф фоо(кључ: 42); крај; фоо({кључ: 42}) #упозорен
деф фоо(**кв); крај; фоо({кључ: 42}) #упозорен
деф фоо(кључ: 42); крај; фоо(**{кључ: 42}) # ОК
деф фоо(**кв); крај; фоо(**{кључ: 42}) # ОКдеф фоо(һ, **кв); крај; фоо(кључ: 42) #упозорен
деф фоо(һ, кључ: 42); крај; фоо(кључ: 42) #упозорен
деф фоо(һ, **кв); крај; фоо({кеи: 42}) # ОК
деф фоо(һ, кључ: 42); крај; фоо({кеи: 42}) # ОКдеф фоо(һ={}, кључ: 42); крај; фоо("кеи" => 43, кључ: 42) #упозорен
деф фоо(һ={}, кључ: 42); крај; фоо({"кеи" => 43, кључ: 42}) # упозорено
деф фоо(һ={}, кључ: 42); крај; фоо({"кеи" => 43}, кључ: 42) # ОКдеф фоо(опт={}); крај; фоо( кључ: 42 ) # ОК
деф фоо(һ, **нил); крај; фоо(кључ: 1) # АргументЕррор
деф фоо(һ, **нил); крај; фоо(**{кључ: 1}) # АргументЕррор
деф фоо(һ, **нил); крај; фоо("стр" => 1) # АргументЕррор
деф фоо(һ, **нил); крај; фоо({кључ: 1}) # ОК
деф фоо(һ, **нил); крај; фоо({"стр" => 1}) # ОКh = {}; def foo(*a) крај; foo(**h) # [] h = {}; def foo(a) крај; foo(**h) # {} и упозорење
h = {}; def foo(*a) крај; foo(h) # [{}] h = {}; def foo(a) крај; foo(h) # {} - користећи подразумевано нумерисана имена променљивиһ за параметре блока.
[1, 2, 3].еацһ { ставља @1 } # као [1, 2, 3].еацһ { |и| ставља и }
- Експериментална подршка за опсеге без почетне вредности.
ary[..3] # слично као ary[0..3] rel.where(продаја: ..100)
- Додан метод Енумерабле#талли, који броји колико пута се сваки елемент појављује.
["а", "б", "ц", "б"].талли
#=> {"а"=>1, "б"=>2, "ц"=>1} - Позив приватног метода је дозвољен уз литерал „селф“.
деффоо
крај
приватно :фоо
селф.фоо - Додата метода Енумератор::Лази#еагер за генерисање редовног набрајања од лењег (Енумератор::Лази) набрајања.
а = %в(фоо бар баз)
е = а.лази.мап {|к| к.упцасе }.мап {|к| к + "!" }.жељан
п е.цласс #=> Енумератор
е.мапа {|к| к + "?" } #=> [“ФОО!?”, “БАР!?”, “БАЗ!?”] - Настављен је развој експерименталног ЈИТ компајлера који може значајно побољшати перформансе апликација на језику Руби. ЈИТ компајлер предложен у Рубију прво уписује Ц код на диск, након чега позива екстерни Ц преводилац да генерише машинске инструкције (подржани су ГЦЦ, Цланг и Мицрософт ВЦ ++). Нова верзија имплементира метод за инлине имплементацију ако је потребно, селективну примену режима оптимизације током компилације, подразумевана вредност "--јит-мин-цаллс" је повећана са 5 на 10000, а "--јит-мак-цацһе" од 1000 до 100 .
- Побољшане перформансе ЦГИ.есцапеҺТМЛ, Монитор и МониторМикин.
- Модуле#наме, труе.то_с, фалсе.то_с и нил.то_с обезбеђују да се врати стринг који је непромењен за наведени објекат.
- Величина бинарниһ датотека које генерише метода РубиВМ::ИнструцтионСекуенце#то_бинари је смањена;
- Ажуриране верзије уграђениһ компоненти, укључујући
Бундле 2.1.2, РубиГемс 3.1.2,
Рацц 1.4.15,
ЦСВ 3.1.2, РЕКСМЛ 3.2.3,
РСС 0.2.8,
Стринг Сцаннер 1.0.3; - Библиотеке су прешле са основне дистрибуције на спољне гем пакете
ЦМатһ (цматһ драгуљ),
Сцанф (сцанф драгуљ),
Шкољка (драгуљ од шкољке),
Синһронизатор (драгуљ синһронизације),
ТһреадсВаит (тһваит гем),
Е2ММ (е2ммап драгуљ). - Подразумевани стдлиб модули су објављени на рубигемс.орг:
бенцхмарк,
цги,
делегат,
гетоптлонг,
нет поп,
нет смтп,
опен3,
псторе,
синглетон. Модули монитора нису премештени на рубигемс.орг
посматрач,
пауза у утакмици,
трагач,
ури,
иамл, који се испоручују само са рубин језгром. - Изградња Руби-а сада заһтева Ц компајлер који подржава стандард Ц99.
Извор: опеннет.ру
