Rust 1.91.1: исправлена регрессия, из-за которой при определённых сборках wasm вызывалась не та функция
10.11.2025Вышел точечный релиз Rust 1.91.1 с исправлением двух регрессий, внесённых в 1.91.0. Одна из них приводила к неопределённому поведению: при определённой сборке могла вызываться не та функция.
Ошибка в атрибуте импорта wasm
Проблема затронула атрибут #[link(wasm_import_module)]. Когда один и тот же символ импортировался из двух разных модулей WebAssembly в нескольких крейтах, возможны были два исхода.
Первый — падение линковщика с ошибкой о несовпадении модулей импорта. Это неприятно, но заметно. Второй — вызов не той функции во время работы: то есть неопределённое поведение, включая падения и тихую порчу данных.
Второй исход опаснее, потому что код работает и выдаёт неверный результат. Подробности — в задаче #148347.
Cargo на illumos
Вторая регрессия была не в компиляторе, а в стандартной библиотеке. Cargo перестроил блокировку каталога сборки на File::lock, а та на illumos из-за ошибки всегда возвращала Unsupported.
На практике это означало, что Cargo на illumos вообще не блокировал каталог target, независимо от поддержки со стороны файловой системы. То есть параллельные сборки не исключались. Исправлено в стандартной библиотеке, откуда починился и Cargo.
Кому обновляться
Всем, кто работает с WebAssembly и импортирует одинаково названные символы из разных модулей, — это реальный путь к молчаливой порче данных. Обновление ничего не стоит и ничего не ломает.
Пользователям Cargo на illumos обновляться стоит по другой причине: там сборка была фактически без блокировки каталога.
Оригинал
Announcing Rust 1.91.1 от 10 ноября 2025 года; подробности регрессии — в rust-lang/rust#148347
Упоминаний: 1 · Просмотров: 2