diff --git a/src/ch00-00-introduction.md b/src/ch00-00-introduction.md index d1a3a33..8fba530 100644 --- a/src/ch00-00-introduction.md +++ b/src/ch00-00-introduction.md @@ -2,35 +2,41 @@ > [ch00-00-introduction.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch00-00-introduction.md) >
-> commit acc5ee25138531b030c6c4844de2b7066959021d +> commit 7480e811ab5ad8d53a5b854d9b0c7a5a4f58499f + +> 注意:本书的版本与出版的 [The Rust Programming Language][nsprust] +> 和电子版的 [No Starch Press][nsp] 一致 + +[nsprust]: https://nostarch.com/rust +[nsp]: https://nostarch.com/ 欢迎阅读 “Rust 程序设计语言”,一本介绍 Rust 的书。 -Rust 是一门帮助你编写更快、更可靠软件的编程语言。高层工程学与底层控制在其他编程语言设计中往往是相互矛盾的,Rust 则试图挑战该现象。通过对强大的技术能力与优秀的开发体验的平衡,Rust 提供了控制底层细节(比如内存使用)的选择,并免受通常随之而来的所有烦恼。 +Rust 程序设计语言能帮你编写出更快、更可靠的软件。在其他编程语言设计中,高层工程学和底层控制往往不能兼得;Rust 则试图挑战该现象。通过权衡强大的技术能力与优秀的开发体验,Rust 允许你控制底层细节(比如内存使用),并免受过去做此类控制所经历的烦恼。 ## 谁会使用 Rust -Rust 因多种原因适用于很多开发者。让我们讨论一些最为重要的群体。 +Rust 因多种原因适用于很多开发者。让我们讨论几个最重要的群体。 ### 开发者团队 -Rust 被证明是可用于大型的拥有不同层次系统编程水平开发者团队的生产力工具。底层代码易于出现大量隐晦的 bug,对于其他编程语言这只能通过广泛的测试和有经验开发者细心的代码评审才能加以捕获。在 Rust 中,编译器充当了守门员的角色,它拒绝编译存在这类难以捕获 bug 的代码,包括并发 bug。通过与编译器合作,团队可以利用更多的时间专注于程序逻辑而不是追踪 bug。 +Rust 被证明是可用于大型的、拥有不同层次系统编程知识的开发者团队间协作的高效工具。底层代码中容易出现大量隐晦的 bug,在其他编程语言中,只能通过大量的测试和经验丰富的开发者细心的代码评审来捕获。在 Rust 中,编译器充当了守门员的角色,它拒绝编译存在隐晦 bug 的代码,包括并发 bug。通过与编译器合作,团队将更多的时间聚焦在程序逻辑上,而不是追踪 bug。 -Rust 也带来了用于系统编程世界的现代化开发工具: +Rust 也将当前的开发工具带到了系统编程世界: -* Cargo,内置的依赖管理器和构建工具,它可以毫无痛苦的增加、编译和管理依赖,并使其在整个 Rust 生态系统中保持一致。 -* Rustfmt 在开发者之间确保了一致的代码风格。 -* Rust Language Server 为集成开发环境(Integrated Development Environment, IDE),提供了强大的代码补全和内联错误信息。 +* Cargo,内置的依赖管理器和构建工具,它能轻松增加、编译和管理依赖,并在 Rust 生态系统中保持一致。 +* Rustfmt 确保开发者遵循一致的代码风格。 +* Rust Language Server 为集成开发环境(IDE)提供了强大的代码补全和内联错误信息功能。 -通过使用这些和其他一些 Rust 生态系统中的工具,开发者可以在编写系统级别代码时保持高生产力。 +通过使用 Rust 生态系统中的这些和其他工具,开发者可以在编写系统层面代码时保持高生产力。 ### 学生 -Rust 适用于学生或任何对操作系统概念感兴趣的人。通过 Rust,很多人已经了解了像操作系统开发这样的主题。社区非常欢迎并乐于解答学生们的问题。通过类似于本书这样的努力,Rust 团队希望操作系统的概念为更多人所知,特别是那些对编程比较陌生的人。 +Rust 适用于学生或任何对操作系统概念感兴趣的人。通过 Rust,很多人已经了解操作系统开发这样的主题。社区非常欢迎并乐于解答学生们的问题。通过类似于本书这样的努力,Rust 团队希望更多人了解操作系统的概念,特别是编程新手。 ### 公司 -数以百计大大小小的公司正将 Rust 用于生产环境中的多种任务。这些任务包括命令行工具、web 服务、DevOps 工具、嵌入式设备、音视频分析与转码、数字货币(cryptocurrencies)、生物信息学(bioinformatics)、搜索引擎、物联网(internet of things, IOT)程序、机器学习,甚至还包括 Firefox 浏览器的大部分内容。 +数以百计的公司,无论规模大小,正将 Rust 用于生产环境中的多种任务。这些任务包括命令行工具、web 服务、DevOps 工具、嵌入式设备、音视频分析与转码、数字货币(cryptocurrencies)、生物信息学(bioinformatics)、搜索引擎、物联网(internet of things, IOT)程序、机器学习,甚至还包括 Firefox 浏览器的大部分内容。 ### 开源开发者 @@ -38,41 +44,41 @@ Rust 适用于希望构建 Rust 编程语言、社区、开发工具和库的开 ### 重视速度和稳定性的开发者 -Rust 适用于渴望编程语言的速度与稳定性的开发者。对于速度,我们指你自身可以通过 Rust 开发程序的速度和 Rust 允许你开发他们的速度。Rust 的编译器检查确保了增加功能和重构代码时的稳定性,这与缺少这些检查的语言中开发者害怕修改那些脆弱的遗留代码形成了鲜明的对比。通过力求零成本抽象(zero-cost abstractions),高层次代码所编译的底层代码与手写的一样快,Rust 力图使安全的代码也同样快速。 +Rust 适用于追求编程语言的速度与稳定性的开发者。所谓速度,我们指你用 Rust 开发出的程序运行速度,以及 Rust 提供的程序开发速度。Rust 的编译器检查确保了增加功能和重构代码时的稳定性。这与缺少这些检查的语言形成鲜明对比,开发者通常害怕修改那些脆弱的遗留代码。通过力求零开销抽象(zero-cost abstractions),高层级的特性被编译为底层代码,与手写的一样快,Rust 致力于使安全的代码也同样快速。 -虽然我们没有提供一个所有人希望 Rust 语言支持的功能的完整列表,这里提到的是一些最大的功能。总体上讲,Rust 最大的理想在于消除数十年来程序员所习惯接受的那些一分为二的取舍:安全 **与** 生产力、速度 **与** 工程学。请尝试 Rust,看看这些选择是否适合你。 +Rust 语言希望能支持更多用户,这里提及的只是最大的利益相关者。总的来讲,Rust 最重要的目标是消除数十年来程序员不得不做的权衡:安全 **与** 生产力、速度 **与** 工程学。请尝试 Rust,看看它的选择是否适合你。 ## 谁会阅读本书 -本书假设你已经使用其他编程语言编写过代码,但并不假设你使用了何种语言。我们尝试使材料能广泛的适用于来自很多不同编程背景的开发者。我们不会花费很多时间讨论编程 **是** 什么或者如何理解它。如果编程对于你来说是完全陌生的,你最好先阅读专门介绍编程的书籍。 +本书假设你已经使用其他编程语言编写过代码,但并不假设你使用的是何种语言。我们尝试使这些材料能广泛的适用于来自很多不同编程背景的开发者。我们不会花费很多时间讨论编程 **是** 什么或者如何理解它。如果编程对于你来说是完全陌生的,你最好先阅读专门介绍编程的书籍。 ## 如何阅读本书 -总体来说,本书假设你会从头到尾顺序阅读。稍后的章节建立在之前章节概念的基础上,同时之前的章节可能不会深入挖掘主题的细节;通常稍后的章节会重新提到这些主题。 +总体来说,本书假设你会从头到尾顺序阅读。稍后的章节建立在之前章节概念的基础上,同时之前的章节可能不会深入讨论一个主题的细节;通常稍后的章节会重新讨论这些主题。 -你会在本书中发现两类章节:概念章节和项目章节。在概念章节中,我们学习 Rust 的某个方面。在项目章节中,我们应用目前所学的知识一同构建小的程序。第二、十二和二十章是项目章节;其余则是概念章节。 +你会在本书中发现两类章节:概念章节和项目章节。在概念章节中,我们学习 Rust 的某个方面。在项目章节中,我们应用目前所学的知识一同构建小的程序。第二、十二和二十章是项目章节;其余都是概念章节。 -另外,第二章是一个 Rust 语言的介绍实践。我们会在高层次介绍一些概念,并在稍后的章节提供额外的细节。如果你希望立刻就动手实践一下,第二章正好适合你。开始阅读时,你甚至可能希望略过第三章,它介绍了 Rust 中类似其他编程语言中的功能,并直接阅读第四章学习 Rust 的所有权系统。然而,如果你是特别重视细节的学习者,并倾向于在继续之前学习每一个细节,你可能希望略过第二章并直接阅读第三章,并在想要构建项目来实践这些细节时再回到第二章。 +第一章介绍如何安装 Rust,如何编写 Hello world 程序,以及如何使用 Rust 的包管理器和构建工具 Cargo。第二章是 Rust 语言的实战介绍。我们会介绍一些高层级的概念,在稍后章节会详细介绍。如果你希望立刻就动手实践一下,第二章正好适合你。开始阅读时,你甚至可能希望略过第三章,它介绍了 Rust 中类似其他编程语言中的功能,并直接阅读第四章学习 Rust 的所有权系统。然而,如果你是特别重视细节的学习者,并倾向于在继续之前学习每一个细节,你可能希望略过第二章并直接阅读第三章,并在想要构建项目来实践这些细节时再回来阅读第二章。 -第五章讨论了结构体和方法,第六章涉及了枚举、`match` 表达式和 `if let` 控制流结构。你会使用结构体和枚举在 Rust 中创建自定义类型。 +第五章讨论结构体和方法,第六章介绍枚举、`match` 表达式和 `if let` 控制流结构。在 Rust 中,你将使用结构体和枚举创建自定义类型。 -第七章会学习 Rust 的模块系统和私有性规则来组织代码和公有应用程序设计接口(Application Programming Interface, API)。第八章讨论了一些标准库提供的通用集合数据结构,比如 vector、字符串和哈希 map。第九章探索了 Rust 的错误处理哲学和技术。 +第七章,你会学习 Rust 的模块系统和私有性规则来组织代码和公有应用程序设计接口(Application Programming Interface, API)。第八章讨论了一些标准库提供的通用集合数据结构,比如 vector、字符串和哈希 map。第九章探索了 Rust 的错误处理哲学和技术。 -第十章深入理解泛型、trait 和生命周期,他们提供了定义可适用于多种类型的代码的能力。第十一章全部介绍测试,这即便在有 Rust 的安全保证来确保程序逻辑正确时仍然是必要的。第十二章,我们构建了属于自己的在文件中搜索文本的命令行工具 `grep` 的子集功能实现。为此会利用之前章节讨论的很多概念。 +第十章深入介绍泛型、trait 和生命周期,他们提供了定义出适用于多种类型的代码的能力。第十一章介绍测试,即使 Rust 有安全保证,也需要测试确保程序逻辑正确。第十二章,我们构建了属于自己的在文件中搜索文本的命令行工具 `grep` 的子集功能实现。为此会利用之前章节讨论的很多概念。 -第十三章探索了闭包和迭代器:Rust 中来自函数式编程语言的功能。第十四章会更深层次的理解 Cargo 并讨论向他人分享库的最佳实践。 +第十三章探索了闭包和迭代器:Rust 中来自函数式编程语言的功能。第十四章会更深层次的理解 Cargo 并讨论向他人分享库的最佳实践。第十五章讨论标准库提供的智能指针以及启用这些功能的 trait。 -第十六章会学习不同的并发编程模型并讨论 Rust 如何帮助你无畏的多线程开发。第十七章着眼于比较 Rust 风格与你可能熟悉的面向对象编程原则。 +第十六章会学习不同的并发编程模型,并讨论 Rust 如何助你无畏的编写多线程程序。第十七章着眼于比较 Rust 风格与你可能熟悉的面向对象编程原则。 -第十八章是一个模式与模式匹配的参考章节,他们是在整个 Rust 程序中表达观念的强大方式。第十九章包含一个有趣的高级主题的大杂烩,包括不安全 Rust 和更多关于生命周期、 trait、类型、函数和闭包的内容。 +第十八章是一个模式与模式匹配的参考章节,他们是在整个 Rust 程序中表达意图的强大方式。第十九章是一个高级主题大杂烩,包括 unsafe Rust 和更多关于生命周期、 trait、类型、函数和闭包的内容。 -第二十章会完成一个实现了底层多线程 web server 的项目! +第二十章会完成一个项目,实现了一个底层的、多线程的 web server! -最后是一些附录,包含了一些关于语言的参考风格格式的实用信息。附录 A 涉及了 Rust 的关键字。附录 B 涉及 Rust 的运算符和符号。附录 C 涉及标准库提供的派生 trait。附录 D 涉及宏。 +最后是一些附录,包含了一些关于语言的参考风格格式的实用信息。附录 A 介绍了 Rust 的关键字。附录 B 介绍 Rust 的运算符和符号。附录 C 介绍标准库提供的派生 trait。附录 D 介绍宏。 怎样阅读本书都不会有任何问题:如果你希望略过一些内容,请继续!如果你发现疑惑可能会再跳回之前的章节。无论怎样都是可以的。 -学习 Rust 的过程中一个重要的部分是学习如何阅读编译器提供的错误信息:它们会指导你编写代码。为此,我们会提供很多不能编译代码示例,以及各个情况下编译器会展示错误信息。请注意如果随便输入并运行随机的示例代码,它们可能无法编译!请确保阅读任何你尝试运行的示例周围的内容检视他们是否有意为错误的。在大部分情况,我们会指引你到达任何不能编译的代码的正确版本。 +学习 Rust 的过程中一个重要的部分是学习如何阅读编译器提供的错误信息:它们会指导你编写出能工作的代码。为此,我们会提供很多不能编译的示例代码,以及各个情况下编译器会展示的错误信息。请注意如果随便输入并运行随机的示例代码,它们可能无法编译!请确保阅读任何你尝试运行的示例周围的内容,检视他们是否有意写错。在大部分情况,我们会指引你将任何不能编译的代码纠正为正确版本。 ## 源代码 diff --git a/src/ch01-00-getting-started.md b/src/ch01-00-getting-started.md index 12ecaf5..c898517 100644 --- a/src/ch01-00-getting-started.md +++ b/src/ch01-00-getting-started.md @@ -2,10 +2,10 @@ > [ch01-00-getting-started.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch01-00-getting-started.md) >
-> commit 2a5eaaa3566244a37516b8067970ba1f0d561661 +> commit 7480e811ab5ad8d53a5b854d9b0c7a5a4f58499f -让我们开始 Rust 之旅!在本章中,我们会讨论: +让我们开始 Rust 之旅!有很多内容要学,但每次旅程总有起点。在本章中,我们会讨论: * 在 Linux、macOS 和 Windows 上安装 Rust -* 编写一个打印 “Hello, world!” 的程序 -* 使用 Rust 的包管理器和构建系统,`cargo` \ No newline at end of file +* 编写一个打印 `Hello, world!` 的程序 +* 使用 Rust 的包管理器和构建系统 `cargo` \ No newline at end of file diff --git a/src/ch04-03-slices.md b/src/ch04-03-slices.md index 2103266..305e683 100644 --- a/src/ch04-03-slices.md +++ b/src/ch04-03-slices.md @@ -6,7 +6,7 @@ 另一个没有所有权的数据类型是 *slice*。slice 允许你引用集合中一段连续的元素序列,而不用引用整个集合。 -这里有一个小的编程问题:编写一个获取一个字符串并返回它在其中找到的第一个单词的函数。如果函数没有在字符串中找到一个空格,就意味着整个字符串是一个单词,所以整个字符串都应返回。 +这里有一个编程小问题:编写一个函数,该函数接收一个字符串,并返回在该字符串中找到的第一个单词。如果函数在该字符串中并未找到空格,则意味着整个字符串是一个单词,所以应该返回整个字符串。 让我们考虑一下这个函数的声明: diff --git a/src/foreword.md b/src/foreword.md index 3370fa4..78d096b 100644 --- a/src/foreword.md +++ b/src/foreword.md @@ -4,16 +4,16 @@ >
> commit 5e085bd1add34aec03416e891751552b439dde52 -事物并非总是简单明了,Rust 程序设计语言的本质在于 **授权**(*empowerment*):无论你现在编写的是何种代码,Rust 能授权你在更为广泛的编程领域走得更远,写出自信。 +虽然不是那么明显,但 Rust 程序设计语言的本质在于 **赋能**(*empowerment*):无论你现在编写的是何种代码,Rust 能让你在更为广泛的编程领域走得更远,写出自信。 -举例来说,“系统层面”(“systems-level”)处理内存管理、数据表示和并发的底层细节。这个编程领域被视为神秘的传统,只为数年专注学习所挑选出的少数人所触及,也只有他们能避免其恶名昭著的缺陷。即是谨慎的实践者,亦唯恐代码被利用、崩溃或损坏。 +比如,“系统层面”(“systems-level”)的工作,涉及内存管理、数据表示和并发等底层细节。从传统角度来看,这是一个神秘的编程领域,只为浸淫多年的极少数人所触及,也只有他们能避开那些臭名昭著的陷阱。即使谨慎的实践者,亦唯恐代码出现漏洞、崩溃或损坏。 -Rust 打破了这些障碍,其消除了旧的缺陷并提供了伴你一路同行的友好、精良的工具。想要 “深入” 底层控制的程序员可以使用 Rust,无需冒着常见的崩溃或安全漏洞的风险,也无需学习时常改变的工具链的最新知识。其语言本身更是被设计为自然而然的引导你编写出在运行速度和内存使用上都十分高效的可靠代码。 +Rust 破除了这些障碍,其消除了旧的陷阱并提供了伴你一路同行的友好、精良的工具。想要 “深入” 底层控制的程序员可以使用 Rust,无需冒着常见的崩溃或安全漏洞的风险,也无需学习时常改变的工具链的最新知识。其语言本身更是被设计为自然而然的引导你编写出在运行速度和内存使用上都十分高效的可靠代码。 -已经在从事编写底层代码的程序员可以使用 Rust 来提升抱负。例如,在 Rust 中引入并行是相对较为低风险的操作:编译器会为你捕获经典的错误。同时你可以自信的采取更为激进的优化,而不会意外引入崩溃或漏洞。 +已经在从事编写底层代码的程序员可以使用 Rust 来提升抱负。例如,在 Rust 中引入并行是相对低风险的操作:编译器会为你捕获经典的错误。同时你可以自信的采取更为积极的优化,而不会意外引入崩溃或漏洞。 -另一方面 Rust 并不局限于底层系统编程。其表现力与工程学足以愉快的编写 CLI 应用、web server 和很多其他类型的代码 —— 在本书之后你会找到所有这些场景的简单示例。使用 Rust 你学习的技能可以从一个领域延伸到另一个领域;你可以学习 Rust 来编写 web 应用,接着将同样的技能应用到你的 Raspberry Pi(树莓派)上。 +但 Rust 并不局限于底层系统编程。其表现力和工效足以令人愉悦的编写出 CLI 应用、web server 和很多其他类型的代码 —— 在本书中你会看到两个简单示例。使用 Rust 能将你在一个领域中学习的技能延伸到另一个领域;你可以学习 Rust 来编写 web 应用,接着将同样的技能应用到你的 Raspberry Pi(树莓派)上。 -本书全面拥抱 Rust 授权于用户的潜力。其内容平易近人,致力于帮助你不仅仅提升 Rust 的知识,并且提升你作为程序员整体的理解与自信。那么让我们准备好深入学习 Rust吧(打开新世界的大门 :)) —— 欢迎加入 Rust 社区! +本书全面介绍了 Rust 为用户赋予的能力。其内容平易近人,致力于帮助你提升 Rust 的知识,并且提升你作为程序员整体的理解与自信。那么让我们准备深入学习 Rust 吧(打开新世界的大门 :)) —— 欢迎加入 Rust 社区! — Nicholas Matsakis 和 Aaron Turon