主要观点:Rust 1.85 发布,伴随 edition 2024,此版本比之前两版大,包含语言生活质量的小改进。介绍了 Rust 中 edition 的概念及 2024 版的核心语言、标准库、Cargo、Rustdoc、Rustfmt 等方面的变化。
关键信息:
- edition 概念:Rust 的 edition 是编译器的兼容性模式,使某些更改对旧代码“不存在”,同时允许新代码改进,不同 edition 代码可混合使用。
核心语言变化:
- Return-position
impl Traitlifetime 捕获规则改变,2024 版默认捕获所有生命周期,示例代码编译方式改变。 - 临时作用域有变化,
if let和尾表达式中的临时变量作用域在 2024 版有所调整。 - Match 语法使用有变化,非显式模式中使用
ref等捕获修饰符在 2024 版为错误。 unsafe相关变化,extern块、一些属性需标记为unsafe,禁止引用static mut数据等。- 禁止对
Never类型进行强制转换,改变了强制转换的回退类型。 - 宏片段规范器更新,
:tt片段规范器可匹配_和const表达式,且宏片段需有类型规范器。 - 新增保留构造
gen和特定的#序列。
- Return-position
标准库变化:
- 预导入(prelude)添加
Future和IntoFuture。 Box<[T]>实现IntoIterator<Item=T>,直接调用Box::<[T]>::into_iterator在旧版隐藏以保持旧行为。- 一些标准库函数标记为
unsafe,如修改环境变量函数和CommandExt::before_exec。
- 预导入(prelude)添加
- Cargo 变化:有新的依赖解析器考虑当前 Rust 版本,选项命名更一致,清理工作空间依赖。
- Rustdoc 变化:Rustdoc 测试可合并为单个二进制以提高编译时间,嵌套
include!处理方式改变。 - Rustfmt 变化:可设置
style_edition有自己的 backward-incompatible 变化,包括格式化修复和排序顺序改变。
重要细节: - 文中详细说明了各变化的示例及相关参考文档,如各种规则的错误示例及对应解决方法等。
- 提及多数变化可通过
cargo fix解决,且 2024 版以小变化为主,语言处于健康发展状态,利于在现实世界中推广应用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。