Вышел Rust 1.85: что изменилось в новом релизе
Команда разработчиков Rust представила очередное стабильное обновление языка — версию 1.85. Этот релиз приносит ряд долгожданных возможностей, которые упрощают написание асинхронного кода, улучшают производительность и расширяют инструментарий разработчика. Рассмотрим ключевые изменения.
Стабилизация async closures
Одним из главных событий стала стабилизация async closures — замыканий, которые могут быть асинхронными. Ранее для возврата асинхронного замыкания приходилось вручную писать сложные сигнатуры с impl Future. Теперь компилятор поддерживает синтаксис:
- async || { ... } — прямое объявление асинхронного замыкания.
- Автоматическое замыкание переменных с поддержкой lifetime.
- Совместимость с трейтами
FnOnce,FnMutиFn.
Это упрощает написание асинхронных обработчиков событий, middleware и callback-функций в веб-фреймворках (например, Axum или Actix).
Улучшенный borrow checker
В Rust 1.85 значительно усовершенствован анализатор заимствований. Теперь он лучше понимает случаи, когда переменная используется после частичного перемещения:
- Разрешено одалживать отдельные поля структуры, даже если другие поля уже перемещены.
- Улучшена обработка вложенных заимствований в итераторах.
- Снижено количество ложных предупреждений в коде с условными конструкциями.
Это особенно полезно при работе с большими структурами данных, где требуется частичное владение.
Новые возможности макросов
Релиз включает расширение системы макросов (proc macros):
- Добавлена поддержка token streams с возможностью модификации позиций в исходном коде.
- Упрощено создание атрибутных макросов для структур и перечислений.
- Улучшена обработка ошибок внутри макросов — теперь сообщения отображаются с точным указанием строки в пользовательском коде.
Это сделает разработку библиотек для сериализации (serde), веб-маршрутизации и генерации кода более гибкой.
Оптимизация компилятора и улучшения в cargo
Разработчики продолжили работу над производительностью компиляции:
- Ускорена инкрементальная компиляция для крупных проектов (до 15% быстрее).
- В
cargo checkдобавлена поддержка параллельного анализа зависимостей. - В
cargo buildулучшено кэширование промежуточных артефактов.
Также в cargo появилась новая команда cargo info, которая показывает подробную информацию о пакете из реестра (версии, зависимости, лицензию) без необходимости его скачивания.
Исправления безопасности и стабильность
В версии 1.85 закрыто несколько уязвимостей, связанных с обработкой небезопасного кода (unsafe). Исправлены ошибки в работе с памятью при использовании std::mem::transmute и MaybeUninit. Команда Rust рекомендует всем пользователям обновиться для обеспечения безопасности проектов.
Как обновиться
Обновление доступно через официальный установщик rustup. Чтобы установить новую версию, выполните команду: