RustЩо нового в Rust 1.95
Реліз Rust 1.95 стабілізує if let guards у match, інлайн-асемблер для PowerPC, прапорець --remap-path-scope та низку методів стандартної бібліотеки.
Реліз від 24 жовтня 2026 · оновлено 8 листопада 2026
Головне
- Стабілізовано if let guards для гілок виразу match
- Інлайн-асемблер для архітектур PowerPC та PowerPC64 перейшов у розряд стабільних
- Стабілізовано прапорець компілятора --remap-path-scope
- Низка цільових платформ Apple переведена на Tier 2
- JSON target specs дестабілізовано та переведено під прапорець -Z unstable-options
Коротко
Випуск Rust 1.95 приносить стабілізацію if let guards у конструкціях match, а також підтримку інлайн-асемблера для архітектур PowerPC та PowerPC64. Компілятор отримав стабільний прапорець --remap-path-scope для керування перевизначенням шляхів у бінарних файлах. Крім того, оновлення містить розширення стандартної бібліотеки, переведення низки платформ Apple на Tier 2 та важливі зауваження щодо сумісності.
Нові можливості
Мова програмування
- Стабілізація
if letguards: тепер у гілках виразівmatchможна використовувати конструкціюif letяк умову (guard). - Зміни в лінті
irrefutable_let_patterns: перевірка більше не спрацьовує на ланцюжкахlet(let chains). - Імпорт ключових слів сегментів шляху: додано підтримку імпорту ключових слів, що є сегментами шляху, з перейменуванням.
- Інлайн-асемблер для PowerPC: стабілізовано використання inline assembly для цільових архітектур PowerPC та PowerPC64.
- const-eval та вирівнювання (padding): поведінка padding під час типізованого копіювання стала більш узгодженою.
- Обчислення const-блоків: блоки
constбільше не обчислюються для визначення того, чи можуть вирази з потенційно помилковими операціями бути неявно просунуті в константи (constant-promoted). Вирази, чия можливість неявного просування залежала від результату const-блоку, більше не просуваються неявно. - Операційна семантика зіставлення з взірцем: зроблено операційну семантику pattern matching незалежною від крейта та модуля.
Компілятор та платформи
- Прапорець
--remap-path-scope: стабілізовано параметр для контролю області застосування правил перепризначення шляхів у підсумковому бінарному файлі. - Безпека vendored musl: застосовано виправлення вразливостей CVE-2026-6042 та CVE-2026-40200.
- Підвищення рівня підтримки платформ:
powerpc64-unknown-linux-muslпереведено на Tier 2 із хост-інструментами;aarch64-apple-tvosтаaarch64-apple-tvos-simпереведено на Tier 2;aarch64-apple-watchosтаaarch64-apple-watchos-simпереведено на Tier 2;aarch64-apple-visionosтаaarch64-apple-visionos-simпереведено на Tier 2.
Бібліотеки та стабілізовані API
- Додано реалізації трейтів конвертації та посилань для масивів:
MaybeUninit<[T; N]>: From<[MaybeUninit<T>; N]>та[MaybeUninit<T>; N]: From<MaybeUninit<[T; N]>>MaybeUninit<[T; N]>: AsRef<[MaybeUninit<T>; N]>,AsRef<[MaybeUninit<T>]>,AsMut<[MaybeUninit<T>; N]>,AsMut<[MaybeUninit<T>]>Cell<[T; N]>: AsRef<[Cell<T>; N]>,Cell<[T; N]>: AsRef<[Cell<T>]>,Cell<[T]>: AsRef<[Cell<T>]>
bool: TryFrom<{integer}>.- Методи атомарного оновлення
updateтаtry_updateдляAtomicPtr,AtomicBool,AtomicInтаAtomicUn. - Макрос
cfg_select!. - Модуль
core::range, типиcore::range::RangeInclusiveтаcore::range::RangeInclusiveIter. - Функція підказки оптимізатору
core::hint::cold_path. - Неперевірені методи перетворення сирих вказівників:
<*const T>::as_ref_unchecked,<*mut T>::as_mut_uncheckedта<*mut T>::as_ref_unchecked. - Методи додавання елементів з поверненням мутабельного посилання:
Vec::push_mutтаVec::insert_mutVecDeque::push_front_mut,VecDeque::push_back_mutтаVecDeque::insert_mutLinkedList::push_front_mutтаLinkedList::push_back_mut
- Методи структури
Layout:dangling_ptr,repeat,repeat_packed,extend_packed. - Інтринсик
core::arch::aarch64::__jcvt. - У контексті
constтепер стабільно доступні:fmt::from_fn,ControlFlow::is_break,ControlFlow::is_continue.
Rustdoc
- Введено нове налаштування для приховування застарілих елементів ("hide deprecated items").
- Нестабільні елементи в результатах пошуку тепер ранжуються нижче.
Ламаючі зміни
- Дестабілізація JSON target specs: специфікації цільових платформ у форматі JSON переведено у розряд нестабільних — тепер для їхнього використання потрібен прапорець
-Z unstable-options. У Cargo додано CLI-прапорець-Z json-target-spec, який передає-Z unstable-optionsдо компілятора автоматично. - Заборона імпорту
$crateбез перейменування: конструкціяuse $crate::{self};більше не дозволена через посилення перевірки помилок для імпортівself. - Поведінка зіставлення для
#[non_exhaustive]enum: зіставлення з переліком#[non_exhaustive]тепер читає дискримінант навіть за наявності лише одного варіанта. Через це замикання можуть захоплювати значення, які раніше не захоплювалися. - Паттерни
mut refтаmut ref mut: у скороченому записі полів структурних патернів ці патерни були помилково доступні на стабільній версії. Тепер вони коректно закриті функціональним прапорцем як нестабільні. - Зміни у виведенні типів при приведенні масивів: приведення масивів (array coercions) тепер може призводити до меншої кількості обмежень виведення типів (inference constraints).
- const-eval та байти вказівників: узгодження поведінки padding під час типізованого копіювання в рідкісних випадках може спричинити помилки компіляції, якщо байти частин вказівника потрапляють у байти вирівнювання
constчиstatic. - Перевірка аргументів
#[feature]: тепер перевіряються аргументи атрибутів#[feature]на невалідних цільових платформах. - Вимоги до меж часу життя: додано перевірку lifetime bounds для типів, що містять лише типові параметри.
Виправлення та покращення
- Оновлення бекенду: виконано перехід на LLVM 22.
- Оптимізація
str::contains: прискорено роботу операції на цільових платформахaarch64, де за замовчуванням увімкнено функціюneon. - Виправлення ABI для powerpc64: тепер використовується версія ELF ABI, вказана у специфікації цільової платформи, замість спроби її вгадати (це виправляє ELF ABI для цілі OpenBSD).
- Діагностика імпортів: додано попередження майбутньої несумісності
ambiguous_glob_imported_traitsдля неоднозначно імпортованих через glob трейтів, а також розширено виявлення неоднозначних помилок імпорту, пов'язаних із видимістю. - Попередження для атрибутів derive: запроваджено попередження майбутньої несумісності для допоміжних атрибутів derive, що конфліктують із вбудованими атрибутами.
- Депрекація методу
Eq: оголошено застарілимEq::assert_receiver_is_total_eqта додано попередження майбутньої сумісності при його ручній реалізації. - Документація
thread::scope: задокументовано взаємодію методуjoinіз деструкторами TLS (Thread Local Storage).
Огляд підготовлено автоматично за офіційними release notes за допомогою ШІ та перевірено на відповідність джерелу. Точні формулювання дивіться в оригіналі. Як ми працюємо