@ -42,9 +42,9 @@ Rust 适合那些希望构建 Rust 编程语言、社区、开发工具和库的
### 重视速度和稳定性的开发者
Rust 适合追求编程语言的 速度与稳定性的开发者。对于速度来说,既是指 Rust 可以运行的多快,也是指编写 Rust 程序的速度。Rust 编译器会检查代码, 确保增加功能、重构代码时的稳定性。与之相比, 其他的一些语言没有检查功能, 导致开发者往往不敢修改脆弱的祖传代码。Rust 力求将高级语言特性编译成底层代码, 并且与手写的代码运行速度同样快, 这一概念称为零开销抽象( zero-cost abstractions) , 可以让 代码又安全又快速。
Rust 适合那些渴望在编程语言中寻求 速度与稳定性的开发者。对于速度来说,既是指 Rust 可以运行的多快,也是指编写 Rust 程序的速度。Rust 编译器的检查确保了增加功能和重构代码时的稳定性, 这与那些缺乏这些检查的语言中脆弱的祖传代码形成了鲜明对比, 开发者往往不敢去修改这些代码。通过追求零成本抽象( zero-cost abstractions) —— 将高级语言特性编译成底层代码, 并且与手写的代码运行速度同样快。Rust 努力确保 代码又安全又快速。
这里提到的只是较大的几个 受益群体, Rust 语言也希望能支持更多其他用户。总之 , Rust 最重要的目标是消除数十年来程序员习以为常的取舍,让安全和高效、速度和易读易用**可以兼得**。试试看 Rust, 说不定它的选择就适合你。
这里提到的只是几个 较大的受益群体, Rust 语言也希望能支持更多其他用户。总的来说 , Rust 最重要的目标是消除数十年来程序员习以为常的取舍,让安全和高效、速度和易读易用**可以兼得**。试试看 Rust, 说不定它的选择就适合你。
## 本书适合哪些人
@ -52,33 +52,35 @@ Rust 适合追求编程语言的速度与稳定性的开发者。对于速度来
## 如何阅读本书
本书大体上假设您按从头到尾的顺序阅读。后面的章节建立于前面章节 的基础上。前面的章节可能不会深入介绍部分主题,而是留待后续章节重新讨论。
本书大体上假设您按从头到尾的顺序阅读。后面的章节建立在前面章节概念 的基础上。前面的章节可能不会深入介绍部分主题,而是留待后续章节重新讨论。
本书分为两类章节:概念章节和项目章节。在概念章节中,我们学习 Rust 的某个方面。在项目章节中,我们应用目前所学的知识一同构建小型程序。第 2、12、 20 章是项目章节;其余都是概念章节。
本书分为两类章节:概念章节和项目章节。在概念章节中,我们学习 Rust 的某个方面。在项目章节中,我们应用目前所学的知识一同构建小型程序。第 2、12 和 20 章是项目章节;其余都是概念章节。
第 1 章介绍如何安装 Rust, 如何编写 “Hello, world!” 程序,以及如何使用 Rust 的包管理器和构建工具 Cargo。第 2 章是一个编写 Rust 语言的实战介绍,我们会构建一个猜猜看游戏。我们会站在较高的层次介绍一些概念,而将详细的介绍放在稍后的章节中。如果你希望立刻就动手实践一下,第 2 章正好适合你。第 3 章介绍 Rust 中类似其他编程语言的特性,你可以选择跳过,直接阅读第 4 章学习 Rust 的所有权( ownership) 系统。不过, 如果你注重细节, 可以跳过第 2 章直接看第 3 章,之后想要写项目的时候再回来看 第 2 章。
第 1 章介绍如何安装 Rust, 如何编写一个 “Hello, world!” 程序,以及如何使用 Rust 的包管理器和构建工具 Cargo。第 2 章是一个编写 Rust 语言的实战介绍,我们会构建一个猜数字游戏。我们会站在较高的层次介绍一些概念,而后续章节将提供更多细节。如果你希望立刻就动手实践一下,第 2 章是开始的好地方。第 3 章介绍 Rust 中类似其他编程语言的特性,第 4 章会学习 Rust 的所有权系统。如果你是一个特别细致的学习者,喜欢在进入下一环节之前学习每一个细节,你可能会想要跳过第 2 章,直接阅读第 3 章,等到你想要通过项目应用所学到的细节时再回到 第 2 章。
第 5 章讨论结构体( struct) 和方法, 第 6 章介绍枚举( enum) 、`match` 表达式和 `if let` 控制流结构。在 Rust 中,创建自定义类型需要用到结构体和枚举。
第 7 章介绍 Rust 的模块( module) 系统, 其中的私有性规则用来组织代码和公开的 API( 应用程序接口) 。第 8 章讨论标准库提供的常见集合数据结构,例如 Vector( 向量) 、字符串和 Hash Map( 散列表) 。第 9 章探索 Rust 的错误处理技术和理念 。
第 7 章介绍 Rust 的模块( module) 系统, 其中的私有性规则用来组织代码和公开的 API( 应用程序接口) 。第 8 章讨论标准库提供的常见集合数据结构,例如 Vector( 向量) 、字符串和 Hash Map( 散列表) 。第 9 章探索 Rust 的错误处理的理念与 技术。
第 10 章深入介绍泛型( generic) 、Trait 和生命周期( lifetime) , 用这些特性可以写出适用多种类型的代码。第 11 章介绍测试,因为就算 Rust 有安全保证,也需要测试确保程序逻辑正确。`grep` 命令可以查找文件中的文本,第 12 章中我们将会构建一个命令行工具实现它的部分功能, 为此会用到之前章节讨论的很多概念。
第 10 章深入介绍泛型( generic) 、Trait 和生命周期( lifetime) , 这些功能让你能够定义适用于多种类型的代码。第 11 章全面讲述了测试,,因为就算 Rust 有安全保证,也需要测试确保程序逻辑正确。第 12 章中将会构建我们自己的 `grep` 命令行工具的功能子集实现,用于在文件中搜索文本。 为此会用到之前章节讨论的很多概念。
第 13 章探索闭包( closure) 和迭代器( iterator) , 这两个特性来自函数式编程语言。第 14 章会深入探讨 Cargo 并介绍分享代码库的最佳实践。第 15 章讨论标准库提供的智能指针以及相关的 Trait。
第 13 章探索闭包( closure) 和迭代器( iterator) , 这两个 Rust 特性来自函数式编程语言。第 14 章会深入探讨 Cargo 并介绍分享代码库的最佳实践。第 15 章讨论标准库提供的智能指针以及相关的 Trait。
第 16 章介绍几类并发编程模型,并讨论 Rust 如何助你无畏地编写多线程程序 。第 17 章着眼于比较 Rust 风格与 OOP( 面向对象编程) 原则。
第 16 章将引导我们了解不同的并发编程模型,并探讨 Rust 如何帮助你无畏地进行多线程编程 。第 17 章着眼于比较 Rust 风格与 OOP( 面向对象编程) 原则。
第 18 章介绍模式和模式匹配,它是在 Rust 程序中表达思想的有效方式。第 19 章是一个高级主题大杂烩,包括不安全 Rust( unsafe Rust) 、宏( macro) 和更多关于生命周期、Trait、类型、函数和闭包的内容。
第 20 章我们将会完成一个项目,实现一个底层的、多线程的网络 服务器!
第 20 章我们将会完成一个项目,实现一个底层的、多线程的 Web 服务器!
最后的附录包含一些实用信息,格式类似参考文档。附录 A 介绍 Rust 的关键字,附录 B 介绍 Rust 的运算符和符号,附录 C 介绍标准库提供的可派生 Trait, 附录 D 涉及一些有用的开发工具,附录 E 介绍 Rust 的不同版本。
最后的附录包含一些语言相关的 实用信息,格式类似参考文档。
本书没有错误的阅读方式,可以尽管跳过部分内容,遇到困惑时再回看前面的章节。
最后的附录包含了一些关于该语言的实用信息,其格式更像是参考资料。附录 A 涵盖了 Rust 的关键字,附录 B 涵盖了 Rust 的运算符和符号,附录 C 涵盖了标准库提供的可派生 Trait, 附录 D 涵盖了一些有用的开发工具,而附录 E 解释了 Rust 版本。在附录 F 中,你可以找到本书的翻译版本,而在附录 G 中,我们将讨论 Rust 是如何制作的以及什么是 nightly Rust。
阅读本书没有错误的方式:如果你想跳过前面的内容,尽管跳过!如果你遇到任何困惑,可能需要回到前面的章节。请采取对你最有效的方式。
< span id = "ferris" > < / span >
学习 Rust 的一个重点在于了解如何阅读编译器提供的错误信息, 它们会指导你编写出能运行的代码。为此, 我们会提供很多无法通过编译的示例, 并附上错误信息。运行示例代码的时候务必阅读上下文, 看看这段代码是否是故意写错的, 部分示例代码就是无法编译的! Ferris 也会帮助你分辨哪些代码是故意写错的 :
学习 Rust 的一个重要部分是学会如何阅读编译器显示的错误信息: 它们会指引你编写出能运行的代码。为此, 我们将提供许多不能编译的示例, 以及在每种情况下编译器将显示的错误信息。请知悉, 如果你输入并运行一个随机示例, 它可能无法编译! 确保你阅读了示例周围的文本, 以判断你尝试运行的示例是否意在出错。Ferris 也将帮助你区分那些不是意在工作的代码 :
| Ferris | 含义 |
|---------------------------------------------------------------------------------------------------------|--------------------------------|