15 октября 2026 года опубликован Rust 1.99.1 с исправлениями трёх регрессий компилятора и инструментов сборки. Самая серьёзная затрагивала возврат логических значений bool через FFI на x86_64: код на другом языке мог получать число вместо ожидаемых нуля или единицы. Обновление также восстанавливает сборку UEFI-программ и работу rust-lld в отдельных сценариях на macOS.

Ошибка FFI в Rust 1.99.0 могла превращать false в число 16
7 октября разработчик сообщил о странном поведении программы, в которой функция на Rust возвращала логическое значение в код на C. При проверке на Linux с архитектурой x86_64 вызывающая сторона получала 16, хотя ожидала 0 или 1. Проблему воспроизвели при сборке C-кода как GCC, так и Clang. В репозитории Rust отчёт получил приоритет P-critical.
FFI (Foreign Function Interface) позволяет программам на разных языках вызывать функции друг друга. Например, библиотека на Rust может сообщать приложению на C, найден ли нужный элемент. Внутри Rust функция возвращает true или false, но при пересечении границы между языками значение должно передаваться по правилам соглашения о вызовах — ABI.
В Rust 1.99.0 компилятор мог оставлять биты 1–7 регистра возврата без определённого значения. ABI для x86_64 требует обнулять эти биты. Поэтому вызывающий код иногда видел число, отличное от привычного представления логического значения. В отчёте об ошибке показан конкретный результат 16 при возврате ложного условия.
В Rust 1.98.0 исследованный машинный код содержал дополнительную операцию, ограничивавшую результат одним битом. В версии 1.99.0 её уже не было. Для Rust 1.99.1 разработчики вновь включили необходимое расширение нулями (zero-extension) при возврате bool. Исправление относится к ситуации, когда функция Rust отдаёт bool через FFI на x86_64, и не означает, что любые логические операции внутри Rust работали неправильно.
UEFI-проекты снова собираются после исправления символа wcslen
В Rust 1.99.0 некоторые проекты для UEFI завершали сборку ошибкой undefined symbol: wcslen. UEFI — интерфейс прошивки, который участвует в запуске компьютера; разработчики используют Rust в том числе для программ, работающих в этой среде. В официальном отчёте показана ошибка при сборке под x86_64-unknown-uefi, тогда как Rust 1.98.1 тот же проект компоновал успешно.
Причина связана с оптимизацией LLVM под названием loop-idiom-wcslen. LLVM может заменять определённые циклы, обрабатывающие строки из широких символов, вызовом функции wcslen. На некоторых целевых платформах этой функции нет в системных библиотеках. В UEFI проблема затрагивала и проекты со стандартной библиотекой Rust: вызовы появлялись уже в предварительно собранном std.
В Rust 1.99.1 библиотека compiler-builtins содержит резервную реализацию wcslen. Теперь оптимизированный код может находить необходимый символ при компоновке. Исправление имеет значение для UEFI и других целевых платформ с ограниченным набором системных функций, где проявлялась та же регрессия.
Компоновщик rust-lld на macOS получил корректный путь к libLLVM
Третья ошибка проявлялась в особом способе запуска компилятора на macOS. Если инструмент вызывал исполняемый файл rustc напрямую из установленного набора Rust, минуя прокси rustup, компоновщик rust-lld иногда завершался до начала работы: системный загрузчик не находил libLLVM.dylib.
Отчёт об ошибке содержит пример на aarch64-apple-darwin: сборка библиотеки для wasm32-unknown-unknown через прямой путь к rustc завершалась сообщением Library not loaded: @rpath/libLLVM.dylib. Через rustup тот же сценарий работал. Поэтому регрессия могла затронуть прежде всего инструменты сборки, которые самостоятельно управляют компилятором и его расположением.
В Rust 1.99.1 rust-lld собирается с записью rpath, указывающей на каталог с libLLVM.dylib. rpath помогает загрузчику macOS найти динамическую библиотеку при запуске программы. Изменение устраняет зависимость этого сценария от того, добавил ли rustup путь к библиотекам в окружение.
Обновление Rust 1.99.1 и проверка установленной версии
Для установки исправлений через стандартный менеджер инструментов Rust команда выпуска указывает:
rustup update stableТекущую версию компилятора показывает команда rustc --version. Отдельная проверка имеет значение для окружений с несколькими установленными toolchain: исправления работают в той версии компилятора, которой фактически собирается проект.
Три регрессии объясняют внеплановый выпуск Rust 1.99.1
Rust 1.99.0 вышел 1 октября, а исправляющая версия 1.99.1 — 15 октября 2026 года. За две недели разработчики разобрали ошибки из разных частей инфраструктуры языка: генерации машинного кода для FFI, поддержки низкоуровневых целевых платформ и поиска динамических библиотек на macOS.
Особенность этого релиза — различие в проявлениях: ошибка wcslen останавливает сборку, сбой rust-lld мешает запуску компоновщика, а неправильный возврат bool способен проявиться уже во время работы готовой программы. Именно последняя регрессия объясняет, почему проблема совместимости с ABI получила критический приоритет в системе отслеживания ошибок Rust.