Rust 新版解读 | 1.67 | #[must_use] in async fn

Rust 1.67 官方 release doc: Announcing Rust 1.67.0 | Rust Blog

通过 rustup 安装的同学可以使用以下命令升级到 1.67 版本:

$ rustup update stable

2023新年好!大年初五更新的新版本,来看看有什么新变化~

#[must_use] 作用于 async fn

注明了 #[must_use]async 函数会把该属性应用在返回的 impl Future 结果上。Future trait 已经注明了 #[must_use] ,所以所有实现了 Future 的类型都会自动加上 #[must_use]

所以在 1.67 版本,编译器会警告返回值没有被使用:

#![allow(unused)]
fn main() {
#[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 实现更新

标准库里的 mpsc(多生产者单消费者) 通道自从 1.0 版本就有了,这次版本更新将其实现修改成了基于 crossbeam-channel。不涉及到API的变更,但是修改了一些已有的bug,提升了性能和代码可维护性。用户应该不太会感知到明显的变化。

Others

其它更新细节,和稳定的API列表,参考原Blog