Rust 风格团队成立公告

2022 年 9 月 29 日 · Josh Triplett 代表 Rust 风格团队

Rust 有一套标准化的风格,并在 rustfmt 工具中实现了这种风格。标准化的风格帮助 Rust 开发者在许多不同的项目中感到舒适和自在,而 rustfmt 的工具支持使得维护和集成到持续集成中变得容易。rustfmt 也提供了许多自定义风格的选项,但风格指南定义了默认值,并且大多数项目都使用这些默认值。

标准的 Rust 风格是 Rust 风格团队在 2016 年至 2018 年期间开发和讨论的结果。在发布风格指南后,Rust 风格团队按计划结束了其积极的工作。

然而,随着 Rust 语言的发展,我们经常需要改进风格指南,例如支持新的语言结构。这包括小的语言更改,以及备受期待的新功能,例如 let 链 (RFC 2497) 和 let-else (RFC 3137)。像这样的新结构,默认情况下会被 rustfmt 忽略,并且不会格式化,随后需要添加格式化。近年来,这项工作的一部分落到了 rustfmt 团队身上,但 rustfmt 团队更希望实施另一个团队做出的风格决定,而不是自己做出这些决定。

此外,rustfmt 保持了向后兼容性保证:使用 rustfmt 正确格式化的代码,在未来的 rustfmt 版本中不会被格式化成不同的样子。这避免了变动,也避免了当人们在 CI 中使用 rustfmt 检查风格时导致 CI 失败。然而,这也阻止了 Rust 风格随着时间的推移,根据社区的意愿进行演变并改进格式化。rustfmt 提供了各种配置选项来更改其默认格式,其中许多选项代表了社区中许多人希望默认启用的更改。

例如,许多人更喜欢将他们的 use 行格式化为三个块:从标准库导入,从外部 crate 导入,然后从同一项目中的模块导入。rustfmt 通过选项 group_imports = StdExternalCrate 支持这一点,但不能将其设置为默认值,否则会导致现有项目中的 CI 失败。我们需要一种兼容地演变默认 Rust 风格的方法,这在精神上类似于我们用于 Rust 版本化的机制:允许现有风格继续工作,并允许人们选择加入新风格。

为了解决这两个问题,RFC 3309 重新启动了 Rust 风格团队,其目标有三个

  • 对新的 Rust 结构的风格做出决定
  • 演变现有的 Rust 风格
  • 定义在考虑向后兼容性的同时演变 Rust 风格的机制

我们不打算进行任何惊天动地的风格更改;Rust 的外观和感觉将基本保持不变。默认 Rust 风格的演变将主要由人们已经广泛启用或如果稳定就会启用的既有 rustfmt 选项组成。

我们预计风格团队的初步工作将集中在清除缺乏格式化指导的新语言结构的积压。之后,我们将着手定义和实现演变默认 Rust 风格的机制,然后开始引入风格改进。