SuperAPI AI 工具集

rust-best-practices

编程与开发

查看项目

更新于 10-16 07:08

技能介绍

Rust Best Practices 是一个面向生产 Rust 代码编写与审查的工程规范技能,定位为工程指南而非教程。它适用于在编写或评审 Rust 代码时应用统一标准。

用途 它用于在 Rust 开发中落实一套可执行的工程规则,覆盖类型与 API 设计、内存、所有权、错误与断言、unsafe 与并发、质量实践等方面。正确性、安全性、确定性和可维护性被置于技巧性之上;性能需要测量,分配与边界应在 profiling 之前就设计进 API。

权威来源 语言、命名、格式化和公共 API 形态以官方文档为准,起点是 Style Guide 和 API Guidelines,映射见 references/official.md。涉及分配契约、边界、debug_assert!、heapless 内核、确定性和 CI 时,需加载对应参考文档,不得凭空发明规则。库或工具链语法需获取当前官方文档,不能凭记忆编造 API。

规则分级 MUST / MUST NOT:除非有已批准的架构决策记录例外,否则必须遵守。SHOULD / SHOULD NOT:默认做法,偏离需在评审中给出具体理由。MAY:可选,视上下文而定。

使用方式 /rust-best-practices:将标准应用于当前 Rust 工作。 /rust-best-practices <path>:评审指定 crate 或文件。每条发现需引用代码行、指出规则名(官方 C-* 编号或本技能中的标题),并给出修复建议。 按任务加载所需参考文档,同一轮并行读取:命名、rustdoc 章节、官方检查清单读 official.md;内存画像、heapless、输出缓冲、隐藏分配读 allocation.md;借用与 clone、Copy、into_/to_/as_ 读 ownership.md;Result、panic、thiserror/anyhow、checked 数学、debug_assert! 读 errors.md;函数、迭代器、分发、type-state、布尔盲区读 design.md;指针、Send/Sync、unsafe、FFI 读 unsafe.md;测量、布局、clone、flamegraph 读 performance.md;rustfmt、Clippy、测试、文档、依赖、MSRV、CI 读 quality.md;评审遍历与反模式读 review.md。

常驻规则要点 类型与 API:必须让非法状态难以表示,如 newtype、enum、Option、Result,生命周期重要处用 type-state;字段默认私有,除非直接访问就是契约(C-STRUCT-PRIVATE);遵循官方 as_/to_/into_ 转换命名(C-CONV);通用库 API 应当返回值(C-NO-OUT),当声明的内存画像是 heapless 或无分配时,必须使用调用方拥有的缓冲区(C-CALLER-CONTROL);不得仅因表示匹配就用裸 u32 表示所有标识符。 内存:每个 crate 和对性能敏感的公共操作必须声明内存画像:严格 heapless、稳态无分配或关注分配;运行时工作必须有界(迭代、递归、队列、重试、输出、并发);容量耗尽必须以类型化错误报告,不得静默溢出到堆、丢弃条目或切换到无界回退;不得把 Cow::into_owned()、format!() 或支持溢出的小向量当作 heapless。 所有权:除非需要转移所有权,应当接收 &T、&str、&[T]、&Path;小型 Copy 值应当按值传递,大小存疑时测量 ABI 与目标平台,不设通用字节阈值;不得为消除借用检查器报错而 clone。 错误与断言:可恢复失败必须返回 Result<T, E>,生产路径不得 unwrap()/expect();在索引或分配前,信任边界处必须使用 checked 数学;外部输入在所有构建中都必须校验,不得用 debug_assert! 做调用方校验或作为唯一 unsafe 前置条件;库中应当用 thiserror,anyhow 仅用于二进制边界。 unsafe 与并发:不需要 unsafe 的 crate 必须 #![forbid(unsafe_code)];每个 unsafe 块必须用 SAFETY: 记录;没有书面证明不得添加 unsafe 的 Send/Sync 实现;应当优先使用单一所有者或有界消息传递,而非把 Arc<Mutex<T>> 当作所有权逃生舱。 质量:CI 中必须运行 cargo fmt --all -- --check 和 cargo clippy --workspace --all-targets --all-features --locked -- -D warnings(若 --all-features 无效则用显式 feature 矩阵);应当优先使用局部且有理由的 #[expect(...)] 而非 #[allow(...)];每个提交的 TODO 必须关联 issue:// TODO(#123): ...。

官方文档引用 需引用实时页面,不得把官方规则改写成本技能原创。最低集合包括 Style Guide、API Guidelines checklist、debug_assert!、no_std、alloc、Clippy configuration、Cargo profiles,完整列表见 official.md。

适用场景与限制 适用于有 Rust 基础、需要统一编写与评审标准的团队或个人。资料未提供具体产品化的价格、平台、许可和版本信息;未提供完整的规则条目数量、参考文档全文或示例代码,相关细节暂未提供。