RustЩо нового в Rust 1.99
Стабілізація C-variadic функцій, нові API для роботи з пам'яттю та файловою системою, а також профіль debug у Cargo.
Реліз від 16 жовтня 2026 · оновлено 8 листопада 2026
Головне
- Стабілізовано визначення C-variadic функцій та c_variadic_naked_functions
- Додано методи Vec::into_parts, Vec::from_parts та std::fs::set_times
- У Cargo з'явився вбудований профіль debug
- no_mangle_generic_items переведено у категорію жорстких помилок
- Ціль riscv64-unknown-linux-musl переведено на Tier 2 із хост-інструментами
Коротко
У релізі Rust 1.99 стабілізовано визначення функцій зі змінною кількістю аргументів у стилі C (C-variadic), включно з можливістю використання #[unsafe(naked)]. Стандартна бібліотека отримала низку нових API, серед яких Vec::into_parts, Vec::from_parts, методи для роботи з сирими вказівниками та встановлення часу файлів. У Cargo додано новий вбудований профіль debug, а також вимкнено інкрементальну компіляцію в CI за замовчуванням.
Нові можливості
Мова програмування
- C-variadic функції: стабілізовано визначення C-variadic функцій, а також можливість оголошувати їх за допомогою
#[unsafe(naked)](#![feature(c_variadic_naked_functions)]). - Синтаксис модулів у макросах: стабілізовано запис виду
#[my_macro] mod foo;, що дозволяє використовувати винесені модулі (mod foo;) у тілі атрибутних та derive-макросів. - Вбудований асемблер x86: стабілізовано передачу 128-бітних цілих чисел через векторні регістри в
asm!. - Доступ до
UnsafeCell: тепер офіційно гарантується, що доступ до вмістуUnsafeCellможе здійснюватися без викликуget. - Приведення типів: додано коерцію від змінних виведення типів до trait objects, якщо змінна виведення пов'язана через підтипування з типом, для якого відомо, що він
Sized. - Перевизначення методів трейтів: методи трейтів тепер резолвляться на скоригованому never type.
Компілятор і діагностика
- Підказки на основі doc alias: у пропозиціях щодо пропущеного методу
rustcтепер віддає перевагу точному збігу з атрибута doc alias перед пошуком за схожістю серед інших назв методів. - Нові лінти:
raw_borrows_via_references(allow за замовчуванням) — перевіряє посилання, які одразу перетворюються на raw borrows.unreachable_cfg_select_predicatesувімкнено у складі групиunused.unused_footnote_definition— новий лінт уrustdoc.semicolon_in_expressions_from_non_local_macros— попередження про макроси з інших крейтів, які розгортаються у крапку з комою.
- Розширення лінтів:
unconditional_panicрозширено на виклики функцій, які панікують при нульовому розмірі chunks/windows; додано POSIX-символи доinvalid_runtime_symbol_definitionsтаsuspicious_runtime_symbol_definitions. - Цільові платформи:
riscv64-unknown-linux-muslпідвищено до Tier 2 з підтримкою хост-інструментів.- Увімкнено
static_position_independent_executablesдля всіх цілей gnu. - Опцію
-Ctarget-cpuперетворено на target-modifier для AVR, AMDGCN та NVPTX.
Стабілізовані API
IntoIteratorдляBox<[T; N]>,&Box<[T; N]>та&mut Box<[T; N]>VecDeque::retain_backcore::ffi::VaListBox::into_non_nullтаBox::from_non_nullVec::into_partsтаVec::from_partscore::mem::size_of_val_rawтаcore::mem::align_of_val_rawcore::alloc::Layout::for_value_rawString::from_utf8_lossy_ownedтаstring::FromUtf8Error::into_utf8_lossyFusedIterator for StepBy<I>std::fs::set_timesтаstd::fs::set_times_nofollow<LocalKey<Cell<T>>>::update
Cargo
- Профіль
debug: додано новий вбудований профільdebugдля підготовки до відокремлення профілюdevвід налагодження. Наразі міжdevтаdebugнемає різниці. - Управління залежностями воркспейсу: учасники воркспейсу на редакції 2024 або новішій можуть перевизначати поле
default-featuresдля успадкованих залежностей (наприклад,serde = { workspace = true, default-features = false }).
Інші покращення бібліотек та інструментів
- Функцію
transmute_copyпослаблено для підтримки?Sizedтипів, а також переведено на використання паніки без розгортання стека (non-unwinding). - У
rustdocпокращено фільтрацію реалізацій трейтів, що прискорює роботу в середньому на 20% (і до 40% на окремих крейтах).
Ламаючі зміни
no_mangle_generic_itemsпереведено у статус жорсткої помилки компілятора.- Атрибути, які ні до чого не застосовуються всередині блоків коду в doc-коментарях, тепер викликають помилку.
- Зупиняється обчислення констант (const-eval), якщо в типі створюваного значення присутні дженерики.
- Застарілі модулі цілих чисел (наприклад,
std::i32) остаточно оголошено застарілими; доступ до констант слід здійснювати безпосередньо через тип (наприклад,i32::MAX). - У Cargo інкрементальна компіляція тепер вимкнена за замовчуванням під час запуску в CI (наявність середовища визначається за змінною
CI).
Виправлення та покращення
- Виправлено неправильну компіляцію повернення значень
boolчерез FFI на архітектурі x86_64 (версія 1.99.1). - Виправлено відсутній символ
wcslenдля цілей UEFI та embedded (версія 1.99.1). - Додано rpath для
libLLVMуrust-lldна macOS (версія 1.99.1). - PowerPC inline ASM: виправлено потрапляння скалярних чисел із рухомою комою у неправильний vector lane на little endian.
- Виправлено поведінку
overflowing_literalsпри повторному запереченні (наприклад, для--128_i8). - Виправлено помилку, через яку атрибут
#[repr(simd)]помилково дозволявся на викликах макросів у стабільному Rust. - Гарантовано проходження перевірки типів для виведених типів у
let-патернах. hermit/fs: повертаєтьсяunsupported()замістьfrom_raw_os_error(22).- Оновлено внутрішню версію LLVM до 23.
Огляд підготовлено автоматично за офіційними release notes за допомогою ШІ та перевірено на відповідність джерелу. Точні формулювання дивіться в оригіналі. Як ми працюємо