Вийшов Ruby 2.6.0-preview2
Опублікував naruse 31-05-2018
Переклав: Andrii Furmanets
Ми раді оголосити випуск Ruby 2.6.0-preview2.
Ruby 2.6.0-preview2 - це другий preview до Ruby 2.6.0. Цей preview2 випущено раніше, ніж зазвичай, оскільки він включає важливу нову функцію, JIT.
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 та компілятор доступний під час виконання. Інакше ви не можете використовувати його зараз.
Станом на 2.6.0-preview2, ми лише готуємо інфраструктуру для JIT та реалізовано дуже мало оптимізацій. Ви можете виміряти деякі потенційні покращення в мікро-бенчмарках з цим випуском, але він НЕ готовий для бенчмаркінгу фінальної продуктивності JIT компілятора Ruby, особливо для більших програм, таких як додатки Rails.
Ми збираємося реалізувати inlining методів у JIT компіляторі, що очікується збільшить продуктивність Ruby на порядок. Також ми плануємо збільшити підтримувані платформи, і наступний план - підтримати Visual Studio.
Слідкуйте за новою ерою продуктивності 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.
Інші помітні зміни з 2.5
-
$SAFEє глобальним станом процесу, і ми можемо встановити0знову. [Функція #14250] -
Передача
safe_levelдоERB.newзастаріла. Аргументиtrim_modeтаeoutvarзмінено на ключові аргументи. [Функція #14256] -
Об’єднано RubyGems 3.0.0.beta1
Див. NEWS або логи комітів для деталей.
З цими змінами, 4699 файлів змінено, 45744 додано(+), 30885 видалено(-) з Ruby 2.5.0!
Насолоджуйтеся програмуванням з Ruby 2.6.0-preview2!
Завантаження
-
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview2.tar.gz
РОЗМІР: 16170732 байтів SHA1: 6867b00e81af0b70fcb6f1aa7fc22d89d48a7d12 SHA256: ee15ab35f17c942b1f41bd792f2494f639affff6e03babf44708b72fdbb6de34 SHA512: 95c5a277785dfeb3006503e1b9ccccefdf6ce29669d4576f0191ee6986ba0e3567fbbed18a8d2b1f147d637434e4a3a4fdf47d84995e10ad4a354950e9092690 -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview2.zip
РОЗМІР: 19850776 байтів SHA1: eba80a09b552ce3142fd571ff5867a13736d170e SHA256: 97fc187b90570fce110d22803a319ab04e68700692b2b6b4e9961886f1a931e5 SHA512: d5501819635bda64ac3dc717815652b692302b44a7cdf4c08edfa5cb9ec7f79a70fffc534879b316a4a9584825ed3c0948667beae2d7c313de58583931b981f4 -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview2.tar.bz2
РОЗМІР: 14209461 байтів SHA1: a9b1b4f359601b94b3f5b77115fcbf3790ff69cd SHA256: d8ede03d5ad3abd9d2c81cf0ad17a41d22b747c003cc16fd59befb2aaf48f0b2 SHA512: 3872227e9b1c97c206d19bf1e6ce15a38ee15a26c431b4436605dea67affcf16372358984df76b35e7abaa902c15c16f533ac7af47e3031dea9451bbe459b693 -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview2.tar.xz
РОЗМІР: 11525372 байтів SHA1: e795abe1a4f828b3d851f7148b4bf6c9d9a7e7fd SHA256: 00ddfb5e33dee24469dd0b203597f7ecee66522ebb496f620f5815372ea2d3ec SHA512: bef3e90e97d6e58889cd500c591c579b728ca5833022b690182c0bf4d661e437b3a2ca33470dac35fcf693897819b9d7f500c0f71b707e2fcdcb0644028f2c03
Останні новини
Вийшов 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