
1 октября 2026 года состоялся релиз языка программирования Rust 1.99. Вклад в разработку этого обновления внесли 506 программистов со всего мира. Предыдущая стабильная версия решения состоялась в августе 2026 года. Версия проекта Rust 1.80 вышла в июле 2024 года. Релиз Rust 1.85.0 (Rust 2024) состоялся 20 февраля. Выпуск Rust 1.87.0 и празднование десяти лет после выхода Rust 1.0 произошло в мае 2025 года.
Текущий релиз включает в себя ряд стабилизированных API, доработанную стандартную библиотеку, в проекте добавлены средства контроля предупреждений Cargo и отображаются сообщения компоновщика.
Язык Rust сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Основные изменения и дополнения в Rust 1.99 (Rust, Cargo и Clippy):
-
функции с переменным числом аргументов в стиле extern C. В версии Rust 1.99.0 стабилизирована возможность определения функций с переменным числом аргументов (variadic functions), использующих ABI C и C‑unwind. Такие функции используют список аргументов переменной длины (…) и принимают произвольное количество аргументов. Ранее Rust уже позволял вызывать внешние функции с переменным числом аргументов (например, libc::printf), а начиная с версии 1.99 их можно писать непосредственно на самом Rust:
/// SAFETY: must be called with (at least) 2 i32 arguments.unsafe extern "C" fn sum(mut args: ...) -> i32 { // SAFETY: guaranteed by the caller. let a = unsafe { args.next_arg::() }; let b = unsafe { args.next_arg::() }; a + b}fn foo() -> i32 { unsafe { sum(0i32, 2i32) }}
Тип … — это VaList, который является ABI-совместимым с типом va_list языка C на всех целевых платформах. Допустимые типы для чтения из VaList определяются трейтом VaArgSafe. Подробную информацию о функциях с переменным числом аргументов в стиле C (c-variadic functions) можно найти в справочном руководстве (Reference). В этом выпуске также стабилизирована поддержка определения функций с переменным числом аргументов типа naked и ABI, отличным от C; такие функции должны реализовываться с использованием встроенного ассемблера.
-
информация о расположении элементов в необработанных указателях. В этом релизе установлены требования безопасности для получения размера и выравнивания необработанных указателей как для типов с заданным размером (тривиально безопасно, уже возможно в стабильной версии), так и для типов без заданного размера. Это достигается путём стабилизации трёх функций:
-
Layout::for_value_raw -
mem::size_of_val_raw -
mem::align_of_val_raw
-
-
не рекомендуется выполнять обратную операцию освобождения памяти после вызова Box::leak. Хотя семантика языка в версии Rust 1.99 не изменилась, мы обновили документацию к
Box::leak, чтобы предостеречь от использования паттернов, предполагающих последующее освобождение этой памяти. Это решение обусловлено тем, что подобный код создаёт проблемы при взаимодействии с текущими и перспективными оптимизациями компилятора; это особенно актуально в свете предстоящей стабилизации поддержки пользовательских аллокаторов. Вместо этого рекомендуется использовать методыBox::into_non_nullилиBox::into_raw. Эта рекомендация также распространяется на другие функции стандартной библиотеки, приводящие к утечке памяти (функции с суффиксом leak); -
в разряд стабильных переведена новая порция API:
-
IntoIteratorforBox -
IntoIteratorfor&Box -
IntoIteratorfor&mut Box -
VecDeque::retain_back -
core::ffi::VaList -
Box::into_non_null -
Box::from_non_null -
Vec::into_parts -
Vec::from_parts -
core::mem::size_of_val_raw -
core::mem::align_of_val_raw -
core::alloc::Layout::for_value_raw -
String::from_utf8_lossy_owned -
string::FromUtf8Error::into_utf8_lossy -
FusedIterator for StepBy -
std::fs::set_times -
std::fs::set_times_nofollow
-
Источник: habr.com