Rust 1.26.1 发布

2018年5月29日 · Rust 核心团队

Rust 团队很高兴地宣布 Rust 的新版本 1.26.1。Rust 是一种专注于安全性、速度和并发性的系统编程语言。

如果您之前通过 rustup 安装了 Rust,那么获取 Rust 1.26.1 非常简单,只需运行:

$ rustup update stable

如果您还没有安装 rustup,可以从我们网站上的相应页面获取 rustup,并查看 GitHub 上1.26.1 的详细发布说明

1.26.1 稳定版包含哪些内容

在 1.26.0 中发现了一些问题,这些问题被认为足以进行补丁发布。

更改的快速摘要

  • RLS 不再干扰命令行构建
  • Rustfmt 在某些情况下停止了对文本的不良格式化
  • 不再允许通过 impl Trait 从 main 返回,其中 Trait 不是 Termination
  • ::<> (涡轮鱼) 不再适用于类型为 impl Trait 的方法参数
  • 在 const 上下文中,NaN > NaN 不再返回 true
  • rustup 不应再因某些平台上缺少文档而失败

如果您的代码继续编译,只有浮点比较的更改可能会改变行为。

RLS 不再干扰命令行构建

1.26.0 附带的 RLS 版本使用了与命令行 Cargo 相同的目标目录,这意味着在两者之间切换会导致一切都被重新编译。对于 Windows 用户来说,由于 RLS 或编译器遗留未释放的文件系统锁,这个问题变得更加糟糕,导致错误率增加。后一个错误尚未修复,但随着第一个错误的修复,它的发生频率要低得多。

Rustfmt 不良格式化

以前,rustfmt 会过度缩进多行字符串文字,现在已修复。

当 Trait 不是 Termination 时,不再允许从 main 返回 impl Trait

以前,我们只检查底层类型是否实现了 Termination trait。现在,只能在 stable 上返回具体类型,因为除了 impl Termination 之外的任何类型都无法工作,但是该 trait 目前不稳定,无法导入。

例如,这在 1.26.1 上将不再起作用

fn main() -> impl Copy {}

但这将继续起作用,因为它没有尝试通过 impl Trait 返回任何隐藏类型,而是明确地命名类型。

fn main() -> Result<(), std::io::Error> {
    Ok(())
}

涡轮鱼不再适用于带有 impl Trait 的方法参数

以前,我们意外地允许代码指定使用 impl Trait 的方法参数的类型。在 1.26.0 上,下面的代码可以工作,但是涡轮鱼(下面的 ::<u32>)应该如何与 impl Trait 交互尚未决定,因此我们阻止使用涡轮鱼,直到我们确定语义符合我们的期望。

struct Foo;

impl Foo {
    fn bar(&self, _arg: impl Copy) {}
}

fn main() {
    Foo.bar::<u32>(0);
}

在常量上下文中更改了浮点比较

以前,在常量上下文中将 NaN 与其他浮点数进行比较时,会返回 true,这是一个错误;现在,此比较返回 false。在某些情况下,这可能意味着代码的行为将发生变化,但我们预计这种情况相对不太可能发生。

use std::f64::NAN;
const FOO: bool = ::std::f64::NAN >= ::std::f64::NAN;
# On 1.26.0
assert_eq!(FOO, true);
# On 1.26.1
assert_eq!(FOO, false);

rustup 现在应该可以在缺少文档的平台上安装 stable 版本

在 1.26 的开发周期中,我们对如何构建标准库的文档进行了更改,这导致我们停止为各种第二层平台生成文档组件。这导致在这些平台上运行 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