Ruby 4.0: Нові технології ізоляції та компіляції

Ruby 4.0: Нові технології ізоляції та компіляції

Ruby 4.0, високорівнева універсальна мова програмування, випущена з новими технологіями ізоляції та компіляції. Окрім того, оновлення включає розширені поліпшення продуктивності, паралельності та стандартних бібліотек.

Основна новинка: Ruby Box

Головне нововведення — Ruby Box, експериментальний механізм, що безпечно ізолює визначення в межах працюючого процесу Ruby. Коли він активований через змінну середовища RUBY_BOX=1, Ruby Box дозволяє класам, модулям, глобальним змінним та навіть завантаженим бібліотекам бути обмеженими до конкретної “скриньки”.

Це дає можливість безпечно запускати тестові програми, коли залучені monkey patches, виконувати декілька версій веб-додатку одночасно для синіх-зелених деплойментів або оцінювати оновлення залежностей паралельно, зіставляючи поведінку під час виконання.

Введення ZJIT: Новий компілятор

Ще одне суттєве нововведення — ZJIT, новий експериментальний компілятор just-in-time, який прийшов на зміну YJIT. ZJIT побудований на базі методів JIT з великими одиницями компіляції та представляє інтерпретацію на основі SSA, щоб підвищити довгострокову продуктивність Ruby.

ZJIT вимагає Rust 1.85 або новішої версії для компіляції та може бути активований з параметром –zjit або під час виконання. У Ruby 4.0 ZJIT вже перевершує інтерпретатор, хоч поки що відстає від YJIT. Команда Ruby рекомендує не використовувати ZJIT у виробництві, а радить проводити експерименти з метою зробити його готовим для виробництва.

Розширені можливості Ractor

Після цього, Ruby 4.0 вводить новий клас Ractor::Port, який забезпечує більш чіткий і надійний механізм зв’язку між Ractors. Розпочато заміну старих API, таких як Ractor.yield і Ractor#take, які тепер видалені. Ractors отримують переваги від зменшеної конкуренції за глобальні блокування та поліпшеної роботи кешу CPU, що в цілому позитивно впливає на продуктивність.

Значні зміни на мовному рівні

На мовному рівні Ruby 4.0 включає кілька помітних змін. Логічні оператори на початку рядка тепер продовжують попередній рядок, що підвищує читабельність у багаторядкових умовах. Обробка *nil була узгоджена з іншими поведінками splat.

Крім того, звіти про помилки під час невідповідності кількості аргументів стали чіткішими завдяки кращим трасуванням і контекстним кодовим фрагментам. Основні класи та модулі пройшли через значні поліпшення.

Оптимізація продуктивності в Ruby 4.0

На стороні реалізації Ruby 4.0 забезпечує широкі поліпшення продуктивності. Створення об’єктів стало швидшим, особливо коли залучені ключові аргументи. Система збору сміття стала більш ефективною, доступ до змінних екземплярів оптимізований, а блокування зменшено в багатьох гарячих маршрутах.

Зміни в сумісності і підтримка Windows

Нарешті, Ruby 4.0 вводить зміни в сумісності, про які розробникам важливо знати. Декілька застарілих API були видалені, а деякі C API були зняті або відкориговані для поліпшення безпеки. Підтримка Windows тепер вимагає Visual Studio 2015 або новішої версії.

Для отримання додаткової інформації, дивіться оголошення.