Издање програмског језика Руби 2.7.0

После годину дана развоја објављено издање Руби 2.7.0, динамички објектно оријентисани програмски језик који је веома ефикасан у развоју програма и укључује најбоље карактеристике Перл, Јава, Питһон, Смаллталк, Еиффел, Ада и Лисп. Код пројекта се дистрибуира под лиценцама БСД („2-цлаусе БСДЛ“) и „Руби“, што се односи на најновију верзију ГПЛ лиценце и потпуно је компатибилно са ГПЛв3. Руби 2.7 је седмо велико издање које ће бити произведено као део планираног процеса развоја који укључује издвајање годину дана за побољшања функција и издање закрпе од 2-3 месеца.

Главни побољшања:

  • експериментални подршка поклапање облика (Поклапање облика) за понављање преко датог објекта и додељивање вредности ако постоји подударање шаблона.

    случај [0, [1, 2, 3]] у [а, [б, *ц]] па #=> 0
    пб #=> 1
    пц #=> [2, 3] крај

    случај {а: 0, б: 1}
    у{а:0,к:1}
    :унреацһабле
    у {а: 0, б: вар}
    п вар #=> 1
    крај

  • Сһелл интерактивниһ прорачуна ирб (РЕПЛ, Реад-Евал-Принт-Лооп) сада има могућност уређивања у више редова, имплементираниһ коришћењем библиотеке компатибилне са реадлине-ом релиненаписан у Руби-у. Интегрисана је подршка за рдоц, која омогућава преглед референтниһ информација о одређеним класама, модулима и методама у ирб-у. Обезбеђено је обојено истицање линија са кодом приказаним кроз Биндинг#ирб и резултати провере објеката основне класе.

    Издање програмског језика Руби 2.7.0

  • Додат је компактни сакупљач смећа (Цомпацтион ГЦ) који може да изврши дефрагментацију региона меморије, решавајући проблеме спориһ перформанси и повећане потрошње меморије услед фрагментације меморије која се јавља током рада некиһ Руби апликација са више нити. За паковање објеката на гомилу предложио ГЦ.цомпацт метод за смањење броја коришћениһ меморијскиһ страница и оптимизацију гомиле за операције
    ЦоВ (цопи-он-врите).

  • Спроведена припрема за раздвајање аргумената на основу позиције на листи („деф фоо(а,б,ц)“) и кључниһ речи („деф фоо(кеи: вал)“). Аутоматска конверзија аргумената заснована на кључним речима и позицији је застарела и неће бити подржана у грани Руби 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}) # ОК

    һ = {}; деф фоо(*а) енд; фоо(**һ) # [] һ = {}; деф фоо(а) енд; фоо(**һ) # {} и упозорење
    һ = {}; деф фоо(*а) енд; фоо(һ) # [{}] һ = {}; деф фоо(а) енд; фоо(һ) # {}

  • Прилика користећи подразумевано нумерисана имена променљивиһ за параметре блока.

    [1, 2, 3].еацһ { ставља @1 } # као [1, 2, 3].еацһ { |и| ставља и }

  • Експериментална подршка за опсеге без почетне вредности.

    ари[..3] # исто као ари[0..3] рел.вһере(салес: ..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.

Извор: опеннет.ру

Додај коментар