Вышел Rust 1.80: обзор ключевых изменений и нововведений
Команда разработчиков Rust представила очередной стабильный релиз — версию 1.80.0. Это обновление привносит несколько долгожданных функций, стабилизирует ряд API и улучшает пользовательский опыт. Давайте разберёмся, что изменилось и как эти нововведения повлияют на разработку.
Стабилизация LazyCell и LazyLock
Пожалуй, самое заметное новшество — стабилизация типов LazyCell и LazyLock. Ранее для ленивой инициализации данных приходилось использовать сторонние крейты (например, once_cell) или сложные конструкции.
- LazyCell — неблокирующая ленивая инициализация для однопоточного контекста. Позволяет отложить создание значения до первого обращения.
- LazyLock — потокобезопасная версия, использующая мьютекс для синхронизации доступа. Идеально подходит для глобальных конфигураций и синглтонов.
Оба типа реализуют трейты Deref и DerefMut, что делает их удобными в использовании. Теперь стандартная библиотека покрывает наиболее частые сценарии ленивой инициализации.
Стабилизация API: Exclusive и другие
В версии 1.80 стабилизирован ряд новых API:
Exclusive— обёртка для исключительного доступа к значению. Позволяет безопасно работать с не-Send типами в асинхронном контексте, предоставляя синхронный доступ через замыкание.- Методы
BorrowedBuf::as_sliceиBorrowedCursor::as_slice— упрощают работу с буферами ввода-вывода. HashMap::extract_ifиHashSet::extract_if— итераторы, позволяющие удалять элементы из коллекции по предикату, забирая их владение.
Улучшения компилятора
Команда Rust продолжает работу над обратной связью от компилятора. В 1.80 улучшены сообщения об ошибках при некорректном использовании трейтов и лайфтаймов. Теперь компилятор предлагает более точные подсказки, что особенно полезно для новичков.
- Улучшенные диагностики для ошибок, связанных с типами, реализующими
Drop. - Более понятные сообщения при конфликтах импортов.
- Оптимизация времени компиляции для проектов, использующих макросы.
Что это значит для разработчиков?
Обновление до Rust 1.80 рекомендуется всем, кто активно использует ленивую инициализацию или работает с асинхронным кодом. Стабилизация LazyLock позволяет отказаться от внешних зависимостей, упрощая сборку и повышая безопасность. Новые методы для коллекций делают код более идиоматичным, а улучшенная диагностика компилятора ускоряет отладку.
Для пользователей PythonLib, которые изучают Rust или используют его в связке с Python (например, через PyO3), это обновление также важно: стабильные API и улучшенная производительность компилятора делают Rust ещё более привлекательным для системного программирования и высоконагруженных сервисов.
Полный список изменений доступен в официальных примечаниях к релизу. Обновить Rust можно командой rustup update stable.