Команда Rust рада сообщить о новой версии языка — 1.67.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
Если у вас есть предыдущая версия Rust, установленная через rustup
, то для обновления до версии 1.67.0 вам достаточно выполнить команду:
rustup update stable
Если у вас ещё не установлен rustup
, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.
Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать beta (rustup default beta
) или nightly (rustup default nightly
) канал. Пожалуйста, сообщайте обо всех встреченных вами ошибках.
Что стабилизировано в 1.67.0
#[must_use]
влияет на async fn
Асинхронные функции с аннотацией #[must_use]
теперь применяют этот атрибут к выходному значению возвращаемой impl Future
. Сам трейт Future
всегда аннотирован атрибутом #[must_use]
, так что все типы, реализующие Future
, автоматически становятся #[must_use]
. Напомним, что ранее не было способа указать, что выходные данные Future
сами по себе являются значимыми и должны как-либо использоваться.
Начиная с 1.67 компилятор предупреждает, если выходные данные никак не используются.
#[must_use]
async fn bar() -> u32 { 0 }
async fn caller() {
bar().await;
}
warning: unused output of future returned by `bar` that must be used
--> src/lib.rs:5:5
|
5 | bar().await;
| ^^^^^^^^^^^
|
= note: `#[warn(unused_must_use)]` on by default
Обновлена реализация std::sync::mpsc
Начиная с версии 1.0 стандартная библиотека Rust содержит каналы со множеством производителей и одним потребителем. С текущего выпуска они будут основаны на пакете crossbeam-channel
. Этот выпуск не содержит изменений в API, однако такая реализация исправляет некоторые ошибки и улучшает производительность и поддерживаемость.
Благодаря этому пользователи не заметят значительных изменений в поведении.
Стабилизированные API
{integer}::checked_ilog
{integer}::checked_ilog2
{integer}::checked_ilog10
{integer}::ilog
{integer}::ilog2
{integer}::ilog10
NonZeroU*::ilog2
NonZeroU*::ilog10
NonZero*::BITS
Следующие API теперь можно использовать в контексте const
:
Проверьте всё, что изменилось в Rust, Cargo и Clippy.
Участники 1.67.0
Многие люди собрались вместе, чтобы создать Rust 1.67.0. Без вас мы бы не справились. Спасибо!
От переводчиков
С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в чат переводчиков.
Данную статью совместными усилиями перевели andreevlex, TelegaOvoshey и funkill.
Комментарии (5)
sergree
30.01.2023 20:24+3Мне в этом обновлении оказалось полезным новое предупреждение Clippy о нежелательном использовании устаревшего способа форматирования строк https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
SergeiMinaev
В Clippy очень радуют краткие и понятные примеры кода в правилах. Я его раньше почти не использовал. Походу, зря.
В который раз подмечаю, что у Rust встроенные инструменты довольно продуманные и удобные. Помню, кайфовал с того, как классно `cargo doc` "из коробки" генерит авто-документацию. В Python и JS с этим пришлось помучаться.
LinearLeopard
А чем генерили? Я в своё время тоже помучался со sphinx, а вот с java было довольно легко всё сгенерить, видимо, всё из-за того, что документирующие комментарии к python прикручивали с боку и стандартной тулы для них нет, кажется в JS похожая ситуация
SergeiMinaev
sphinx-apidoc с плагином autodoc и пришлось заморочиться с конфигом, чтобы он работал с Django и адекватно документил модели. Но всё равно получилось не совсем так, как хотелось.
LinearLeopard
Я дважды настраивал, второй раз попроще, но всё равно повозиться приходится.