Rust 是一种系统编程语言,以其内存安全、零成本抽象和高性能而闻名。它通过所有权、借用和生命周期等机制,在编译时防止数据竞争和内存错误,同时支持高效的并发编程。

内存安全

Rust 的核心特性之一是内存安全,它通过所有权系统来管理内存,无需垃圾回收器。所有权规则确保每个值都有一个唯一的所有者,当所有者超出作用域时,值会被自动释放。下面的示例展示了所有权的基本概念。

fn main() {
    let s1 = String::from("hello");
    let s2 = s1; // s1 的所有权移动到 s2
    // println!("{}", s1); // 这行会编译错误,因为 s1 不再有效
    println!("{}", s2); // 输出: hello
}

提示:Rust 的借用检查器在编译时强制执行规则,防止悬垂指针和数据竞争。

并发编程

Rust 通过所有权和类型系统,使得并发编程更安全。它使用线程和消息传递来实现并发,避免了数据竞争。下面的示例使用 std::thread 创建线程。

use std::thread;

fn main() {
    let handle = thread::spawn(|| {
        println!("Hello from a thread!");
    });
    handle.join().unwrap();
}

Rust 还提供了 std::sync::Mutexstd::sync::Arc 等工具,用于安全地共享数据。

消息传递

使用通道进行消息传递是 Rust 中常见的并发模式。下面的示例展示了如何使用 std::sync::mpsc 通道。

use std::sync::mpsc;
use std::thread;

fn main() {
    let (tx, rx) = mpsc::channel();
    thread::spawn(move || {
        tx.send("Hello from thread").unwrap();
    });
    println!("{}", rx.recv().unwrap()); // 输出: Hello from thread
}

高效性能

Rust 提供零成本抽象,意味着高级特性如迭代器和闭包在运行时没有额外开销。下面的示例使用迭代器进行高效的数据处理。

fn main() {
    let numbers = vec![1, 2, 3, 4, 5];
    let doubled: Vec<_> = numbers.iter().map(|&x| x * 2).collect();
    println!("{:?}", doubled); // 输出: [2, 4, 6, 8, 10]
}

Rust 的编译优化和低级控制使其在性能上媲美 C/C++,同时保持安全性。