Rust 新版解读 | 1.72 | feature启用提示

Rust 1.72 官方 release doc: Announcing Rust 1.72.0 | Rust Blog

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

$ rustup update stable

警告可能有用的 cfg 禁用项

一直以来都支持的通过 cfg 条件编译部分代码,例如在开启特定 feature 时的函数,或者针对特定平台的逻辑。之前编译器会直接无视掉这些代码,现在会记录这些符号名称和对应的 cfg 条件,因此可以警告你正在调用一个特定 feature 下的函数,需要启用 feature:

   Compiling my-project v0.1.0 (/tmp/my-project)
error[E0432]: unresolved import `rustix::io_uring`
   --> src/main.rs:1:5
    |
1   | use rustix::io_uring;
    |     ^^^^^^^^^^^^^^^^ no `io_uring` in the root
    |
note: found an item that was configured out
   --> /home/username/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustix-0.38.8/src/lib.rs:213:9
    |
213 | pub mod io_uring;
    |         ^^^^^^^^
    = note: the item is gated behind the `io_uring` feature

For more information about this error, try `rustc --explain E0432`.
error: could not compile `my-project` (bin "my-project") due to previous error

不受限制的常量计算时间

之前为了避免用户自定义的常量在编译期间进行估算时,陷入死循环或占用无限制的时间,Rust 之前会限制用作常量计算的语句数目。然而一些特殊的有创造性的 Rust 代码还是会超过这个限制,进而产生编译错误;更糟糕的情况是,是否达到限制的是会随着用户调用库的不同而变化的。

现在,可以在编译时执行无限制的常量计算。而为了避免长时间编译没有反馈,编译器会在编译时代码运行一段时间后发出一条消息,并在每次翻倍的一段时间后重复该消息。默认情况下,编译器还将在捕获无限循环的大量步骤后报错提示 const_eval_long_run ,但可以用 allow(const_eval_long_run) 允许特别长的常量计算。

Clippy lints 上升到 rustc

几个原本由 Clippy 提供的 lints,提升到 rustc 里:

未来对 Windows 的支持

未来的 release 版本里会放弃对 win10 以前的系统的官方支持,Rust 1.75 将成为最后一个支持 windows 7,8,8.1的版本,2024 年 2 月起的 rust 1.76 将仅支持 win10 及后续版本 ( target : tier-1 )。详情见提案 MCP 651

Others

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