用途:面向已懂所有权/借用的 Rust 工程师,提供惯用、生产级代码的决策规则与易踩坑点,重点不在借用检查器本身,而在如何用好它。
主要能力与要点: 错误处理:调用方需要匹配错误以恢复时用 thiserror(可匹配的具体枚举);错误只向上冒泡记录/上报时用 anyhow(类型擦除、上下文链)。库的公开 API 不放 anyhow::Error;库暴露 thiserror 枚举,二进制/应用用 anyhow 消费。context 为急切求值,with_context(|| ...) 为惰性闭包,消息需分配时用后者。
Trait/泛型/生命周期:入参用 impl Into<T>,只实现 From;不要手写 ToString(std 已有 blanket impl,会冲突)。泛型单态化可内联但增大二进制;dyn Trait 走 vtable、支持异构集合。Deref/DerefMut 只用于智能指针。命名按成本:as_ 借用、to_ 分配、into_ 消费。
迭代器:优先链式而非索引循环;Option/Result 用 .flatten() 而非 .filter_map(|x| x);collect::<Result<Vec<_>>>() 遇首个 Err 短路。
Serde:介绍 default、skip_serializing_if、rename、flatten 等属性;枚举标签分外部、内部、相邻、untagged 四种,untagged 按声明顺序匹配首个可反序列化变体,顺序关键。serde_yaml 已弃用,serde_yml 有安全公告,建议 TOML/JSON。
异步与并发(Tokio):不跨 .await 的状态用 std::sync::Mutex,必须跨 await 才用 tokio 异步锁;切勿跨 .await 持有 std MutexGuard 或 RefCell 借用。tokio::spawn 要求 Send + 'static。select! 会取消落败分支,只有 cancel-safe 操作可直接放入。spawn_blocking 用于阻塞 I/O,CPU 密集用 rayon 经 oneshot 回桥。优先 JoinSet 而非 join_all。通道选型:有界 mpsc 默认、oneshot、broadcast、watch。
智能指针:按所有权×线程×可变性选择 Rc/Arc、Cell/RefCell、Mutex/RwLock;Rc<RefCell<T>> 图建议改用 arena + 索引,循环用 Weak 打破。字段按声明顺序析构,局部变量逆序。
CLI:用 clap derive,含子命令、ValueEnum、自定义 value_parser 校验。
限制:资料为技能说明,未提供安装命令、价格、平台或效果数据;部分内容(如 clap 段落)在资料中未完整结束。