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

Ruby 3.4.11 устраняет сбои Fiber и исправляет обработку прерываний

23 сентября 2026 года разработчики Ruby выпустили версию 3.4.11 — плановое обновление с исправлениями ошибок. Релиз устраняет сбой, способный аварийно завершать асинхронные HTTP-приложения, корректирует обработку Ctrl+C и исправляет ошибки передачи аргументов в методы.

Ruby 3.4.11
Ruby 3.4.11

Ruby 3.4.11 исправляет аварийное завершение асинхронных HTTP-задач

Сетевое соединение неожиданно обрывается, сервер возвращает неполный ответ, а приложение завершается из-за ошибки в самом интерпретаторе. Именно такой сценарий обнаружили в Ruby 3.4.10 при использовании библиотек async и async-http.

Причиной оказалась ошибка #22196 — use-after-free в механизме Fiber. Fiber — легковесные задачи, позволяющие Ruby переключаться между операциями без создания отдельного системного потока для каждой из них. Сборщик мусора мог освободить память Fiber, пока интерпретатор продолжал обращаться к ней. Разработчики исправили эту ошибку в Ruby 3.4.11.

Для серверных приложений изменение затрагивает обработку ошибок сетевого соединения: при описанном сценарии задача должна завершаться с исключением EOFError, сохраняя работоспособность процесса. Ошибку воспроизвели на Ruby 3.4.10 при высокой нагрузке с большим количеством асинхронных запросов и намеренно оборванных HTTP-ответов. Исправление защищает объект Fiber во время переключения между задачами.

Ctrl+C теперь учитывает правила отложенного прерывания

В Ruby 3.4.11 исправили поведение стандартного обработчика SIGINT — сигнала, который обычно отправляется программе при нажатии Ctrl+C. Раньше этот сигнал мог немедленно вызвать исключение Interrupt даже внутри блока, где разработчик запретил такие прерывания через Thread.handle_interrupt.

Представим сервер, который при остановке сначала завершает текущие операции и освобождает соединения. Если исключение возникает в защищённом участке синхронизации, корректное завершение процесса может нарушиться. Теперь стандартный SIGINT проходит через механизм ожидающих прерываний: Ruby передаёт исключение в момент, допустимый настройками Thread.handle_interrupt.

Исправление вошло в опубликованный список изменений Ruby 3.4.11 и затрагивает приложения, использующие потоки, очереди и управляемое завершение работы.

Ruby точнее проверяет аргументы методов

Ещё одна ошибка касалась методов, объявленных исключительно с именованными параметрами. После одного корректного вызова Ruby 3.4 мог при определённых условиях принять следующий вызов с обычным позиционным аргументом. Значение попадало в именованный параметр, а явно переданный аргумент терялся. Такое поведение особенно неприятно тем, что результат зависел от предшествующего вызова метода.

В Ruby 3.4.11 исправлена внутренняя проверка формы вызова, учитывающая количество именованных аргументов. Теперь в описанном случае интерпретатор должен выдавать ArgumentError, как и предполагает объявление метода. Подробности приведены в сообщении об ошибке #22099.

Парсер и компилятор избавились от редких ошибок

Разработчики устранили несколько проблем, возникавших на необычных, но допустимых конструкциях Ruby. Одна из них связана со строковой интерполяцией внутри значения аргумента лямбда-функции. Парсер parse.y мог ошибочно принять вложенный блок за начало тела лямбды и выдать синтаксическую ошибку.

Другой дефект проявлялся во время оптимизации недостижимого кода, содержащего циклы. Из-за неправильного учёта обратных переходов компилятор мог удалить только часть такого фрагмента, оставив некорректное состояние стека и завершив компиляцию ошибкой. В Ruby 3.4.11 соответствующий алгоритм исправлен.

Среди изменений есть и уточнение обработки кодировки интернированных строк в C API. Оно касается прежде всего авторов нативных расширений: результат функций работы с такими строками должен согласовываться с их документированными правилами кодировки.

Ветка Ruby 3.4 продолжает получать исправления

Предыдущую версию Ruby 3.4.10 выпустили 30 июня 2026 года. Появившаяся 23 сентября версия 3.4.11 продолжает плановое обслуживание ветки 3.4. По официальной информации о жизненном цикле, она находится на стадии обычной поддержки, когда разработчики выпускают исправления ошибок и безопасности.

Исходные архивы Ruby 3.4.11 опубликованы в форматах tar.gz, tar.xz и zip; для каждого разработчики предоставили контрольные суммы SHA-256. В официальном объявлении о релизе обновление названо плановым выпуском с исправлениями ошибок.

Исправления затрагивают устойчивость работающих приложений

Ruby 3.4.11 закрывает несколько разных классов ошибок — от аварийного завершения интерпретатора при переключении Fiber до некорректной передачи аргументов и преждевременного прерывания защищённых операций. Сильнее всего эти изменения затрагивают проекты с асинхронной обработкой сетевых запросов, потоками и сложными сценариями выполнения кода. Насколько часто ошибки проявлялись в реальных приложениях, зависит от их библиотек и характера нагрузки.

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

Вам также может понравиться