Rust 代码规范(Heartwood)

1. 工具链

2. Workspace 结构

3. 核心依赖选型

用途选择禁止
异步运行时tokioasync-std
HTTPreqwest + rustls任何链接 OpenSSL 的配置
序列化serde、serde_json、toml
错误thiserror(库)、anyhow(仅二进制与测试)在库 crate 用 anyhow
日志tracinglog、println
SQLiterusqlite(bundled),Mod 阶段再引入sqlx
哈希sha1、sha2、自写 murmur2
压缩zip、flate2
凭据keyring自己写文件
CLIclap(derive)
测试 HTTPwiremock真实网络

白名单与准入门槛见 ADR 0007。新增依赖须在 PR 描述里逐条对照门槛说明,并给出二进制体积影响。

4. 错误处理

5. 异步与并发

6. 模块与可见性

7. 命名

8. 文档与注释

9. 测试

10. 日志

11. 二进制体积

release profile 固定为:

[profile.release]
opt-level = "z"
lto = "fat"
codegen-units = 1
panic = "unwind"   # C 边界要 catch_unwind,不能 abort
strip = true

CI 记录每次构建的体积并在 PR 评论里标出变化,增长超过 300 KB 需要说明。

源文件 docs/coding-standards/rust.md 更新于 2026-10-08