Files
rust-lang-zh_CN/README.md
sparklelcm333 b6efffe1d8 Update README.md
revert在 cd590ff1c7 对mdbook相关路径的修改,现在不会404
2026-06-23 21:12:22 +08:00

137 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Rust 编程语言
原著:[The Rust Programming Language](https://doc.rust-lang.org/book/)
*原作者Steve KlabnikCarol Nichols 与 Chris Krycho, 在来自 Rust 社区的贡献下*
此版本的教材,假定咱们正使用 Rust `1.90.0` (发布于 2025-09-18或更新版本在所有项目的 `Cargo.toml` 文件中的 `edtion = "2024"` 下,以将这些项目配置为使用 Rust 2024 版本的习语。请参阅 [第 1 章的 “安装” 小节](Ch01_Getting_Started.md#安装) 进行安装或升级 Rust并参阅 [附录 E](appendix/editions.md) 了解有关版本的信息。
```console
$ rustc --version
rustc 1.93.1 (01f6ddf75 2026-02-11)
```
在线阅读: [rust-lang.xfoss.com](https://rust-lang.xfoss.com)
本地阅读:[`mdbook` 本地运行](./src/local_serving.md)
---
# 前言
这并不总是那么清楚,但 Rust 编程语言从根本上讲是关于 *赋能empowerment*无论你现在写的是哪种代码Rust 都能使你达到更远的地方,在比以前更广泛的领域自信地编程。
以涉及内存管理、数据表示和并发的低层次细节的 “系统级system-level” 工作为例,传统上,这一领域的编程被认为是神秘的,只有少数致力于学习避免其臭名昭著的陷阱的人可以进入。即使是那些实践他的人也会谨慎行事,以免他们的代码容易招致攻击、崩溃或损坏。
通过消除原有各种陷阱并提供友好、全新工具集一路帮助咱们Rust 破除了编写这类苛刻程序中的诸多障碍。那些需要“深入”到底层控制的程序员们,现在就可以运用 Rust在无需承担一直以来的崩溃或者安全漏洞的下并无须深入细致地掌握变化无常工具链就可以达成他们的目标了。更好的是设计这门语言就是为了引导咱们编写出在运行速度及内存使用方面有效率的可靠代码。
已在进行底层代码编写的程序员们,可运用 Rust 来托起他们的雄心壮志。比如说,在 Rust 中引入并行机制,是相对低风险的手法:编译器会为咱们捕获经典错误。同时咱们还可以在不会引入程序崩溃或漏洞利用下,自信地进行更激进的优化。
而 Rust 并不局限于底层的系统编程。对于构造命令行应用、web 服务器及其他类别的代码来说它的表现力和人体工程学足以使命令行界面的Command-Line InterfaceCLI应用程序、Web 服务器和许多其他类型的代码编写得相当愉快 -- 你会在本书后面找到这两种代码的简单例子。使用 Rust 可以让咱们构建出从一个领域迁移到另一领域的技能;咱们可以通过编写 Web 应用来学习 Rust然后把这些相同的技能应用在咱们的 Raspberry Pi 上。
本书充分体现了 Rust 在增强用户能力方面的潜力。这是一本友好且平易近人的教材,旨在帮助咱们不仅提高咱们的 Rust 知识水平,并提高咱们作为一名普通程序员的触及范围和信心。那么,请投入其中,准备学习,并欢迎加入 Rust 社区!
-- *Nicholas Matsakis 与 Aaron Turon*
Rust 编程语言在短短几年间取得了长足发展从由一小群初生的爱好者社群创建并培育到成为世界上最受欢迎和需求量最大的编程语言之一。回望过去Rust 凭借其力量与前景,在系统编程领域崭露头角实属必然。但真正出乎意料的是,她在全球开源社区引发的热潮与创新浪潮,最终催生了跨行业的广泛采用。
此时此刻,我们不难从 Rust 的卓越特性中,找到其爆发式增长的答案。谁不渴望内存安全、*又* 高速性能、*又* 友好的编译器、*又* 强大的工具链,*以及* 诸多卓越特性?咱们如今看到的 Rust 语言,结合系统编程领域的多年研究成果,更凝聚着充满活力与热情的社区实践智慧。这门语言以明确目标精心设计,为开发者提供更轻松编写安全、高效、可靠代码的利器。
但 Rust 真正与众不同之处在于她始终以赋能用户达成目标为核心宗旨。这门语言渴望助咱们成功这种赋能理念贯穿于构建、维护和推广该语言的社区核心。自这一权威指南上一版本问世以来Rust 已发展成为一门真正全球化且值得信赖的语言。Rust 项目现在受 Rust 基金会的有力支持,其还投资于一些关键倡议,确保 Rust 是安全的、稳定的及可持续。
这一版《Rust 编程语言》属于一次全面更新,既反映了这门语言多年来的演进历程,又提供了宝贵的新知识。但他不仅是语法和库的指南 —— 更是一种加入一个重视质量、性能和深思熟虑设计社区的邀请。无论咱们是初次接触 Rust 的资深开发者,还是希望精进技能的 Rust 老手,这一版都能为咱们提供所需。
Rust 之旅始终伴随着协作、学习与迭代。这门语言及其生态系统的成长,正是背后充满活力、多元包容社区的真实写照。从核心语言设计师,到普通贡献者,数千名开发者的共同努力,造就了 Rust 这般独特而强大的工具。拿起这本书,咱们不仅是在学习一门新语言,更是在加入一场运动 —— 让软件更卓越、更安全、更令人愉悦。
欢迎加入 Rust 社区!
-- *Bec RumbulRust 基金会执行董事*
# 简介
欢迎来到《Rust 编程语言The Rust Programming Language》这是一本关于 Rust 的介绍性书籍。Rust 编程语言帮助咱们编写更快、更可靠的软件。程序语言设计中高级别的人机交互与底层控制通常是不可调和的Rust 挑战了这一冲突。通过强大的技术能力与了不起的开发者体验Rust 让咱们可以选择控制底层细节(如内存使用),却没有传统上底层控制相关的所有麻烦。
## Rust 适用于哪些人群
出于各种原因Rust 是许多人的理想选择。让我们来看看一些最重要的群体。
### 开发者团队
事实证明Rust 是一个富有成效的工具,可以在具有不同水平的系统编程知识的开发人员组成的大型团队之间进行协作。底层代码容易出现各种细微的错误,在大多数其他语言中,只有通过广泛的测试和有经验的开发人员的仔细代码审查才能发现这些错误。在 Rust 中,编译器扮演着守门员的角色,他会拒绝编译带有这些难以捉摸错误的代码,包括并发性错误。通过与编译器一起工作,团队可以把时间集中在程序的逻辑上,而不是追寻 bug。
Rust还为系统编程领域带来了当代开发者工具
- CargoRust 所包含的依赖管理器与构建工具,使添加、编译和管理依赖变得简单,并在整个 Rust 生态系统中保持一致;
- Rustfmt 格式化工具确保了不同的开发人员有一致的编码风格;
- Rust 语言服务器支持集成开发环境(IDE)集成,以实现代码补全和内联错误信息。
通过使用这些工具和 Rust 生态系统中的其他工具,开发人员可以在编写系统级代码时提高工作效率。
### 学生
Rust 是为学生和那些对学习系统概念感兴趣的人准备的。使用 Rust许多人已经了解了操作系统开发等主题。这个社区非常热情乐于回答学生的问题。通过像本书这样的努力Rust 团队希望让更多的人了解系统概念,尤其是那些刚接触编程的人。
### 商业公司
数百家大大小小的公司在生产中使用 Rust 来完成各种任务包括命令行工具、web 服务、DevOps 运维工具、嵌入式设备、音视频分析和转码、加密货币、生物信息学、搜索引擎、物联网 IoT 应用、机器学习,甚至是火狐 web 浏览器的主要部分。
### 开放源代码开发者
Rust 是为那些想建立 Rust 编程语言、社区、开发者工具和库的人准备的。我们很希望你能为 Rust 语言做出贡献。
### 看重运行速度与稳定性的人们
Rust 是为那些渴望语言的速度和稳定性的人准备的。我们所说的速度,既指 Rust 代码的运行速度,也指 Rust 让咱们编写程序的速度。Rust 编译器的检查通过特性补充与重构来确保稳定性。这与没有这些检查的语言中脆弱的遗留代码形成了鲜明的对比因为开发人员往往害怕修改这些代码。通过努力实现零成本的抽象更高层次的功能编译成底层代码其速度与手工编写的代码一样快Rust 努力使安全的代码也成为快速的代码。
Rust 语言希望也能支持许多其他用户这里提到的只是一些最大的利益相关者。总的来说Rust 最大的野心是通过提供安全 ** 生产力、速度 ** 人机交互,来消除程序员几十年来所接受的这些方面的权衡取舍。给 Rust 一个尝试,看看他的选择是否适合你。
## 本书读者群体
本书假设你用另一种编程语言写过代码,但不对哪种语言做任何假设。我们试图让来自不同编程背景的人,都能广泛接触到这些材料。我们没有花很多时间来讨论什么是编程或如何思考他。如果你对编程完全陌生,你最好读一本专门介绍编程的书。
## 怎样使用本书
大体上,本书假定是要按从前往后的顺序进行阅读。后续章节是建立在较早章节的概念之上,前面的章节可能不会深入研究某个话题;在后续章节通常会回顾到那个话题。
在本书中,咱们会发现有两种章节:概念章节和项目章节。在概念章节中,咱们将学习 Rust 的某个方面。在项目章节中,咱们将一起构建小程序,应用咱们到目前为止所学到的知识。第 2 章、第 12 章和第 20 章是项目章节;其余的是概念章节。
[第 1 章](./Ch01_Getting_Started.md) 介绍了如何安装 Rust如何编写 "Hello, world!" 程序,以及如何使用 Rust 的包管理器和构建工具 Cargo。[第 2 章](./Ch02_Programming_a_Guessing_Game.md) 是用 Rust 编写程序的实践介绍,让咱们构建出一个数字猜谜游戏。这里咱们从高层次上介绍了一些概念,后面的章节将提供更多的细节。如果咱们想马上动手,第 2 章就是这样的地方。[第 3 章](./Ch03_Common_Programming_Concepts.md) 介绍了与其他编程语言类似的 Rust 特性,在 [第 4 章](./Ch04_Understanding_Ownership.md) 中咱们将了解 Rust 的所有权系统。如果你是一个特别细致的学习者,喜欢在学习每一个细节后再继续学习,你可能想跳过第 2 章,直接学习第 3 章,当你想在一个项目中应用你学到的细节时,再回到第 2 章。
[第 5 章](./Ch05_Using_Structs_to_Structure_Related_Data.md) 讨论了结构和方法,[第 6 章](./Ch06_Enums_and_Pattern_Matching.md) 包括枚举、`match` 表达式和 `if let` 控制流结构。咱们将使用结构体和枚举来构造 Rust 中的自定义类型。
在 [第 7 章](./Ch07_Managing_Growing_Projects_with_Packages_Crates_and_Modules.md) 中,咱们将了解 Rust 的模组系统以及组织代码的隐私规则及其公共应用编程接口Application Programming Interface, API。[第 8 章](./Ch08_Common_Collections.md) 讨论了标准库提供的一些常见的集合数据结构,如向量、字符串和哈希图。[第 9 章](./Ch09_Error_Handling.md) 探讨了 Rust 的错误处理的概念和技巧。
[第 10 章](./Ch10_Generic_Types_Traits_and_Lifetimes.md) 深入探讨了泛型、特性和生命期,他们让咱们有能力定义出适用于多种类型的代码。[第 11 章](./Ch11_Writing_Automated_Tests.md) 是关于测试的,即便有 Rust 的安全保证,为确保咱们程序逻辑正确,测试仍是必要不可缺少的。在 [第 12 章](./Ch12_An_IO_Project_Building_a_Command_Line_Program.md) 中,我们将对 `grep` 命令行工具中的一个子集的功能建立自己的实现,他可以在文件中搜索文本。为此,我们将使用我们在前几章中讨论的许多概念。
[第 13 章](./Ch13_Functional_Language_Features_Iterators_and_Closures.md) 探讨了闭包和迭代器:来自于函数式编程语言的 Rust 特性。在 [第 14 章](./Ch14_More_about_Cargo_and_Crates-io.md) 中,我们将更深入地研究 Cargo并讲到与他人共享库的最佳实践。[第 15 章](./Ch15_Smart_Pointers.md) 讨论了标准库提供的灵巧指针和实现其功能的特质。
[第 16 章](./Ch16_Fearless_Concurrency.md),咱们将过目不同的并发编程模型,并探讨 Rust 如何帮助咱们大胆地以多线程方式编程。在 [第 17 章](./Ch16_1_async_programming.md) 中,我们在此基础上探讨 Rust 的 `async``await` 语法,以及任务、未来值与流,以及他们所实现的轻量级并发模型。
[第 18 章](./Ch17_Object_Oriented_Programming_Features_of_Rust.md) 着眼于 Rust 习语如何与咱们可能熟悉的面向对象编程原则进行比较。[第 19 章](./Ch18_Patterns_and_Matching.md) 是关于模式和模式匹配的参考,他们是在整个 Rust 程序中表达思想的强大方式。[第 20 章](./Ch19_Advanced_Features.md) 包含大量有趣的高级主题,包括不安全的 Rust、宏以及更多关于生命周期、特征、类型、函数和闭包的内容。
在 [第 21 章](./Ch20_Final_Project_Building_a_Multithreaded_Web_Server.md),咱们将完成其中实现了底层线程化 web 服务器的一个项目!
最后,一些附录以更类似于参考的格式,包含有关这门语言的有用信息。[附录 A](./appendix/keywords.md) 涵盖了 Rust 的关键字,[附录 B](./appendix/ops_and_symbols.md) 涵盖了 Rust 的运算符和符号,[附录 C](./appendix/derivable_traits.md) 涵盖了标准库提供的可派生特质,[附录 D](./appendix/dev_tools.md) 涵盖了一些有用的开发工具,[附录 E](./appendix/editions.md) 解释了 Rust 版本。在 [附录 F](./appendix/translations.md) 中,你可以找到这本书的翻译,在 [附录 G](./appendix/releases.md) 中,我们将介绍 Rust 是如何构造的以及什么是每日 Rust, nightly Rust。
阅读本书并无定法:你要跳着去读,也是可以的!在遇到疑惑时,或许就不得不跳回去看看了。你只要怎么有效就行了。
学习 Rust 过程中的一个重要部分是学习如何阅读编译器给出的错误信息:这些信息将指导咱们编写工作的代码。因此,我们将提供许多不能编译的例子,以及编译器在每种情况下显示的错误信息。要知道,如果咱们随便输入并运行一个例子,他可能不会被编译!请确保咱们阅读报错周围的文字,看看咱们试图运行的例子是否会出错。
在大多数情况下,我们会带着找到任何不能编译的代码的正确版本。
## 本书的源码
本书所产生的源码,可在 [Github: gnu4cn/rust-lang](https://github.com/gnu4cn/rust-lang-zh_CN/tree/main/projects) 下载到。