Вийшов Ruby 2.7.0

Опублікував naruse 25-12-2019
Переклав: Andrii Furmanets

Ми раді повідомити про реліз Ruby 2.7.0.

Він вводить низку нових функцій і покращень продуктивності, зокрема:

  • Зіставлення шаблонів
  • Покращення REPL
  • Компактизуючий GC
  • Розділення позиційних і ключових аргументів

Зіставлення шаблонів [Експериментально]

Зіставлення шаблонів (Pattern Matching), широко використовувана функція у функціональних мовах програмування, введено як експериментальну функцію. [Feature #14912]

Воно може обходити переданий об’єкт і присвоювати його значення, якщо воно відповідає шаблону.

require "json"

json = <<END
{
  "name": "Alice",
  "age": 30,
  "children": [{ "name": "Bob", "age": 2 }]
}
END

case JSON.parse(json, symbolize_names: true)
in {name: "Alice", children: [{name: "Bob", age: age}]}
  p age #=> 2
end

Докладніше див. Pattern matching - New feature in Ruby 2.7.

Покращення REPL

irb, вбудоване інтерактивне середовище (REPL; Read-Eval-Print-Loop), тепер підтримує багаторядкове редагування. Його забезпечує reline, бібліотека, сумісна з readline, реалізована на чистому Ruby. Також додано інтеграцію з rdoc. В irb можна відображати документацію для класів, модулів і методів. [Feature #14683], [Feature #14787], [Feature #14918]

Крім того, рядки коду, показані через Binding#irb, та результати інспекції об’єктів базових класів тепер підсвічуються кольором.

Компактизуючий GC

Цей реліз вводить компактизуючий GC, який може дефрагментувати фрагментовану пам’ять.

Деякі багатопотокові програми Ruby можуть викликати фрагментацію пам’яті, що призводить до високого використання пам’яті та зниження швидкості.

Метод GC.compact введено для компактизації купи. Ця функція ущільнює живі об’єкти в купі, щоб використовувати менше сторінок, і купа може бути більш дружньою до CoW (copy-on-write). [Feature #15626]

Розділення позиційних і ключових аргументів

Автоматичне перетворення ключових аргументів і позиційних аргументів застаріло і буде видалено в Ruby 3. [Feature #14183]

Докладніше див. статтю «Separation of positional and keyword arguments in Ruby 3.0».

Інші важливі нові функції

  • Нумеровані параметри як параметри блоків за замовчуванням. [Feature #4475]

  • Експериментально введено діапазон без початку. [Feature #14799]

    ary[..3]  # ідентично ary[0..3]
    rel.where(sales: ..100)
    
  • Додано Enumerable#tally. Він підраховує кількість кожного елемента.

    ["a", "b", "c", "b"].tally
    #=> {"a"=>1, "b"=>2, "c"=>1}
    
  • Виклик приватного методу з літералом self як одержувачем тепер дозволено. [Feature #11297], [Feature #16123]

    def foo
    end
    private :foo
    self.foo
    
  • Додано Enumerator::Lazy#eager. Він створює не-лінивий перелічувач з лінивого. [Feature #15901]

    a = %w(foo bar baz)
    e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.eager
    p e.class               #=> Enumerator
    p e.map {|x| x + "?" }  #=> ["FOO!?", "BAR!?", "BAZ!?"]
    

Покращення продуктивності

  • JIT [Експериментально]

    • JIT-код перекомпільовується на менш оптимізований код, коли припущення оптимізації стає недійсним.
    • Виконується inline методів, коли метод вважається чистим.
    • Значення за замовчуванням --jit-min-calls змінено з 5 на 10 000.
    • Значення за замовчуванням --jit-max-cache змінено з 1 000 на 100.
  • Стратегію кешування Fiber змінено, і створення fiber пришвидшено. GH-2224

  • Module#name, true.to_s, false.to_s і nil.to_s тепер завжди повертають заморожений String. [Експериментально] [Feature #16150]

  • Покращено продуктивність CGI.escapeHTML. GH-2226

  • Покращено продуктивність Monitor і MonitorMixin. [Feature #16255]

Інші важливі зміни порівняно з 2.6

  • Деякі стандартні бібліотеки оновлено.
    • 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
  • Наступні бібліотеки більше не bundled gems. Встановіть відповідні геми, щоб використовувати ці функції.
    • CMath (cmath gem)
    • Scanf (scanf gem)
    • Shell (shell gem)
    • Synchronizer (sync gem)
    • ThreadsWait (thwait gem)
    • E2MM (e2mmap gem)
  • profile.rb видалено зі стандартної бібліотеки.

  • Оновлено версію Unicode та Emoji з 11.0.0 до 12.0.0. [Feature #15321]

  • Оновлено версію Unicode до 12.1.0, додано підтримку U+32FF SQUARE ERA NAME REIWA. [Feature #15195]

  • Потрібна підтримка C99 від компіляторів. [Misc #15347]

Докладніше див. NEWS або історію комітів.

З цими змінами 4190 файлів змінено, 227498 вставок(+), 99979 видалень(-) від Ruby 2.6.0!

Веселого Різдва, гарних свят і насолоджуйтесь програмуванням з Ruby 2.7!

Завантаження

  • https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0.tar.bz2

    SIZE: 14703381
    SHA1: b54f4633174dbc55db77d9fd6d0ef90cc35503af
    SHA256: 7aa247a19622a803bdd29fdb28108de9798abe841254fe8ea82c31d125c6ab26
    SHA512: 8b8dd0ceba65bdde53b7c59e6a84bc6bf634c676bfeb2ff0b3604c362c663b465397f31ff6c936441b3daabb78fb7a619be5569480c95f113dd0453488761ce7
    
  • https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0.tar.gz

    SIZE: 16799684
    SHA1: 6f4e99b5556010cb27e236873cb8c09eb8317cd5
    SHA256: 8c99aa93b5e2f1bc8437d1bbbefd27b13e7694025331f77245d0c068ef1f8cbe
    SHA512: 973fc29b7c19e96c5299817d00fbdd6176319468abfca61c12b5e177b0fb0d31174a5a5525985122a7a356091a709f41b332454094940362322d1f42b77c9927
    
  • https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0.tar.xz

    SIZE: 11990900
    SHA1: 943c767cec037529b8e2d3cc14fc880cad5bad8d
    SHA256: 27d350a52a02b53034ca0794efe518667d558f152656c2baaf08f3d0c8b02343
    SHA512: dd5690c631bf3a2b76cdc06902bcd76a89713a045e136debab9b8a81ff8c433bbb254aa09e4014ca1cf85a69ff4bcb13de11da5e40c224e7268be43ef2194af7
    
  • https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0.zip

    SIZE: 20571744
    SHA1: fbebdd3a2a641f9a81f7d8db5abd926acea27e80
    SHA256: 8bf2050fa1fc76882f878fd526e4184dc54bd402e385efa80ef5fd3b810522e0
    SHA512: 5060f2dd3bfd271ef255b17589d6d014260d7ec2d97b48112b717ee01c62fe125c3fe04f813e02d607cea3f0a2a812b14eb3a28d06c2551354dfeff5f4c3dd6b
    

Що таке Ruby

Ruby вперше розробив Matz (Yukihiro Matsumoto) у 1993 році, і зараз розвивається як Open Source. Він працює на багатьох платформах і використовується по всьому світу, особливо для веброзробки.

Останні новини

Вийшов Ruby 4.0.0 preview3

Раді повідомити про вихід Ruby 4.0.0-preview3. Ruby 4.0 вводить Ruby::Box і “ZJIT” та додає багато покращень.

Опублікував naruse 18-12-2025

Вийшов Ruby 4.0.0 preview2

Раді повідомити про вихід Ruby 4.0.0-preview2. Ruby 4.0 оновлює версію Unicode до 17,0.0 тощо.

Опублікував naruse 17-11-2025

Більше новин...