Rust 1.43.0 版本发布

2020年4月23日 · Rust 发布团队

Rust 团队很高兴地宣布 Rust 的新版本 1.43.0 发布。Rust 是一种编程语言,旨在帮助所有人构建可靠且高效的软件。

如果您之前通过 rustup 安装了 Rust 的版本,那么升级到 Rust 1.43.0 非常简单,只需执行:

$ rustup update stable

如果您尚未安装 rustup,您可以从我们网站的相应页面获取 rustup,并查看 GitHub 上关于 1.43.0 的详细发布说明

1.43.0 稳定版的新特性

此版本更新幅度较小。没有新的主要功能。我们添加了一些新的稳定 API、一些编译器性能改进以及一个小的宏相关特性。请参阅详细的发布说明以了解本文未涵盖的其他更改。

item 片段

在宏中,您可以使用 item 片段将条目插入到 trait、impl 和 extern 代码块的主体中。例如

macro_rules! mac_trait {
    ($i:item) => {
        trait T { $i }
    }
}
mac_trait! {
    fn foo() {}
}

这将生成

trait T {
    fn foo() {}
}

关于原始类型的类型推断

改进了关于原始类型、引用和二进制运算的类型推断。一个代码示例可以更容易地理解这一点:此代码在 Rust 1.42 上编译失败,但在 Rust 1.43 中可以编译。

let n: f32 = 0.0 + &0.0;

在 Rust 1.42 中,您会收到一个错误,提示 “嘿,我不知道如何将 f64 和 &f64 相加得到 f32 的结果。” 现在,该算法可以正确地判断 0.0&0.0 都应该是 f32 类型。

用于测试的新的 Cargo 环境变量

为了帮助集成测试,Cargo 将设置一些新的环境变量

通过示例可以最容易地解释这一点:假设我们正在开发一个名为 “cli” 的命令行项目。 如果我们正在编写集成测试,我们希望调用该 cli 二进制文件并查看其行为。 在运行测试和基准测试时,Cargo 将设置一个名为 CARGO_BIN_EXE_cli 的环境变量,我可以在测试中使用它

let exe = env!("CARGO_BIN_EXE_cli");

这使得调用 cli 更加容易,因为我们现在可以直接获得它的路径。

库变更

现在您可以直接在浮点数和整数上使用关联常量,而无需导入模块。也就是说,您现在可以编写 u32::MAXf32::NAN,而无需 use std::u32;use std::f32;

有一个新的 primitive 模块重新导出了 Rust 的原始类型。当您编写宏并希望确保类型不被遮蔽时,这可能很有用。

此外,我们稳定了六个新的 API

其他变更

Rust 1.43.0 版本中还有其他更改:请查看 RustCargoClippy 中的更改。

1.43.0 版本的贡献者

许多人齐心协力创建了 Rust 1.43.0 版本。没有你们大家,我们不可能做到。 谢谢!