Rust 1.99 расширяет C-совместимость, а 1.99.1 исправляет три регрессии
В октябрьской ветке стабилизированы C-variadic функции и новые операции с памятью. Корректирующий релиз затронул UEFI, FFIbool и macOS linker.

Функцию с переменными аргументами теперь можно написать в Rust
Rust 1.99.0 вышел 1 октября и стабилизировал определение функций с переменным числом аргументов для ABI C и C-unwind. До этого Rust уже умел вызывать внешние функции вроде printf, но теперь такую сторону интерфейса можно реализовать непосредственно на языке. Список аргументов представлен VaList, совместимым с C va_list на поддерживаемых целях. Допустимые типы чтения ограничены соответствующим контрактом. Это возможность системной интеграции, а не обычная замена безопасным коллекциям аргументов. Вызывающая сторона и реализация должны одинаково понимать типы и порядок значений, поскольку C-интерфейс не передаёт эти сведения автоматически для каждого элемента списка.
Расположение данных через сырой указатель
В том же выпуске стабилизированы Layout::for_value_raw, size_of_val_raw и align_of_val_raw. Они позволяют получать сведения о размере и выравнивании через сырой указатель, включая случаи с типами, размер которых не известен статически. Для библиотек, работающих с выделением памяти и низкоуровневыми представлениями, это отдельная группа операций. Параллельно появились Box::into_non_null и обратное преобразование, а также разделение Vec на составляющие и сборка обратно. Такие API выражают передачу владения и деталей выделенного буфера без промежуточного заимствованного представления. У каждой операции сохраняется собственный контракт допустимости указателя и памяти. Само попадание функции в stable означает доступность интерфейса, а не отмену требований unsafe-кода.
Почему обновили описание Box::leak
Релиз также меняет рекомендацию по использованию Box::leak: документация не советует получать таким способом ссылку, а затем возвращаться к освобождению той же памяти. Авторы связывают это с взаимодействием текущих и будущих оптимизаций компилятора и развитием пользовательских аллокаторов. Вместо такого обходного пути указаны операции передачи владения в сырой или NonNull-указатель. Здесь важно различие между изменением семантики языка и уточнением рекомендуемого способа выражать намерение. В объявлении прямо сказано, что языковая семантика Box::leak в1.99 не менялась. В библиотечных добавлениях также есть владение при преобразовании некорректного UTF-8 и установка времени файла, включая вариант без следования по символической ссылке.
Что исправлено в1.99.1
15 октября команда выпустила 1.99.1 с тремя конкретными исправлениями. Для некоторых платформ, особенно UEFI со стандартной библиотекой, добавлена резервная реализация wcslen: оптимизация LLVM могла вводить вызов отсутствующего символа. Вторая ошибка касалась возвращаемого bool через FFI на x86_64: верхние биты регистра могли оставаться неопределёнными, и внешняя сторона видела значение, отличное от 0 или 1. Восстановлено требуемое ABI расширение нулём. Третье исправление добавляет rust-lld на macOS путь поиска libLLVM, чтобы линкер работал и при запуске компилятора без прокси rustup. Таким образом, актуальная октябрьская поставка сочетает новые stable API с устранением регрессий компоновки и двоичного интерфейса.


