Мининовости
Мелкие изменения: стабилизация API, новые методы и impl, правки Cargo.
Методы NonNull::read_volatile и NonNull::write_volatile теперь можно применять в const-контексте — вслед за аналогичными методами core::ptr, *const T и *mut T. Пока нестабильно (фича const_volatile).
Стабилен ptr::try_cast_aligned — приведение указателя с проверкой выравнивания. Если адрес не удовлетворяет требованиям выравнивания целевого типа, возвращается None, а не «выравнивание вслепую».
Файл .cargo/credentials.toml больше не поддерживает директиву include — её поддержка была случайной. Это шаг к отделению учётных данных от общей конфигурации Cargo.
Cargo добавляет предупреждение о будущей несовместимости перед сменой поведения: значение по умолчанию для net.git-fetch-with-cli станет false вместо автоопределения. Для систем без установленного git это в будущем станет ошибкой — предупреждение даёт время сообщить о проблемах.
Настройка profile.<name>.trim-paths = "none" | "object" | "all" перестала быть экспериментальной. Она убирает пути сборки из отладочной информации, чтобы бинарники не зависели от каталога проекта.
Cargo переводит публикацию собственных крейтов на trusted publishing: вместо долгоживущего CARGO_REGISTRY_TOKEN используется доверенная (OIDC) аутентификация в связке с базой team. Цель — повысить безопасность публикации и отслеживать крейты. Компаньон — rust-lang/team#2727.
Cargo добавляет настройку hint.min-opt-level в манифесте: библиотека может подсказать минимальный уровень оптимизации, с которым её следует собирать.
Стабильны вспомогательные средства для реализации Debug у замыканий (фича debug_closure_helpers). Закрывает rust-lang/rust#117729.
Стабилен CStr::display — получение обёртки Display для C-строки, чтобы печатать и форматировать её штатными средствами, не теряя и не подменяя байты вручную. Прошёл FCP (rust-lang/rust#139984).
Cargo меняет поведение по умолчанию: если в системе есть git, зависимости из git теперь выкачиваются через интерфейс командной строки (то же, что net.git-fetch-with-cli = true). Это даёт большее соответствие обычному git и лучшую производительность; если git в системе нет, остаётся прежний путь. Изменение помечено как ломающее (fix(git)!).
Добавлены методы mul_add_relaxed для f16, f32, f64 и f128: они вычисляют (self * a) + b с ослабленными требованиями к точности. В отличие от mul_add, гарантирующего слитную операцию, здесь компилятор может выбрать слитный или раздельный вариант в зависимости от производительности цели. Это закрывает промежуток между точным mul_add и полностью оптимизируемыми алгебраическими операторами.
ГруппаConst Generics показала, как intends переписать константные дженерики. Это должно снять ограничение, из-за которого в константном параметре нельзя написать вычисляемое выражение.
Добавлен метод Rc::is_unique, повторяющий одноимённый метод у Arc: он сообщает, есть ли другие владельцы у значения. Пока нестабилен; трекинг — rust-lang/rust#138938.
В стандартную библиотеку добавлены типы std::fs::HomeDirs и std::fs::MediaDirs — для домашних, конфигурационных, кэш- и медиа-каталогов пользователя. Пока за фиче-гейтом в ночных сборках.
У Result появились методы into_ok и into_err: они достают значение из нужной ветки, паникуя на противоположной. Это аналог Option::unwrap, но без потери информации об ошибке в ветке Err.