上午查阅 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_count
Arc::increment_strong_count
Once::call_once_force
Peekable::next_if_eq
Peekable::next_if
Seek::stream_position
array::IntoIter
panic::panic_any
ptr::addr_of!
ptr::addr_of_mut!
slice::fill_with
slice::split_inclusive_mut
slice::split_inclusive
slice::strip_prefix
slice::strip_suffix
str::split_inclusive
sync::OnceState
task::Wake
split-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-gnueabi
sparc64-unknown-linux-gnu
thumbv7neon-unknown-linux-gnueabihf
armv7-unknown-linux-gnueabi
x86_64-unknown-linux-gnux32
codegen
时,始终避免构建优化的 MIR
。
官网链接:1.51.0 pre-release testing