用途
m12-lifecycle 是一个面向 Rust 的“资源生命周期”设计技能,属于设计选择层(Layer 2)。它要回答的核心问题是:这个资源应当在何时创建、何时使用、何时清理。适用时机是在真正实现生命周期逻辑之前,先完成设计上的判断,关键词包括 RAII、Drop、资源生命周期、连接池、连接池设计、懒加载、延迟初始化等。
主要能力
技能提供了一份“生命周期模式 → 实现”的对照表:RAII 用于自动清理时实现 Drop trait;懒加载用于延迟创建时使用 OnceLock、LazyLock;池化用于复用昂贵资源时使用 r2d2、deadpool;守卫用于作用域访问时采用 MutexGuard 模式;作用域用于事务边界时使用自定义 struct 加 Drop。
它还给出设计前的思考提示,分三个维度:资源成本(廉价则按次创建,昂贵则池化或缓存,全局则懒加载单例);作用域(函数内局部用栈分配,请求级用传递或提取,应用级用 static 或 Arc);错误处理(必须清理时用 Drop,清理可选时用显式 close,清理可能失败时让 close 返回 Result)。
此外包含向上下游的追溯:向上追溯至领域约束(Layer 3),如连接池对应可接受的延迟、资源限制对应基础设施约束、事务范围对应必须原子化的内容;向下追溯至实现(Layer 1),如需要自动清理对应实现 Drop 与明确所有者,需要懒加载对应 OnceLock(线程安全)或 LazyLock(同步),需要连接池对应线程安全池与 Arc 共享。技能还给出生命周期事件与 Rust 机制的对应(创建 new()/Default、懒加载 OnceLock::get_or_init、使用 &self/&mut self、清理 Drop::drop())。
使用方式
技能通过关键词触发,用于在设计阶段辅助判断资源生命周期策略。文中提供了可参考的模式模板:RAII 守卫(struct FileGuard 持有 path 与 File,并在 Drop 中删除临时文件)和懒加载单例(使用 std::sync::OnceLock 定义 static CONFIG,通过 get_or_init 加载配置)。同时列出常见错误与修复:资源泄漏(忘记 Drop,应实现 Drop 或 RAII 包装)、双重释放(手动内存管理,应交由 Rust 处理)、drop 后使用(悬垂引用,应检查生命周期)、E0509(移出 Drop 类型的拥有字段,应使用 Option::take())、连接池耗尽(未归还,应确保 Drop 归还)。反模式部分指出手动清理、lazy_static!、全局可变状态、忘记关闭的问题,并建议改用 RAII/Drop、std::sync::OnceLock、OnceLock 或适当的同步机制、Drop 实现。
适用场景
适合在 Rust 项目中设计资源(如文件、数据库连接、锁、事务)的创建、持有与释放策略时使用,尤其涉及是否池化、是否懒加载、清理责任归属、出错时如何清理等决策。
限制
资料未提供具体的收费、价格、平台或效果信息;文中提到的模板代码与 crate 名称仅为资料所载内容,未说明其版本兼容性或性能数据。