Перетяжка, Премия ТПрогер, 13.11
Перетяжка, Премия ТПрогер, 13.11
Перетяжка, Премия ТПрогер, 13.11

Вышел Ruby 4.0: новый JIT и экспериментальная изоляция кода Ruby Box. Что еще нового

Новости

Релиз получился и вправду важным

42 открытий1К показов
Вышел Ruby 4.0: новый JIT и экспериментальная изоляция кода Ruby Box. Что еще нового

Состоялся релиз Ruby 4.0. Это достаточно крупное обновление, которое делает язык быстрее, безопаснее и заметно взрослее с точки зрения архитектуры.

В центре релиза сразу две большие новинки: экспериментальная система изоляции Ruby Box и новый JIT-компилятор ZJIT.

Параллельно разработчики серьезно прокачали параллелизм, производительность и стандартную библиотеку.

Ruby Box: изоляция без контейнеров и процессов

Ruby Box — это новый экспериментальный механизм изоляции кода. Он позволяет запускать определения классов, модулей, глобальных переменных и даже подключение библиотек в отдельном «боксе», изолированном от остальной программы.

Включается он через переменную окружения RUBY_BOX=1, а основной интерфейс — класс Ruby::Box.

Идея проста: изолировать побочные эффекты. Monkey patch больше не должен ломать соседние тесты или весь процесс.

Среди предполагаемых сценариев — запуск тестов с агрессивными патчами, параллельный запуск нескольких версий веб-приложения для blue-green деплоя и эксперименты с зависимостями в одном Ruby-процессе.

В перспективе, Ruby Box может стать фундаментом для более высокого уровня модульности и «пакетной» системы, хотя пока это именно низкоуровневый API.

ZJIT: новый курс для производительности

Вторая ключевая новинка — ZJIT. Это новый just-in-time компилятор следующего поколения. Он должен прийти на смену YJIT и строится как более классический метод-ориентированный JIT с SSA-представлением.

ZJIT написан с расчетом на расширяемость и вклад сообщества, но требует Rust 1.85 и новее для сборки.

Сейчас ZJIT быстрее интерпретатора, но все еще уступает YJIT. Да и сами разработчики языка открыто предупреждают — да, экспериментировать можно. Но в продакшен лучше пока с новинкой не лезть. Цель — сделать ZJIT быстрее YJIT и полностью готовым к бою уже в Ruby 4.1.

Ractor становится ближе к «неэкспериментальному»

Параллелизм в Ruby тоже заметно продвинулся. Ractor получил новый механизм синхронизации Ractor::Port, упрощающий обмен сообщениями, а внутренние структуры были переработаны для снижения блокировок и конкуренции за CPU-кэш.

Следите за новыми постами
Следите за новыми постами по любимым темам
42 открытий1К показов