Rust 1.39.0 发布,async/.await 终于稳定了

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

内容简介:Rust 1.39.0 已经发布。此版本的亮点包括 async/.await,对 match 守卫 by-move 绑定的共享引用,以及函数参数的属性。 async/.await 稳定 此版本 async/.await 特性已经稳定,这意味着现在可以定义 async 函数和...

Rust 1.39.0 已经发布。此版本的亮点包括 async/.await,对 match 守卫 by-move 绑定的共享引用,以及函数参数的属性。

async/.await 稳定

此版本 async/.await 特性已经稳定,这意味着现在可以定义 async 函数和块,并进行 .await 操作。

async 函数通过 async fn 引入,被调用时会返回一个 Future,该 Future 是一个会挂起的计算,可以使用 .await 运行并完成计算。而除了 async fn,async{...} 和 async move{...} 块也可以用来定义“异步文字”,它们的行为像闭包。

match 守卫引用 by-move 绑定

在 Rust 中进行模式匹配时,一个变量,也就是“绑定”,可以通过以下方式界定:

  • 不可更改或可变地 by-reference。这可以通过诸如ref my_varref mut my_var分别明确地实现,在大多数情况下,绑定模式将自动推导。

  • by-value,或者当绑定变量的类型实现 Copy 时 by-copy,否则 by-move。

以往,Rust 将禁止在表达式的保护结构中共享对 match 表达式中 if 守卫的 by-move 绑定的引用,这意味着以下代码将被拒绝:

fn main() {
    let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    match array {
        nums
//      ---- `nums` is bound by move.
            if nums.iter().sum::<u8>() == 10
//                 ^------ `.iter()` implicitly takes a reference to `nums`.
        => {
            drop(nums);
//          ----------- `nums` was bound by move and so we have ownership.
        }
        _ => unreachable!(),
    }

Rust 1.39 中,上面的代码段现在已被编译器接受,此特性可以为整体的 match 表达式带来更流畅、更一致的体验。

函数参数的属性

现在允许在函数、闭包和函数指针的参数上使用属性。

比如以往这样编写:

#[cfg(windows)]
fn len(slice: &[u16]) -> usize {
    slice.len()
}
#[cfg(not(windows))] 
fn len(slice: &[u8]) -> usize {
    slice.len()
}

现在可以以更简洁的方式:

fn len(
    #[cfg(windows)] slice: &[u16], // This parameter is used on Windows.
    #[cfg(not(windows))] slice: &[u8], // Elsewhere, this one is used.
) -> usize {
    slice.len()
}

这里可以使用的属性包括:

  1. 条件编译:cfg 和 cfg_attr

  2. 控制 lint:allow、warn、deny 与 forbid

  3. 应用于项目的过程宏属性使用的帮助程序属性

这在整个语言生态中提供了一个更具可读性的基于宏的 DSL。

标准库中增加的 const fn

此版本中,以下函数成为 const fn:

  • Vec::new、String::new 与 LinkedList::new
  • str::len、[T]::len 与 str::as_bytes
  • abs、wrapping_abs 与 overflowing_abs

增加到标准库的函数

以下函数已经稳定:

  • Pin::into_inner
  • Instant::checked_duration_since 与 Instant::saturating_duration_since

详情查看更新说明:

https://blog.rust-lang.org/2019/11/07/Rust-1.39.0.html


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

查看所有标签

猜你喜欢:

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

Web Data Mining

Web Data Mining

Bing Liu / Springer / 2011-6-26 / CAD 61.50

Web mining aims to discover useful information and knowledge from Web hyperlinks, page contents, and usage data. Although Web mining uses many conventional data mining techniques, it is not purely an ......一起来看看 《Web Data Mining》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

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

在线XML、JSON转换工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具