Команда 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



Следующие API теперь можно использовать в контексте const:



Проверьте всё, что изменилось в Rust, Cargo и Clippy.


Участники 1.67.0


Многие люди собрались вместе, чтобы создать Rust 1.67.0. Без вас мы бы не справились. Спасибо!


От переводчиков


С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в чат переводчиков.


Данную статью совместными усилиями перевели andreevlex, TelegaOvoshey и funkill.

Комментарии (5)


  1. SergeiMinaev
    30.01.2023 19:16
    +7

    Проверьте всё, что изменилось в Rust, Cargo и Clippy.

    В Clippy очень радуют краткие и понятные примеры кода в правилах. Я его раньше почти не использовал. Походу, зря.

    В который раз подмечаю, что у Rust встроенные инструменты довольно продуманные и удобные. Помню, кайфовал с того, как классно `cargo doc` "из коробки" генерит авто-документацию. В Python и JS с этим пришлось помучаться.


    1. LinearLeopard
      30.01.2023 20:21
      +1

      А чем генерили? Я в своё время тоже помучался со sphinx, а вот с java было довольно легко всё сгенерить, видимо, всё из-за того, что документирующие комментарии к python прикручивали с боку и стандартной тулы для них нет, кажется в JS похожая ситуация


      1. SergeiMinaev
        30.01.2023 20:50
        +1

        sphinx-apidoc с плагином autodoc и пришлось заморочиться с конфигом, чтобы он работал с Django и адекватно документил модели. Но всё равно получилось не совсем так, как хотелось.


        1. LinearLeopard
          31.01.2023 11:56

          sphinx-apidoc с плагином autodoc

          Я дважды настраивал, второй раз попроще, но всё равно повозиться приходится.


  1. sergree
    30.01.2023 20:24
    +3

    Мне в этом обновлении оказалось полезным новое предупреждение Clippy о нежелательном использовании устаревшего способа форматирования строк https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args