Rust 1.70.0 正式发布


Rust 团队日前发布了 Rust 的新版本 —— 1.70.0,新版本中值得关注的变化包括:

Crates.io 默认启用稀疏索引

Cargo 的 "sparse" 协议现在默认启用,用于从 crates.io 读取索引。这个功能之前已经在 Rust 1.68.0 中稳定下来,但仍然需要配置才能在 crates.io 中使用。原计划就是在 1.70.0 中默认启用该功能的,现在如期实现。

当你从 crates.io 的索引中获取信息时,你应该看到性能的大幅提高。如果因为某些原因,你需要保持以前的默认状态,即使用 GitHub 托管的 git 索引,可以使用registries.crates-io.protocol配置设置来改变默认状态。

需要注意的是,改变访问方式的一个副作用是,这也改变了 crate cache 的路径,所以依赖将被重新下载。

OnceCell 和 OnceLock

OnceCell 和它的线程安全对应类型 OnceLock两个新的类型已经稳定下来,用于共享数据的一次性初始化。这两种类型可以用在任何不希望立即构建的地方。

use std::sync::OnceLock;

static WINNER: OnceLock<&str> = OnceLock::new();

fn main() {
let winner = std::thread::scope(|s| {
s.spawn(|| WINNER.set("thread"));

std::thread::yield_now(); // give them a chance...

WINNER.get_or_init(|| "main")
});

println!("{winner} wins!");
}

诸如lazy_staticonce_cell等 crate 在过去填补了这一需求,但现在这些构建块是标准库的一部分,由once_cellunsyncsync模块移植过来。未来还有更多的方法可能会被稳定化,还有配套 LazyCellLazyLock 存储其初始化函数的类型。

IsTerminal

这个新稳定的特性 is_terminal,用来确定一个给定的文件 descriptor(描述符)或 handle(句柄)是否代表一个终端或 TTY。一个常见的用例是让程序区分运行在脚本模式还是交互模式下,比如在交互式模式下呈现颜色或者是完整的 TUI。

use std::io::{stdout, IsTerminal};

fn main() {
let use_color = stdout().is_terminal();
// if so, add color codes to program output...
}

调试信息的命名级别

-Cdebuginfo编译器选项以前只支持数字 0...=2 来增加调试信息量,Cargo 在开发和测试配置文件中默认为2,在发布和工作台配置文件中默认为 0。这些调试级别现在可以通过名称来设置:"none"(0)、"limited"(1)和 "full"(2),以及两个新的级别:"line-directives-only"和 "line-tables-only"。

注意,这些命名的选项还不能通过Cargo.toml使用,在下一个 1.71 版本中会有这方面的支持。

test CLI 选项

#[test] 函数被编译时,可执行文件从 test crate 获得一个命令行接口。这个 CLI 有很多选项,包括一些尚未稳定的选项,需要指定-Zunstable-options,就像 Rust 工具链中的许多其他命令一样。然而,虽然这只是在 nightly 构建中被允许的,但这个限制在test中并不适用。不过,从 1.70.0 开始,Rust 的稳定版和测试版将不再允许不稳定的test选项。

在一些已知的情况下,不稳定的选项可能在用户不知情的情况下被使用,特别是 IntelliJ Rust 和其他 IDE 插件中使用的--format json

更多详情可查看:https://blog.rust-lang.org/2023/06/01/Rust-1.70.0.html


相關推薦

2023-07-18

近日,Rust开源社区发布1.71.0版本,实现对龙架构(LoongArch)指令集的原生支持。 龙架构操作系统发行版和开发者可基于上游社区源代码构建或直接下载Rust开源社区发布的龙架构二进制版本。Rust开发者将在龙架构平台上获得良

2023-03-11

,可以读取 crates 的索引,以及用于在 crates.io 注册中心发布的的基础设施。 之前的 git 协议(现在仍然是默认协议)是克隆一个存储库,该存储库会索引注册表中所有可用的 crates ,但这已经开始达到扩展的最大限制,以至于

2022-12-12

Linus Torvalds 宣布 Linux 6.1 内核系列正式发布! Linux 6.1 内核系列集成了改进的页面回收代码的多代 LRU (MGLRU) 、初始的 Rust 语言支持(仍在构建中)、新的 AMD 平台管理框架、各种开源图形驱动程序改进、Btrfs 性能优化、Kernel Memory

2022-06-20

Tauri 1.0 已正式发布。 Tauri 是一个桌面 UI 框架,可让开发者使用每个平台的 Webview 技术栈为所有主要桌面操作系统构建应用程序,目前支持 Windows/macOS/Linux 等平台。开发者通过 Tauri 几乎可以使用任何编译为 HTML、JS 和 CSS 的前端

2022-02-28

Rust 1.59.0 稳定版已正式发布,新版本最值得关注的特性是支持在代码中内联汇编 (Inline assembly),其他变化包括:引入解构式赋值、默认关闭增量编译,以及 Const 泛型参数支持设置默认值等。 内联汇编 (Inline assembly) 此项特

2023-04-05

t 1.0 已发布,标志着项目已顺利从开发阶段“毕业”,可正式用于生产环境。 1.0 文档:https://slint-ui.com/releases/1.0.0/docs/slint/ Slint(最初称为"SixtyFPS")是一个 Rust 编写的综合性 UI 工具包,用于为桌面和嵌入式设备构建原生用户

2022-09-03

Diesel 2.0.0 已正式发布。据称此版本开发周期长达 3 年,包含了超过 1700 次 commit。 Diesel 是一个安全可扩展的 Rust ORM 框架和查询构建工具。Diesel 可避免运行时错误,提供最好的性能。 2.0 添加了许多新功能,并重写了大部

2022-09-27

Linus 在邮件提到,如果没有出现意外情况,计划下周正式发布 Linux Kernel 6.0。 从版本号来看,Linux Kernel 6.0 当然是一个大版本更新,不过备受关注的 Rust 要在下个大版本才会被合并进入。在 Linux 内核维护者峰会上,Linus 表示

2022-11-04

型使用#[non_exhaustive]变体进行as转换添加错误处理 let else正式稳定 let PATTERN: TYPE = EXPRESSION else { DIVERGING_CODE; }; 泛型关联类型 (Generic Associated Types, GATs) 正式稳定 Lifetime、type 和 const 泛型现在可以在关联类型上进行定义,

2023-01-18

DB3网络项目介绍  DB3 Network是一款开源的去中心化的firebase替代品,在DB3 Network上面可以低成本快速构建复杂的去中心化数据应用,比如去中心化论坛,去中心化社交 DB3网络要解决什么问题 在没有db3 network情况下,如果你

2023-03-04

此,项目内部达成了广泛共识,我们需要创建一个更好的正式治理结构,以消除其中的一些模糊性和冲突;并拥有处理这些问题的机制,确保不会再出现类似的危机。我们不想让事情再次发展到那种地步。” Rust 诞生于 Mozilla

2023-03-03

布:经过近一年的开源研发工作,时序数据库 CeresDB 1.0 正式发布,达到生产可用标准。 CeresDB 1.0 官方中文文档:https://docs.ceresdb.io/cn/ CeresDB 1.0 核心特性介绍 存储引擎 支持列式混合存储 高效 XOR 过滤器 云原生分布

2023-10-18

定性、引入新的预览模式、引入 fix safety 等级,以及执行正式的版本控制策略。 新的预览模式 通过预览模式,用户可自行选择体验新功能——用于启用新规则、不稳定修复和实验性代码分析。 [tool.ruff] preview = true 引

2022-02-28

SP 实现增加了难度。 日前 rust-analyzer 加入 Rust 组织,正式成为 Rust 组织的一份子。这一组织上的变化对 rust-analyzer 的用户和贡献者来说不会有任何变化,反而是加入组织后,解除了技术工作上的障碍,使 rust-analyzer 在不久的