Вышла версия Rust 1.92.0! Как всегда, тут только интересные мне моменты — всё остальное в детальных заметках о релизе.
▪️Информация по оптимизации времени сборки теперь есть прямо в Cargo book 🎉 (PR)
▪️Линты про проблемы, связанные с never type fallback, теперь deny by default.
▪️Теперь на функциях можно комбинировать
#[track_caller] и #[no_mangle]. Технически это можно было делать и раньше, но до этого релиза преобразование подобной функции в указатель на функцию сохраняло атрибут #[no_mangle], что приводило к ошибкам линковки. Если что, работает эта комбинация только на функциях с extern "Rust".▪️Операции
&raw const/&raw mut для взятия адреса теперь можно использовать на полях объединений в safe коде.▪️Линт unused_must_use теперь не срабатывает на значениях Result<T, E>, где тип E не населён.
▪️
Iterator::eq{, by} теперь может сделать ранний возврат на TrustedLen итераторах. Да, это означает, что теперь этот метод может отбрасывать операции с побочными эффектами.▪️Методы
count и last на iter::Repeat теперь паникуют вместо входа в бесконечный цикл.▪️Стабилизированы некоторые API:
🔸std::panic::Location::file_as_cstr (полезно для интеропа с C/C++)
🔸RwLockWriteGuard::downgrade для понижения блокировки на запись до блокировки на чтение
🔸
new_zeroed и new_zeroed_slice на умных указателях. Сами конструкторы safe, потому что возвращают аллокации с MaybeUninit вместо значений напрямую.🔸
insert_entry на btree_map::Entry и btree_map::VacantEntry, которые вставляют переданное значение и возвращают OccupiedEntry (аналогичные методы для HashMap стабилизировали год назад)▪️Методы
rotate_left и rotate_right на слайсах теперь можно вызывать в const-контекстах.▪️Поиск в rustdoc теперь скрывает методы трейтов на типах из результатов поиска, если в списке есть сам метод трейта. Например, поиск по "last" покажет
Iterator::last и BTreeSet::last (метод на BTreeSet, не имеющий отношения к Iterator), но не покажет, скажем, std::vec::IntoIter::last.▪️Компилятор теперь по умолчанию генерирует таблицы для раскрутки стека даже с -C panic=abort. Это сделано для рабочих трассировок стека (которые могут быть созданы не только паникой). Убрать эти таблицы можно ключём
-C force-unwind-tables=no.