Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

English Original

1. 引言与动机 🟢

课程方法

本课程旨在提升互动性与实践性。我们假设你已经熟悉 C、C++ 或两者,我们的目标是将这些熟悉的 C/C++ 概念映射到 Rust 等效项中。

  • 高互动性:欢迎在课程进行中随时提问。
  • 关联性:我们使用 C/C++ 类比方式来解释 Rust 的独特功能。
  • 动手实践:每章末尾都配有练习以建立肌肉记忆。

为什么选择 Rust

对于 C 和 C++ 开发者而言,采用 Rust 的主要动力在于 在不牺牲性能的前提下保障安全性

  • 超过 70% 的漏洞 (CVE) 都是由内存安全问题引起的(缓冲区溢出、释放后使用等)。
  • 尽管现代 C++(智能指针、RAII)提高了安全性,但它仍然只是 “最外层” 的改进,并未消除语言底层的根本风险。
  • Rust 提供了与 C/C++ 相同的底层控制力,但将安全检查从 运行时迁移到了编译器阶段

Rust 如何解决 C/C++ 的痛点

1. 缓冲区溢出

Rust 的字符串和数组都会进行边界检查。任何越界访问都会导致可预测的 panic(运行时崩溃),而永远不会产生未定义行为 (UB)。

2. 悬垂指针

Rust 的 所有权与借用检查器 (Borrow Checker) 确保引用永远不会比它所指向的数据活得更久,从而在编译阶段消除了“释放后使用”和悬垂指针。

3. 数据竞争

通过 SendSync Trait,编译器可以保证线程安全,从而使数据竞争在 Safe Rust 中完全不可能发生。

4. 内存泄漏与资源管理

Rust 的 Drop Trait 实现比 C++ 更严格的 RAII。它与所有权系统相结合,不仅防止了资源泄漏,还避开了复杂的“五项法则 (Rule of Five)”。


Rust 与 C/C++ 快速对比

功能C / C++Rust
内存手动或智能指针所有权与借用
安全开发者职责编译器保证
错误处理错误码或异常Result<T, E> / Option<T>
线程手动同步安全并发 (Send/Sync)
构建系统Make / CMakeCargo (集成化)