Вийшов Ruby 2.6.0-preview3
Опублікував naruse 06-11-2018
Переклав: Andrii Furmanets
Ми раді оголосити випуск Ruby 2.6.0-preview3.
Ruby 2.6.0-preview3 - це третій preview до Ruby 2.6.0. Цей preview3 випущено для тестування нових функцій перед Release Candidate.
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 preview3, ми досягли продуктивності в 1.7 рази швидше, ніж Ruby 2.5 на CPU-інтенсивному нетривіальному бенчмарку навантаження, званому Optcarrot https://gist.github.com/k0kubun/d7f54d96f8e501bbbc78b927640f4208. Ми збираємося покращити продуктивність на пам’ятно-інтенсивному навантаженні, такому як додатки Rails, також.
Слідкуйте за новою ерою продуктивності Ruby.
RubyVM::AST [Експериментально]
Ruby 2.6 вводить модуль RubyVM::AST.
Цей модуль має метод parse, який парсить заданий код ruby рядка та повертає вузли AST (Abstract Syntax Tree), та метод parse_file, який парсить заданий файл коду ruby та повертає вузли AST.
Також введено клас RubyVM::AST::Node. Ви можете отримати інформацію про місце розташування та дочірні вузли з об’єктів Node. Ця функція є експериментальною. Сумісність структури вузлів AST не гарантується.
Нові функції
-
Додано новий аліас
thenдоKernel#yield_self. [Функція #14594] -
elseбезrescueтепер спричиняє синтаксичну помилку. [ЕКСПЕРИМЕНТАЛЬНО] -
імена констант можуть починатися з не-ASCII великої літери. [Функція #13770]
-
нескінченний діапазон [Функція #12912]
Введено нескінченний діапазон,
(1..). Він працює так, ніби не має кінця. Це показує типові випадки використання:ary[1..] # ідентично до ary[1..-1] без магічного -1 (1..).each {|index| ... } # нескінченний цикл з індексу 1 ary.zip(1..) {|elem, index| ... } # 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]
Покращення продуктивності
-
Прискорення
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] -
Об’єднано RubyGems 3.0.0.beta2. Опції
--riта--rdocбули видалені. Будь ласка, використовуйте опції--documentта--no-documentзамість них. -
Об’єднано Bundler як Default gems.
Див. NEWS або логи комітів для деталей.
З цими змінами, 6474 файли змінено, 171888 додано(+), 46617 видалено(-) з Ruby 2.5.0!
Насолоджуйтеся програмуванням з Ruby 2.6.0-preview3!
Завантаження
-
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview3.tar.gz
РОЗМІР: 17071670 байтів SHA1: 67836fda11fa91e0b988a6cc07989fbceda025b4 SHA256: 60243e3bd9661e37675009ab66ba63beacf5dec748885b9b93916909f965f27a SHA512: 877278cd6e9b947f5bb6ed78136efb232dcc9c5c218b7236576171e7c3cd7f6b7d10d07d8402014a14aba1fcd1913a4370f0725c561ead41d8a3fe92029f7f76 -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview3.zip
РОЗМІР: 21537655 байтів SHA1: 45f3c90dfffe03b746f21f24152666e361cbb41a SHA256: 9152af9e700349dcfa2eec196dd91587d42d70a6837fa2c415ebba1167587be1 SHA512: 335de36cf56706326f4acc4bbd35be01e0ac5fff30d0a69b2e1630ba4c78f0e711822d1623d0099a517c824b154917d2f60be192dfb143a422cf1d17b38e1183 -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview3.tar.bz2
РОЗМІР: 14973451 байтів SHA1: 5f2df5d8c5a3888ccb915d36a3532ba32cda8791 SHA256: 1f09a2ac1ab26721923cbf4b9302a66d36bb302dc45e72112b41d6fccc5b5931 SHA512: d1693625723796e8902f3e4c4fae444f2912af9173489f7cf18c99db2a217afc971b082fce7089e39f8edd54d762d2b4e72843c8306ed29b05ccb15ac03dbb5b -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview3.tar.xz
РОЗМІР: 12291692 байтів SHA1: 7f8216247745215e9645568e7a02140f9a029b31 SHA256: 9856d9e0e32df9e5cdf01928eec363d037f1a76dab2abbf828170647beaf64fe SHA512: b4d3b17ecf96272c43cd7518c0b54dee63fc1150ad143e1d9c9d708506fe78676c80eb96cc47b8d46d1128bd483a53f16c944963a03d1f99f00131b74714df7b
Останні новини
Вийшов Ruby 4.0.3
Вийшов Ruby 4.0.3.
Опублікував k0kubun 21-04-2026
Вийшов Ruby 3.2.11
Вийшов Ruby 3.2.11. Цей реліз містить оновлення gem zlib, яке усуває CVE-2026-27820.
Опублікував hsbt 27-03-2026
Вийшов Ruby 3.3.11
Вийшов Ruby 3.3.11. Цей реліз містить оновлення gem zlib, яке усуває CVE-2026-27820, а також кілька виправлень помилок.
Опублікував hsbt 26-03-2026
Вийшов Ruby 4.0.2
Вийшов Ruby 4.0.2.
Опублікував k0kubun 16-03-2026