Rust 1.92.0: подтверждение готовности never type и таблицы раскрутки даже при panic=abort

11.12.2025

Вышел Rust 1.92.0. Два изменения затрагивают поведение компилятора, а не API: линты о совместимости вперёд стали ошибкой компиляции, а таблицы раскрутки теперь генерируются даже при -Cpanic=abort.

Готовность к never type

Линты never_type_fallback_flowing_into_unsafe и dependency_on_unit_never_type_fallback переведены из предупреждений в ошибки компиляции. Это подготовка к стабилизации типа «никогда»: пока он не закреплён, подставлять его молча нельзя.

По оценке разработчиков, затронуто около 500 крейтов. Важны две оговорки. Первая: линт можно подавить через #[allow]. Вторая — и это важнее — срабатывает он только при непосредственной сборке самого крейта, а не как зависимость; в последнем случае Cargo лишь предупредит.

То есть при обновлении чужого крейта из реестра ошибки не будет: поломка проявится только там, где вы правите этот крейт сами.

Линт must_use перестал ругаться на ошибку, которой не бывает

unused_must_use больше не предупреждает о Result<(), Infallible> и вообще о значениях, тип ошибки которых не заселён. Это избавляет от проверки ошибки, которая не может возникнуть, — а такие типы появляются, например, у трейтов с ассоциированным типом ошибки.

Бектрейсы при panic=abort

На Linux таблицы раскрутки теперь генерируются по умолчанию даже при -Cpanic=abort, и бектрейсы работают. Проблема была старая — с 1.23, и обходилась флагом с 1.45. Отключается обратным флагом.

Практическая польза в том, что релизные сборки, где паника ведёт к аварийному завершению, теперь дают стек. Раньше для этого приходилось менять настройки сборки.

Что стабилизировано

  • Box::new_zeroed, Box::new_zeroed_slice и то же для Rc и Arc — создание значения из нулей;
  • RwLockWriteGuard::downgrade — понижение блокировки записи до блокировки чтения без промежуточного освобождения;
  • btree_map::Entry::insert_entry и VacantEntry::insert_entry — вставка с возвратом ссылки на значение;
  • NonZero::div_ceil;
  • Location::file_as_c_str — имя файла без копирования;
  • Extend для proc_macro::TokenStream по одиночным Group, Literal, Punct и Ident;
  • в константных контекстах — slice::rotate_left и rotate_right.

Оригинал

Announcing Rust 1.92.0 от 11 декабря 2025 года

Упоминаний: 1 · Просмотров: 2