Fadey's Blog

arrow_back 返回首页
Rust教程封面

Rust教程:从入门到精通的系统编程指南

Rust是一门系统编程语言,它结合了C/C++的性能与现代语言的安全性。无论是系统开发、网络服务还是嵌入式开发,Rust都是现代选择。本指南将带你从Rust基础进阶到精通的系统编程之路。

第一章:Rust基础

理解Rust的核心概念和哲学:

1. 为什么选择Rust

  • 内存安全:无垃圾回收,所有权系统防止常见错误
  • 高性能:零成本抽象,接近C/C++的速度
  • 现代工具链:Cargo包管理器,完善的文档
  • 活跃社区:快速增长,丰富的生态

2. "Hello World" 与环境搭建

// 安装 Rust
curl --proto 'https://' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# 验证安装
rustc --version
cargo --version

# 创建新项目
cargo new my-project
cd my-project

# 运行程序
cargo run

第二章:Rust核心语言

1. 基本语法

// 变量与不可变性
let x = 5; // 默认不可变
let mut y = 5; // 可变

// 常量
const MAX_SPEED: u32 = 200;

// 数据类型
let integer: i32 = 42;
let floating: f64 = 3.14;
let boolean: bool = true;
let char: char = 'A';

// 数组与切片
let arr = [1, 2, 3, 4, 5];
let slice = &arr[1..3];

2. 函数

// 函数定义
fn add(a: i32, b: i32) -> i32 {
    a + b
}

// 函数式风格
fn factorial(n: u32) -> u32 {
    (1..=n).product()
}

// 主函数
fn main() {
    println!("Hello, world!");
    println!("1 + 2 = {}", add(1, 2));
}

第三章:所有权与借用

Rust最独特的特性:

1. 所有权规则

  • 每一个值都有且仅有一个所有者
  • 值可以有多个借用
  • 当所有者离开作用域,值将被丢弃

2. 借用与引用

// 借用
fn calculate_length(s: String) -> usize {
    s.len()
}

let s = String::from("hello");
let len = calculate_length(s); // s被移动了

// 借用 (引用)
fn change(first: &mut String) {
    first.push_str(" world");
}

let mut s = String::from("hello");
change(&mut s);

第四章:集合类型

1. Vector

// 创建和使用
let mut v = Vec::new();
v.push(1);
v.push(2);
v.push(3);

// 遍历
for i in &v {
    println!("{}", i);
}

// 常用方法
v.len();      // 长度
v.push(x);    // 添加元素
v.pop();      // 移除并返回最后元素

2. HashMap

// 创建和使用
use std::collections::HashMap;

let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);

// 访问
let team_name = String::from("Blue");
let score = scores.get(&team_name);

// 遍历
for (key, value) in &scores {
    println!("{}: {}", key, value);
}

第五章:错误处理

Rust的结果类型:

// Option枚举
enum Option<T> {
    None,
    Some(T)
}

// Result枚举
enum Result<T, E> {
    Ok(T),
    Err(E)
}

// ?运算符
fn divide(a: f64, b: f64) -> Result<f64, String> {
    if b == 0.0 {
        Err("Division by zero".to_string())
    } else {
        Ok(a / b)
    }
}

// ?运算符传播错误
fn example() {
    let result = divide(10.0, 2.0)?;
    println!("Result: {}", result);
}

总结

从入门到精通Rust的路径包括:

  1. 掌握基本语法和环境搭建
  2. 理解所有权、借用和生命周期
  3. 学习集合类型和错误处理
  4. 实践函数式编程和泛型
  5. 探索异步编程和高级特性

记住,Rust的学习曲线比较陡峭,但採其所有权系统后,你将获得无与伦比的内存安全和性能。从今天开始编写第一个Rust程序,拥抱编译器的反馈,它是你最好的导师。

最重要的原则:让编译器先行,重视类型安全,关注内存布局。