Rust 1.51.0 正式发布

栏目: 软件资讯 · 发布时间: 5年前

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

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

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning Google Maps API 3

Beginning Google Maps API 3

Gabriel Svennerberg / Apress / 2010-07-27 / $39.99

This book is about the next generation of the Google Maps API. It will provide the reader with the skills and knowledge necessary to incorporate Google Maps v3 on web pages in both desktop and mobile ......一起来看看 《Beginning Google Maps API 3》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具