Rust Roadmap 2025:从零到生产环境,6个月掌握

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Rust在2025:为什么是现在?

\n\n

过去三年,Rust实现了真正的突破。这个最初被认为是“复杂且小众”的语言,如今已被用于Linux内核、浏览器(Firefox,部分Chromium)、DevOps工具(ripgrep, fd, bat)甚至Web开发中。在2025年,Rust不仅仅是“又一种语言”,而是编写安全、快速、可靠代码的头号工具。

\n\n

但有一个问题:入门门槛。Rust以其borrow checker、生命周期(lifetimes)和严格的类型系统而闻名。许多初学者在第二周就因为遇到编译器错误而放弃学习。

\n\n

这篇文章是2025年学习Rust的路线图。我列出了主题的顺序,给出了真实的代码示例,并解释了哪些是必须学习的,哪些可以稍后再说。我们开始吧!

\n\n

阶段1:基础(第1-2周)

\n\n

1.1 安装和第一个程序

\n\n

从通过rustup(官方安装程序)开始安装。它管理编译器和工具链的版本。

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nrustc --version\ncargo --version
\n\n

你的第一个文件main.rs:

\n\n
fn main() {\n    println!("你好,Rust 2025世界!");\n}
\n\n

编译:rustc main.rs && ./main。但最好立即习惯使用Cargo——包管理器和构建工具:

\n\n
cargo new my_first_project\ncd my_first_project\ncargo run
\n\n

1.2 变量、类型、控制结构

\n\n

Rust是强类型语言,但编译器通常能自动推断类型。与Python或JavaScript的主要区别是变量默认是不可变的(immutable)。

\n\n
fn main() {\n    let x = 5;          // 不可变\n    let mut y = 10;     // 可变\n    y += 5;\n\n    let name = "Rust";\n    let year: u32 = 2025;\n\n    if year > 2024 {\n        println!("{}——未来已来!", name);\n    }\n\n    for i in 0..5 {\n        println!("计数:{}", i);\n    }\n}
\n\n

1.3 所有权(Ownership)——基石

\n\n

这是最让初学者害怕的部分。但如果不理解所有权,你将无法编写任何实际项目。核心:Rust中的每个值都恰好有一个所有者。当所有者离开作用域时,内存被释放。

\n\n
fn main() {\n    let s1 = String::from("hello");\n    let s2 = s1; // 所有权移动到s2\n\n    // println!("{}", s1); // 错误!s1不再拥有该字符串\n    println!("{}", s2); // 正确\n}
\n\n

如果需要传递数据而不失去所有权,使用引用(reference):

\n\n
fn main() {\n    let s = String::from("Rust");\n    let len = calculate_length(&s); // 借用\n    println!("'{}'的长度 = {}", s, len); // s仍然可用\n}\n\nfn calculate_length(s: &String) -> usize {\n    s.len()\n}
\n\n

阶段2:深入(第3-5周)

\n\n

2.1 结构体、枚举和模式匹配

\n\n

Rust不是传统意义上的面向对象语言,但结构体和trait覆盖了90%的需求。

\n\n
struct User {\n    username: String,\n    email: String,\n    active: bool,\n}\n\nenum Status {\n    Active,\n    Inactive,\n    Banned { reason: String },\n}\n\nfn check_status(status: Status) {\n    match status {\n        Status::Active => println!("用户活跃"),\n        Status::Inactive => println!("不活跃"),\n        Status::Banned { reason } => println!("已被封禁:{}", reason),\n    }\n}
\n\n

2.2 错误处理:Option和Result

\n\n

Rust没有异常(exceptions)。取而代之的是优雅的Result<T, E>和Option<T>。忘掉try/except吧——现在你使用match或?

博客

书籍推荐