Вийшов Ruby 2.6.0-rc2
Опублікував naruse 15-12-2018
Переклав: Andrii Furmanets
Ми раді оголосити випуск Ruby 2.6.0-rc2.
Ruby 2.6.0-rc2 - це другий release candidate Ruby 2.6.0. RC2 випущено для тестування включеного Bundler 1.17 замість 2.0. Він вводить деякі нові функції та покращення продуктивності, наприклад:
JIT
Ruby 2.6 вводить початкову реалізацію JIT (Just-in-time) компілятора.
JIT компілятор має на меті покращити продуктивність виконання будь-якої програми Ruby. На відміну від звичайних JIT компіляторів для інших мов, JIT компілятор Ruby робить JIT компіляцію унікальним способом, який записує C код на диск та запускає загальний процес компілятора C для генерації нативного коду. Див. також: MJIT організація (від Vladimir Makarov).
Як використовувати: Просто вкажіть --jit в командному рядку або змінній середовища $RUBYOPT.
Вказівка --jit-verbose=1 дозволяє вивести базову інформацію про поточну JIT компіляцію. Див. ruby --help для інших опцій.
Основна мета цього JIT випуску - надати можливість перевірити, чи працює він на вашій платформі, та виявити ризики безпеки перед випуском 2.6. JIT компілятор підтримується коли Ruby зібрано GCC, Clang, або Microsoft VC++, який потребує бути доступним під час виконання. Інакше ви не можете використовувати його зараз.
Станом на Ruby 2.6.0-rc2, ми досягли продуктивності в 1.7 рази швидше, ніж Ruby 2.5 на CPU-інтенсивному нетривіальному бенчмарку навантаження, званому Optcarrot https://gist.github.com/k0kubun/d7f54d96f8e501bbbc78b927640f4208. Ми збираємося покращити продуктивність на пам’ятно-інтенсивному навантаженні, такому як додатки Rails, також.
Слідкуйте за новою ерою продуктивності Ruby.
RubyVM::AbstractSyntaxTree [Експериментально]
Ruby 2.6 вводить модуль RubyVM::AbstractSyntaxTree.
Цей модуль має метод parse, який парсить код Ruby з заданого рядка та повертає вузли AST (Abstract Syntax Tree), та метод parse_file, який парсить код Ruby з заданого файлу та повертає вузли AST.
Також введено клас RubyVM::AbstractSyntaxTree::Node. Ви можете отримати інформацію про місце розташування та дочірні вузли з об’єктів Node. Ця функція є експериментальною. Сумісність структури вузлів AST не гарантується.
Нові функції
-
Додано новий аліас
thenдоKernel#yield_self. [Функція #14594] -
elseбезrescueтепер спричиняє синтаксичну помилку. [ЕКСПЕРИМЕНТАЛЬНО][Функція #14606] -
Імена констант можуть починатися з не-ASCII великої літери. [Функція #13770]
-
Введено нескінченні діапазони. [Функція #12912]
Введено нескінченний діапазон,
(1..). Він працює так, ніби не має кінця. Це показує типові випадки використання:ary[1..] # ідентично до ary[1..-1] без магічного -1 (1..).each {|index| block } # нескінченний цикл з індексу 1 ary.zip(1..) {|elem, index| block } # ary.each.with_index(1) { } -
Додано
Binding#source_location. [Функція #14230]Цей метод повертає місце розташування джерела binding, масив з 2 елементів
__FILE__та__LINE__. Традиційно, таку саму інформацію можна було отримати черезeval("[__FILE__, __LINE__]", binding), але ми плануємо змінити цю поведінку так, щобKernel#evalігнорував місце розташування джерела binding [Помилка #4352]. Тому користувачі повинні використовувати цей нововведений метод замістьKernel#eval. -
Додано опцію
:exceptionдоKernel#system, щоб підняти виняток при невдачі замість поверненняfalse. [Функція #14386] -
Додано режим oneshot до
Coverage. [Функція#15022]- Цей режим перевіряє “чи була виконана кожна лінія принаймні один раз чи ні”, замість “скільки разів була виконана кожна лінія”. Хук для кожної лінії спрацьовує максимум один раз, і після того як він спрацював, прапорець хука видаляється, тобто він працює з нульовими накладними витратами.
- Додано ключовий аргумент
:oneshot_linesдо Coverage.start. - Додано ключові аргументи
:stopта:clearдо Coverage.result. Якщоclearє true, він очищає лічильники до нуля. Якщоstopє true, він вимикає вимірювання покриття. - Coverage.line_stub, яка є простою допоміжною функцією, яка створює “заглушку” покриття ліній з заданого вихідного коду.
-
Додано
FileUtils#cp_lr. [Функція #4189]
Покращення продуктивності
-
Прискорення
Proc#call, оскільки нам більше не потрібно піклуватися про$SAFE. [Функція #14318]З бенчмарком
lc_fizzbuzz, який використовуєProc#callбагато разів, ми можемо виміряти покращення x1.4. [Помилка #10212]. -
Прискорення
block.call, деblockє переданим параметром блоку. [Функція #14330]Ruby 2.5 покращує продуктивність передачі блоку. [Функція #14045]
Додатково, Ruby 2.6 покращує продуктивність виклику переданого блоку. З мікро-бенчмарком ми можемо спостерігати покращення x2.6.
-
Введено Transient Heap (theap). [Помилка #14858] [Функція #14989]
theap є керованою купою для короткоживучих об’єктів пам’яті, на які вказують специфічні класи (Array, Hash, Object, та Struct). Наприклад, створення малого та короткоживучого об’єкта Hash є x2 швидшим. З бенчмарком rdoc ми спостерігали покращення продуктивності на 6-7%.
Інші помітні зміни з 2.5
-
$SAFEтепер є глобальним станом процесу і може бути встановлено до0знову. [Функція #14250] -
Передача
safe_levelдоERB.newзастаріла. Аргументиtrim_modeтаeoutvarзмінено на ключові аргументи. [Функція #14256] -
Підтримувана версія Unicode оновлена до 11. Планується оновити до 12 та 12.1 у майбутніх випусках TEENY Ruby 2.6.
-
Об’єднано RubyGems 3.0.0.beta3. Опції
--riта--rdocбули видалені. Будь ласка, використовуйте опції--documentта--no-documentзамість них. -
Об’єднано Bundler як default gem.
Див. NEWS або логи комітів для деталей.
З цими змінами, 6411 файлів змінено, 228864 додано(+), 97600 видалено(-) з Ruby 2.5.0!
Насолоджуйтеся програмуванням з Ruby 2.6.0-rc2!
Завантаження
-
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc2.tar.gz
РОЗМІР: 16723556 байтів SHA1: a4d7f8c8c3584a60fe1a57d03d80162361fe3c78 SHA256: 9c0245e96379246040f1fd0978f8e447e7f47cdccbdaffdb83302a995276b62b SHA512: 789f608f93db6e12835911f3105d9abe2fabb67cd22dc3bafdff38716ac56974925738e7f7788ebef5bdf67b6fd91f84a4ee78a3e5d072cfc8ee0972de737b08 -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc2.zip
РОЗМІР: 20643747 байтів SHA1: c1a2898949d929dd952880f1c1c2bac2ef2609b4 SHA256: e8a446cf1f2ffc14483604de0a5e12c2578dd2f672ae87798ca2bbb9b7b73899 SHA512: 2d06feae13f485f5da59574672b14d03881ed532d652648f94e2435f5d81df623b5ef532b8ba8e0b9bc4ee6baf7c0328a5610eab753a9020a0fea2673254c76c -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc2.tar.bz2
РОЗМІР: 14581998 байтів SHA1: 94bbee97de4955e67effb7f512c58300617a3a09 SHA256: b3d03e471e3136f43bb948013d4f4974abb63d478e8ff7ec2741b22750a3ec50 SHA512: 9bfbe83fd3699b71bae2350801d8c967eb128e79b62a9d36fc0f011b83c53cab28a280939f4cc9f0a28f9bf02dce8eea30866ca4d06480dc44289400abf580ba -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc2.tar.xz
РОЗМІР: 11908088 байтів SHA1: 13a7f06d832dc28989e3e4321490a6ba528ed023 SHA256: d620b3d87b3190867304067f3ce77f5305f7ec1b2e73b09c17710c97c028986d SHA512: a3dc43c0bc70dfdb9ff0d18b5b9797bbf332524f5d3bbb7940cf4e32286ca715808acfd11ebf3cdbe358a2466b7c6b5be3a7a784af7eb95c071fe1f8b4ab1261
Останні новини
Вийшов Ruby 3.2.10
Вийшов Ruby 3.2.10.
Опублікував hsbt 14-01-2026
Вийшов Ruby 4.0.1
Вийшов Ruby 4.0.1.
Опублікував k0kubun 13-01-2026
Вийшов Ruby 4.0.0
Ми раді повідомити про випуск Ruby 4.0.0. Ruby 4.0 представляє “Ruby Box” та “ZJIT”, а також додає багато покращень.
Опублікував naruse 25-12-2025
Новий вигляд документації Ruby
Слідом за ре-дизайном ruby-lang.org, ми маємо більше новин, щоб відсвяткувати 30-річчя Ruby: docs.ruby-lang.org має повністю новий вигляд завдяки Aliki — новій темі за замовчуванням для...
Опублікував Stan Lo 23-12-2025