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
Cell
、RefCell
和UnsafeCell
的new
函数- 各种
Atomic
整数类型的new
函数 {integer}::min_value
和max_value
mem
的size_of
和align_of
ptr::null
和null_mut
有关更多信息,请查看详细的发布说明。
Cargo 功能
此版本的主要功能是默认启用增量编译,如上所述。
有关更多信息,请查看详细的发布说明。
1.24.0 的贡献者
许多人共同创建了 Rust 1.24。没有你们,我们无法做到。感谢!