Voydevich
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 let guards: тепер у гілках виразів 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_mut
    • VecDeque::push_front_mut, VecDeque::push_back_mut та VecDeque::insert_mut
    • LinkedList::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 за допомогою ШІ та перевірено на відповідність джерелу. Точні формулювання дивіться в оригіналі. Як ми працюємо