Ruby 4.0.0 включает ряд значительных нововведений и улучшений, направленных на повышение производительности, безопасности и удобства работы с языком. Некоторые из ключевых изменений:
1. ZJIT — новый JIT-компилятор. ZJIT (Just-In-Time компилятор) дополняет существующий YJIT. В отличие от YJIT, который использует подход ленивого создания версий базовых блоков, ZJIT основан на более традиционной методологии компиляции на уровне методов, а не локальных участков байткода. Для работы с ZJIT требуется Rust версии 1.85.0 или новее. Чтобы активировать ZJIT, можно использовать флаг
--zjit: ruby --zjit my_script.rb. Хотя ZJIT быстрее интерпретируемого кода, для продакшена по-прежнему рекомендуется использовать YJIT. 2. Ruby::Box — экспериментальная функция изолированных пространств имён. Позволяет создавать отдельные «боксы», в которых код выполняется с собственными глобальными переменными, константами и определениями классов. Это полезно, например, для одновременной загрузки разных версий одной библиотеки. Чтобы активировать Ruby::Box, нужно установить переменную окружения
RUBY_BOX=1. 3. Переработанный API Ractor. Для коммуникации между Ractors теперь используется
Ractor::Port. Удалённы старые методы Ractor.yield и Ractor#take. Проделана большая работа по повышению стабильности, производительности и удобства использования Ractor. Эти улучшения приближают реализацию Ractor к выходу из экспериментального статуса. Добавлены методы Ractor#join и Ractor#value, аналогичные тем, что есть у Thread. 4. Логические операторы в начале новой строки. В Ruby 4.0 теперь разрешено размещать логические операторы (
&&, ||, and, or) в начале новой строки. Это улучшает читаемость сложных условных выражений и соответствует распространённым предпочтениям форматирования. 5. `instance_variables_to_inspect`. Новая функция позволяет контролировать, какие переменные экземпляра отображаются в выводе метода
inspect при отладке. Это помогает сделать вывод более лаконичным и сфокусированным на важном состоянии объекта. 6. `Set` стал базовым классом. Ранее
Set был классом из стандартной библиотеки, теперь он включён в ядро языка, и его не нужно подключать с помощью require 'set'. 7. Новые методы в `Math`. Добавлены методы
Math.log1p и Math.expm1 для более точных вычислений с малыми числами. Math.log1p(x) вычисляет log(1 + x), а Math.expm1(x)` — `exp(x) - 1. Эти методы полезны в научных расчётах и финансовых вычислениях. 8. Другие изменения:
-
nil больше не вызывает nil.to_a, что согласуется с поведением **. -
IO.select теперь принимает Float::INFINITY в качестве аргумента таймаута. -
File::Stat#birthtime теперь работает в Linux через системный вызов statx, если это поддерживается ядром и файловой системой. -
Socket.tcp получил ключевой аргумент open_timeout. - RJIT удалён, остались только YJIT и ZJIT.
- Юникод обновлён до версии 17.0.
- В Windows прекращена поддержка версий MSVC старше 14.0 (
_MSC_VER 1900). Для работы с Ruby 4 потребуется Visual Studio 2015 или более поздняя версия. В целом, Ruby 4.0 закладывает основу для будущих улучшений, экспериментальных функций и развития параллельного программирования. При этом в большинстве случаев обновление должно пройти гладко, так как нет крупных ломающих изменений.
https://www.ruby-lang.org/en/news/2025/12/25/ruby-4-0-0-released/