宣布 Rust 1.24

2018 年 2 月 15 日 · Rust 核心团队

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

如果您之前通过 rustup 安装了 Rust,获取 Rust 1.24.0 就像这样

$ rustup update stable

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

1.24.0 稳定版中的内容

此版本包含两个非常令人兴奋的新功能:rustfmt 和增量编译!

rustfmt

多年来,我们一直想要一个工具,它可以自动将您的 Rust 代码重新格式化为某种“标准样式”。在此版本中,我们很高兴地宣布,rustfmt预览版可以与 1.24 稳定版一起使用。要试用它,请执行以下操作

$ rustup component add rustfmt-preview

这里有两个重要的方面:首先,您在这里使用的是 rustup component add 而不是 cargo install。如果您之前通过 cargo install 使用过 rustfmt,则应先卸载它。其次,正如其名称所示,这是一个预览版。rustfmt 尚未达到 1.0 版本,一些内容正在调整,并且正在修复错误。一旦 rustfmt 达到 1.0 版本,我们将发布一个 rustfmt 组件并弃用 rustfmt-preview

在不久的将来,我们计划写一篇关于此发布策略的文章,因为它足够重要,可以单独发文,并且比仅仅发布此版本更广泛。

有关更多信息,请查看GitHub 上的 rustfmt

增量编译

早在 2016 年 9 月(!!!),我们就发布了关于增量编译的文章。虽然这篇文章详细介绍了细节,但基本思想是:当您处理一个项目时,您通常会编译它,然后更改一些小东西,然后再次编译。从历史上看,编译器会编译您的整个项目,无论您更改了多少代码。增量编译的想法是,您只需要编译实际更改的代码,这意味着第二次构建速度更快。

从 Rust 1.24 开始,此功能现在默认启用。这意味着您的构建速度应该会更快!在尝试获得尽可能低的构建时间时,不要忘记 cargo check

这仍然不是编译器性能的最终目标,增量编译本身也是如此。我们将来还有很多工作要做。例如,另一个与性能相关的更改在此版本中稳定发布:codegen-units 现在默认设置为 16。关于此更改的一个小说明:它使构建速度更快,但使最终二进制文件速度稍慢。为了获得最大速度,需要在您的 Cargo.toml 中将 codegen-units 设置为 1,以榨取每一滴性能。

敬请期待!

其他好东西

我们想在这里谈论另一个更改:未定义行为。Rust 通常努力将未定义行为降到最低,在安全代码中没有未定义行为,在不安全代码中尽可能少地出现未定义行为。您可以在 panic! 跨越 FFI 边界时调用 UB 的一个区域。换句话说,就是这个

extern "C" fn panic_in_ffi() {
    panic!("Test");
}

这行不通,因为 panic 工作机制的具体方式必须与 "C" ABI 的工作方式相协调,在本例中,或在其他示例中的任何其他 ABI。

在 Rust 1.24 中,此代码现在将中止,而不是产生未定义行为。

有关更多信息,请查看详细的发布说明

库稳定化

如果您是 str::find 的粉丝,它用于在 &str 中查找给定的 char,您会很高兴看到这个拉取请求:它现在快了 10 倍!这要归功于 memchr[u8]::contains 也使用它,尽管它没有获得如此极端的加速。

此外,在此版本中稳定了一些新的 API

最后,这些函数现在可以在常量表达式中使用,例如,初始化 static

  • CellRefCellUnsafeCellnew 函数
  • 各种 Atomic 整数类型的 new 函数
  • {integer}::min_valuemax_value
  • memsize_ofalign_of
  • ptr::nullnull_mut

有关更多信息,请查看详细的发布说明

Cargo 功能

此版本的主要功能是默认启用增量编译,如上所述。

有关更多信息,请查看详细的发布说明

1.24.0 的贡献者

许多人共同创建了 Rust 1.24。没有你们,我们无法做到。感谢!