
上午查阅 Rust 官网内部博客,看到 Rust 1.51.0 stable 预发布版本已经开放测试。正式发布版本定于 UTC 标准时 2021-03-25,北京时间估计要到本周五。
因为还未正式发布,不能从 Rust 国内工具链镜像源获取,需要从 https://dev-static.rust-lang.org 站点下载,您可以运行如下命令安装 Rust 1.51.0 到本地系统:
RUSTUP_DIST_SERVER=https://dev-static.rust-lang.org rustup update stable
set RUSTUP_DIST_SERVER=https://dev-static.rust-lang.org
rustup update stable
安装后,可以看到 rustc 和 cargo 的版本号。
rustc -V; cargo -V
rustc 1.51.0 (2fd73fabe 2021-03-23)
cargo 1.51.0 (43b129a20 2021-03-16)
关于 Rust 工具链的国内源,可以参阅《配置 Rust 工具链的国内源》。

Rust 1.51.0 改进包括语法、编译器、类库、稳定 APIs、Cargo、Rustdoc、Misc,以及兼容性方面。
常量泛型(const generics)。Rust 1.51.0 中,对可以通过常量值参数化的项做了改进。现在,除了类型(type)和生命周期(lifetime)之外,还包括函数、trait,以及结构体。但目前只允许原始整数类型、布尔型,以及 char 类型。例如,现在您可以编写如下代码(来自于官网内部博客实例):struct GenericArray<T, const LENGTH: usize> {
inner: [T; LENGTH]
}
impl<T, const LENGTH: usize> GenericArray<T, LENGTH> {
const fn last(&self) -> Option<&T> {
if LENGTH == 0 {
None
} else {
Some(&self.inner[LENGTH - 1])
}
}
}
-Csplit-debuginfo codegen。此选项控制调试信息是跨多个文件拆分,还是打包到单个文件中。需要注意的是:此选项在其他平台上还不稳定。aarch64_be-unknown-linux-gnu、aarch64-unknown-linux-gnu_ilp32,以及 aarch64_be-unknown-linux-gnu_ilp32 的 tier 3* 支持。i386-unknown-linux-gnu 和 i486-unknown-linux-gnu 的 tier 3 支持。target-cpu=native。LLVM 11.0.1+ 一起使用时,Rust 现在将使用 inline-asm 对堆栈侦测。Box::downcast 也实现了所有 dyn Any + Send + Sync 对象。str 实现了 AsMut<str>。u64 和 u128 实现了 From<char>。&T 实现了 Error,其中 T 为 Error 的具体实现。Poll<Option<Result<T, E>>>实现了 Poll::{map_ok, map_err}。unsigned_abs。io::Empty 实现了 io::Seek。T: ?Sized 类型,实现了 rc::Weak<T> 和 sync::Weak<T> 的方法,如 as_ptr。Arc::decrement_strong_countArc::increment_strong_countOnce::call_once_forcePeekable::next_if_eqPeekable::next_ifSeek::stream_positionarray::IntoIterpanic::panic_anyptr::addr_of!ptr::addr_of_mut!slice::fill_withslice::split_inclusive_mutslice::split_inclusiveslice::strip_prefixslice::strip_suffixstr::split_inclusivesync::OnceStatetask::Wakesplit-debuginfo 选项,以控制 -Csplit-debuginfo codegen 选型。Cargo.toml 文件中,添加了 resolver 域,以启用新的特性解析器和 CLI 执行选项。Cargo 的第二代版本中,将尝试避免统一那些可能不需要的依赖特性。例如,在构建脚本和过程宏中,对 std 特性的使用,有相同的依赖关系。而在最终二进制文件中,却使用了 no-std 特性。Deref trait 中的可用方法的文档。--default-theme,用于设置文档的默认主题。文档内部链接的各种改进:
slice。Vec<T>。--include-ignored(例如,cargo test -- --include-ignored),以包含标记为 #[ignore] 的测试。wasm-bindgen ABI,而代替为 wasm32 ABI。rustc 不再对可能失败的 const 进行除法、取模和索引操作。glibc 最低版本已经升级到 2.31。armv5te-unknown-linux-gnueabisparc64-unknown-linux-gnuthumbv7neon-unknown-linux-gnueabihfarmv7-unknown-linux-gnueabix86_64-unknown-linux-gnux32codegen 时,始终避免构建优化的 MIR。
官网链接:1.51.0 pre-release testing