Вийшов 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. Він працює на багатьох платформах і використовується по всьому світу, особливо для веброзробки.
Останні новини
Оновлення айдентики нашого сайту
Раді оголосити про комплексне оновлення нашого сайту. Дизайн для цього оновлення створила Taeko Akatsuka.
Опублікував Hiroshi SHIBATA 22-12-2025
Вийшов Ruby 4.0.0 preview3
Раді повідомити про вихід Ruby 4.0.0-preview3. Ruby 4.0 вводить Ruby::Box і “ZJIT” та додає багато покращень.
Опублікував naruse 18-12-2025
Вийшов Ruby 3.4.8
Вийшов Ruby 3.4.8.
Опублікував k0kubun 17-12-2025
Вийшов Ruby 4.0.0 preview2
Раді повідомити про вихід Ruby 4.0.0-preview2. Ruby 4.0 оновлює версію Unicode до 17,0.0 тощо.
Опублікував naruse 17-11-2025