plugins/languages/rust/skills/memory/SKILL.md
Rust 内存管理与所有权规范 — 借用规则、生命周期标注、智能指针(Box / Rc / Arc / Cow)、内部可变性(RefCell / Mutex / RwLock / atomic)、零拷贝(bytes / Cow / &[u8])、内存布局(repr / 字段排序 / SmallVec / bumpalo)。处理借用冲突、生命周期错误、内存分配优化、`Arc<Mutex<T>>` 重构时加载。触发短语:借用冲突、生命周期错误、cannot borrow、does not live long enough、智能指针、Arc Mutex、零拷贝、内存优化。
npx skillsauth add lazygophers/ccplugin rust-memoryInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
前置:rust-core 的所有权三原则。本 skill 聚焦借用、生命周期、智能指针、零拷贝。
&T 共存 OR 唯一 &mut T,二者互斥。// 缩短借用作用域
let value = map.get("k").cloned(); // 借用结束
if value.is_none() { map.insert("k", 42); }
// entry API 避免双查
map.entry("k").or_insert(42);
| 类型 | 场景 | 线程安全 | 备注 |
|------|------|---------|------|
| Box<T> | 堆分配 / 递归类型 / Box<dyn Trait> | 取决于 T | 单一所有权 |
| Rc<T> | 单线程共享只读 | 否 | 弱引用用 Weak |
| Arc<T> | 多线程共享只读 | 是 | 原子计数有开销 |
| Cow<'a, T> | 大概率只读、偶尔修改 | 取决于 T | 零或一次分配 |
// 单线程:RefCell(运行时借用检查,panic 风险)
use std::cell::RefCell;
// 多线程:Mutex / RwLock
use std::sync::{Arc, RwLock};
// 优先:原子 / channel 替代锁
use std::sync::atomic::{AtomicU64, Ordering};
let counter = AtomicU64::new(0);
counter.fetch_add(1, Ordering::Relaxed);
Arc<Mutex<T>> 是反模式信号:先考虑 mpsc channel、Arc<RwLock<T>> 或 actor 拆分。
&self 方法 → 借 self)。'a 而非 'static。'static 仅在真正跨线程 spawn 或全局数据时使用。struct Parser<'input> { input: &'input str, pos: usize }
// Cow:延迟克隆
use std::borrow::Cow;
fn normalize(p: &str) -> Cow<'_, str> {
if p.contains("//") { Cow::Owned(p.replace("//", "/")) } else { Cow::Borrowed(p) }
}
// bytes::Bytes:网络 / 缓冲零拷贝切片
use bytes::Bytes;
let head = Bytes::from_static(b"hello").slice(0..3);
// 切片视图
fn parse_header(data: &[u8]) -> &[u8] { &data[..4] }
#[repr(C)] // FFI / 显式布局
#[repr(align(64))] struct CacheAligned([u8; 64]);
// 字段按大小降序排,减少 padding
struct Optimized { a: u64, b: u32, c: u16, d: u8 }
// SmallVec:小容量栈分配
use smallvec::SmallVec;
let tags: SmallVec<[String; 4]> = SmallVec::new();
// bumpalo:批量同生命周期对象
use bumpalo::Bump;
let arena = Bump::new();
let n = arena.alloc(42);
| 参数 | 写法 |
|------|------|
| 字符串只读 | &str 或 impl AsRef<str> |
| 切片只读 | &[T] |
| 路径 | &Path / impl AsRef<Path> |
| 字节 | &[u8] / &Bytes |
| 必须拥有 | String / Vec<T> / T |
| AI 倾向 | 正确做法 |
|---------|---------|
| .clone() 绕借用 | 重构作用域 / Cow / 借用 |
| Arc<Mutex<T>> 万能 | channel / atomic / 拆分状态 |
| 'static 一把梭 | 引入 'a 缩短生命周期 |
| Vec 装小集合 | SmallVec / 数组 |
| Box<dyn Trait> | 优先泛型静态分派 |
&str、&[T]、&Path).clone() / .to_string()CowArc<Mutex<T>> 滥用rust-core:所有权三原则、错误处理rust-async:跨 await 的借用、Send 边界rust-unsafe:裸指针、手动内存tools
UI/UX 与布局设计——做界面布局/结构/导航/组件/交互的设计决策。触发:做UI/UX/布局/排版/导航/组件/交互/栅格/响应式/图表选型/字体配对。按媒介路由 HTML/Web、原生 App(iOS/Android/桌面)、CLI、TUI。需后端动态系统不适用;配色/主题/色板走姊妹 skill design-color。
tools
主题与配色设计——做颜色搭配/调色板/主题/品牌色阶/暗模式的设计决策。触发:选配色/调色/主题/色板/品牌色/暗模式/对比度/色盲/UI风格。按媒介路由 HTML/Web(CSS变量)、原生App(平台token)、CLI(ANSI)、TUI(真彩/256/16降级)。保证可访问性(对比度/色盲安全)。需后端动态系统不适用;UI/UX 布局/组件/交互走姊妹 skill design-uiux。
tools
跨任意组件(plugin/skill/agent/command)的验证驱动优化循环纪律 skill。当用户要优化某个已有组件却无明确方向、或要防止改了反而更差(自评乐观偏差 / 多维同改归因失效 / 为凑分加废话膨胀)、或要把一套通用「评分→单变量改→改后验证严格更好才留否则回滚→触顶停」的纪律套到任意组件上时使用。管优化过程本身的纪律(validation gate / ratchet / 独立验证 / 触顶停),不评单组件深度(交 skill-dev),不查插件接线(交 plugin-dev)。仅手动 /optimize-any 触发。
data-ai
两层规则记忆 (基于 .skein/spec)。planning 时 recall 召回相关规则、task finish 后 sediment 沉淀学习 + prune 自动精简过期/重复/断链规则。core 常驻硬规 + recall 按需召回, 经判定门自动写盘 (不逐次问用户)。产出 .skein/spec 下 core/recall 规则文件 + index。另支持空仓 bootstrap 播种规则基线、记忆大面积失效 (大重构/换栈) 时 reconstruct 可逆归档后按项目类型分型重建、maintain 手动体检 (超预算/stale/断链/重复/废弃, --apply 自动修复)、auto-fix (Stop hook 写 .pending-fix 标记 → main 派 skein-specer bg 跑 maintain --apply 全自动修, 断链只报告)。