一键导入
rust-std
Rust 标准库技能。提供 Rust 标准库的完整参考,包括常用模块、类型、trait、函数等。TRIGGER when: 用户使用标准库功能、查询标准库 API、需要标准库代码示例、或需要了解标准库最佳实践时触发。SKIP: 非标准库相关的 Rust 开发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Rust 标准库技能。提供 Rust 标准库的完整参考,包括常用模块、类型、trait、函数等。TRIGGER when: 用户使用标准库功能、查询标准库 API、需要标准库代码示例、或需要了解标准库最佳实践时触发。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-std |
| description | Rust 标准库技能。提供 Rust 标准库的完整参考,包括常用模块、类型、trait、函数等。TRIGGER when: 用户使用标准库功能、查询标准库 API、需要标准库代码示例、或需要了解标准库最佳实践时触发。SKIP: 非标准库相关的 Rust 开发。 |
本技能提供 Rust 标准库的完整参考,基于 Standard Library Documentation。
当用户执行以下操作时触发此技能:
以下情况不触发此技能:
use std::collections::{HashMap, HashSet, BTreeMap, BTreeSet, VecDeque, LinkedList};
// HashMap
let mut map = HashMap::new();
map.insert("key", "value");
let value = map.get("key");
// HashSet
let mut set = HashSet::new();
set.insert(1);
set.contains(&1);
// BTreeMap (有序)
let mut btree = BTreeMap::new();
btree.insert(1, "a");
btree.insert(2, "b");
// VecDeque (双端队列)
let mut deque = VecDeque::new();
deque.push_back(1);
deque.push_front(2);
deque.pop_front();
use std::fs::{self, File, OpenOptions};
use std::io::{self, Read, Write, BufReader, BufWriter};
// 读取文件
let content = fs::read_to_string("file.txt")?;
// 写入文件
fs::write("file.txt", "content")?;
// 逐行读取
let file = File::open("file.txt")?;
let reader = BufReader::new(file);
for line in reader.lines() {
println!("{}", line?);
}
// 追加写入
let mut file = OpenOptions::new()
.append(true)
.open("file.txt")?;
writeln!(file, "new line")?;
// 创建目录
fs::create_dir_all("path/to/dir")?;
// 遍历目录
for entry in fs::read_dir(".")? {
let entry = entry?;
println!("{}", entry.path().display());
}
use std::path::{Path, PathBuf};
let path = Path::new("/tmp/file.txt");
// 路径组件
println!("文件名: {:?}", path.file_name());
println!("扩展名: {:?}", path.extension());
println!("父目录: {:?}", path.parent());
println!("是否存在: {}", path.exists());
println!("是否文件: {}", path.is_file());
println!("是否目录: {}", path.is_dir());
// 构建路径
let mut path = PathBuf::new();
path.push("src");
path.push("main.rs");
// 拼接路径
let path = Path::new("/tmp").join("file.txt");
use std::io::{self, Read, Write, BufRead, BufReader, BufWriter, stdin, stdout};
// 从 stdin 读取
let mut input = String::new();
stdin().read_line(&mut input)?;
// 写入 stdout
stdout().write_all(b"hello")?;
// 带缓冲的读写
let reader = BufReader::new(stdin());
let writer = BufWriter::new(stdout());
// 读取所有内容
let mut content = String::new();
File::open("file.txt")?.read_to_string(&mut content)?;
use std::thread;
use std::time::Duration;
// 创建线程
let handle = thread::spawn(|| {
for i in 1..10 {
println!("hi number {} from the spawned thread!", i);
thread::sleep(Duration::from_millis(1));
}
});
handle.join().unwrap();
// 命名线程
let builder = thread::Builder::new()
.name("worker".to_string())
.stack_size(32 * 1024);
let handle = builder.spawn(|| {
println!("Thread name: {:?}", thread::current().name());
}).unwrap();
use std::sync::{Arc, Mutex, RwLock, mpsc, Barrier};
// Arc + Mutex
let counter = Arc::new(Mutex::new(0));
let counter_clone = Arc::clone(&counter);
let handle = thread::spawn(move || {
let mut num = counter_clone.lock().unwrap();
*num += 1;
});
// RwLock (读写锁)
let lock = Arc::new(RwLock::new(5));
let lock_clone = Arc::clone(&lock);
// 多个读取者
let r1 = lock.read().unwrap();
let r2 = lock.read().unwrap();
// 单个写入者
let mut w = lock.write().unwrap();
*w += 1;
// 消息通道
let (tx, rx) = mpsc::channel();
thread::spawn(move || {
tx.send("hello").unwrap();
});
let received = rx.recv().unwrap();
use std::time::{Duration, Instant, SystemTime};
// Instant (单调时钟)
let start = Instant::now();
// ... 某些操作 ...
let elapsed = start.elapsed();
println!("耗时: {:?}", elapsed);
// Duration
let five_seconds = Duration::from_secs(5);
let ten_millis = Duration::from_millis(10);
thread::sleep(five_seconds);
// SystemTime (系统时间)
let now = SystemTime::now();
let since_epoch = now.duration_since(SystemTime::UNIX_EPOCH)?;
println!("自 Unix 纪元以来: {} 秒", since_epoch.as_secs());
use std::env;
// 获取环境变量
let path = env::var("PATH")?;
let home = env::var("HOME").unwrap_or_default();
// 设置环境变量
env::set_var("MY_VAR", "value");
// 命令行参数
let args: Vec<String> = env::args().collect();
for arg in args {
println!("{}", arg);
}
// 当前目录
let current_dir = env::current_dir()?;
// 临时目录
let temp_dir = env::temp_dir();
// String (拥有所有权)
let mut s = String::new();
let s = String::from("hello");
let s = "hello".to_string();
s.push_str(" world");
s.push('!');
// &str (字符串切片,借用)
let s: &str = "hello";
let s: &str = &string[..];
// 转换
let s: String = "hello".to_string();
let s: &str = &string;
let mut v: Vec<i32> = Vec::new();
let v = vec![1, 2, 3];
v.push(4);
v.pop();
v.insert(0, 0);
v.remove(0);
v.retain(|&x| x > 2);
// 排序
v.sort();
v.sort_by(|a, b| b.cmp(a)); // 降序
v.sort_unstable(); // 更快但不稳定
// 搜索
let pos = v.binary_search(&3);
let pos = v.iter().position(|&x| x == 3);
// 切片
let slice = &v[1..3];
// Option
let some: Option<i32> = Some(42);
let none: Option<i32> = None;
let value = some.unwrap_or(0);
let value = some.unwrap_or_default();
let value = some.unwrap_or_else(|| expensive_computation());
let value = some.expect("值不存在");
// Result
let ok: Result<i32, String> = Ok(42);
let err: Result<i32, String> = Err("error".to_string());
let value = ok.unwrap_or(0);
let value = ok.unwrap_or_default();
let value = ok.expect("值不存在");
// 组合子
let mapped = some.map(|x| x * 2);
let filtered = some.filter(|&x| x > 10);
let flatmapped = some.and_then(|x| Some(x * 2));
let v = vec![1, 2, 3, 4, 5];
// 迭代器适配器
let doubled: Vec<i32> = v.iter().map(|x| x * 2).collect();
let evens: Vec<&i32> = v.iter().filter(|&&x| x % 2 == 0).collect();
let sum: i32 = v.iter().sum();
let product: i32 = v.iter().product();
let max = v.iter().max();
let min = v.iter().min();
let count = v.iter().count();
// 链式调用
let result: i32 = v.iter()
.filter(|&&x| x % 2 == 0)
.map(|&x| x * 2)
.sum();
// enumerate
for (i, val) in v.iter().enumerate() {
println!("{}: {}", i, val);
}
// zip
let names = vec!["Alice", "Bob"];
let ages = vec![25, 30];
let people: Vec<_> = names.iter().zip(ages.iter()).collect();
use std::fmt;
struct Point {
x: f64,
y: f64,
}
impl fmt::Display for Point {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "({}, {})", self.x, self.y)
}
}
impl fmt::Debug for Point {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_struct("Point")
.field("x", &self.x)
.field("y", &self.y)
.finish()
}
}
let p = Point { x: 1.0, y: 2.0 };
println!("{}", p); // Display: (1, 2)
println!("{:?}", p); // Debug: Point { x: 1.0, y: 2.0 }
#[derive(Clone, Copy)]
struct Point {
x: f64,
y: f64,
}
let p1 = Point { x: 1.0, y: 2.0 };
let p2 = p1; // Copy,p1 仍然有效
let p3 = p1.clone(); // Clone
struct Celsius(f64);
struct Fahrenheit(f64);
impl From<Celsius> for Fahrenheit {
fn from(c: Celsius) -> Self {
Fahrenheit(c.0 * 9.0 / 5.0 + 32.0)
}
}
let c = Celsius(100.0);
let f: Fahrenheit = c.into();
let f = Fahrenheit::from(c);
#[derive(Default)]
struct Config {
width: u32,
height: u32,
fullscreen: bool,
}
let config = Config::default();
let config = Config {
width: 1920,
..Default::default()
};
&str 而非 String:作为函数参数时更灵活Vec<T> 而非数组:动态大小更实用Option 和 Result:而非 null 或 panicimpl Trait:作为返回类型避免装箱Cow<str>:避免不必要的字符串克隆