Rust 团队很高兴宣布 Rust 的新版本 1.49.0。Rust 是一种编程语言,它赋予每个人构建可靠且高效软件的能力。
如果您之前通过 rustup 安装了 Rust 的旧版本,获取 Rust 1.49.0 非常简单,只需
$ rustup update stable
如果您还没有安装,您可以从我们网站上的相应页面获取 rustup
,并查看 GitHub 上的1.49.0 的详细发布说明。
1.49.0 稳定版中的新内容
在这个版本中,我们添加了一些新的目标,并对测试框架进行了改进。查看详细的发布说明,了解本文未涵盖的其他更改。
64 位 ARM Linux 达到 Tier 1
Rust 编译器支持各种各样的目标,但 Rust 团队无法为所有目标提供相同的支持级别。为了清楚地标记每个目标的支持程度,我们使用分层系统
- Tier 3 目标在技术上受编译器支持,但我们不检查其代码是否构建或通过测试,并且在我们的发布版本中不提供任何预构建的二进制文件。
- Tier 2 目标保证构建,我们提供预构建的二进制文件,但我们不在这些平台上执行测试套件:生成的二进制文件可能无法正常工作或可能存在错误。
- Tier 1 目标提供最高的支持保证,我们针对编译器中合并的每个更改,在这些平台上运行完整的测试套件。预构建的二进制文件也可用。
Rust 1.49.0 将 aarch64-unknown-linux-gnu
目标提升到 Tier 1 支持,为运行 Linux 的 64 位 ARM 系统用户提供最高保证!我们预计此更改将有利于从嵌入式到桌面和服务器的各种工作负载。
这是项目的一个重要里程碑,因为这是第一个非 x86 目标达到 Tier 1 支持:我们希望这将为将来更多目标达到最高层铺平道路。
请注意,Android 不受此更改的影响,因为它使用不同的 Tier 2 目标。
64 位 ARM macOS 和 Windows 达到 Tier 2
Rust 1.49.0 还包括两个达到 Tier 2 支持的目标
aarch64-apple-darwin
目标为 Apple M1 系统上的 Rust 提供支持。aarch64-pc-windows-msvc
目标为运行 ARM 上的 Windows 的 64 位 ARM 设备上的 Rust 提供支持。
从现在开始,开发人员可以期待这两个目标都拥有可通过 rustup
安装的预构建二进制文件!不过,Rust 团队没有在这些平台上运行测试套件,因此可能存在错误或不稳定性。
测试框架捕获线程中的输出
Rust 的内置测试框架没有太多功能,但这并不意味着它无法改进!考虑一个看起来像这样的测试
#[test]
fn thready_pass() {
println!("fee");
std::thread::spawn(|| {
println!("fie");
println!("foe");
})
.join()
.unwrap();
println!("fum");
}
以下是 Rust 1.49.0 之前运行此测试的样子
❯ cargo +1.48.0 test
Compiling threadtest v0.1.0 (C:\threadtest)
Finished test [unoptimized + debuginfo] target(s) in 0.38s
Running target\debug\deps\threadtest-02f42ffd9836cae5.exe
running 1 test
fie
foe
test thready_pass ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Doc-tests threadtest
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
您可以看到线程的输出被打印出来,与测试框架本身的输出混合在一起。如果每个 println!
都像打印“fum
”的那个一样工作,那不是很好吗?好吧,这就是 Rust 1.49.0 中的行为
❯ cargo test
Compiling threadtest v0.1.0 (C:\threadtest)
Finished test [unoptimized + debuginfo] target(s) in 0.52s
Running target\debug\deps\threadtest-40aabfaa345584be.exe
running 1 test
test thready_pass ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests threadtest
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
但不用担心;如果测试失败,您仍然会看到所有输出。通过在测试末尾添加 panic!
,我们可以看到失败的样子
❯ cargo test
Compiling threadtest v0.1.0 (C:\threadtest)
Finished test [unoptimized + debuginfo] target(s) in 0.52s
Running target\debug\deps\threadtest-40aabfaa345584be.exe
running 1 test
test thready_pass ... FAILED
failures:
---- thready_pass stdout ----
fee
fie
foe
fum
thread 'thready_pass' panicked at 'explicit panic', src\lib.rs:11:5
具体来说,测试运行器确保捕获输出,并在测试失败时保存它。
库更改
在 Rust 1.49.0 中,有三个新的稳定函数
还有两个函数被设置为 const
查看详细的发布说明,了解其他更改。
其他更改
Rust 1.49.0 版本中还有其他更改:查看Rust、Cargo 和Clippy 中的更改。
1.49.0 的贡献者
许多人共同创建了 Rust 1.49.0。没有你们,我们不可能做到。 感谢!