主要观点:详细介绍了在大型工作区中将 Rust 项目升级到 2024 版的经验,包括升级的原因、步骤、各个方面的具体变化及注意事项等。
关键信息:
- 大型工作区有近 400 个 crate 和 1500 多个 rust 依赖,当前使用 rust 1.84 和 2021 版运行良好。
- 不采用常规的“运行
cargo fix --edition
并在Cargo.toml
中添加edition = "2024"
”的升级方式,原因包括避免一次性大改动、不想要自动生成的所有更改、便于向其他工程师解释等。 - 升级步骤:先更新代码生成工具(如
bindgen
和cxx
),启用rust-2024-compatibility
lint,升级到 Rust 1.85 或更新版本,添加style_edition = "2021"
,设置edition = "2024"
,最后修复版本切换后的错误和警告。 - 具体变化及注意事项:如一些标准库函数变为
unsafe
(如std::env::set_var
和Command::pre_exec
),unsafe_op_in_unsafe_fn
lint 的处理,gen
关键字相关的rand
crate 升级,match Ergonomics
模式变化及cargo fix
的自动修复,if-let
临时生命周期的改进,macro_rules expr
变化,return-position-impl-trait
(RPIT)捕获规则,rustfmt
格式变化等。
重要细节: - 对于
bindgen
升级后的问题,如未生成与 2024 版兼容的代码,可通过特定方式处理。 - 在启用
rust-2024-compatibility
lint 时,需设置工作区级的 lint 配置,可在Cargo.toml
中进行,但存在一些不便。 cargo fix
在不同情况下的自动修复效果及局限性,如对于某些复杂模式的处理。rustfmt
在 2024 版中的格式变化,如导入排序和长字符串处理等。- 提及其他一些对代码影响较小的 2024 版变化,如 prelude、unsafe 相关的修改等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。