CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Rust 语言入门/课时/Rust 是什么
RawBlame
课时目录12 节

Rust 语言入门

  1. 01Rust 是什么
  2. 02基础语法
  3. 03所有权与借用
  4. 04生命周期
  5. 05结构体与枚举
  6. 06错误处理
  7. 07Trait 与泛型
  8. 08集合类型
  9. 09并发与 async
  10. 10宏与元编程
  11. 11Web 与生态
  12. 12综合练习

Rust 是什么

why-use-rust、安装 cargo、与 C++/Go 对照。

25 分钟

Rust 是什么

这一课你将能做到

  1. 说清楚 Rust 解决什么问题,以及它和 Java 在运行模型上的核心差异
  2. 安装 Rust 工具链(rustup、cargo),跑通第一个程序
  3. 用 cargo 创建、检查、编译、运行项目,看懂 Cargo.toml

为什么要学

Rust 是一门「在编译期就把内存错误拦下来」的系统级语言:性能对标 C/C++,没有 GC 停顿,也没有空指针、悬垂指针、数据竞争这三类经典事故。对高性能后端来说,这意味着可预测的尾延迟。

本站的判题服务、高频接口这类场景正是 Rust 的主场:单请求处理耗时的可预测性远超 GC 语言,内存占用低一个量级。学 Rust 不是为了替代 Java,而是掌握第二把武器之后,知道什么场景该拔哪一把。

人话:Java 把内存安全交给 GC 在运行时兜底,代价是停顿和开销;Rust 把这件事提前到编译期,用「所有权」规则让编译器替你检查,代价是前期学习曲线陡。

另外两条现实理由:一是 Rust 连续多年稳居「最受喜爱编程语言」榜首,大厂在数据库内核、云基础设施、区块链方向的岗位持续增长;二是它的类型系统思想(所有权、trait、模式匹配)会反向提升你写 Java 的建模水平——Java 21 的 sealed interface 和模式匹配 switch 正是在向 Rust 靠拢。

先建立图像

两种运行模型对比:

Java:源码 → 字节码 → JVM(GC 兜底内存)→ 运行时检查
Rust:源码 → 编译期检查(所有权/借用/生命周期)→ 原生机器码 → 直接运行

第一个程序:

fn main() {
    let msg = "你好,Rust";
    println!("{msg}");
}

没有虚拟机、没有类定义、没有样板代码,cargo run 一步到位出结果。

生态位对照:

维度JavaRust
运行载体JVM + 字节码原生机器码
内存回收GC(分代、STW)所有权(编译期 drop)
包管理构建Maven / Gradlecargo
并发模型线程 + 锁 + 虚拟线程所有权 + Send/Sync + async
典型短板尾延迟波动、内存占用高编译慢、学习曲线陡

跟着做

步骤 1:安装工具链

Windows 下用 winget 安装官方 rustup(完成后新开一个终端):

winget install Rustlang.Rustup
rustup --version

rustup 是工具链管理器,对标 Java 世界的 SDKMAN:管理 rustc(编译器)、cargo(构建与包管理工具)和标准库文档。

Linux / macOS 一条命令:

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

步骤 2:创建项目

cargo new hello-rust
cd hello-rust

生成的目录结构:

hello-rust/
├── Cargo.toml    ← 项目清单,对标 pom.xml / build.gradle
└── src/
    └── main.rs   ← 程序入口

步骤 3:看懂 Cargo.toml

[package]
name = "hello-rust"
version = "0.1.0"
edition = "2021"

[dependencies]

edition 是语言版本线(2021 edition 是当前主流),不是编译器版本号;编译器版本由 rustup 管理。依赖声明一行搞定:[dependencies] 下写 名字 = "版本",对标 Maven 坐标但省掉 XML。

步骤 4:编译与运行

cargo run               # 编译 + 运行
cargo check             # 只做类型与所有权检查,不生成产物,验证代码最快的命令
cargo build --release   # 开优化编译,产物在 target/release/

开发阶段高频用 cargo check,比完整编译快得多;交付时才用 --release。

步骤 5:改出第一个交互程序

把 src/main.rs 换成:

use std::env;

fn main() {
    let name = env::args().nth(1).unwrap_or_else(|| "朋友".to_string());
    println!("你好,{name}!这是你的第一个 Rust 程序。");
}

运行:cargo run -- 张三。env::args() 读命令行参数,对标 Java 的 String[] args;unwrap_or_else 提供缺省值,从类型上杜绝「参数不存在」的隐患。

讲清楚要点

  1. cargo 是一站式工具:建项目、编译、测试、跑基准、生成文档、发布全用它,对标 Maven + Gradle 的合体,没有碎片化配置。
  2. 编译期检查是护城河:空指针、悬垂引用、数据竞争在 Rust 里是编译错误,不是线上事故。
  3. 零成本抽象:迭代器、泛型这些高级特性编译后与手写底层循环性能一致,不付运行时代价(对比 Java 泛型擦除与自动装箱)。
  4. 版本基线:本课程代码基于 Rust 1.75+ 与 2021 edition,用 rustc --version 自检。
  5. 文档与测试内建:cargo doc 生成带跳转的 API 文档,cargo test 跑单元测试,cargo fmt 统一格式——Java 里要凑齐 Javadoc、JUnit、Checkstyle 三件套的能力,cargo 原生自带。

你可能会懵的地方

  • rustup、rustc、cargo 什么关系? rustup 管工具链(装哪个版本),rustc 是编译器本体,cargo 是构建与包管理的统一入口。日常 99% 时间只敲 cargo,它内部调用 rustc。

  • Rust 没有 GC,谁负责释放内存? 编译器在编译期插入释放代码:变量离开作用域立即释放(RAII)。安全性与 GC 等价,且零运行时开销。

  • 和 C++ 区别在哪? C++ 靠程序员自觉加运行时工具兜底;Rust 把规则写进编译器,不遵守就编译不过。用一部分自由度换纪律。

  • 会 Java 的话,学 Rust 最大的坎是什么? 所有权与借用(第三课)。语法层面反而更简单——Rust 没有继承,用组合加 trait 就够了。

  • Windows 编译报 linker not found? 缺 MSVC 链接器。安装 Visual Studio Build Tools 并勾选「使用 C++ 的桌面开发」工作负载即可。

错法对照

错法问题正解
在项目目录外直接 cargo runcargo 找不到 Cargo.toml先进入项目根目录再执行
用 rustc main.rs 手动编译依赖一多立刻失控统一走 cargo
项目路径含中文或空格部分工具链环节出错用纯英文、无空格路径
开发阶段反复 cargo build --release每次全量优化编译极慢日常用 cargo check / cargo run
改完代码不保存就 run跑的是旧产物保存后再 run,核对编译输出时间

卡点急救

  1. cargo 命令不存在:安装 rustup 后必须新开终端让 PATH 生效;仍不行就把 %USERPROFILE%\.cargo\bin 手动加入 PATH。
  2. 下载依赖极慢:在 ~/.cargo/config.toml 配置国内镜像(rsproxy 或 USTC 源)。
  3. 报 error: linker link.exe not found:安装 Visual Studio Build Tools 的 C++ 工作负载后重试。

面试常问

  • Rust 和 Java 最本质的区别是什么? 内存管理模型:Java 靠 GC 运行时兜底,有 STW 停顿;Rust 靠所有权在编译期确定每块内存的释放点,零运行时开销、无 GC 停顿,尾延迟可预测。

  • 没有 GC 为什么还能内存安全? 所有权系统加借用检查器在编译期保证三条规则:每块内存有唯一所有者、引用不会比被引用者活得久、可变引用独占。悬垂指针、二次释放、数据竞争被编译期堵死。

  • Rust 适合什么场景? 对延迟和资源敏感的底层与高性能服务:判题内核、网关、数据库内核、嵌入式、CLI 工具;也适合替换 C/C++ 存量模块。

自测三问

  1. cargo、rustc、rustup 三者各负责什么?
  2. cargo check 和 cargo build --release 分别在什么场景使用?
  3. Cargo.toml 里的 edition 指的是什么?

小结一句话

Rust 用「编译期所有权检查」换来 C 级性能与内存安全,cargo 让工程化体验不输 Java;工具链跑通,就完成了最难的第一步。

延伸

  • The Rust Book ch01:入门
  • 下一课:基础语法——变量、函数、控制流,半小时写完一个耗时统计小工具。
加载本节练习…
下一课 →基础语法