代码与苦艾酒

主要观点:详细介绍了在大型工作区中将 Rust 项目升级到 2024 版的经验,包括升级的原因、步骤、各个方面的具体变化及注意事项等。
关键信息:

  • 大型工作区有近 400 个 crate 和 1500 多个 rust 依赖,当前使用 rust 1.84 和 2021 版运行良好。
  • 不采用常规的“运行cargo fix --edition并在Cargo.toml中添加edition = "2024"”的升级方式,原因包括避免一次性大改动、不想要自动生成的所有更改、便于向其他工程师解释等。
  • 升级步骤:先更新代码生成工具(如bindgencxx),启用rust-2024-compatibilitylint,升级到 Rust 1.85 或更新版本,添加style_edition = "2021",设置edition = "2024",最后修复版本切换后的错误和警告。
  • 具体变化及注意事项:如一些标准库函数变为unsafe(如std::env::set_varCommand::pre_exec),unsafe_op_in_unsafe_fnlint 的处理,gen关键字相关的rand crate 升级,match Ergonomics模式变化及cargo fix的自动修复,if-let临时生命周期的改进,macro_rules expr变化,return-position-impl-trait(RPIT)捕获规则,rustfmt格式变化等。
    重要细节:
  • 对于bindgen升级后的问题,如未生成与 2024 版兼容的代码,可通过特定方式处理。
  • 在启用rust-2024-compatibilitylint 时,需设置工作区级的 lint 配置,可在Cargo.toml中进行,但存在一些不便。
  • cargo fix在不同情况下的自动修复效果及局限性,如对于某些复杂模式的处理。
  • rustfmt在 2024 版中的格式变化,如导入排序和长字符串处理等。
  • 提及其他一些对代码影响较小的 2024 版变化,如 prelude、unsafe 相关的修改等。
阅读 7
0 条评论