前置知识: 计算机基础

Rust 是什么:安全与性能兼得的系统语言

8 min入门

面向零基础读者介绍 Rust 的定位、设计目标、所有权思想、版本节奏与适用场景,完成第一次编译运行。

一、Rust 在技术版图中的位置

Rust 是一门系统级编程语言:和 C/C++ 一样直接编译成机器码、没有垃圾回收器、能写操作系统内核;但它把”内存安全”从程序员的自觉变成了编译器的强制。自 2015 年发布 1.0 以来,它连续多年在 Stack Overflow 开发者调查中被评为”最受喜爱的编程语言”。

它的生态位可以概括成一句话:达到 C/C++ 的运行性能,同时从语言层面消灭内存类崩溃与漏洞。这不是宣传口号,而是有产业背书的现实——微软用 Rust 重写 Windows 内核组件,Google 把 Rust 纳入 Android 与 Chromium,亚马逊用 Rust 构建关键云基础设施(如 Firecracker 虚拟化引擎),Linux 内核也已正式接纳 Rust 代码。

方向代表项目/框架为什么适合
命令行工具ripgrep、fd、bat启动快、单文件分发、无运行时依赖
Web 后端Axum、Actix Web高吞吐低延迟,内存占用小
操作系统与嵌入式Linux 内核模块、embedded-hal无 GC、可预测的内存布局
跨平台应用Tauri(桌面)、WASM(浏览器)体积小、性能接近原生
基础设施数据库、代理、虚拟化长时间运行不崩溃、无 GC 停顿

二、为什么会有 Rust:内存管理的历史难题

理解 Rust 之前,先看它要解决的问题。任何程序都要管理内存:创建数据、使用数据、释放数据。过去只有两条路线,各有代价:

  1. 手动管理(C/C++):程序员自己申请和释放内存。性能极高,但人总会犯错——释放后再使用(use-after-free)、释放两次(double-free)、忘记释放(内存泄漏)、越界访问(缓冲区溢出)。微软与 Google 公布的统计均显示,其产品中约 70% 的严重安全漏洞属于内存安全类。
  2. 垃圾回收(Java/Python/Go):运行时自动追踪并回收不再使用的内存。安全省心,但代价是运行时开销、内存占用更高、垃圾回收带来的不可预测停顿——这对操作系统、数据库、嵌入式设备不可接受。

Rust 给出了第三条路——所有权(ownership)系统:编译器在编译期用一套精确的规则检查每块内存的”归属”,在程序运行之前就证明它不会犯错。既没有手动释放的心智负担,也没有垃圾回收的运行时开销。

用类比理解:手动管理像自己记账交房租(快,但容易算错);垃圾回收像请了个专职管家(省心,但管家要占地方、偶尔让大家停下等它盘点);所有权像一套签合同时就审核通过的规则——合同(代码)写得不对,签字(编译)环节直接打回,运行起来就再无后顾之忧。

三、所有权:Rust 灵魂的直觉版

所有权规则的核心之一是”移动”:把值赋给新变量时,所有权随之转移,旧变量失效。

fn main() {
    let s1 = String::from("你好"); // s1 拥有这份数据
    let s2 = s1;                   // 所有权移交给 s2,s1 失效
    // println!("{}", s1);         // 编译错误:s1 的值已被移动(E0382)
    println!("{}", s2);            // 正常,输出:你好
}

在其他语言里,s2 = s1 之后 s1 通常还能用;在 Rust 里直接编译不过。这不是苛刻,而是精心设计:如果 s1、s2 同时有效,离开作用域时同一块内存会被释放两次。Rust 用”移动”在编译期就掐灭了这类事故。

把编译器当作最严格的导师,是学 Rust 的正确心态——前期”编译不过”的挫败,换来的是上线后极低的崩溃率:空指针、悬垂引用、数据竞争这些其他语言的运行期事故,在 Rust 里根本无法通过编译。

四、Rust 的五个关键词

1. 性能:没有垃圾回收、没有解释器、没有虚拟机,抽象在编译期被消除(零开销抽象),性能与 C/C++ 同一梯队。

2. 内存安全:所有权 + 借用检查在编译期证明每一块内存的访问合法,一大类漏洞(约七成的安全漏洞源头)在编译期就被拒绝。

3. 无畏并发(Fearless Concurrency):数据竞争在编译期被类型系统(Send/Sync)拦截,多线程代码”能编译就能跑”的信心远超其他语言。

4. 现代工具链:Cargo 一条龙管理依赖、构建、测试、文档、发布;rustfmt 统一格式、clippy 静态检查,工程体验远超 C/C++ 的碎片化工具生态。

5. 表达力:枚举与模式匹配、trait、迭代器、宏——用精炼的代码描述复杂逻辑,且不牺牲运行时性能。

五、版本节奏与 Edition:怎么理解”Rust 1.x”

Rust 的版本机制有两个维度,初学者经常混淆:

  • 小版本(如 1.85、1.98):每 6 周发布一个稳定版,只加新特性、不破坏旧代码。写作本文时(2026-09)稳定版为 1.98 系列;建议始终跟随最新稳定版,rustup update 一条命令即可升级。
  • Edition(如 2015/2018/2021/2024):每数年一次的”兼容性里程碑”,允许少量破坏性语法调整,新旧 edition 的代码可以混用。最新是 Rust 2024 edition(2025 年 2 月随 1.85 稳定),新项目在 Cargo.toml 里声明 edition = "2024" 即可,它带来更安全的 unsafe 约束、更符合直觉的引用捕获规则等改进。

类比:小版本像手机系统的月度更新(加功能不换界面),Edition 像大版本换代(界面有调整,但旧 App 还能装)。对初学者而言,记住”装最新稳定版、新项目用 2024 edition”就足够了。

六、第一次编译运行

安装 Rust 工具链后(步骤见 Rust 环境搭建与工具链),标准流程是通过包管理器 Cargo:

cargo new hello   # 创建项目骨架
cd hello
cargo run         # 编译并运行

终端会输出 Hello, world!。把 src/main.rs 改成下面的代码,感受一下 Rust 的语法气质:

fn main() {
    let names = ["学习者", "工程师", "架构师"]; // 数组:三种读者身份
    for name in names {                        // for 遍历,无越界风险
        println!("你好,{name}");              // {name} 直接内插变量
    }
}

预期输出:

你好,学习者
你好,工程师
你好,架构师

Cargo 统一管理依赖、构建、测试、文档——cargo build 编译、cargo test 跑测试、cargo doc 生成文档,全部一条命令。这种”官方一体化工具体验”是 Rust 工程师幸福感的重要来源,也是它与 C/C++ 生态最直观的差异。

七、常见困惑

“零基础直接学 Rust 可以吗?“——可以,但所有权概念需要耐心。本仓库建议主线先学一门带垃圾回收的语言(JavaScript 或 Python)建立编程思维,再进入 Rust,曲线会平缓很多;若目标就是系统方向,直接从 Rust 开始也完全可行,只是要接受前期更多的编译报错。

“编译器一直报错怎么办?“——这正是 Rust 的教学过程:它的报错信息是所有语言里最友好的,会标注出错位置、解释原因、给出修复建议。按提示逐条修复即可。编译通过的 Rust 程序,一大类内存错误已经不可能存在。

“Rust 和 Go/C++ 怎么选?“——追求开发速度、做网络服务,Go 上手更快;维护既有 C++ 代码或做游戏引擎,C++ 生态更成熟;而需要”性能 + 安全 + 长期可维护”三者兼得的新项目(基础设施、高性能服务、系统工具),Rust 是当前最优解之一。

“学 Rust 能找到工作吗?“——Rust 岗位集中在基础设施、区块链、数据库、云厂商与新兴科技公司,绝对数量少于 Java/Python,但供需比健康、竞争者少;且 Rust 训练出的内存与并发模型理解力,对学习任何语言都有迁移价值。

八、学习路线建议

  • 第一阶段(1-2 周):环境搭建、基础语法、所有权与借用——这是 Rust 的地基,务必配合练习动手。
  • 第二阶段(2-4 周):结构体/枚举/模式匹配、错误处理、集合与迭代器、泛型与 trait——写出”像样的 Rust”。
  • 第三阶段(持续):生命周期、智能指针、并发与异步、宏、Cargo 工程化——走向生产级代码。

小结

初学者要点:Rust 用编译期的”所有权”规则替代手动内存管理与垃圾回收,性能对齐 C/C++ 而内存安全对齐托管语言;跟随最新稳定版(每 6 周一发)、新项目用 2024 edition;开发闭环是 cargo new → 编辑 → cargo run/cargo test。

进阶注意:Edition 只影响语法规则层面,同一项目可以混合不同 edition 的依赖;“零开销抽象”意味着泛型、迭代器、闭包等高级特性编译后与手写底层代码等价——这也是 Rust 敢让你”放心用高级写法”的底气。

下一步进入 Rust 语言概述与学习路线 系统展开;学到所有权与借用章节(见所有权与借用)时,务必配合练习题动手,仅靠阅读无法建立直觉。