Rust 1.68.0 现已发布


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

  • {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 CargoClippy中发生的所有变化

 

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


相關推薦

2023-06-03

Rust 团队日前发布了 Rust 的新版本 —— 1.70.0,新版本中值得关注的变化包括: Crates.io 默认启用稀疏索引 Cargo 的 "sparse" 协议现在默认启用,用于从 crates.io 读取索引。这个功能之前已经在 Rust 1.68.0 中稳定下来,但仍然需要配

2022-05-20

const fn 签名已引入通用 trait 边界 const fn 签名现已支持在参数中使用impl Trait并返回位置 支持在const fn创建、转换和传递函数指针  递归调用 (Recursive calls) 现在支持设置函数的不透明impl Trait返回类型 编译器

2022-11-18

iew 绑定已经更新,当运行在 webkit2gtk 2.36 或更高版本时,现已支持自定义 protocol header。这修复了在生产环境中手动获取构建资源时出现的 CORS 问题。 增强 macOS 上的标题栏配置功能 此版本合并了一个备受期待的 PR:在 macOS

2022-09-30

问题。 2021 年,谷歌称 AOSP (Android Open Source Project) 现已支持使用 Rust 开发 Android 操作系统(Android 也属于 Linux 发行版)。 2021 年,Linus 再度发表自己对 Linux 内核支持 Rust 的看法,他对此持观望和开放的态度,并表示 Rust

2022-07-02

Rust 1.62.0 稳定版现已发布,具体更新内容如下: cargo add 现在可以使用cargo add直接从命令行添加新的依赖项。该命令支持指定功能和版本。它也可以用来修改现有的依赖项。 例如: cargo add log cargo add serde --features derive cargo add

2022-08-01

一致 Bevy UI 现在使用 Taffy:已经换成了(并帮助维护)现已废弃的 Stretch UI 布局的合作分支 …… 更多详情可查看:https://bevyengine.org/news/bevy-0-8/

2024-07-27

Rust 1.80.0 稳定版现已发布,主要带来以下变化: LazyCell和LazyLock 新的“lazy”类型将值的初始化延迟到首次访问,它们类似于1.70 中稳定的OnceCell和OnceLock类型,但单元格中包含了初始化函数。这完成了从流行的和板条箱中采用到

2022-10-26

Next.js 13 现已发布,一些亮点更新内容包括: app/ Directory (beta):更简单、更快、更少的客户端 JS。 Layouts React Server Components Streaming Turbopack (alpha):速度提高 700 倍的基于 Rust 的 Webpack 替代品。 新的 next/image&n

2022-10-26

语言,可用于 Erlang 虚拟机和 JavaScript 运行时。Gleam v0.24 现已发布,具体更新内容包括: In-project Elixir support Gleam 构建工具一直支持编译用Gleam或Erlang编写的模块,但现在它也支持Elixir模块。当你运行gleam build、gleam test等时,src

2022-04-02

又一个操作系统,但与后两者不同的是,F... Chrome 100 现已升级为稳定版,适用于 Linux / macOS / Windows / Chrome OS。“Chrome 团队很高兴地宣布,Chrome 100 已推广到 Windows、Mac 和 Linux 的稳定频道。Chrome 100 也被推广到我们新的 Windows

2024-03-13

OpenAPI Generator v6.6.0 现已发布,此版本包含了 90 多项增强功能和错误修复,以及 1 个 breaking change (with fallback) 。OpenAPI Generator 可用于在给定 OpenAPI 规范(v2, v3)的情况下自动生成 API 客户端库、server stubs、文档以及配置。

2022-09-06

个用 Rust 编写的快速且功能强大的代码编辑器。Lapce 0.2.0 现已发布,具体更新内容如下: Features/Changes #776:实现了 error lens #780 : 为 packaging 添加 Fedora 规范 #787 : 将 LSP stderr output 添加到日志 #809 : 当插

2023-10-20

公室,我们一起聊 AI!>>> 2023 年 WebAssembly 现状调查报告现已出炉,一些亮点内容如下: Rust 和 JavaScript 的使用量正在持续增长。与此同时,Swift 和 Zig 的采用率也都在显着增加。 开发人员对 Zig、Kotlin 和 C# 语言的使用渴望

2023-04-03

OpenAPI Generator v6.5.0 现已发布。OpenAPI Generator 可用于在给定 OpenAPI 规范(v2, v3)的情况下自动生成 API 客户端库、server stubs、文档以及配置。 该版本附带了一些 bug fixe、10 多种编程语言的功能增强(#Kotlin #Python #csharp #java #erla