用途
该技能用于处理 Rust 中的可变性问题,触发信号包括 E0596、E0499、E0502,以及“cannot borrow as mutable”“already borrowed as immutable”“mut”“&mut”“interior mutability”等关键字。它的核心目标是回答“这份数据为什么需要变化、谁有权改变它”,在引入内部可变性之前先判断变更是必要的还是偶然的复杂度。
主要能力
- 将编译错误转换为设计问题:不只给出“加 mut”“拆分借用”“分离作用域”等表层修复,还追问“是否真的可变”“数据结构是否正确”“为什么需要同时持有两个借用”“运行时检查是否合适”。
- 梳理借用规则:任一时刻要么存在多个 &T(不可变借用),要么存在一个 &mut T(可变借用),二者不能同时成立。
- 内部可变性决策:根据类型是否 Copy、是否单线程、读写比例给出选择建议,例如单线程 Copy 用 Cell,单线程非 Copy 用 RefCell,多线程用 Mutex 或 RwLock,简单类型用 Atomic。
- 快速参考表:列出 &mut T、Cell、RefCell、Mutex、RwLock、Atomic 在“是否线程安全”“运行时开销”“适用场景”上的差异。
- 错误码参考:说明 E0596、E0499、E0502 的成因与快速修复方向。
- 反模式提示:如到处使用 RefCell 会引发运行时 panic、单线程使用 Mutex 带来不必要开销、忽略 RefCell panic 导致难以调试、在热循环中加锁影响性能等。
使用方式
在遇到借用冲突时,可沿“向上追踪”路径检查是否是数据结构设计问题(参考 m09-domain)或并发问题(参考 m07-concurrency);在确定需要可变访问后,沿“向下追踪”路径由设计走向实现,例如“需要从 &self 取得可变访问”时,按 T: Copy → Cell<T>、T: !Copy → RefCell<T> 选择;“需要线程安全变更”时,简单计数用 AtomicXxx,复杂数据用 Mutex<T> 或 RwLock<T>;“需要共享可变状态”时,单线程用 Rc<RefCell<T>>,多线程用 Arc<Mutex<T>>。
适用场景
- 排查 Rust 借用检查器报出的可变性相关编译错误。
- 评估是否应引入 Cell、RefCell、Mutex、RwLock 或原子类型。
- 在单线程与多线程、读多写少等不同场景下选择内部可变性方案。
- 识别与可变性相关的反模式并寻找更合理的数据结构设计。
限制
资料未提供该技能的具体安装命令、运行环境要求、收费方式、支持平台或实际使用效果等信息,这些内容暂未提供。