一键导入
rust-reference
Rust 语言参考技能。提供 Rust 语言的完整参考,包括语法、类型系统、内存模型、并发模型等。TRIGGER when: 用户需要了解 Rust 语言细节、查阅语言规范、或需要深入了解 Rust 内部机制时触发。SKIP: 基础 Rust 开发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Rust 语言参考技能。提供 Rust 语言的完整参考,包括语法、类型系统、内存模型、并发模型等。TRIGGER when: 用户需要了解 Rust 语言细节、查阅语言规范、或需要深入了解 Rust 内部机制时触发。SKIP: 基础 Rust 开发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Rust 高级特性技能。提供 Rust 高级特性的完整参考,包括 unsafe Rust、高级 trait、高级类型、宏、FFI 等。TRIGGER when: 用户使用 unsafe 代码、实现高级 trait、使用高级类型、编写宏、或需要了解 Rust 高级特性时触发。SKIP: 基础 Rust 开发。
Rust CLI 工具开发技能。提供使用 Rust 开发命令行工具的完整参考,包括参数解析、错误处理、输出格式化、跨平台支持等。TRIGGER when: 用户开发 Rust CLI 工具、使用 clap/structopt、处理命令行参数、格式化输出、或需要了解 Rust CLI 最佳实践时触发。SKIP: 非 CLI 工具的 Rust 开发。
Rust 版本指南技能。提供 Rust 版本(Edition)的完整参考,包括版本差异、迁移指南、新特性等。TRIGGER when: 用户需要了解 Rust 版本差异、迁移代码到新版本、或需要了解版本新特性时触发。SKIP: 非版本相关的 Rust 开发。
Rust 嵌入式开发技能。提供使用 Rust 进行嵌入式开发的完整参考,包括 no_std 环境、HAL 层、外设驱动、中断处理、实时系统等。TRIGGER when: 用户开发嵌入式 Rust 程序、使用 cortex-m/esp-hal、配置 no_std 环境、处理硬件外设、或需要了解 Rust 嵌入式最佳实践时触发。SKIP: 非嵌入式 Rust 开发。
Rust 练习技能。提供 Rust 练习和学习资源的完整参考,包括 Rustlings、练习题、最佳实践等。TRIGGER when: 用户学习 Rust、需要练习题、或需要了解 Rust 学习资源时触发。SKIP: 非学习相关的 Rust 开发。
Rust 语言核心开发技能。提供 Rust 语言的完整参考,包括所有权、借用、生命周期、泛型、trait、错误处理、并发、异步等核心概念。TRIGGER when: 用户编写 Rust 代码、询问 Rust 语法、需要 Rust 代码示例、调试 Rust 程序、或需要了解 Rust 语言特性时触发。SKIP: 非 Rust 语言的开发任务。
| name | rust-reference |
| description | Rust 语言参考技能。提供 Rust 语言的完整参考,包括语法、类型系统、内存模型、并发模型等。TRIGGER when: 用户需要了解 Rust 语言细节、查阅语言规范、或需要深入了解 Rust 内部机制时触发。SKIP: 基础 Rust 开发。 |
本技能提供 Rust 语言的完整参考,基于 Rust Reference。
当用户执行以下操作时触发此技能:
以下情况不触发此技能:
rust-language 技能)// 保留关键字
as, async, await, break, const, continue, crate, dyn, else, enum, extern
false, fn, for, if, impl, in, let, loop, match, mod, move, mut, pub, ref
return, self, Self, static, struct, super, trait, true, type, unsafe, use
where, while, yield
// 保留关键字(未来使用)
abstract, become, box, do, final, macro, override, priv, try, typeof
unsized, virtual
// 算术运算符
+ - * / %
// 比较运算符
== != < > <= >=
// 逻辑运算符
! && ||
// 位运算符
& | ^ ! << >>
// 赋值运算符
= += -= *= /= %= &= |= ^= <<= >>=
// 其他运算符
.. ..= // 范围
? // 错误传播
-> // 函数返回类型
=> // match 分支
@ // 模式绑定
# // 属性
$ // 宏
// 布尔类型
bool // true, false
// 字符类型
char // Unicode 标量值
// 整数类型
i8, i16, i32, i64, i128, isize
u8, u16, u32, u64, u128, usize
// 浮点类型
f32, f64
// 单元类型
() // 空元组
// 永不类型
! // 永不返回
// 元组
(i32, f64, bool) // 固定长度
() // 空元组
(T,) // 单元素元组
// 数组
[i32; 5] // 固定长度数组
[T; N] // 泛型数组
// 切片
[T] // 动态大小切片
str // 字符串切片
type Kilometers = i32;
type Thunk = Box<dyn Fn() + Send + 'static>;
type Result<T> = std::result::Result<T, std::io::Error>;
// 每个值有且只有一个所有者
let s1 = String::from("hello");
let s2 = s1; // s1 所有权转移给 s2
// 当所有者离开作用域,值被丢弃
{
let s = String::from("hello");
// s 在这里有效
} // s 在这里被丢弃
// 不可变引用
let s = String::from("hello");
let r = &s; // r 是 s 的不可变引用
// 可变引用
let mut s = String::from("hello");
let r = &mut s; // r 是 s 的可变引用
// 引用规则
// 1. 任意数量的不可变引用
// 2. 或者一个可变引用
// 3. 不能同时存在
// 生命周期标注
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() { x } else { y }
}
// 生命周期省略规则
// 1. 每个引用参数都有自己的生命周期
// 2. 如果只有一个输入生命周期,它被赋给所有输出生命周期
// 3. 如果有多个输入生命周期,但其中一个是 &self 或 &mut self,那么 self 的生命周期被赋给所有输出生命周期
use std::thread;
// 创建线程
let handle = thread::spawn(|| {
// 线程代码
});
// 等待线程完成
handle.join().unwrap();
// 线程间通信
let (tx, rx) = mpsc::channel();
use std::sync::{Mutex, RwLock, Arc};
// Mutex
let m = Mutex::new(5);
{
let mut num = m.lock().unwrap();
*num = 6;
}
// RwLock
let lock = RwLock::new(5);
let r1 = lock.read().unwrap();
let r2 = lock.read().unwrap();
let mut w = lock.write().unwrap();
// Arc
let counter = Arc::new(Mutex::new(0));
let counter_clone = Arc::clone(&counter);
// Send: 可以在线程间转移所有权
// Sync: 可以在线程间共享引用
// 自动实现
// 大多数类型自动实现 Send 和 Sync
// Rc<T> 不是 Send,Cell<T> 不是 Sync
// 手动实现
unsafe impl Send for MyType {}
unsafe impl Sync for MyType {}
// 字面量
42
"hello"
true
// 变量绑定
let x = 5;
let (x, y) = (1, 2);
// 通配符
let _ = 5;
let (_, y) = (1, 2);
// 引用
let &x = &5;
let ref x = 5;
// 结构体
struct Point { x: i32, y: i32 }
let Point { x, y } = Point { x: 1, y: 2 };
let Point { x, .. } = Point { x: 1, y: 2 };
// 枚举
enum Shape { Circle(f64), Rectangle(f64, f64) }
let Shape::Circle(radius) = shape;
let Shape::Rectangle(width, height) = shape;
// 范围
1..=5
'a'..='z'
// 守卫
match x {
n if n > 0 => println!("正数"),
n if n < 0 => println!("负数"),
_ => println!("零"),
}
// 绑定
match x {
n @ 1..=5 => println!("1 到 5: {}", n),
_ => println!("其他"),
}
// 派生属性
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
struct Point { x: i32, y: i32 }
// 条件编译
#[cfg(target_os = "linux")]
fn linux_only() {}
// 测试
#[test]
fn test_function() {}
// 忽略测试
#[test]
#[ignore]
fn expensive_test() {}
// 应该 panic
#[test]
#[should_panic(expected = "除以零")]
fn test_panic() {}
// 文档
/// 这是文档注释
#[doc = "这是文档属性"]
fn documented() {}
// 过程宏属性
#[my_attribute]
fn decorated() {}
// 属性宏
#[derive(MyMacro)]
struct MyStruct;
macro_rules! my_macro {
() => {
println!("无参数");
};
($x:expr) => {
println!("一个参数: {}", $x);
};
($x:expr, $y:expr) => {
println!("两个参数: {} 和 {}", $x, $y);
};
}
fn main() {
my_macro!();
my_macro!(42);
my_macro!(1, 2);
}
// 派生宏
#[proc_macro_derive(MyMacro)]
pub fn my_macro_derive(input: TokenStream) -> TokenStream {
// 实现
}
// 属性宏
#[proc_macro_attribute]
pub fn my_attribute(args: TokenStream, input: TokenStream) -> TokenStream {
// 实现
}
// 函数式宏
#[proc_macro]
pub fn my_macro(input: TokenStream) -> TokenStream {
// 实现
}