Rust 语言完全指南:为什么它是 AI 时代的强力语言?如何从零开始掌握它?(8000+字深度解析·附 20 段实战代码)
📖 导读
本文是一份8000+字的 Rust 完全指南,覆盖 8 大章节、22 个小节、20+ 段可运行代码、6 张对比表格与 5 张原创插图。
适合人群:Python/Java/JS 开发者想转系统级编程、C/C++ 工程师想摆脱内存 Bug、AI 工程师想参与底层框架贡献。
预计阅读时长:45-60 分钟。
配套代码仓库:github.com/rust-lang/rust
核心收获:
- 理解 Rust 三大核心范式:内存安全、零成本抽象、无畏并发
- 掌握所有权/借用/生命周期三大铁律
- 看清 Rust 在 AI 时代的独特定位与 Python 的最佳拍档模式
- 拿到一份 12 周可执行的 Rust 学习路线图
1. 引言:Rust 的崛起——一场编程语言的革命
想象一下,你正在建造一座摩天大楼。你可以选择用木头(Python)快速搭建,但到了第 20 层,结构开始摇晃;你也可以用钢筋混凝土(C/C++),但每一根钢筋都需要你亲手焊接,稍有不慎整栋楼就会坍塌。现在,有一种新型材料出现了——它像木头一样容易施工,却拥有钢筋混凝土的强度,甚至还能在你犯错时自动提醒你:「这里少了一根承重柱!」
这种材料,就是 Rust。
从 2015 年第一个稳定版发布至今,Rust 已经连续 8 年蝉联 Stack Overflow「最受开发者喜爱的语言」榜首。微软、Google、亚马逊、Meta 等科技巨头纷纷将核心系统迁移到 Rust。Linux 内核从 6.1 版本开始正式支持 Rust,Android 系统 20% 以上的新原生代码用 Rust 编写,甚至美国白宫都公开呼吁开发者使用 Rust 来构建关键基础设施。
为什么 Rust 如此受欢迎?它到底有什么魔力?如果你是一个 Python 开发者、Java 开发者,甚至是 C/C++ 老兵,为什么要学习 Rust?更重要的是——如何从零开始掌握这门语言?
这篇文章将为你一一解答。我们会用生动的比喻、丰富的例子和清晰的路线图,带你走进 Rust 的世界。
2. Rust 的核心优势:为什么它如此「香」?
2.1 内存安全——没有「段错误」的 C 语言
比喻:图书馆的借书系统
想象你管理着一个巨大的图书馆。在 C 语言的世界里,读者借书后,你需要手动记录谁借了什么书,什么时候还。如果忘记记录,书可能永远丢失(内存泄漏);如果读者还了书你还继续让他看,他看到的可能是别人的书(悬垂指针);如果两个读者同时借同一本书,系统会崩溃(数据竞争)。
Rust 引入了一个天才般的系统——所有权(Ownership)。这就像给每本书装上了 RFID 标签:
- 每本书只有一个主人(所有权唯一)
- 你可以临时借给别人看(借用/Borrowing)
- 借出去的时候,你自己不能修改(不可变借用)
- 还回来之后,你才能继续操作(生命周期检查)
这一切都在编译时检查完毕,不需要垃圾回收器(GC)的额外开销。这意味着 Rust 既拥有 C/C++ 的性能,又拥有 Java/Python 的安全性。
// 所有权示例
fn main() {
let book = String::from("Rust 编程之道"); // book 是所有者
let reader = &book; // 不可变借用,可以读
println!("{}", reader); // 输出:Rust 编程之道
// book 仍然可用
println!("{}", book); // 输出:Rust 编程之道
}
2.2 零成本抽象——写高级代码,得底层性能
比喻:自动驾驶汽车
Python 就像一辆手动挡汽车——你写起来很轻松,但引擎盖下有很多不必要的空转(运行时开销)。C++ 像一辆手动挡赛车——性能极佳,但你需要精确控制每一个换挡时机。
Rust 则像一辆自动驾驶的特斯拉——你只需要告诉它「去机场」,它会自动选择最优路线、控制油门刹车,而且比手动挡还省油。
Rust 的迭代器、闭包、泛型等高级特性,在编译时会被优化成与手写底层代码几乎相同的机器码。你不需要在「开发效率」和「运行效率」之间做取舍。
// 零成本抽象示例:迭代器
fn main() {
let numbers = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// 高级写法——可读性强
let sum: i32 = numbers.iter()
.filter(|&&x| x % 2 == 0) // 只取偶数
.map(|&x| x * 2) // 每个乘以2
.sum(); // 求和
// 编译后等价于手写的 for 循环
println!("结果: {}", sum); // 输出:60
}
2.3 无畏并发——让多线程编程不再可怕
比喻:厨房里的多位厨师
想象一个繁忙的厨房,多位厨师同时工作。在 C/C++ 中,如果两个厨师同时去拿同一个锅(共享数据),轻则烧焦菜,重则厨房着火(数据竞争)。你需要用锁(mutex)来协调,但锁用不好就会死锁——所有厨师都拿着一个锅盖等另一个锅盖,谁也动不了。
Rust 的类型系统在编译时就保证了:要么你拥有数据的唯一访问权(可变引用),要么你有多个只读访问权(不可变引用),两者不可兼得。这就是著名的「要么一个写者,要么多个读者」原则。
use std::thread;
fn main() {
let data = vec![1, 2, 3];
// 错误示例——编译不通过!
// let handle = thread::spawn(|| {
// println!("{:?}", data);
// });
// 正确做法:使用 move 关键字转移所有权
let handle = thread::spawn(move || {
println!("{:?}", data); // data 的所有权被转移到了新线程
});
handle.join().unwrap();
// 这里不能再使用 data,因为所有权已经转移
}
2.4 与 C 语言的 FFI 互操作性——站在巨人的肩膀上
Rust 可以无缝调用 C 语言库,这意味着你可以直接使用 Python 的 C 扩展库、操作系统的系统调用、甚至现有的 C/C++ 代码库。Rust 不是要取代 C,而是要继承 C 的生态,同时修复 C 的安全问题。
// 调用 C 标准库的 printf
extern "C" {
fn printf(format: *const u8, ...) -> i32;
}
fn main() {
let msg = b"Hello from Rust!\n\0";
unsafe {
printf(msg.as_ptr());
}
}
2.5 出色的工具链——开箱即用的开发体验
Rust 的工具链是编程语言中最优秀的之一:
| 工具 | 功能 | 类比 |
|---|---|---|
rustup |
版本管理 | 像 nvm(Node.js)但更好 |
cargo |
包管理+构建 | 像 pip + npm + make 合体 |
rustfmt |
代码格式化 | 像 Prettier |
clippy |
代码检查 | 像 ESLint 但更严格 |
rust-analyzer |
IDE 支持 | 像 IntelliJ 的智能提示 |
# 一行命令创建新项目
cargo new my_project
cd my_project
# 运行
cargo run
# 测试
cargo test
# 发布
cargo build --release
3. Rust 在 AI 时代的独特地位
3.1 为什么 AI 需要 Rust?
你可能在想:「AI 不是用 Python 吗?Rust 跟 AI 有什么关系?」
这是一个非常好的问题。让我们看看 AI 系统的实际架构:
┌─────────────────────────────────────────┐
│ 应用层 (Python) │
│ PyTorch / TensorFlow / Transformers │
├─────────────────────────────────────────┤
│ 框架层 (C++/CUDA) │
│ 自动求导 / 算子库 / 内存管理 │
├─────────────────────────────────────────┤
│ 基础设施层 (Rust) │
│ 数据管道 / 模型服务 / 推理引擎 │
├─────────────────────────────────────────┤
│ 硬件层 (GPU/TPU) │
└─────────────────────────────────────────┘
Python 是 AI 的「指挥家」——它负责编排、调度、实验。但真正「演奏」的是底层的 C++/CUDA 代码。而 Rust 正在成为连接 Python 和底层硬件的最佳桥梁。
3.2 Rust 在 AI 领域的实际应用
案例 1:Hugging Face 的 Tokenizer
Hugging Face 用 Rust 重写了他们的 Tokenizer(分词器),性能提升了 5-10 倍。现在 transformers 库底层使用的 tokenizers 包就是用 Rust 编写的,通过 Python 绑定暴露接口。
# Python 代码,底层是 Rust
from tokenizers import Tokenizer
tokenizer = Tokenizer.from_pretrained("bert-base-uncased")
output = tokenizer.encode("Hello, Rust is fast!")
print(output.tokens())
# ['hello', ',', 'rust', 'is', 'fast', '!']
案例 2:Candle——轻量级深度学习框架
Hugging Face 还推出了 Candle,一个纯 Rust 实现的深度学习框架。它没有 Python 依赖,没有 CUDA 运行时,甚至可以在浏览器中通过 WebAssembly 运行!
use candle_core::{Device, Tensor};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let device = Device::Cpu;
// 创建张量
let a = Tensor::new(&[[1.0f32, 2.0], [3.0, 4.0]], &device)?;
let b = Tensor::new(&[[5.0f32, 6.0], [7.0, 8.0]], &device)?;
// 矩阵乘法
let c = a.matmul(&b)?;
println!("{:?}", c.to_vec2::<f32>()?);
// [[19.0, 22.0], [43.0, 50.0]]
Ok(())
}
案例 3:数据管道与模型服务
- Polars:比 Pandas 快 10-100 倍的 DataFrame 库,纯 Rust 实现
- Burn:纯 Rust 深度学习框架,支持 GPU 加速
- Tract:ONNX 推理引擎,适合边缘设备部署
3.3 Rust + Python:最佳拍档
你不需要在 Rust 和 Python 之间二选一。实际上,Rust + Python 的组合正在成为 AI 工程化的黄金标准:
Python(快速原型) → Rust(生产优化)
↓ ↓
实验阶段 部署阶段
数据探索 高性能服务
模型训练 推理引擎
使用 PyO3 库,你可以用 Rust 编写 Python 扩展模块:
// Rust 代码
use pyo3::prelude::*;
#[pyfunction]
fn fast_process(data: Vec<f64>) -> Vec<f64> {
data.iter().map(|x| x * 2.0).collect()
}
#[pymodule]
fn my_rust_module(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(fast_process, m)?)?;
Ok(())
}
# Python 代码
import my_rust_module
result = my_rust_module.fast_process([1.0, 2.0, 3.0])
print(result) # [2.0, 4.0, 6.0]
4. Rust 基础知识点全览
下面是一个完整的 Rust 知识点地图,按照学习路径排列:
4.1 第一阶段:基础语法(1-2 周)
4.1.1 变量与可变性
fn main() {
// 默认不可变
let x = 5;
// x = 6; // 编译错误!
// 使用 mut 声明可变变量
let mut y = 5;
y = 6; // 可以
// 常量
const MAX_POINTS: u32 = 100_000;
// 变量遮蔽(Shadowing)
let spaces = " ";
let spaces = spaces.len(); // 现在 spaces 是数字类型
}
4.1.2 基本数据类型
| 类型 | 描述 | 示例 |
|---|---|---|
i8, i16, i32, i64, i128 |
有符号整数 | let x: i32 = 42; |
u8, u16, u32, u64, u128 |
无符号整数 | let y: u8 = 255; |
f32, f64 |
浮点数 | let pi: f64 = 3.14159; |
bool |
布尔值 | let flag = true; |
char |
字符(4 字节,支持 Unicode) | let c = '🦀'; |
String |
动态字符串 | let s = String::from("hello"); |
&str |
字符串切片 | let s: &str = "hello"; |
4.1.3 控制流
fn main() {
// if 表达式
let number = 6;
if number % 4 == 0 {
println!("能被4整除");
} else if number % 3 == 0 {
println!("能被3整除");
} else {
println!("其他");
}
// if 作为表达式
let condition = true;
let number = if condition { 5 } else { 6 };
// 循环
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2; // 返回值
}
};
// while 循环
let mut number = 3;
while number != 0 {
println!("{}!", number);
number -= 1;
}
// for 循环(最常用)
let a = [10, 20, 30, 40, 50];
for element in a.iter() {
println!("值是: {}", element);
}
// 范围
for number in (1..4).rev() {
println!("{}!", number);
}
}
4.2 第二阶段:所有权与借用(2-3 周)
这是 Rust 最核心、也最独特的概念。理解所有权,你就理解了 Rust 的灵魂。
4.2.1 所有权规则
- 每个值都有一个所有者
- 同一时间只能有一个所有者
- 当所有者离开作用域,值被自动释放
fn main() {
// 规则 1:s 是字符串的所有者
let s = String::from("hello");
// 规则 2:移动(Move)——所有权转移
let s1 = String::from("hello");
let s2 = s1; // s1 的所有权移动到 s2
// println!("{}", s1); // 编译错误!s1 已失效
// 克隆(Clone)——深拷贝
let s1 = String::from("hello");
let s2 = s1.clone();
println!("s1 = {}, s2 = {}", s1, s2); // 都可以用
// 规则 3:作用域结束自动释放
{
let s = String::from("hello");
// s 在这里有效
} // 作用域结束,s 被自动释放
// println!("{}", s); // 编译错误!s 已释放
// 函数传参也会转移所有权
let s = String::from("world");
take_ownership(s);
// println!("{}", s); // 编译错误!所有权已转移
}
fn take_ownership(some_string: String) {
println!("{}", some_string);
} // some_string 在这里被释放
4.2.2 借用与引用
所有权规则虽然安全,但有时过于严格。比如我们只想「读」一个值,不想获取它的所有权——这时就需要借用。
fn main() {
let s1 = String::from("hello");
// 不可变引用(&T)——只读借用
let len = calculate_length(&s1);
println!("'{}' 的长度是 {}", s1, len); // s1 仍然可用
}
fn calculate_length(s: &String) -> usize { // s 是对 String 的引用
s.len()
} // s 离开作用域,但不会释放它引用的值
借用规则:
- 任意时刻,只能有一个可变引用,或者任意多个不可变引用
- 引用必须始终有效(不会出现悬垂引用)
fn main() {
let mut s = String::from("hello");
// 不可变引用可以有多个
let r1 = &s;
let r2 = &s;
println!("{} 和 {}", r1, r2);
// 注意:r1 和 r2 在这里之后不再使用
// 可变引用只能有一个
let r3 = &mut s;
r3.push_str(", world");
println!("{}", r3);
}
4.2.3 切片(Slice)
切片是另一种不持有所有权的数据类型,它允许你引用集合中的一段连续元素。
fn main() {
let s = String::from("hello world");
// 字符串切片
let hello = &s[0..5]; // "hello"
let world = &s[6..11]; // "world"
let whole = &s[..]; // "hello world"
println!("{} {}", hello, world);
// 数组切片
let a = [1, 2, 3, 4, 5];
let slice = &a[1..3]; // [2, 3]
assert_eq!(slice, &[2, 3]);
}
小结:所有权、借用和切片是 Rust 内存安全的三驾马车。虽然初学时需要适应,但一旦掌握,你将写出既安全又高效的代码,再也不用担心内存泄漏或悬垂指针。
5. 实战项目:从入门到进阶
理论知识学得再多,不动手写代码都是纸上谈兵。下面按照难度递进,推荐几个 Rust 实战项目:
5.1 入门级项目(1-2 周)
| 项目 | 核心知识点 | 难度 |
|---|---|---|
| 命令行猜数字游戏 | 变量、控制流、标准输入输出 | ⭐ |
| 文件内容统计工具(wc 克隆) | 文件读写、字符串处理、命令行参数 | ⭐ |
| 简易计算器 | 枚举、模式匹配、Result 错误处理 | ⭐⭐ |
5.2 进阶级项目(2-4 周)
| 项目 | 核心知识点 | 难度 |
|---|---|---|
| HTTP 静态文件服务器 | TCP 监听、HTTP 协议、多线程 | ⭐⭐⭐ |
| Markdown 解析器 | 状态机、所有权、迭代器 | ⭐⭐⭐ |
| 简易数据库(Bitcask 模型) | 文件 I/O、序列化、哈希表 | ⭐⭐⭐ |
5.3 高级项目(4-8 周)
| 项目 | 核心知识点 | 难度 |
|---|---|---|
| 简易 Redis 实现 | 网络编程、协议解析、并发模型 | ⭐⭐⭐⭐ |
| 命令行 JSON 查询工具(jq 克隆) | 泛型、trait、递归数据结构 | ⭐⭐⭐⭐ |
| 简易操作系统内核(配合教程) | 裸机编程、内存管理、中断处理 | ⭐⭐⭐⭐⭐ |
6. 常见踩坑指南与最佳实践
6.1 生命周期标注恐惧症
// ❌ 新手常见错误:试图避免生命周期标注
fn first_word(s: &str) -> &str {
let bytes = s.as_bytes();
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return &s[0..i];
}
}
&s[..]
}
// ✅ 实际上编译器会自动省略生命周期,上面的代码完全合法!
核心心法:生命周期标注不是惩罚,而是帮助编译器理解你的意图。大多数情况下,编译器会自动推断。
6.2 字符串类型选择困难
// ❌ 过度使用 String
let mut result = String::new();
for word in words {
result.push_str(word);
result.push_str(", ");
}
// ✅ 使用 Vec<String> 最后 join
let result = words.join(", ");
选择原则:
- 函数参数:优先用
&str(最灵活) - 函数返回值:用
String(所有权转移) - 字符串字面量:用
&str - 需要修改:用
String
6.3 错误处理:unwrap 滥用
// ❌ 生产代码中大量 unwrap
let file = File::open("config.txt").unwrap();
let content = read_to_string(file).unwrap();
let config: Config = toml::from_str(&content).unwrap();
// ✅ 使用 ? 运算符传播错误
fn load_config() -> Result<Config, Box<dyn Error>> {
let file = File::open("config.txt")?;
let content = read_to_string(file)?;
let config: Config = toml::from_str(&content)?;
Ok(config)
}
7. 学习资源推荐
📚 书籍(按阅读顺序)
🌐 在线资源
| 资源 | 地址 | 推荐理由 |
|---|---|---|
| Rust 官方文档 | doc.rust-lang.org | 最权威,必读 |
| Rust By Example | doc.rust-lang.org/stable/rust-by-example | 边练边学 |
| Rustlings | github.com/rust-lang/rustlings | 交互式练习 |
| Rust 语言圣经 | course.rs | 中文最佳教程 |
| Rust 设计模式 | rust-unofficial.github.io/patterns | 进阶必看 |
🛠️ 开发工具推荐
8. 总结:Rust 的未来与你的学习之路
回顾全文
让我们回顾一下这篇文章的核心脉络:
Rust 的未来趋势
- 系统编程领域:Linux 内核、Android、Windows 都在引入 Rust,未来 5 年 Rust 将成为系统编程的主流选择之一
- AI 基础设施:随着 Candle、Burn 等纯 Rust 框架成熟,Rust 在 AI 推理、边缘计算领域将占据重要位置
- WebAssembly:Rust 是 WASM 的一等公民,在 Serverless、边缘计算场景大有可为
- 嵌入式与 IoT:Rust 的零成本抽象和内存安全特性,使其成为嵌入式开发的理想选择
给你的学习建议
最后送你一句话:学习 Rust 就像学习一门新的乐器——开头几天手指会疼,和弦会按错,节奏会乱。但当你第一次完整弹出一首曲子时,那种成就感是无与伦比的。Rust 的学习曲线确实陡峭,但翻过这座山,你会发现一个更安全、更高效、更优雅的编程世界。
9. 常见问题 FAQ
Q1:Rust 真的能在 2026 年取代 C/C++ 吗?
A:不会完全取代,但在新增项目中占比会持续上升。Linux 内核、Android、Chromium 等大型项目正在逐步用 Rust 重写新模块;老代码则保持 C/C++ 不动。可以预见未来 5-10 年的格局是:新项目优先 Rust,老项目逐步迁移,关键基础设施双轨并行。
Q2:Rust 的学习曲线真的有那么陡峭吗?
A:是的,前 2-3 周会非常痛苦(主要是和借用检查器"打架")。但一旦过了所有权这一关,后续学习曲线就趋于平缓。经验值:每天投入 2 小时,6-8 周可以独立写项目;3 个月可以达到能上生产环境的水平。Rust 的设计哲学是"把 Bug 拦在编译期",所以一旦编译通过,运行时几乎不会出意外。
Q3:Rust 适合写 Web 后端吗?
A:非常适合。Axum(基于 Tokio 的 Web 框架)+ SQLx(异步数据库)+ Tower(中间件生态)是目前最主流的组合。性能上碾压 Python/Node,接近 Go 的水平。字节跳动内部已大规模使用 Rust 写后端服务。推荐栈:Axum + Tokio + SQLx + Serde。
Q4:AI 工程师要不要学 Rust?
A:强烈建议。原因有三:
- 性能:Hugging Face 的
tokenizers库、Polars 数据处理框架都是 Rust 写的,速度比 Python 快 5-50 倍 - 就业:Rust 工程师是 2025-2026 年最稀缺的岗位之一,年薪普遍比同级别 Python 高 30-50%
- 底层贡献:PyTorch、TensorFlow 等核心模块的 PR 中 Rust 占比越来越高
Q5:Rust 和 Go 怎么选?
A:定位不同——
- Go:简单易学、并发原语完善、部署方便(单二进制),适合写微服务、CLI、DevOps 工具
- Rust:性能极强、内存安全、零成本抽象,适合写系统级、嵌入式、高性能计算、WebAssembly
如果团队人手紧张、追求快速交付,选 Go;如果项目对性能/安全有极致要求,选 Rust。两者并不冲突,可以混用。
Q6:Rust 的 WebAssembly 支持怎么样?
A:业界最成熟。WASM 是 Rust 的"杀手级应用"之一:
wasm-pack一行命令把 Rust 代码编译为 npm 包wasm-bindgen实现 JS/Rust 双向调用- Yew、Leptos 等 Rust 前端框架正在挑战 React 的地位
- Figma、Photoshop Web 版都用 Rust+WASM 加速
Q7:Rust 编译太慢怎么办?
A:这是 Rust 目前的最大短板。缓解方法:
sccache:分布式编译缓存,命中后秒级编译mold链接器:比默认ld快 5-10 倍- 增量编译 + 工作区:把项目拆成多个 crate
cargo build --release配合lto="thin"优化
未来 Rust 团队正在推进的「并行编译」和「数据库跟踪」会进一步改善。
Q8:Rust 的异步编程难学吗?
A:异步是 Rust 进阶的第二大门槛(第一大是所有权)。核心概念:
async/await语法糖Futuretrait 理解- Tokio 运行时
Pin和Self-referential结构
建议:先把同步 Rust 写熟,再学异步。过早接触异步会陷入"所有权 + 生命周期 + Pin"三连击。
10. 参考文献与延伸阅读
📚 经典书籍
- 《The Rust Programming Language》(官方书,俗称"the Book")— 免费在线阅读,必读入门
- 《Programming Rust》(O’Reilly,Jim Blandy)— 深入底层原理
- 《Rust for Rustaceans》(Jon Gjengset)— 进阶必读,覆盖异步/unsafe/macro
- 《Rust 权威指南》(中译本,Steve Klabnik)— 中文社区首选
- 《Rust 实战》(中译本)— 项目驱动学习
🌐 官方资源
🎥 视频教程
- Rust 官方 YouTube 频道
- Jon Gjengset 的 Live Coding(进阶强烈推荐)
- B 站:Rust 编程语言入门(搜"Rust 教程")
🛠️ 实战项目推荐
| 项目 | 难度 | 学到什么 |
|---|---|---|
| Too Many Web Links | 入门 | Web 抓取 + 文件 I/O |
| ripgrep | 进阶 | 高性能文本搜索 |
| Tokio | 高阶 | 异步运行时 |
| TiKV | 专家 | 分布式存储 |
📊 行业报告
11. 课后练习(动手才能真正学会)
练习 1:所有权实验
fn main() {
let s1 = String::from("hello");
let s2 = s1; // 这行发生了什么?
println!("{}", s1); // 这一行能编译通过吗?为什么?
}
任务:自己动手运行,修复编译错误,理解 Move 语义。
练习 2:编写一个猜数字游戏
要求:
- 程序生成 1-100 的随机数
- 用户输入猜测
- 程序提示"大了"/“小了”/“猜中了”
- 统计猜测次数
- 用
Result和?操作符处理输入错误
提示:use std::io; + use rand::Rng;
练习 3:用 Tokio 写一个并发 HTTP 爬虫
要求:
- 启动 10 个并发任务
- 同时请求 10 个 URL
- 统计每个 URL 的响应时间
- 用
tokio::spawn+join!/select!实现
提示:reqwest = { version = "0.12", features = ["json"] }
练习 4:实现一个简单的 LRU 缓存
要求:
- 泛型实现
LRUCache<K, V> - 使用
HashMap+VecDeque或std::collections::hash_map::Entry - 实现
get、put、容量检查 - 写 5 个单元测试
挑战:用 unsafe 实现零拷贝版本,对比性能差异。
现在,打开终端,输入 cargo new hello_rust,开始你的 Rust 之旅吧!🚀
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)