日前,Rust开发团队发布Rust的新版本1.47.0。Rust是一种编程语言,它使每个人都可以构建可靠且高效的软件。
1.47.0版本功能
Rust 1.47.0 stable 版本添加了一个期待已久的标准库功能,但是该版本中没有包含任何新的语言功能。它主要是语言可用性方面的改善,库的稳定和定义及工具链的改善。
数组Trait
此前Rust没有办法对整数值进行泛型。这会导致数组出现问题,因为数组的类型部分包含整数。[T; N]表示类型为T,长度为N的数组。因为没有通用的方法N,所以必须为每个需要N长度数组手动实现阵列特征。对于标准库,最多32个N。
开发团队一直在研究一种称为"常量通用"的功能,使用该功能将使N可以通用。由于目前还没有稳定const泛型,对该功能不在深入讨论。该功能的核心已在最新版本的编译器中实现了,对使用该标准库在任意长度的数组上实现特征的标准库都可以接受。相对比而言,在Rust 1.46下面的代码会抛出一个错误:
fn main() {
let xs = [0; 34];
println!("{:?}", xs);
}
而在Rust 1.47中,将能正确输出组数。
这将使数组对人们更加有用,尽管直到const泛型功能稳定下来,图书馆才能针对自己的特征进行这种实现。目前尚无稳定const泛型稳定的估计日期。
回溯简洁模式
在Rust 1.18版本中对rustc在panic上显示的回溯进行了一些更改。回溯中的很多信息,在大多数时候都没有用。在Rust 1.47.0中,对此做了优化,现在只提供必要的信息,比如下面的程序xxtes.rs:
fn main() {
panic!();
}
编译后,用RUST_BACKTRACE=1 ./xxtest执行,之前版本回溯结果会非常繁琐
在Rust 1.47.0中,回溯将会十分简洁:
这样一来,就可以更轻松地了解Panic的真正原因。如果要查看所有详细的回溯内容,可以通过设置RUST_BACKTRACE=full来查看。
LLVM 11
LLVM底层已经升级到LLVM 11。编译器仍然支持使用早于8的LLVM版本进行编译,但是默认情况下,为11。
Windows control-flow-guard选项
rustc现在支持 -C control-flow-guard,该选项将在Windows上打开Control Flow Guard。其他平台会自动忽略此标志。
基本库变化
此外,该版本还稳定了9个新的API:
Ident::new_raw
Range::is_empty
RangeInclusive::is_empty
Result::as_deref
Result::as_deref_mut
Vec::leak
pointer::offset_from
f32::TAU
f64::TAU
并提供了以下以前稳定的API const:
适用于所有NonZero整数的新的new方法。
适用于所有整数的checked_add,checked_sub,checked_mul,checked_neg,checked_shl,checked_shr,saturating_add,saturating_sub,和saturating_mul 方法。
适用于所有符号整数的checked_abs,saturating_abs,saturating_neg,和signum方法。
char和u8类型的is_ascii_alphabetic,is_ascii_uppercase,is_ascii_lowercase,is_ascii_alphanumeric,is_ascii_digit,is_ascii_hexdigit,is_ascii_punctuation,is_ascii_graphic,is_ascii_whitespace,is_ascii_control等方法。
有关更多信息,参见详细的发行说明。
其他变化
Rustdoc已经支持Ayu主题。
Rust 1.47.0发行版中还有带来了Cargo和Clippy方面更改,具体请参考官方详细文档。
升级更新
如果你通过rustup安装过Rust,那么就可以一键升级到最新的Rust 1.47.0:
rustup update stable
如果升级包下载比较慢,可以设置使用国内镜像站,比如清华镜像TUNA:
也可以从rust官网或者github仓库下载Rust,详细安装和问题文档可以查看GitHub仓库(/github:/rust-lang/rust)相关说明和问题。