宣布 Rust 1.27.1

2018 年 7 月 10 日 · Rust 核心团队

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

如果您已经通过 rustup 安装了旧版本的 Rust,获取 Rust 1.27.1 非常简单:

$ rustup update stable

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

1.27.1 稳定版中的内容

此补丁版本修复了 match 表达式借用检查器验证中的一个错误。此错误是在 1.26.0 中引入的,当时match 语法糖被稳定化。我们不确定此特定问题是否真的表明借用检查器存在不安全性,但怀疑它可能存在,因此决定发布一个点版本。以下代码示例在应用此补丁之前会导致编译器内部出现 panic。

fn main() {
    let a = vec!["".to_string()];
    a.iter().enumerate()
            .take_while(|(_, &t)| false)
            .collect::<Vec<_>>();
}

1.27.1 将使用以下错误消息拒绝上述代码

error[E0507]: cannot move out of borrowed content
    --> src/main.rs:4:30
    |
  4 |             .take_while(|(_, &t)| false)
    |                              ^-
    |                              ||
    |                              |hint: to prevent move, use `ref t` or `ref mut t`
    |                              cannot move out of borrowed content

error: aborting due to previous error

除了 match 语法糖修复之外,还在 rustdoc(Rust 项目的标准文档生成器)中发现了一个安全漏洞。该漏洞通过此版本中包含的第二个补丁得到解决,方法是删除 rustdoc 插件的默认搜索路径。此功能将在 Rust 1.28.0 中完全删除。此插件基础设施早于 Rust 1.0,并且从未在稳定版中可用,并且在 nightly 版中也已无法使用很多个月。预计在下一个版本中将听到更多关于删除的信息:当前补丁删除了默认搜索路径(相反,用户必须显式指定它),而下一个版本将完全删除此功能。