Home
avatar

.Sam

Rust 入门学习笔记

为什么学 Rust

Rust 连续多年被评为”最受喜爱的编程语言”。它在保证内存安全的同时,提供了接近 C/C++ 的性能,没有垃圾回收的开销。

所有权系统

Rust 最核心的概念就是所有权(Ownership)。每个值都有一个所有者,且同一时间只能有一个所有者:

fn main() {
    let s1 = String::from("hello");
    let s2 = s1; // s1 的所有权转移给了 s2

    // println!("{}", s1); // ❌ 编译错误!s1 已经无效
    println!("{}", s2); // ✅ 正常
}

借用与引用

如果不想转移所有权,可以使用引用(借用):

fn calculate_length(s: &String) -> usize {
    s.len()
}

fn main() {
    let s = String::from("hello");
    let len = calculate_length(&s);
    println!("'{}' 的长度是 {}", s, len); // s 仍然有效
}

模式匹配

Rust 的 match 表达式非常强大:

enum Command {
    Quit,
    Echo(String),
    Move { x: i32, y: i32 },
    Color(u8, u8, u8),
}

fn process(cmd: Command) {
    match cmd {
        Command::Quit => println!("退出"),
        Command::Echo(msg) => println!("回显: {}", msg),
        Command::Move { x, y } => println!("移动到 ({}, {})", x, y),
        Command::Color(r, g, b) => println!("颜色: #{:02x}{:02x}{:02x}", r, g, b),
    }
}

错误处理

Rust 使用 ResultOption 来处理错误,而不是异常:

use std::fs;
use std::io;

fn read_config(path: &str) -> Result<String, io::Error> {
    let content = fs::read_to_string(path)?;
    Ok(content.trim().to_string())
}

fn main() {
    match read_config("config.toml") {
        Ok(config) => println!("配置内容: {}", config),
        Err(e) => eprintln!("读取失败: {}", e),
    }
}

? 运算符是 Rust 错误处理的语法糖,它会自动将错误向上传播。

学习资源推荐

学习感受

Rust 的学习曲线确实比较陡峭,尤其是所有权和生命周期的概念。但一旦理解了这些核心概念,写代码会变得很顺畅。编译器的错误提示非常友好,基本上按照提示修改就能解决问题。

Rust 后端