Rust 语言入门与实践指南

量子喵呜

Daily Planning
Time Tracking
Itinerary
AMAMAMAM-09-17
Rust 语言入门与实践指南

112Rust 语言入门与实践指南

Rust 是一门专注于安全性和性能的系统编程语言。它解决了传统系统语言如 C/C++ 中的内存安全问题,同时保持了高性能。学习 Rust 需要理解其独特的所有权系统,这是它保证内存安全的核心机制。

Rust 开发环境搭建

安装 Rust 最简单的方法是使用 rustup 工具。在终端运行以下命令:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安装完成后,验证安装:

rustc --version
cargo --version

推荐使用 VS Code 作为开发环境,安装 rust-analyzer 插件可以获得更好的开发体验。

Rust 基础语法

Rust 变量默认是不可变的:

let x = 5;  // 不可变
let mut y = 10; // 可变

基本数据类型包括:

  • 整数:i8, i16, i32, i64, i128, isize
  • 无符号整数:u8, u16, u32, u64, u128, usize
  • 浮点数:f32, f64
  • 布尔值:bool
  • 字符:char

函数定义示例:

fn add(a: i32, b: i32) -> i32 {
    a + b
}

所有权机制

所有权是 Rust 最独特的概念。每个值都有一个所有者,当所有者离开作用域时,值会被自动释放。

let s1 = String::from("hello");
let s2 = s1; // s1 的所有权转移给 s2
// println!("{}", s1); // 错误!s1 不再有效

借用允许你引用值而不获取所有权:

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

let s = String::from("hello");
let len = calculate_length(&s);

并发编程

Rust 的并发模型基于所有权系统,可以在编译时防止数据竞争:

use std::thread;

let v = vec![1, 2, 3];

let handle = thread::spawn(move || {
    println!("Here's a vector: {:?}", v);
});

handle.join().unwrap();

标准库使用

Rust 标准库提供了丰富的功能:

use std::collections::HashMap;

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

错误处理使用 Result 和 Option 类型:

use std::fs::File;

let f = File::open("hello.txt");

let f = match f {
    Ok(file) => file,
    Err(error) => panic!("Problem opening the file: {:?}", error),
};

项目实战:构建命令行工具

使用 clap 库创建命令行工具:

[dependencies]
clap = { version = "3.0", features = ["derive"] }
use clap::Parser;

#[derive(Parser)]
struct Cli {
    pattern: String,
    path: std::path::PathBuf,
}

fn main() {
    let args = Cli::parse();
    let content = std::fs::read_to_string(&args.path).expect("could not read file");
  
    for line in content.lines() {
        if line.contains(&args.pattern) {
            println!("{}", line);
        }
    }
}

进阶学习

要深入学习 Rust,可以探索:

  • 异步编程 (async/await)
  • 宏系统
  • 不安全 Rust
  • 嵌入式开发

推荐资源: