Rust开发团队很高兴地宣布发布Rust的新版本:1.28.0。 Rust是一种针对安全性,速度和并行代码执行的系统编程语言。
如果您使用rustup安装了Rust的早期版本,那么只需将Rust升级到1.28.0版本,您只需执行以下操作:
$ rustup update stable
如果尚未安装rustup,则可以从我们网站的相应页面进行安装 。 GitHub上提供了Rust 1.28.0的详细发行说明 。
稳定版1.28.0中包含什么
全球分配者
使用分配器,Rust程序在运行时获取内存。 以前,Rust不允许更改内存分配方式,这在某些情况下限制了它的使用。 在某些平台上,使用了jemalloc;在其他平台上,则使用了系统分配器,但用户无法控制它。 在版本1.28.0中, #[global_allocator]
属性已稳定,这使Rust程序可以选择系统分配器,并定义新的分配器,以实现GlobalAlloc
。
在某些平台上,Rust程序的默认分配器是jemalloc。 现在,标准库提供了系统分配器句柄,您可以使用它在需要时通过使用带有#[global_allocator]
属性的静态声明来切换到使用系统分配器。
use std::alloc::System; #[global_allocator] static GLOBAL: System = System; fn main() { let mut v = Vec::new();
但是,有时您需要为应用程序的特定功能区域定义自己的分配器。 通过实现GlobalAlloc
这也相对容易实现。 您可以在文档中阅读有关如何执行此操作的更多信息。
继续进行改进诊断的工作,这次重点是格式化:
format!("{_foo}", _foo = 6usize);
以前,此位置的错误消息很少:
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
稳定之外,此版本中还稳定了NonZero
数字类型。 这些是围绕标准无符号整数类型的包装器类型: NonZeroU8
, NonZeroU16
, NonZeroU32
, NonZeroU64
, NonZeroU128
和NonZeroUsize
。
它们使您可以优化存储数据的大小。 例如, Option<u8>
占用两个字节,而Option<NonZeroU8>
一个字节。 请注意,即使将NonZeroU8
包裹在另一个结构中,该优化仍然存在。 以下示例显示,即使将Door
放置在Option
,它仍然占用一个字节。 此优化也适用于用户定义的枚举;这里的Option
并不特殊。
use std::mem; use std::num::NonZeroU8; struct Key(NonZeroU8); struct Door { key: Key, } fn main() { assert_eq!(mem::size_of::<Door>(), 1); assert_eq!(mem::size_of::<Option<Door>>(), 1); }
许多其他库组件也已稳定,可以在详细的发行说明中找到其完整列表。
货运增强
Cargo将不再允许您使用修改src目录的构建脚本发布软件包。 软件包中的src
目录应该被认为是不可变的。
开发人员1.28.0
很多人参与了Rust 1.28的开发。 没有你们每个人,我们不可能完成工作。 谢谢你
来自翻译:我感谢ruRust社区的成员和ozkriff亲自为他们的翻译和校对提供的帮助