用途
该技能面向 Rust 开发中与 crate 集成和生态选型相关的问题,触发关键词包括 E0425、E0433、E0603、crate、cargo、dependency、feature flag、workspace、which crate to use 等。核心问题是:针对当前任务应该选择哪个 crate,以及如何把它集成进项目。
主要能力
依赖现状自动注入
技能会尝试读取项目中的 Cargo.toml,自动注入当前依赖信息,命令为:
!grep -A 100 '^[dependencies]' Cargo.toml 2>/dev/null | head -30 || echo "No Cargo.toml found"
集成决策参考表
按需求给出常见选择:
- 序列化:基于 derive,使用 serde、serde_json
- 异步运行时:tokio 或 async-std,其中 tokio 最流行
- HTTP 客户端:注重易用性,使用 reqwest
- HTTP 服务端:现代方案,使用 axum、actix-web
- 数据库:SQL 或 ORM,使用 sqlx、diesel
- CLI 解析:基于 derive,使用 clap
- 错误处理:区分应用与库,使用 anyhow、thiserror
- 日志:门面模式,使用 tracing、log
添加依赖前的思考提示
- 是否维护良好:近期提交、issue 响应是否活跃、破坏性变更频率
- 范围:需要整个 crate 还是只需某个 feature,能否用 feature flag 减少体积
- 集成方式:基于 trait 还是具体类型、同步还是异步、需要哪些约束
向上追溯与向下追溯
向上追溯到领域约束(Layer 3),例如选择 HTTP 框架时追问性能需求、查看 domain-web 的延迟与吞吐需求、考虑团队熟悉度。向下追溯到实现(Layer 1),例如集成外部 crate 时参考 m04-zero-cost 的 trait 约束与泛型、m06-error-handling 的错误类型兼容;FFI 集成时参考 unsafe-checker 的安全要求与 m12-lifecycle 的资源清理。
语言互操作
- C/C++ → Rust:bindgen,自动生成绑定
- Rust → C:cbindgen,导出 C 头文件
- Python ↔ Rust:pyo3,Python 扩展
- Node.js ↔ Rust:napi-rs,Node 插件
- WebAssembly:wasm-bindgen,浏览器/WASI
Cargo Features
- [features]:可选功能
- default = [...]:默认特性
- feature = "serde":条件依赖
- [workspace]:多 crate 项目
错误码参考
- E0433:找不到 crate,修复方式是加入 Cargo.toml
- E0603:私有项,检查 crate 文档
- Feature not enabled:可选特性未启用,在 features 中启用
- 版本冲突:依赖不兼容,使用 cargo update 或固定版本
- 重复类型:不同 crate 版本导致,在工作区中统一
crate 选型标准
- 维护:近期提交为好,多年不活跃为警告
- 社区:issue/PR 活跃为好,无响应为警告
- 文档:有示例与 API 文档为好,文档稀少为警告
- 稳定性:遵循语义化版本为好,频繁破坏性变更为警告
- 依赖:少而知名为好,大量且冷门为警告
反模式
- extern crate:已过时(2018+),直接使用即可
- #[macro_use]:全局污染,改用显式导入
- 通配符依赖 *:不可预测,改用具体版本
- 依赖过多:供应链风险,评估必要性
- 全部 vendor:维护负担,信任 crates.io
相关技能
- 错误类型设计:m06-error-handling
- trait 集成:m04-zero-cost
- FFI 安全:unsafe-checker
- 资源管理:m12-lifecycle
使用方式
当遇到 crate 集成或生态选型问题时调用该技能,它会注入当前依赖信息,并依据上述决策表、选型标准与错误码参考给出方向。
适用场景
需要为 Rust 项目选择 crate、配置 Cargo features 或 workspace、进行语言互操作、排查依赖相关编译错误时。
限制
资料未提供该技能的具体安装方式、运行环境要求、收费信息或效果数据,暂未提供。