Ми раді оголосити випуск 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)](https://github.com/vnmakarov/ruby/tree/rtl_mjit_branch#mjit-organization).

Як використовувати: Просто вкажіть `--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]](https://bugs.ruby-lang.org/issues/14594)

* `else` без `rescue` тепер спричиняє синтаксичну помилку.  [ЕКСПЕРИМЕНТАЛЬНО][[Функція #14606]](https://bugs.ruby-lang.org/issues/14606)

* Імена констант можуть починатися з не-ASCII великої літери. [[Функція #13770]](https://bugs.ruby-lang.org/issues/13770)

* Введено нескінченні діапазони. [[Функція #12912]](https://bugs.ruby-lang.org/issues/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]](https://bugs.ruby-lang.org/issues/14230)

  Цей метод повертає місце розташування джерела binding, масив з 2 елементів `__FILE__` та `__LINE__`.  Традиційно, таку саму інформацію можна було отримати через `eval("[__FILE__, __LINE__]", binding)`, але ми плануємо змінити цю поведінку так, щоб `Kernel#eval` ігнорував місце розташування джерела binding [[Помилка #4352]](https://bugs.ruby-lang.org/issues/4352).  Тому користувачі повинні використовувати цей нововведений метод замість `Kernel#eval`.

* Додано опцію `:exception` до `Kernel#system`, щоб підняти виняток при невдачі замість повернення `false`.  [[Функція #14386]](https://bugs.ruby-lang.org/issues/14386)

* Додано режим oneshot до `Coverage`. [[Функція#15022]](https://bugs.ruby-lang.org/issues/15022)

  * Цей режим перевіряє "чи була виконана кожна лінія принаймні один раз чи ні", замість "скільки разів була виконана кожна лінія".  Хук для кожної лінії спрацьовує максимум один раз, і після того як він спрацював, прапорець хука видаляється, тобто він працює з нульовими накладними витратами.
  * Додано ключовий аргумент `:oneshot_lines` до Coverage.start.
  * Додано ключові аргументи `:stop` та `:clear` до Coverage.result. Якщо `clear` є true, він очищає лічильники до нуля.  Якщо `stop` є true, він вимикає вимірювання покриття.
  * Coverage.line_stub, яка є простою допоміжною функцією, яка створює "заглушку" покриття ліній з заданого вихідного коду.

* Додано `FileUtils#cp_lr`.  [[Функція #4189]](https://bugs.ruby-lang.org/issues/4189)

## Покращення продуктивності

* Прискорення `Proc#call`, оскільки нам більше не потрібно піклуватися про `$SAFE`.
  [[Функція #14318]](https://bugs.ruby-lang.org/issues/14318)

  З бенчмарком `lc_fizzbuzz`, який використовує `Proc#call` багато разів, ми можемо виміряти
  покращення x1.4. [[Помилка #10212]](https://bugs.ruby-lang.org/issues/10212).

* Прискорення `block.call`, де `block` є переданим параметром блоку. [[Функція #14330]](https://bugs.ruby-lang.org/issues/14330)

  Ruby 2.5 покращує продуктивність передачі блоку. [[Функція #14045]](https://bugs.ruby-lang.org/issues/14045)

  Додатково, Ruby 2.6 покращує продуктивність виклику переданого блоку.
  З мікро-бенчмарком ми можемо спостерігати покращення x2.6.

* Введено Transient Heap (theap). [[Помилка #14858]](https://bugs.ruby-lang.org/issues/14858) [[Функція #14989]](https://bugs.ruby-lang.org/issues/14989)

  theap є керованою купою для короткоживучих об'єктів пам'яті, на які вказують
  специфічні класи (Array, Hash, Object, та Struct). Наприклад, створення малого
  та короткоживучого об'єкта Hash є x2 швидшим. З бенчмарком rdoc ми спостерігали
  покращення продуктивності на 6-7%.

## Інші помітні зміни з 2.5

* `$SAFE` тепер є глобальним станом процесу і може бути встановлено до `0` знову.  [[Функція #14250]](https://bugs.ruby-lang.org/issues/14250)

* Передача `safe_level` до `ERB.new` застаріла. Аргументи `trim_mode` та `eoutvar` змінено на ключові аргументи. [[Функція #14256]](https://bugs.ruby-lang.org/issues/14256)

* Підтримувана версія Unicode оновлена до 11. Планується оновити до 12 та 12.1 у майбутніх випусках TEENY Ruby 2.6.

* Об'єднано RubyGems 3.0.0.beta3. Опції `--ri` та `--rdoc` були видалені. Будь ласка, використовуйте опції `--document` та `--no-document` замість них.

* Об'єднано [Bundler](https://github.com/bundler/bundler) як default gem.

Див. [NEWS](https://github.com/ruby/ruby/blob/v2_6_0_rc2/NEWS)
або [логи комітів](https://github.com/ruby/ruby/compare/v2_5_0...v2_6_0_rc2)
для деталей.

З цими змінами,
[6411 файлів змінено, 228864 додано(+), 97600 видалено(-)](https://github.com/ruby/ruby/compare/v2_5_0...v2_6_0_rc2)
з 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
