Команда Rust рада сообщить о новой версии языка — 1.64.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение. Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.64.0 вам достаточно выполнить команду: Если у вас ещё нет rustup, то можете установить его со страницы на нашем веб-сайте, а также ознакомиться с подробным описанием выпуска 1.64.0 на GitHub. Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать beta (rustup default beta) или nightly (rustup default nightly) канал. Пожалуйста, сообщайте обо всех встреченных вами ошибках. В Rust 1.64 стабилизирован трейт IntoFuture. Он похож на трейт IntoIterator, но вместо поддержки циклов for ... in ..., IntoFuture изменяет поведение .await. С IntoFuture ключевое слово .await может применяться не только на футурах, но и на всём, что может быть преобразовано в Future при помощи IntoFuture, что сделает ваше API более простым для использования! Возьмём, к примеру, билдер, который создаёт запрос к некоторому сетевому хранилищу: Типичное использование, вероятно, будет выглядеть так: Это уже неплохо, но мы можем сделать лучше. Используя IntoFuture, мы можем сделать за один шаг "создание футуры" (строка 3) и "запуск футуры" (строка 4): Мы можем сделать это, реализовав IntoFuture для StorageRequest. IntoFuture требует от нас наличия именованной футуры, которую мы возвращаем. Её мы можем создать упакованной и объявить для неё псевдоним: Это требует немного больше кода для реализации, но предоставляет более простой API для пользователей. Мы надеемся, что в будущем Rust Async WG упростит создание новой именованной футуры при помощи impl Trait в type ("Type Alias Impl Trait" или TAIT). Это должно облегчить реализацию IntoFuture за счёт упрощения сигнатуры псевдонима и улучшить производительность за счёт удаления из псевдонима упаковки (Box). Вызывая или будучи вызванным C ABI, код Rust может использовать псевдонимы типов, такие как c_uint или c_ulong для сопоставления соответствующих типов из C на любой целевой сборке, не требуя специализированного кода или условий. Раньше эти псевдонимы типов были доступны только в std, поэтому код, написанный для встроенных систем и других сценариев, которые могли использовать только core или alloc, не мог использовать эти типы. Rust 1.64 теперь предоставляет все псевдонимы типа c_* в core::ffi, а также core::ffi::CStr для работы со строками C. Rust 1.64 также предоставляет alloc::ffi::CString для работы с собственными строками C, используя только крейт alloc, а не полную библиотеку std. Rust-analyzer теперь входит в набор инструментов, включённых в Rust. Это упрощает загрузку и доступ к rust-analyzer, а также делает его доступным на большем количестве платформ. Он доступен как компонент rustup, который можно установить с помощью: В настоящее время, чтобы запустить версию, установленную rustup, вам нужно вызвать её следующим образом: В следующем выпуске rustup предоставит встроенный прокси-сервер, так что при запуске исполняемого файла rust-analyzer будет запускаться соответствующая версия. Большинству пользователей следует продолжать использовать выпуски, предоставленные командой rust-analyzer, которые публикуются чаще. Они доступны на странице выпусков rust-analyzer. Это не затрагивает пользователей официального расширения VSCode, поскольку оно автоматически загружает и обновляет выпуски в фоновом режиме. Теперь при работе с коллекциями связанных библиотек или бинарных крейтов в одном рабочем пространстве Cargo, вы можете избежать дублирования общих значений полей между крейтами, таких как общие номера версий, URL-адреса репозитория или rust-version. Это также помогает синхронизировать эти значения между крейтами при их обновлении. Дополнительные сведения см. в workspace.package, workspace.dependencies и "наследование зависимости от рабочего пространства". При сборке для нескольких целей вы сможете передать несколько опций --target в cargo build, чтобы собрать их все одновременно. Вы также можете установить для build.target массив из нескольких целей в .cargo/config.toml, чтобы по умолчанию выполнять сборку для нескольких целей. Стабилизированы следующие методы и реализации трейтов: Типы, ранее стабилизированные в std::ffi и теперь доступные в core и alloc: Типы, ранее стабилизированные в std::os::raw и теперь доступные в core::ffi и std::ffi: Были стабилизированы несколько вспомогательных функций, которые используются с Poll, низкоуровневой реализацией футур: Мы надеемся, что в будущем сможем предоставить более простое API, которое будет требовать меньше использования низкоуровневых деталей, таких как Poll и Pin. Но сейчас данные вспомогательные функции упростят написание такого кода. Следующие API теперь возможно использовать в контексте const: Выпуск Rust 1.64 включает и другие изменения: Проверьте всё, что изменилось в Rust, Cargo и Clippy. Многие люди собрались вместе, чтобы создать Rust 1.64.0. Без вас мы бы не справились. Спасибо! С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в чат переводчиков. Данную статью совместными усилиями перевели andreevlex TelegaOvoshey и funkill. Язык программирования