Rust: Rust 简介与环境搭建:认识这门安全、高速的系统编程语言

Rust 是一门赋予每个人构建可靠高效软件能力的语言——没有垃圾回收,却能保证内存安全。

本教程面向有至少 1 门编程语言基础的开发者。无论你来自 C/C++、Java、Python 还是 JavaScript,Rust 的所有权体系和零成本抽象都将重塑你对"安全"的认知。Rust 连续多年在 Stack Overflow 开发者调查中被评为"最受喜爱的编程语言"。


1. 你将学到


2. 一个系统程序员的故事

(1) 痛苦:C 语言的噩梦

Tom 是一名嵌入式系统工程师。一天他接到一个紧急任务:

"把这个网络服务的内存占用从 300MB 降到 50MB 以下,而且要保证永不崩溃。"

他用 C 语言开发,结果发现:

他最后选择了什么?他转向了 Rust

(2) Rust 的解法

同样的任务,Tom 在 Rust 里这样写:

RUST
fn main() {
    let msg = String::from("Hello, secure world!");
    // 编译器保证:msg 的内存会在离开作用域时自动释放
    // 不需要 malloc,也不需要 free
    println!("{}", msg);
}

总用时:编译通过 = 安全通过。Rust 编译器在编译时就能检测内存错误。不需要 valgrind,不需要 sanitizer,编译过了就安全了。

这就是 Rust 的魅力:在编译期消灭内存错误,零运行时开销。它的设计哲学是"安全不是靠开发者小心,而是靠编译器保证"。


3. 什么是 Rust?

Rust 是一门诞生于 2015 年的系统级编程语言,由 Mozilla 研究员 Graydon Hoare 设计,最初用于 Firefox 浏览器引擎。

(1) Rust 的三大核心定位

100%
graph LR
    A[Rust 三大承诺] --> B[零成本抽象]
    A --> C[内存安全]
    A --> D[无畏并发]
    B --> E[高级语言表达力<br>汇编级性能]
    C --> F[所有权+借用<br>编译期消除内存错误]
    D --> G[Send+Sync trait<br>编译期发现数据竞争]
定位 说明
零成本抽象 高级语言的表达力,汇编级的性能。没有运行时开销(no runtime)
内存安全保证 所有权 + 借用 + 生命周期,编译器在编译时保证无空指针、无野指针、无数据竞争
fearless 并发 Send 和 Sync trait 让并发错误在编译时就被发现

(2) Rust vs C/C++ vs Go

维度 C/C++ Go Rust
内存管理 手动 malloc/free GC(垃圾回收) 所有权 + 借用检查(编译期)
性能 极高 高(GC 有停顿) 极高(零运行时)
安全承诺 无(靠程序员) 部分(GC 防内存泄漏) 完整(编译时保证)
并发模型 pthreads(手动) goroutine + channel std::thread + Send/Sync trait
包管理 Makefile / CMake go mod Cargo(开箱即用)
学习曲线 中高(指针劝退) 中高(borrow checker)

4. 安装 Rust

(1) 使用 rustup 安装

Rust 的推荐安装方式是通过 rustup:一个 Rust 版本管理工具。

BASH
# 在终端运行(Windows 需要先安装 Visual Studio C++ Build Tools)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安装完成后,验证版本:

BASH
rustc --version   # 输出:rustc 1.86.0 (05f9846f8 2025-03-31)
cargo --version   # 输出:cargo 1.86.0 (一些版本号)

(2) Windows 特别说明

Windows 用户需要先安装 Visual Studio Build Tools(或 Visual Studio 2019+),勾选"使用 C++ 的桌面开发"工作负载。Rust 依赖 MSVC 链接器。

(3) 更新与卸载

BASH
rustup update    # 更新到最新版本
rustup self uninstall  # 卸载(保留缓存用 uninstall 而非直接删目录)

5. 第一个 Rust 程序

▶ 示例 1:Hello World(难度 ⭐)

RUST
// ============================================
// 第一个 Rust 程序:打印 Hello World
// ============================================

fn main() {
    println!("Hello, world!");
}

输出:

TEXT 📖 仅展示
Hello, world!

fn main() 是每个 Rust 程序的入口。println! 是一个宏(注意 !),用于打印文本到终端。


▶ 示例 2:使用 Cargo 创建项目(难度 ⭐)

BASH
# 创建新项目
cargo new hello_cargo
cd hello_cargo

cargo new 会生成以下结构:

TEXT 📖 仅展示
hello_cargo/
├── Cargo.toml    # 项目配置文件(依赖、元信息)
├── src/
│   └── main.rs   # 源代码入口

Cargo.toml 内容:

TOML
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

编译并运行:

BASH
cargo build       # 编译(生成 target/debug/ 目录)
cargo run         # 编译 + 运行

输出:

TEXT 📖 仅展示
Hello, world!

Cargo 是 Rust 的包管理器和构建系统。cargo build 生成调试版,cargo run 一键编译运行,cargo check 只检查语法不生成二进制(更快)。


▶ 示例 3:简单计算器(难度 ⭐⭐)

RUST
// ============================================
// 一个简单的加法计算器
// ============================================

fn main() {
    let a: i32 = 10;      // i32 是 32 位有符号整数
    let b: i32 = 20;      // Rust 的类型标注用冒号
    let sum = a + b;

    println!("{} + {} = {}", a, b, sum);
}

输出:

TEXT 📖 仅展示
10 + 20 = 30

Rust 的变量默认不可变。这里用 let 声明,如果后续需要修改值,需要用 let mut。类型标注 : i32 可选——编译器可以通过上下文推断类型。


▶ 示例 4:综合练习——温度转换与报告(难度 ⭐⭐)

RUST
// ============================================
// 综合示例:温度转换 + 简单报告生成
// 演示变量、类型、格式化输出等基础语法
// ============================================

fn celsius_to_fahrenheit(celsius: f64) -> f64 {
    celsius * 9.0 / 5.0 + 32.0
}

fn fahrenheit_to_celsius(fahrenheit: f64) -> f64 {
    (fahrenheit - 32.0) * 5.0 / 9.0
}

fn main() {
    let cities = ["Beijing", "Shanghai", "Guangzhou"];
    let temps_c = [28.5, 31.2, 33.8];

    println!("=== 城市温度报告 ===");
    println!("{:<12} {:>10} {:>10}", "城市", "摄氏(°C)", "华氏(°F)");
    println!("{}", "-".repeat(34));

    let mut index = 0;
    while index < cities.len() {
        let c = temps_c[index];
        let f = celsius_to_fahrenheit(c);
        println!("{:<12} {:>10.1} {:>10.1}", cities[index], c, f);
        index += 1;
    }

    let freezing_f: f64 = 32.0;
    let freezing_c = fahrenheit_to_celsius(freezing_f);
    println!("\n冰点: {:.1}°F = {:.1}°C", freezing_f, freezing_c);

    const BOILING_C: f64 = 100.0;
    let boiling_f = celsius_to_fahrenheit(BOILING_C);
    println!("沸点: {:.1}°C = {:.1}°F", BOILING_C, boiling_f);
}

输出:

TEXT 📖 仅展示
=== 城市温度报告 ===
城市           摄氏(°C)    华氏(°F)
----------------------------------
Beijing           28.5       83.3
Shanghai          31.2       88.2
Guangzhou         33.8       92.8

冰点: 32.0°F = 0.0°C
沸点: 100.0°C = 212.0°F

这个综合示例涵盖了函数定义、常量声明、数组遍历、格式化输出和温度转换公式,是 Rust 基础语法的完整演练。

▶ 示例 5:猜数字游戏(难度 ⭐⭐)

RUST
use std::io;

fn main() {
    let secret = 42; // 固定答案(后续课程会用随机数)
    println!("🎯 猜数字游戏!范围 1-100");

    loop {
        println!("请输入你的猜测:");

        let mut guess = String::new();
        io::stdin()
            .read_line(&mut guess)
            .expect("读取输入失败");

        let guess: i32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => {
                println!("⚠️  请输入有效数字!");
                continue;
            }
        };

        match guess.cmp(&secret) {
            std::cmp::Ordering::Less => println!("太小了!⬆️"),
            std::cmp::Ordering::Greater => println!("太大了!⬇️"),
            std::cmp::Ordering::Equal => {
                println!("🎉 恭喜你猜对了!答案就是 {}", secret);
                break;
            }
        }
    }
}

这个示例展示了 loopmatch、标准库 io、错误处理的基础用法——正是 Rust 官方教程的经典入门项目。


6. Rust 生态速览

Rust 的生态围绕三个核心工具:

工具 用途 命令
rustc Rust 编译器 rustc main.rs
rustup Rust 版本管理 rustup toolchain install nightly
Cargo 包管理 + 构建 cargo build / run / test / doc

开源包托管在 crates.io(https://crates.io),现有 15 万+ 个包。常用包如 serde(序列化)、clap(命令行参数)、tokio(异步运行时)。


❓ 常见问题

Q Rust 适合零基础编程新手吗?
A 不太适合。
Q Rust 和 Go 怎么选?
A 看场景。
Q Rust 找工作怎么样?
A 需求增长快但总量少。
Q Windows 上安装 Rust 为什么需要 Visual Studio?
A Rust 编译器底层依赖 MSVC 链接器。
Q cargo check 和 cargo build 有什么区别?
A cargo check 只做语法和类型检查,不生成二进制文件,速度快得多。

📖 小节


📝 作业

  1. 难度 ⭐:用 cargo new 创建一个名为 my_first_rust 的项目,修改 main.rs 打印你的名字,用 cargo run 运行。
  2. 难度 ⭐⭐:在示例 3 的基础上,增加减法、乘法和除法运算,观察不同类型的运算结果(整数除法会截断吗?)。
  3. 难度 ⭐⭐⭐:阅读 rustup doc 打开的 Rust 官方文档,找到"所有权"(Ownership)章节,用你自己的话总结三句话发给身边的 Rust 开发者看看对不对。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏