Rust 1.64.0釋出:非同步是亮點

banq發表於2022-09-23

每六週釋出一次新版本,在每個新版本中,這裡都有一個包含一些亮點:

1、Rust 現在有一個與非同步相關的新特性:IntoFuture。
.await 語法可用於任何實現 IntoFuture 的東西。
(類似於使用 for 迴圈,您可以遍歷實現 IntoIterator 的任何內容。)
這允許型別提供更簡單的非同步介面:



std::future::{ready, IntoFuture, Ready};
struct Example;
impl IntoFuture for Example {
    type Output = 1.32;
    type IntoFuture = Ready<i32>;
    fn into_future(self) -> Ready<i32> {
     ready(123)
    }
}
async fn example( ) {
    prtntln!("Hello, {}!", Example.await);
}


2、今天的Rust版本還附帶了另外兩個與非同步相關的工具。
std::future::poll_fn函式允許你輕鬆地從一個閉包中建立一個future(就像iter::from_fn用於迭代器)。
std::task::ready! () 宏會提取Poll::Ready中值,或者提前返回Pending。

let f = future::poll_fn(|cx| {
 ...
  let value = ready!(another_future.poll(ex));
  Poll::Ready(value + 1)

});


3、Rust 的 NonZero 型別獲得了用於(無符號)加法、乘法、求冪、絕對數和二次冪計算的新方法,它們都保持“非零性”:它們返回 NonZero 型別,因為我們知道結果永遠不會為零。

 fn  calc(x: NonZeroI32) -> NonZeroll32 {
    // Can't result  in zero, because x is never zero.
    x.unsigned_abs().saturating_add(123)
}


有關 Rust 1.64 中更完整的更改列表,點選標題。
 

相關文章