Rust 1.51.0 正式发布

来源: 投稿
作者: 御坂弟弟
2021-03-27

Rust 1.51.0 稳定版正式发布了,此次更新包含 Rust 语言和 Cargo 在相当长一段时间内最重要的新增内容:稳定的 const 泛型 MVP( minimal viable product ,最小可行产品 )版本,并为 Cargo 提供了新的功能解析器。

const 泛型 MVP 版本

在这个版本之前,Rust 允许类型在生命周期或类型上被参数化,以便在没有运行时开销的情况下编写可重用的代码。然而,无法对这些类型的值进行泛型。这一点在数组中最为明显,因为数组的类型定义中包含了它们的长度 ([T; N])。现在在 1.51.0 中,用户可以写出对任何整数、布尔或 char 类型的值进行泛型的代码(使用 struct 或 enum 值仍然是不稳定的)。

struct Array<T, const LENGTH: usize> {
    //          ^^^^^^^^^^^^^^^^^^^ Const generic definition.
    list: [T; LENGTH]
    //        ^^^^^^ We use it here.
}

array::IntoIter 稳定化

作为稳定 const 泛型的一部分,std::array::IntoIter 允许在任何数组上创建一个按值迭代器。以前没有一个方便的方法来迭代一个数组的自有值,只有对它们的引用。

fn main() {
  let array = [1, 2, 3, 4, 5];
  
  // Previously
  for item in array.iter().copied() {
      println!("{}", item);
  }
  
  // Now
  for item in std::array::IntoIter::new(array) {
      println!("{}", item);
  }
}

Cargo 的新功能解析器

该版本的 Cargo.toml 中有一个新的 resolver 选项,可以设置 resolver="2" 来告诉 cargo 使用一种新的方法来解析特性:

  • 开发依赖:当一个包作为普通依赖和开发依赖共享时,仅在当前构建包含开发依赖时,才会启用开发依赖功能。
  • 主机依赖:当一个包作为普通依赖和构建依赖或 proc-macro 共享时,普通依赖的特性将独立于构建依赖或 proc-macro。
  • 目标依赖--当一个包在构建图中出现多次,并且其中一个实例是目标特定的依赖,那么目标特定依赖的特性只有在目标当前正在构建的情况下才会被启用。
[package]
resolver = "2"
# Or if you're using a workspace
[workspace]
resolver = "2"

拆分调试信息

在 macOS 上运行 rustc 时设置 -Csplit-debuginfo=unpacked 标志,或者在 Cargo 中设置 split-debuginfo [profile] 选项为 unpacked ,可以加载 debuginfo 而不需要运行 dsymutil,并将 .o 对象文件留在构建输出目录中,而不是删除它们。这可以显著加快包含 debuginfo 的构建速度,并显著减少磁盘空间的使用量。

[profile.dev]
split-debuginfo = "unpacked"

稳定的 API

在这个版本中,总共提供了 18 个稳定的新方法,用于各种类型,如 slice 和 Peekable。值得注意的新增方法是 ptr::addr_of!和 ptr::addr_of_mut!,它们允许创建未对齐字段的原始指针。新方法列表如下:

Arc::decrement_strong_count
Arc::increment_strong_count
Once::call_once_force
Peekable::next_if_eq
Peekable::next_if
Seek::stream_position
array::IntoIter
panic::panic_any
ptr::addr_of!
ptr::addr_of_mut!
slice::fill_with
slice::split_inclusive_mut
slice::split_inclusive
slice::strip_prefix
slice::strip_suffix
str::split_inclusive
sync::OnceState
task::Wake

其它详细更新内容,请查看官方公告

展开阅读全文
1 收藏
分享
加载中
精彩评论
别人用:=有像rust这样a:🅱:c::d::e::f::g::的吗?
2021-03-27 16:12
2
举报
外行问:为什么有的语言喜欢用::呢?
2021-03-27 11:02
1
举报
Oya
期待5月15号 期待edition2021
2021-03-27 08:31
1
举报
最新评论 (10)
语法还能再丑一点
2021-03-27 16:14
0
回复
举报
比py还丑
2021-03-28 09:56
0
回复
举报
外行问:为什么有的语言喜欢用::呢?
2021-03-27 11:02
1
回复
举报
c++ 也用::,习惯就好了
2021-03-27 11:57
0
回复
举报
外行问:为什么有的语言喜欢用 :=
2021-03-27 11:58
0
回复
举报
别人用:=有像rust这样a:🅱:c::d::e::f::g::的吗?
2021-03-27 16:12
2
回复
举报
其實還真有,大點的C++庫這個很正常。
2021-03-29 21:27
0
回复
举报
放心rust只吸取优点,设计最为合理,其他语言在他面前就是弟弟
2021-03-30 06:16
0
回复
举报
命名规则有点凌乱
2021-03-27 10:06
0
回复
举报
Oya
期待5月15号 期待edition2021
2021-03-27 08:31
1
回复
举报
更多评论
10 评论
1 收藏
分享
返回顶部
顶部