轻量级服务监控工具免费版,面向个人开发者与小型项目。核心能力:. 适用于需要monitor toolkit相关能力的开发场景,包含结构化的工作流程和可复用的模板,帮助用户快速完成任务并保持代码质量. 适用于需要monitor toolkit相关能力的开发场景,包含结构化的工作流程和配置指引. 该工具经过深度差异化处置,针对用户反馈和使用痛点进行了调优改进,提升了实用性和可操作性.
编程
Rust工具包-免费版
试用Rust 开发优选实践助手免费版,面向个人开发者与学习者。核心能力:,可自发提升工作效率. 适用于需要rust toolkit相关能力的开发场景,包含结构化的工作流程和可复用的模板,帮助用户快速完成任务并保持代码质量. 适用于需要rust toolkit相关能力的开发场景,包含结构化的工作流程和配置指引.
它能做什么
Rust 开发优选实践助手免费版,面向个人开发者与学习者。核心能力:,可自发提升工作效率. 适用于需要rust toolkit相关能力的开发场景,包含结构化的工作流程和可复用的模板,帮助用户快速完成任务并保持代码质量. 适用于需要rust toolkit相关能力的开发场景,包含结构化的工作流程和配置指引.
技能文档
Rust 工具包 - 免费版
概述
Rust 工具包免费版是面向个人开发者的 Rust 优选实践助手。覆盖 Rust 开发中最常见的所有权、借用、生命周期陷阱,提供即查即用的修复建议与代码规范,帮助开发者写出安全可靠的系统级代码.
核心能力
1. 所有权与借用
检测所有权转移、借用冲突、可变与不可变借用混用等常见问题.
处理: 解析所有权与借用的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回所有权与借用的响应数据,包含状态码、结果和日志.
- 执行此能力时使用
input_params参数,支持创建/查询/导出操作
2. 生命周期标注
指导何时需要显式生命周期标注,何时可以省略(生命周期省略规则).
处理: 解析生命周期标注的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回生命周期标注的响应数据,包含状态码、结果和日志.
- 执行此能力时使用
input_params参数,支持创建/查询/导出操作
核心功能执行
用input_params参数进行配置.
处理: 解析核心功能执行的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回核心功能执行的响应数据,包含状态码、结果和日志.
- 执行此能力时使用
input_params参数,支持创建/查询/导出操作 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:Rust、开发优选实践助手、避免所有权、借用与生命周期常、见陷阱、适合个人学习、免费版、面向个人开发者与、学习者、核心能力、所有权与借用陷阱、生命周期标注指导、错误处理、Result、Option、优选实践、并发编程、async、await、channels、Mutex、Trait、与泛型使用规范、Cargo、项目配置、常见编译错误解读等.
错误处理
- 边界输入处理: 空输入返回提示信息, 超长输入自动截断
- 降级策略: 异常时返回默认值, 确保流程不中断
- 执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令机制: 失败时自动执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令, 最多3次
Result 与 Option 的正确使用,? 操作符的优选实践.
处理: 解析错误处理的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回错误处理的响应数据,包含状态码、结果和日志.
4. 并发编程
async/await、channels、Mutex/RwLock、Arc 的使用场景与陷阱.
处理: 解析并发编程的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回并发编程的响应数据,包含状态码、结果和日志.
5. Trait 与泛型
Trait 定义与实现、泛型约束、Trait Object(dyn)vs 泛型参数.
处理: 解析Trait 与泛型的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回Trait 与泛型的响应数据,包含状态码、结果和日志.
6. Cargo 配置
Cargo.toml 配置、依赖管理、feature flags、workspace.
处理: 解析Cargo 配置的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回Cargo 配置的响应数据,包含状态码、结果和日志.
7. 编译错误解读
将 Rust 编译器复杂的错误信息翻译为可理解的修复建议.
处理: 解析编译错误解读的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回编译错误解读的响应数据,包含状态码、结果和日志.
使用场景
场景一:避免借用冲突
Rust 中最常见的编译错误之一:可变与不可变借用冲突.
输入格式
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| input | string | 是 | Rust工具包-免费版处理的输入数据或指令 |
| options | object | 否 | 附加配置选项,如模式选择、格式偏好等 |
| callback_url | string | 否 | 异步处理完成后的回调通知URL |
// 错误写法 - 同时存在可变和不可变借用
fn main() {
let mut data = vec![1, 2, 3];
let first = &data[0]; // 不可变借用
data.push(4); // 错误!可变借用冲突
println!("{}", first); // first 还在使用中
}
// ...
// 正确写法 - 借用在使用后结束
fn main() {
let first = &data[0];
println!("{}", first); // 借用在此结束
data.push(4); // 现在可以可变借用了
}
// ...
// 或使用拷贝
fn main() {
let first = data[0]; // 拷贝值,不是借用
data.push(4); // 没问题
println!("{}", first);
}
场景二:正确使用生命周期
理解何时需要显式标注生命周期.
// 生命周期省略规则适用的场景 - 无需标注
fn first_word(s: &str) -> &str {
// 编译器自动推断:输入引用的生命周期 = 输出引用的生命周期
let bytes = s.as_bytes();
for (i, &byte) in bytes.iter().enumerate() {
if byte == b' ' {
return &s[0..i];
}
}
&s[..]
}
// ...
// 需要显式标注的场景 - 多个输入引用
fn longest<'a>(s1: &'a str, s2: &'a str) -> &'a str {
// 返回值的生命周期取决于两个输入中较短的那个
if s1.len() > s2.len() {
s1
} else {
s2
}
}
// ...
// 结构体中的生命周期
struct Excerpt<'a> {
part: &'a str, // 结构体持有引用必须标注生命周期
}
场景三:错误处理优选实践
使用 Result 和 ? 操作符进行错误传播.
use std::fs;
use std::io;
use std::num::ParseIntError;
// ...
// 错误写法 - 使用 unwrap/expect 在生产代码中
fn read_config() -> i32 {
let content = fs::read_to_string("config.txt").unwrap(); // 危险!
let value: i32 = content.trim().parse().unwrap(); // 危险!
value
}
// ...
// 正确写法 - 使用 Result 和 ? 传播错误
fn read_config() -> Result> {
Ok(value)
}
// ...
// 自定义错误类型
#[derive(Debug)]
enum ConfigError {
Io(io::Error),
Parse(ParseIntError),
}
// ...
impl From for ConfigError {
fn from(e: io::Error) -> Self { ConfigError::Io(e) }
}
impl From for ConfigError {
fn from(e: ParseIntError) -> Self { ConfigError::Parse(e) }
}
// ...
fn read_config_typed() -> Result {
Ok(value)
}
不适用场景
以下场景Rust工具包-免费版不适合处理:
- 无明确技术栈的模糊需求
- 纯架构设计决策
- 运维部署管理
触发条件
需要代码生成、编程辅助、调试测试、开发部署时使用。不适用于非本工具能力范围的需求.
快速开始
- 阅读## 核心能力章节了解skill功能
- 按## 依赖说明配置环境
- 执行所需能力对应的命令
- 参考## 错误处理章节处理异常
- 查看## FAQ解答常见疑问
常见陷阱速查
// 1. 可变借用冲突 -> 确保借用不重叠
let mut v = vec![1, 2, 3];
let r = &v[0]; // 不可变借用开始
// v.push(4); // 错误!
println!("{}", r); // 借用结束
v.push(4); // 现在可以了
// ...
// 2. 字符串拼接用 format! -> 不要用 + (需 &String)
let s1 = String::from("Hello");
let s2 = String::from("World");
let s3 = format!("{} {}", s1, s2); // 推荐
// ...
// 3. 遍历时修改 -> 使用索引或 drain
let mut v = vec![1, 2, 3, 4];
let mut i = 0;
while i < v.len() {
if v[i] % 2 == 0 {
v.remove(i);
} else {
i += 1;
}
}
// ...
// 4. 用 clone 替代引用 -> 简化所有权(性能允许时)
fn process(data: Vec) -> Vec { // 取得所有权
data.iter().map(|x| x * 2).collect()
}
let original = vec![1, 2, 3];
let result = process(original.clone()); // clone 保留原始数据
// ...
// 5. 用 Cow 处理可能借用的数据
use std::borrow::Cow;
fn process(input: &str) -> Cow {
if input.contains("bad") {
Cow::Owned(input.replace("bad", "good")) // 新分配
} else {
Cow::Borrowed(input) // 零拷贝
}
}
Cargo 项目配置
# Cargo.toml
[package]
name = "my-project"
version = "0.1.0"
edition = "2021"
# ...
[dependencies]
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1", features = ["full"] }
# ...
[profile.release]
opt-level = 3
lto = true
codegen-units = 1
示例
陷阱速查表
| 陷阱 | 错误写法 | 正确写法 |
|---|---|---|
| 借用冲突 | 同时 &mut 和 & | 借用不重叠 |
| 字符串拼接 | s1 + s2 | format!("{}{}", s1, s2) |
| 遍历时删除 | for x in &v { v.remove() } | 用索引或 retain |
| unwrap 滥用 | .unwrap() | ? 操作符 |
| 所有权困惑 | 到处 .clone() | 理解所有权传递 |
| 生命周期 | 全部显式标注 | 先省略,编译器提示再标注 |
| Trait Object | 滥用 dyn | 优先用泛型 |
| 闭包捕获 | move 误用 | 按需使用 move |
常用 Clippy Lint
# clippy 配置
# .clippy.toml
msrv = "1.70.0"
# ...
# 运行 clippy
# cargo clippy -- -W clippy::all -W clippy::pedantic
优选实践
- 优先用
&借用:不需要所有权时用引用,避免不必要的 clone - 用
?传播错误:不要滥用unwrap(),生产代码用Result+? - 生命周期先省略:先不标注,编译器报错再加,大部分场景可省略
- 泛型优先 Trait Object:性能敏感场景用泛型(
impl Trait),灵活性优先用dyn Trait - 用
Cow优化拷贝:可能不需要拷贝的场景使用Cow或Cow<[T]> - 开启 Clippy:每次提交前运行
cargo clippy,修复所有警告 - 用
retain过滤:需要删除元素时用v.retain(|x| condition)而非循环 remove
常见问题
Q: "cannot borrow as mutable because it is also borrowed as immutable" 怎么解决?
A: 这是最常见的借用冲突。确保不可变借用在可变借用之前结束使用。方法:1) 提前使用完不可变借用;2) 拷贝值而非借用;3) 重构代码结构减少借用重叠.
Q: 什么时候用 String 什么时候用 &str?
A: 函数参数优先用 &str(更通用,接受 &String 和 &str)。需要所有权或需要修改时用 String。结构体字段通常用 String(拥有数据)。返回值如果引用输入参数用 &str,否则用 String.
Q: Box 和 impl Trait 的区别?
A: impl Trait 是静态分发(编译时确定类型,零开销,但生成多份代码)。Box 是动态分发(运行时确定,有虚函数表开销,但代码体积小)。性能优先用 impl Trait,需要集合存储不同类型或递归类型用 Box.
Q: async 函数返回什么类型?
A: async 函数返回 impl Future。通常不需要显式标注,让编译器推断。如果需要 dyn 异步 trait,使用 Pin + Send>> 或使用 async-trait 宏.
依赖说明
运行环境
- Agent平台: 支持 SKILL.md 的任意 AI Agent(Claude Code / Cursor / Codex / Gemini CLI 等)
- 操作系统: Windows / macOS / Linux
- Rust: 1.70+
依赖详情
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| Rust | 编译器 | 必需 | rustup 安装 |
| Cargo | 包管理 | 必需 | 随 Rust 安装 |
| Clippy | Lint工具 | 推荐 | rustup component add clippy |
| rustfmt | 格式化 | 推荐 | rustup component add rustfmt |
| LLM API | API | 必需 | 由Agent内置LLM提供 |
API Key 配置
- 本 Skill 无需 API Key
- 纯知识型工具,不涉及外部 API 调用
可用性分类
- 分类: MD(纯 Markdown 指令)
- 说明: 通过自然语言指令驱动 Agent 提供 Rust 开发优选实践建议
- 限制: 免费版不包含 unsafe 安全审计、性能优化深度指导与企业级 CI/CD 集成
已知限制
- 需LLM支持,无LLM环境不可用
- 复杂业务场景建议结合人工经验判断
- 执行效率受模型能力与网络环境影响
- 当前为免费版本,如需完整功能请升级到付费版获取全部能力
案例展示
{
"input": "示例输入",
"output": "处理结果"
}
输出格式
处理结果以结构化格式返回, 包含状态码、消息和数据字段.
相关技能
自定义定期报告产出工具免费版,面向个人开发者与小型项目。核心能力: - 自定义报告配置与数据源 - 定时调度(每日/每周/每月) - 多格式输出(文本/Markdown/HTML) - 多渠道交付(聊天/文件/邮件) - 环境变量安全管控凭证 - 历史报告归档 适用场景: - 个人项目数据周报 - 收入/支出定期汇总 - GitHub 活动统计报告 差异化:免费版包含基础报告产出能力
核心能力:,可自发提升工作效率. 适用于需要security toolkit相关能力的开发场景,包含结构化的工作流程和可复用的模板,帮助用户快速完成任务并保持代码质量. 适用于需要security toolkit相关能力的开发场景,包含结构化的工作流程和配置指引. 该工具经过深度差异化处置,针对用户反馈和使用痛点进行了调优改进,提升了实用性和可操作性.
文档工具箱免费版是一款面向开发者的DOCX文档处置Skill,封装python-docx与LibreOffice渲染能力,包含从读取、创建到编辑的完整基础工作流。核心能力:. 适用于需要doc toolkit相关能力的开发场景,包含结构化的工作流程和可复用的模板,帮助用户快速完成任务并保持代码质量.
面向个人用户的干净可移植 Markdown 产出工具。核心能力:. 适用于需要markdown toolkit相关能力的开发场景,包含结构化的工作流程和可复用的模板,帮助用户快速完成任务并保持代码质量. 适用于需要markdown toolkit相关能力的开发场景,包含结构化的工作流程和配置指引. 该工具经过深度差异化处置,针对用户反馈和使用痛点进行了调优改进,提升了实用性和可操作性.
CSS 工具箱免费版是一份面向前端开发者的 CSS 常见陷阱速查手册,聚焦层叠上下文、Flexbox/Grid 布局陷阱、现代选择器与响应式设计基础。Use,可自发提升工作效率 when 需要代码产出、编程辅助、调试测试、开发部署时使用。不适用于无明确技术栈的模糊需求。Use when 需要代码产出、编程辅助、调试测试、开发部署时使用。不适用于无明确技术栈的模糊需求. 功能涵盖: toolkit。