Мининовости
Мелкие изменения: стабилизация API, новые методы и impl, правки Cargo.
Год назад стартовал Variadic Generics Micro Survey — сбор примеров использования гипотетической возможности вариативных generics. Опрос включал развёрнутые открытые ответы, и респонденты отвечали подробно: набралось более 3300 откликов, включая 900 текстовых ответов только на один вопрос.
Стабилизированы параметр аллокатора у Vec::IntoIter<T, A> и метод allocator(), возвращающий ссылку на аллокатор итератора.
Методы Rc::is_unique и Arc::is_unique стабилизированы: они сообщают, что на значение ссылается ровно один сильный владелец и ни одного слабого.
Стабилизирован String::into_chars: он превращает строку в итератор IntoChars, который отдаёт char и владеет исходным буфером — без переаллокации и без заимствования строки.
Методы len и is_empty у BinaryHeap, BTreeMap, BTreeSet, LinkedList и VecDeque теперь можно вызывать в const-контексте: в константах, статических инициализаторах и const fn.
У *const T, *mut T и NonNull<T> стабилизирован метод cast_slice(len): он собирает указатель на срез из указателя на первый элемент и длины в элементах.
В char добавлены методы is_xid_start и is_xid_continue: они проверяют, годится ли символ в первый или в последующий символ идентификатора по свойствам Unicode XID_Start и XID_Continue.
Тип ! теперь реализует AsRef<T> и AsMut<T> для любого T: ?Sized. Реализации стабильны с версии 1.100.0.
У срезов стабилизированы split_once и rsplit_once: они ищут первый (или последний) элемент, подходящий под предикат, и возвращают пару срезов до и после него — сам элемент в результат не входит.
Стабилизирован трейт std::os::windows::process::ExitCodeExt с методом from_raw(u32): он собирает ExitCode из «сырого» кода возврата, который возвращает Windows API.
Команда компилятора объявила две новые площадки: группу уведомлений по GPU-цели — для диагностики и разбора проблем, связанных с GPU, и рабочую область по линкерам — для тех, кому интересна тема линкеров.
На платформе Windows стабилизирован параметр inherit_handles в работе с процессами. Он закрывает давнюю задачу и связан с обсуждением вокруг rust-lang/rust#161158.
В Cargo добавлены новые ключи конфигурации для build-std: build.build-std.when и связанные ключи. Они реализуют интерфейс, описанный в RFC build-std=always.
В стандартную библиотеку добавлена функция core::process::resumable_breakpoint — возобновляемая точка останова. Это альтернатива arch::breakpoint с той же реализацией, но совершенно другими документация и назначением.
В стандартную библиотеку добавлен fs::rename_noreplace: в отличие от fs::rename, он никогда не перезаписывает приёмник — если to уже существует, возвращается ошибка AlreadyExists. Используются платформенные примитивы (принят ACP libs-team#131). Пока доступен нестабильно (tracking issue rust-lang/rust#161427).