Rust 团队很高兴宣布 Rust 的新版本 1.28.0 发布。Rust 是一种系统编程语言,专注于安全性、速度和并发性。
如果你之前已经通过 rustup 安装了 Rust,那么获取 Rust 1.28.0 就像这样简单:
如果你还没有安装,可以从我们网站的相应页面获取 rustup,并在 GitHub 上查阅1.28.0 的详细发布说明。
1.28.0 稳定版有什么新特性
全局分配器
分配器是 Rust 程序在运行时从系统中获取内存的方式。以前,Rust 不允许更改内存获取方式,这阻止了一些用例。在某些平台上,这意味着使用 jemalloc,在其他平台上则使用系统分配器,但用户无法控制这个关键组件。在 1.28.0 版本中,#[global_allocator] 属性现在稳定了,这允许 Rust 程序将其分配器设置为系统分配器,并通过实现 GlobalAlloc trait 来定义新的分配器。
在某些平台上,Rust 程序的默认分配器是 jemalloc。标准库现在提供了系统分配器的句柄,可以通过声明一个静态变量并使用 #[global_allocator] 属性标记它,以便在需要时切换到系统分配器。
use System;
static GLOBAL: System = System;
然而,有时你可能想为特定的应用领域定义一个自定义分配器。这也可以通过实现 GlobalAlloc trait 相对容易地实现。你可以在文档中阅读更多关于如何做到这一点的内容。
改进的格式化错误消息
诊断方面的改进工作仍在继续,这次重点放在了格式化上
format!;
以前,此处发出的错误消息相对较差
error: invalid format string: expected `'}'`, found `'_'`
|
2 | format!("{_foo}", _foo = 6usize);
| ^^^^^^^^
现在,我们发出一个诊断信息,告诉你格式字符串无效的具体原因
error: invalid format string: invalid argument name `_foo`
|
2 | let _ = format!("{_foo}", _foo = 6usize);
| ^^^^ invalid argument name in format string
|
= note: argument names cannot start with an underscore
查阅详细发布说明了解更多信息。
库稳定化
我们已经提到了 GlobalAlloc trait 的稳定化,但另一个重要的稳定化是 NonZero 数字类型。它们是标准无符号整数类型的包装器:NonZeroU8、NonZeroU16、NonZeroU32、NonZeroU64、NonZeroU128 和 NonZeroUsize。
这有助于大小优化,例如,Option<u8> 大小为两个字节,但 Option<NonZeroU8> 仅为一个字节。请注意,即使将 NonZeroU8 包装在另一个结构体中,此优化仍然有效;下面的示例说明了尽管 Door 被放在 Option 中,它的大小仍然是 1 个字节。此优化也适用于用户定义的枚举:Option 并非特殊。
use mem;
use NonZeroU8;
;
许多其他库也已稳定:你可以查阅更详细的发布说明了解完整详情。
Cargo 特性
Cargo 现在将不再允许发布构建脚本会修改 src 目录的 crate。 crate 中的 src 目录应被视为不可变的。
1.28.0 贡献者
许多人齐心协力促成了 Rust 1.28 的发布。没有你们,这一切不可能实现。感谢各位!!