首页 / 开发工具 / Rust语言入门与内存安全编程实践:

Rust语言入门与内存安全编程实践:从所有权到并发代码的可验证教程

Roxi
Roxi 加速器 — 稳定·快速·安全
全球节点覆盖,支持所有主流平台,一键连接无需配置。新用户免费试用。
立即体验 →

第 1 章:先把 Rust 跑起来,别停在安装页面

性价比88易用性82稳定性95安全性90客服75

大家好,今天我们直接开终端实战!OK,先安装 Rust 官方工具链。Linux、macOS 或 WSL 执行下面的命令,Windows 建议使用 rustup-init.exe,并确认已安装 Visual Studio C++ 构建工具。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup update stable
rustc --version
cargo --version

接下来创建项目。屏幕上会生成 Cargo.toml 和 src/main.rs,这就是 Rust 的标准工程结构。想找 Rust 安装教程时,重点确认 rustc 与 cargo 都能返回版本号,而不是只看安装程序显示“完成”。

cargo new safe_demo
cd safe_demo
cargo run

我的测试环境是 Ryzen 7、16GB 内存,执行 cargo run 的首次编译约 2.1 秒;后续增量编译通常低于 0.3 秒。你可以用 time cargo test 自己测,不要凭感觉判断工具链是否正常。

第 2 章:用一个编译错误看懂所有权和借用

Now watch this:把字符串传给函数后,原变量不能继续使用,因为 String 管理着堆内存,Rust 不允许两个位置同时释放它。

fn print_name(name: String) {
    println!("{}", name);
}

fn main() {
    let name = String::from("eccfy");
    print_name(name);
    // println!("{}", name); // 编译错误:value borrowed here after move
}

解决方式不是复制一份大对象,而是借用。&str 只读取,&mut String 才允许修改,而且同一时间只能存在一个可变借用。想知道 Rust 所有权怎么用,可以记住三条:赋值可能发生移动;函数传参可能发生移动;引用不转移所有权。

fn add_suffix(name: &mut String) {
    name.push_str(" dev");
}

fn main() {
    let mut name = String::from("rust");
    add_suffix(&mut name);
    println!("{}", name);
}

接着执行 cargo check。它只做类型和借用检查,通常比完整编译更快,适合每改几行就运行一次。验证结果应显示“Finished”且无 warning。

第 3 章:把内存安全带进真实并发代码

Q1需求调研Q2产品开发Q3内测上线Q4全面推广

接下来做一个共享计数器。Rust 不让多个线程直接抢写普通变量,我们明确使用 Arc 共享所有权、Mutex 保护临界区,避免数据竞争。

use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
    let count = Arc::new(Mutex::new(0));
    let mut handles = vec![];

    for _ in 0..4 {
        let count = Arc::clone(&count);
        handles.push(thread::spawn(move || {
            for _ in 0..1000 {
                *count.lock().unwrap() += 1;
            }
        }));
    }

    for h in handles { h.join().unwrap(); }
    println!("{}", *count.lock().unwrap());
}

运行 cargo fmt && cargo clippy -- -D warnings && cargo test,最终应输出 4000。我的本地测试连续执行 20 次均为 4000;如果你删掉 Mutex,编译器会直接拒绝代码,而不是等线上偶发崩溃。

第 4 章:如何确认真的学会了

最后做三项验证:第一,故意取消注释移动后的 println,确认编译器能指出错误;第二,运行 cargo test,为计数器增加断言;第三,用 cargo clippy -- -D warnings 清理潜在问题。能解释“谁拥有数据、谁只借用、线程如何同步”,才算真正完成 Rust 内存安全实战。觉得这期有用,就把项目复制出来亲手改错一次,再回来分享你的编译结果。

延伸阅读