用途
该技能用于在询问 Rust 代码风格或最佳实践时提供规范参考,触发关键词包括命名、格式化、注释、clippy、rustfmt、lint、code style、best practice,以及 P.NAM、G.FMT 等规则标识。它汇总了 50 条核心规则,定位是补充 Rust 中不那么显而易见的约定。
主要能力
命名(Rust 特有)
- 不使用 get_ 前缀:写 fn name() 而非 fn get_name()。
- 迭代器约定:iter() / iter_mut() / into_iter()。
- 转换命名:as_(廉价的 & 转换)、to_(有开销)、into_(转移所有权)。
- 静态变量前缀:静态量用 G_CONFIG,常量不加前缀。
数据类型
- 使用 newtype:如 struct Email(String) 表达领域语义。
- 优先使用切片模式:if let [first, .., last] = slice。
- 预分配:Vec::with_capacity()、String::with_capacity()。
- 避免滥用 Vec:固定大小使用数组。
字符串
- ASCII 场景优先 bytes:s.bytes() 优于 s.chars()。
- 可能需要修改借用数据时使用 Cow<str>。
- 使用 format! 而非用 + 拼接字符串。
- 避免嵌套遍历:字符串上的 contains() 复杂度为 O(n*m)。
错误处理
- 使用 ? 传播错误,而非 try!() 宏。
- 值有保证时用 expect() 而非 unwrap()。
- 用断言检查不变量:在函数入口使用 assert!。
内存
- 使用有意义的生命周期名:'src、'ctx,而不是只用 'a。
- RefCell 使用 try_borrow() 以避免 panic。
- 用遮蔽(shadowing)做类型转换:let x = x.parse()?。
并发
- 明确锁定顺序以防止死锁。
- 基本类型使用原子类型,而不是用 Mutex 保护 bool/usize。
- 谨慎选择内存序:Relaxed / Acquire / Release / SeqCst。
异步
- CPU 密集型任务使用同步方式,异步适用于 I/O。
- 不要在 await 期间持有锁,改用作用域守卫。
宏
- 除非必要否则避免使用宏,优先使用函数/泛型。
- 宏的输入应看起来像 Rust 语法。
已弃用写法 → 更优替代(含引入版本)
- lazy_static! → std::sync::OnceLock(1.70)
- once_cell::Lazy → std::sync::LazyLock(1.80)
- std::sync::mpsc → crossbeam::channel
- std::sync::Mutex → parking_lot::Mutex
- failure/error-chain → thiserror/anyhow
- try!() → ? 运算符(2018)
速查
- 命名:snake_case(函数/变量)、CamelCase(类型)、SCREAMING_CASE(常量)。
- 格式:使用 rustfmt。
- 文档:/// 用于公开项,//! 用于模块文档。
- Lint:#![warn(clippy::all)]。
使用方式
当提问涉及 Rust 代码风格或最佳实践时引用该技能,按上述规则类别给出建议。资料提示 Claude 本身已较熟悉 Rust 惯例,因此这些规则侧重 Rust 特有的非显然约定。
适用场景
Rust 代码编写与评审、风格选择、lint 配置、依赖与 API 现代化替换(如迁移到 OnceLock/LazyLock、thiserror/anyhow)等。
限制
资料未说明该技能的安装方式、具体运行环境、工具版本要求、是否收费或价格信息;亦未提供各规则的例外情况说明,暂未提供。