IT资讯 Rust 1.68.0 现已发布

bentley · 2023-03-11 10:00:08 · 热度: 17

1.68.0 稳定版中有什么:

Cargo 的稀疏协议

Cargo 的“稀疏”注册协议已经稳定,可以读取 crates 的索引,以及用于在 crates.io 注册中心发布的的基础设施。

之前的 git 协议(现在仍然是默认协议)是克隆一个存储库,该存储库会索引注册表中所有可用的 crates ,但这已经开始达到扩展的最大限制,以至于在更新该存储库时会出现明显的延迟。

新协议应该可以在访问 crate 时提供明显的性能改进。

要在 crates.io 中使用稀疏协议,请设置环境变量 CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse 

或编辑 .cargo/config.toml 文件,添加:

[registries.crates-io]
protocol = "sparse"

目前 Rust 团队 计划在几个月后,Cargo 的稀疏协议成为 Rust 1.70.0 版本中 crates.io 的默认协议。

有关更多信息,请参阅 Inside Rust 博客上的公告 ,以及RFC 2789和 Cargo Book 中的文档

本地 Pin 建设

新的 pin! 宏从 T 表达式构造 Pin<&mut T> ,在本地状态中匿名捕获。通常称为堆栈固定,但“堆栈”也可以是 async fn 或块的捕获状态。

这个宏类似于一些 crate,比如 tokio::pin! ,但是标准库可以利用 Pin 内部结构和临时生命周期扩展来获得更像表达式的宏。

fn block_on<F: Future>(future: F) -> F::Output {
    let waker_that_unparks_thread = todo!();
    let mut cx = Context::from_waker(&waker_that_unparks_thread);
    // Pin the future so it can be polled.
    let mut pinned_future = pin!(future);
    loop {
        match pinned_future.as_mut().poll(&mut cx) {
            Poll::Pending => thread::park(),
            Poll::Ready(result) => return result,
        }
    }
}

在这个例子中,原来的 future 将被移动到临时本地,由新的 pinned_future 引用,类型为 Pin<&mut F>

默认 alloc 错误处理器

当 Rust 中的分配失败时, Box::newVec::push 之类的 API 无法指示该失败,因此需要采取一些不同的执行路径。当使用 std crate 时,程序将打印到 stderr 并中止。

从 Rust 1.68.0 开始,包含 std 的二进制文件将继续具有此行为。不包含 std 仅包含 alloc 的二进制文件现在将在分配失败时 panic! 。如果需要,可以通过 #[panic_handler] 进一步调整。

将来, std 的行为也可能会更改,以匹配 alloc -only 的二进制文件行为。

稳定的 API

Other changes  其他改动

Rust 中的 Android 平台支持现在以 NDK r25 为目标,这对应于支持的最低 API 级别 19 (KitKat)。

查看 Rust CargoClippy中发生的所有变化

 

更新公告:https://blog.rust-lang.org/2023/03/09/Rust-1.68.0.html

为您推荐与 rust 相关的帖子:

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册