Рекомендуем
VPS на Windows и Linux — от 49 ₽ за 7 дней Быстрый запуск сервера на NVMe для сайтов, ботов и других задач.
Выбрать VPS

Ruby 4.0.7 — исправления GC, YJIT/Ractor и регрессий Ruby 4.0.6

Ruby 4.0.7 выпущен 15 сентября 2026 года как плановое исправительное обновление стабильной ветки Ruby 4.0. Релиз устраняет несколько заметных проблем Ruby 4.0.6: повреждение памяти при GC.auto_compact, резкое замедление aws-sdk-ec2, сбои Rails CI, ошибки сетевых соединений на macOS 27 и деградацию производительности YJIT в многопоточных сценариях с Ractor.

Ruby 4.0.7
Ruby 4.0.7

Ruby 4.0.7 сосредоточен на стабильности

Команда Ruby выпустила Ruby 4.0.7 15 сентября 2026 года. Разработчики характеризуют версию как регулярное обновление с исправлениями ошибок: новых возможностей языка или изменений синтаксиса в анонсе не заявлено.

Патч-релиз продолжает двухмесячный цикл сопровождения актуальной стабильной ветки Ruby 4.0. Предыдущая версия Ruby 4.0.6 вышла 14 июля, а следующий плановый выпуск Ruby 4.0.8 ожидается в ноябре. При появлении проблемы, существенно затрагивающей пользователей, команда допускает внеплановый релиз раньше установленного срока.

Несмотря на статус обычного bugfix-релиза, список изменений Ruby 4.0.7 затрагивает интерпретатор, сборщик мусора, YJIT/ZJIT, Ractor, сетевой стек и поведение Ruby на Windows и macOS.

Исправлено повреждение памяти при GC.auto_compact

Одно из наиболее серьёзных исправлений касается автоматической компактизации памяти. В Ruby 4.0.6 при GC.auto_compact = true определённые операции со строками могли приводить к повреждению содержимого объекта или аварийному завершению процесса.

Проблема воспроизводилась при сочетании String#tr с dup или gsub. В исходном отчёте на Ruby 4.0.6 для macOS ARM64 из 100 запусков теста 27 завершились повреждением данных, а 38 — segmentation fault. Аналогичное поведение наблюдалось и в других конфигурациях, включая Debian x86-64 и запуск без YJIT.

Исправление было перенесено в ветку Ruby 4.0 и вошло в 4.0.7. Для серверных приложений, где включена автоматическая компактизация GC, это делает обновление заметно важнее обычного косметического патча.

YJIT и Ractor больше не должны терять производительность на Proc

Ruby 4.0.7 исправляет регрессию взаимодействия YJIT с Ractor, которая могла практически уничтожать выигрыш от параллельного выполнения в коде, активно создающем Proc и lambda.

Причина заключалась в том, что при материализации окружения Proc YJIT повторно захватывал глобальную блокировку виртуальной машины и запускал барьер остановки всех Ractor. После первого такого события повторная работа уже не была нужна, однако Ruby продолжал оплачивать стоимость синхронизации при каждой последующей операции.

В тесте из официального bug tracker восемь Ractor с YJIT выполняли нагрузку с созданием lambda примерно в 150 раз медленнее одного Ractor с YJIT. После исправления результат того же микротеста для восьми Ractor вырос с 0,04 до 11,07 млн итераций в секунду.

Практический эффект особенно заметен для приложений, где одновременно используются YJIT, Ractor и большое количество блоков или замыканий. В отчёте разработчиков отдельно приводился пример Rails 8.1, где подобный сценарий мог ухудшать масштабирование с ростом числа Ractor.

Устранена крупная регрессия загрузки aws-sdk-ec2

В Ruby 4.0.6 появилась серьёзная регрессия компиляции большого объёма сгенерированного Ruby-кода. Наиболее заметно она проявилась при подключении aws-sdk-ec2: операция require "aws-sdk-ec2" на тестовой системе выросла с менее чем одной секунды в Ruby 4.0.5 примерно до 30 секунд в Ruby 4.0.6.

Проблема оказалась связана с оптимизацией DCE — удалением недостижимого кода. Один из проходов компилятора повторно сканировал последовательность инструкций до конца при большом количестве вызовов Class.new. В aws-sdk-ec2 присутствуют тысячи сгенерированных конструкций такого типа, поэтому стоимость операции резко возрастала.

В Ruby 4.0.7 алгоритм изменён так, чтобы избежать многократного полного прохода. Для приложений и инструментов, использующих AWS SDK, это одно из наиболее практически значимых исправлений релиза.

Исправлены падения Ruby 4.0.6 в Rails CI

В changelog Ruby 4.0.7 также включено исправление редкого segmentation fault, обнаруженного в CI проекта Rails при тестировании Active Record на Ruby 4.0.6.

Сбой проявлялся нерегулярно и затрагивал разные тесты с SQLite, MySQL и MariaDB. Расследование показало, что inline call cache мог сохранять ссылку на уже освобождённую запись метода. При последующем диспетчеризированном вызове виртуальная машина обращалась к переиспользованной области памяти и завершала процесс с SEGV.

Проблема особенно хорошо воспроизводилась после тестов с Ractor и многократного переопределения Time.now через механизмы Active Support. Исправление закрывает ещё один класс трудно диагностируемых падений, которые внешне могли выглядеть как случайная нестабильность Rails-приложения или CI-инфраструктуры.

Сетевой стек macOS 27 и другие исправления

Ruby 4.0.7 устраняет ошибку Socket.tcp с параметром connect_timeout на macOS 27. При попытке подключиться к закрытому порту система могла вернуть состояние, которое Ruby ошибочно интерпретировал как успешное соединение. В результате приложение получало объект сокета, хотя фактического соединения не существовало, а первая запись завершалась Errno::EPIPE.

Исправление заставляет Ruby после ожидания неблокирующего соединения проверять SO_ERROR, где Darwin сохраняет реальную ошибку ECONNREFUSED.

В релиз также вошли другие исправления:

  • устранён heap overflow в Kernel#system на Windows;
  • исправлен сбой при объединении массивов, использующих общий внутренний буфер;
  • устранён краш процесса при EncodingError во время интерполяции символа;
  • исправлены падения аксессоров Struct при работе YJIT/ZJIT с определённой раскладкой объектов в GC;
  • исправлена некорректная работа ObjectSpace._id2ref со старыми записями идентификаторов объектов;
  • исправлены ошибки Coverage, TracePoint и кэширования методов;
  • встроенная библиотека ERB обновлена до версии 6.0.7.

Ruby 4.0.7 при этом не объявлен отдельным security-релизом: официальный анонс позиционирует его как регулярное исправительное обновление.

Что меняется для пользователей Ruby 4.0

ОбластьRuby 4.0.6Ruby 4.0.7
GC.auto_compactвозможны повреждение строк и SEGVисправление включено
aws-sdk-ec2возможна загрузка порядка 30 секунд вместо менее 1 секундырегрессия компиляции устранена
YJIT + Ractor + Procвозможен резкий провал масштабированиялишние глобальные барьеры исключены
Rails CIзафиксированы редкие SEGV в диспетчеризации методовсоответствующее исправление вошло в релиз
Socket.tcp на macOS 27возможен ложный «успешный» connectпроверяется реальная ошибка через SO_ERROR
Windows Kernel#systemприсутствовал heap overflowисправлен

Для разработчиков, уже перешедших на ветку Ruby 4.0, версия 4.0.7 выглядит предпочтительной точкой обновления относительно 4.0.6. Особенно это касается Rails-проектов, приложений с AWS SDK, сервисов с включённым GC.auto_compact, а также экспериментов с Ractor и YJIT.

Загрузка и проверка дистрибутива

Официальные архивы Ruby 4.0.7 доступны в форматах tar.gz, tar.xz и zip. Для проверки загрузок опубликованы контрольные суммы SHA-256:

АрхивSHA-256
ruby-4.0.7.tar.gz911ace20f90d068ca0e4dda6d0e4f0f81e52e52f2dd4f4004c721e253412e82d
ruby-4.0.7.tar.xz47ef59413f7a4587ba6a6b78b14036eb5e36eec2ec0b90964801e88d56a3d375
ruby-4.0.7.zipc6f889c6dccd2625ae8d595bdee8e92afb3ddae3a1669bad67bb9f24d6af30ab

Перед обновлением production-среды стандартно стоит прогнать тесты приложения и проверить нативные расширения, однако сам выпуск ориентирован именно на устранение дефектов текущей стабильной ветки.

Ruby 4.0.7 — обновление прежде всего для стабильности

Ruby 4.0.7 не вводит значительных новых возможностей для пользователей, однако решает несколько проблем, которые могут существенно повлиять на стабильность и производительность производственных приложений. Ключевые улучшения касаются сборщика мусора (GC), Just-In-Time компилятора (YJIT/Ractor), загрузки крупных Ruby-файлов, интеграции с Rails CI и сетевого поведения на macOS 27.

Для пользователей Ruby 4.0.6 рекомендуется в первую очередь рассмотреть обновление до версии 4.0.7, особенно если их инфраструктура подвержена одному из исправленных сценариев. Следующая стабильная версия, Ruby 4.0.8, планируется к выпуску в ноябре 2026 года.

При использовании материалов сайта необходимо указывать ссылку на TGLand.ru. Если вы копируете фрагменты текста в интернете, прямая гиперссылка, доступная для индексации поисковыми системами, должна быть размещена в начале материала.