Rust 1.80.0 发布公告

Rust 1.80.0 发布公告

💡 原文英文,约900词,阅读约需3分钟。
📝

内容提要

Rust 1.80.0发布,新增LazyCell和LazyLock类型,实现延迟初始化。新增cfg检查功能,可检查Cargo.toml中的特性名和值。模式中可使用独占范围。其他改进和稳定的API。

🔎

延伸解读

LazyLock 与 LazyCell 的线程安全差异

LazyLock 是线程安全的,适用于静态值初始化,多个线程访问时会确保只初始化一次。LazyCell 则不支持线程同步,因此不能用于 static,但可用于 thread_local! 静态变量,每个线程有独立的初始化。选择时需根据是否需要跨线程共享来决定。

Cargo 1.80 的 cfg 检查如何帮助捕捉配置错误

Cargo 1.80 默认启用对 cfg 名称和值的检查,包括 Cargo.toml 中的特性名和构建脚本输出的 cargo::rustc-check-cfg。当使用未预期的 cfg 条件时,会触发 unexpected_cfgs 警告,帮助发现拼写错误或配置错误。例如,特性名拼写错误会被警告并提示正确的值。

模式中独占范围的使用与注意事项

Rust 1.80 允许在模式中使用独占范围(如 a..b 或 ..b),简化了代码书写,避免为包含端点单独定义常量。但独占范围可能增加差一错误的风险,因此增强了穷尽性检查,并新增 non_contiguous_range_endpoints 和 overlapping_range_endpoints lint 来帮助检测潜在问题。

❓

Q&A

Rust 1.80.0版本新增了哪些类型?

Rust 1.80.0新增了LazyCell和LazyLock类型,实现延迟初始化。

LazyLock和LazyCell有什么区别?

LazyLock是线程安全的,适用于静态值的初始化,而LazyCell不支持线程同步,适用于线程局部静态变量。

Rust 1.80.0中如何检查Cargo.toml中的cfg配置?

Cargo 1.80启用了cfg名称和值的检查,帮助捕捉配置错误,并通过warn-by-default的unexpected_cfgs lint报告意外的cfg条件值。

Rust的模式现在支持什么样的范围?

Rust的模式现在支持使用排他性范围,写作a..b或..b,简化了代码书写。

Rust 1.80.0的发布得益于谁的努力?

Rust 1.80.0的发布得益于众多贡献者的努力。

Rust 1.80.0中有哪些API实现了稳定?

多个API在常量上下文中实现了稳定,具体细节可以查看更新日志。

🏷️

标签

➡️

继续阅读