Разработчики представили релиз языка программирования Ruby 3.2.0.

Изменения в релизе включают:
начальный порт интерпретатора CRuby, компилируемого в промежуточный код WebAssembly для запуска в браузере или под управлением обособленных runtime, таких как wasmtime. Для прямого взаимодействия с операционной системой при обособленном запуске используется API WASI (WebAssembly System Interface). Появилась VFS обвязка поверх WASI, позволяющая упаковывать всё приложение на языке Ruby в представление в виде одного wasm-файла. Запуск в браузере может использоваться для создания обучающих и демонстрационных сервисов, таких как TryRuby. Порт успешно проходит тестовые наборы basic и bootstrap, в которых не применяется API Thread. В порте также не поддерживаются файберы (Fiber), исключения и сборка мусора;
стабильный внутрипроцессный JIT-компилятор YJIT от разработчиков Shopify в рамках инициативы по увеличению производительности Ruby-программ, использующих фреймворк Rails. Отличие от JIT-компилятора MJIT заключается в версионировании базовых блоков или LBBV. YJIT вначале компилирует только начало метода, а оставшуюся часть — через некоторое время, после того как в процессе выполнения будет определены типы используемых переменных и аргументов. YJIT доступен для архитектур x86-64 и arm64/aarch64 в Linux, MacOS, BSD и других UNIX-платформ. Он требует для компиляции наличие компилятора rustc 1.58.0+, поэтому сборка YJIT по умолчанию отключена;

дополнительную защиту от атак, вызывающих отказ в обслуживании при обработке внешних данных в неэффективных и длительно выполняемых регулярных выражениях (ReDoS). Улучшен алгоритм сопоставления, в котором задействована техника мемоизации. Из-за этого увеличивается потребление памяти, расход которой примерно в 10 раз выше размера входных данных. Также определяется таймаут (например, "Regexp.timeout = 1.0"), за который должно успеть обработаться регулярное выражение;
режим syntax_suggest, помогающий диагностировать причины ошибок, связанных с отсутствующим или лишним закрывающим выражением "end". В режиме показа места ошибок добавлена возможность пометки аргументов при ошибках, связанных с типами и аргументами;
новый синтаксис для перенаправления в другие методы наборов аргументов;
переписанный на языке Ruby ruby_vm/mjit/compiler — вариант старого JIT-компилятора MJIT. Обеспечено выполнение MJIT в отдельном процессе;
задействование определителя версий PubGrub в Bundler 2.4 при обработке зависимостей, который также применяется в пакетном менеджере pub для языка Dart. Ранее используемый алгоритм Molinillo продолжает применяться в RubyGems, но в будущем его заменят на PubGrub;
обновлённую версию встроенных и входящих в стандартную библиотеку gem-модулей.