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::new
和 Vec::push
之类的 API 无法指示该失败,因此需要采取一些不同的执行路径。当使用 std
crate 时,程序将打印到 stderr
并中止。
从 Rust 1.68.0 开始,包含 std
的二进制文件将继续具有此行为。不包含 std
仅包含 alloc
的二进制文件现在将在分配失败时 panic!
。如果需要,可以通过 #[panic_handler]
进一步调整。
将来, std
的行为也可能会更改,以匹配 alloc
-only 的二进制文件行为。
稳定的 API
{core,std}::pin::pin!
impl From<bool> for {f32,f64}
std::path::MAIN_SEPARATOR_STR
impl DerefMut for PathBuf
Other changes 其他改动
Rust 中的 Android 平台支持现在以 NDK r25 为目标,这对应于支持的最低 API 级别 19 (KitKat)。
查看 Rust 、 Cargo和Clippy中发生的所有变化。
更新公告:https://blog.rust-lang.org/2023/03/09/Rust-1.68.0.html
为您推荐与 rust 相关的帖子: