Вийшов 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 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

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