Rust 团队很高兴地宣布 Rust 的新版本 1.72.0。Rust 是一种编程语言,它让每个人都能构建可靠、高效的软件。
如果你已经通过 rustup 安装了之前的 Rust 版本,你可以通过以下方式获得 1.72.0:
rustup update stable
如果还没有,可以从我们网站的相应页面获取 rustup,并在 GitHub 上查看 1.72.0 的详细发布说明。
如果你想帮助我们测试未来的版本,可以考虑在本地更新,使用 beta 频道(rustup 默认 beta 频道)或 nightly 频道(rustup 默认 nightly 频道)。请报告您可能遇到的任何 bug!
1.72.0 稳定版中的内容
Rust 会在错误中报告已禁用 cfg 的潜在有用项目
您可以使用 cfg 有条件地启用 Rust 代码,例如仅在特定 crate 功能下或特定平台上提供某些函数。以前,编译器实际上看不到以这种方式禁用的项目。不过现在,编译器会记住这些项目的名称和 cfg 条件,因此它可以报告(例如)你试图调用的函数是否因为需要启用板条箱特性而不可用。
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_running),以捕获无限循环,但您也可以使用 allow(const_eval_long_running) 来允许特别长的常量求值。