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 通常会努力减少未定义行为,在安全代码中没有未定义行为,并且在不安全代码中尽可能少。您可能调用 UB 的一个领域是当 panic!
跨越 FFI 边界时。换句话说,像这样:
extern "C" fn panic_in_ffi() {
panic!("Test");
}
这无法工作,因为 panics 的确切机制必须与 "C"
ABI 的工作方式(在此示例中)或其他示例中的任何其他 ABI 进行协调。
在 Rust 1.24 中,此代码现在将中止而不是产生未定义的行为。
有关更多信息,请参阅详细发行说明。
库稳定化
如果您是 str::find
的粉丝,它用于在 &str
中查找给定的 char
,您会很高兴看到这个 pull request:现在快了 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。没有大家,我们不可能做到这一点。 谢谢!