Rust 团队很高兴宣布 Rust 的新版本 1.26.1。Rust 是一种系统编程语言,专注于安全、速度和并发。
如果您之前通过 rustup 安装了 Rust,获取 Rust 1.26.1 非常简单,只需运行
如果您尚未安装 rustup,可以从我们网站上相应的页面获取 rustup,并在 GitHub 上查看1.26.1 的详细发行说明。
1.26.1 stable 版本包含了什么?
在 1.26.0 中发现了一些问题,这些问题足以发布一个补丁版本。
改动快速摘要
- RLS 不再干扰命令行构建
- Rustfmt 停止在某些情况下错误地格式化文本
- 从 main 函数通过
impl Trait返回时,如果 Trait 不是Termination,则不再被允许 ::<>(turbofish) 不再适用于类型为impl Trait的方法参数NaN > NaN在 const 上下文中不再返回 true- rustup 不应再因某些平台上缺少文档而失败
如果您的代码仍然可以编译,则只有浮点比较的改变可能会影响行为。
RLS 不再干扰命令行构建
1.26.0 版本附带的 RLS 使用了与命令行 Cargo 相同的目标目录,这意味着在两者之间切换会导致所有内容被重新编译。对于 Windows 用户来说,这个问题更加严重,因为 RLS 或编译器未释放文件系统锁,导致错误率增加。后一个 bug 尚未修复,但随着第一个 bug 的修复,它的发生频率已大大降低。
Rustfmt 错误格式化问题
之前,rustfmt 会过度缩进多行字符串字面量,现在此问题已修复。
从 main 函数通过 impl Trait 返回时,如果 Trait 不是 Termination,不再有效
之前,我们只检查了底层类型是否实现了 Termination trait。现在,在 stable 版本中只能返回具体类型,因为除了 impl Termination 外,其他都无效,但该 trait 目前不稳定,无法导入。
例如,以下代码在 1.26.1 中将不再有效
但这仍然有效,因为它不试图通过 impl Trait 返回任何隐藏类型,而是明确指定了类型。
Turbofish 不再适用于带有 impl Trait 的方法参数
之前,我们意外地允许代码指定使用 impl Trait 的方法参数的类型。在 1.26.0 中,下面的代码会起作用,但 turbofish (下面的 ::<u32>) 应该如何与 impl Trait 交互尚未确定,因此我们阻止了 turbofish 的使用,直到我们能确定语义符合我们的预期。
;
const 上下文中的浮点比较已改变
之前,在 const 上下文中将 NaN 与其他浮点数进行大于比较会返回 true,这是一个 bug;现在,此比较返回 false。在某些情况下,这可能意味着代码的行为会改变,但我们预计这种情况相对较少。
use NAN;
const FOO: bool = NAN >= NAN;
// On 1.26.0
assert_eq!;
// On 1.26.1
assert_eq!;
rustup 现在应该可以在缺少文档的平台上安装 stable 版本
在 1.26 的开发周期中,我们更改了构建标准库文档的方式,导致我们停止为许多 tier 2 平台生成文档组件。这导致在这些平台上运行 rustup update 时出现问题,因为 rustup 拒绝部分安装 Rust。有些用户需要运行 rustup install stable 而不是 rustup update 来让 rustup 避免缺少文档组件,但这应该是一次性的问题。
不幸的是,此问题修复得太晚,未能进入 1.26 stable 版本,因此我们在 1.26.1 中添加了此补丁,以便用户能够在这些平台上安装 Rust。
$ rustup update
info: syncing channel updates for 'stable-x86_64-unknown-freebsd'
info: latest update on 2018-05-10, rust version 1.26.0 (a77568041 2018-05-07)
error: component 'rust-docs' for 'x86_64-unknown-freebsd' is unavailable for download