8.8 KiB
简介
ch00-00-introduction.md
commit 4404cbcc354fad516c7ad9b5dea51b2ed876803a
注意:此书的英文原版与 No Starch Press 出版的《The Rust Programming Language》纸质版和电子版一致。
欢迎阅读《Rust 程序设计语言》,这是一本关于 Rust 的入门书籍。Rust 程序设计语言能帮助你编写更快、更可靠的软件。在编程语言设计中,高层的工程学与底层的控制往往是难以兼得的;而 Rust 则试图挑战这一矛盾。通过平衡强大的技术能力与优秀的开发者体验,Rust 为你提供了控制底层细节(如内存使用)的选项,而无需承受通常与此类控制相关的所有繁琐细节。
Rust 适合哪些人
Rust 因多种原因适合许多人。让我们看看几个最重要的群体。
开发者团队
Rust 已证明是一个对于具有不同系统编程知识水平的大型开发团队协作而言,非常高效的工具。底层代码容易出现各种微妙的错误,在大多数其他语言中,这些错误只能通过广泛的测试和经验丰富的开发者的仔细审核代码来捕捉。在 Rust 中,编译器充当了守门员的角色,拒绝编译包含这些难以察觉的错误的代码,包括并发错误。通过与编译器合作,团队可以将时间集中在程序逻辑上,而不是追踪 bug。
Rust 也为系统编程世界带来了现代化的开发工具:
- Cargo 是内置的依赖管理器和构建工具,它能轻松增加、编译和管理依赖,并使依赖在 Rust 生态系统中保持一致。
- Rustfmt 格式化工具确保开发者遵循一致的代码风格。
- Rust Language Server 为集成开发环境(IDE)提供了强大的代码补全和内联错误信息功能。
通过使用 Rust 生态系统中丰富的工具,开发者在编写系统级代码时可以更加高效。
学生
Rust 适合学生群体,也适合有兴趣学习系统概念的人。许多人通过 Rust 学习了操作系统开发等主题。社区对学生问题非常欢迎并乐于回答。通过类似这本书以及其他内容的努力,Rust 团队希望使系统概念能为更多人所易于理解,特别是编程新手。
公司
数百家大小规模的公司在生产环境中使用 Rust 完成各种任务,包括命令行工具、Web 服务、DevOps 工具、嵌入式设备、音视频分析与转码、加密货币、生物信息学、搜索引擎、物联网(IOT)程序、机器学习,甚至是 Firefox 浏览器的重要部分。
开源开发者
Rust 适合那些希望构建 Rust 编程语言、社区、开发工具和库的开发者。我们非常欢迎你为 Rust 语言作出贡献。
重视速度和稳定性的开发者
Rust 适合追求编程语言的速度与稳定性的开发者。对于速度来说,既是指 Rust 可以运行的多快,也是指编写 Rust 程序的速度。Rust 编译器会检查代码,确保增加功能、重构代码时的稳定性。与之相比,其他的一些语言没有检查功能,导致开发者往往不敢修改脆弱的祖传代码。Rust 力求将高级语言特性编译成底层代码,并且与手写的代码运行速度同样快,这一概念称为零开销抽象(zero-cost abstractions),可以让代码又安全又快速。
这里提到的只是较大的几个受益群体,Rust 语言也希望能支持更多其他用户。总之,Rust 最重要的目标是消除数十年来程序员习以为常的取舍,让安全和高效、速度和易读易用可以兼得。试试看 Rust,说不定它的选择就适合你。
本书适合哪些人
本书假设你已经有其他编程语言的经验,任何语言均可,我们尽可能让各种语言背景的人都能读懂。本书的重点不是程序设计本身,也不是程序设计思维。如果你完全没学过编程,建议你先阅读专门介绍程序设计的书籍。
如何阅读本书
本书大体上假设您按从头到尾的顺序阅读。后面的章节建立于前面章节的基础上。前面的章节可能不会深入介绍部分主题,而是留待后续章节重新讨论。
本书分为两类章节:概念章节和项目章节。在概念章节中,我们学习 Rust 的某个方面。在项目章节中,我们应用目前所学的知识一同构建小型程序。第 2、12、20 章是项目章节;其余都是概念章节。
第 1 章介绍如何安装 Rust,如何编写 “Hello, world!” 程序,以及如何使用 Rust 的包管理器和构建工具 Cargo。第 2 章是一个编写 Rust 语言的实战介绍,我们会构建一个猜猜看游戏。我们会站在较高的层次介绍一些概念,而将详细的介绍放在稍后的章节中。如果你希望立刻就动手实践一下,第 2 章正好适合你。第 3 章介绍 Rust 中类似其他编程语言的特性,你可以选择跳过,直接阅读第 4 章学习 Rust 的所有权(ownership)系统。不过,如果你注重细节,可以跳过第 2 章直接看第 3 章,之后想要写项目的时候再回来看第 2 章。
第 5 章讨论结构体(struct)和方法,第 6 章介绍枚举(enum)、match
表达式和 if let
控制流结构。在 Rust 中,创建自定义类型需要用到结构体和枚举。
第 7 章介绍 Rust 的模块(module)系统,其中的私有性规则用来组织代码和公开的 API(应用程序接口)。第 8 章讨论标准库提供的常见集合数据结构,例如 Vector(向量)、字符串和 Hash Map(散列表)。第 9 章探索 Rust 的错误处理技术和理念。
第 10 章深入介绍泛型(generic)、Trait 和生命周期(lifetime),用这些特性可以写出适用多种类型的代码。第 11 章介绍测试,因为就算 Rust 有安全保证,也需要测试确保程序逻辑正确。grep
命令可以查找文件中的文本,第 12 章中我们将会构建一个命令行工具实现它的部分功能,为此会用到之前章节讨论的很多概念。
第 13 章探索闭包(closure)和迭代器(iterator),这两个特性来自函数式编程语言。第 14 章会深入探讨 Cargo 并介绍分享代码库的最佳实践。第 15 章讨论标准库提供的智能指针以及相关的 Trait。
第 16 章介绍几类并发编程模型,并讨论 Rust 如何助你无畏地编写多线程程序。第 17 章着眼于比较 Rust 风格与 OOP(面向对象编程)原则。
第 18 章介绍模式和模式匹配,它是在 Rust 程序中表达思想的有效方式。第 19 章是一个高级主题大杂烩,包括不安全 Rust(unsafe Rust)、宏(macro)和更多关于生命周期、Trait、类型、函数和闭包的内容。
第 20 章我们将会完成一个项目,实现一个底层的、多线程的网络服务器!
最后的附录包含一些实用信息,格式类似参考文档。附录 A 介绍 Rust 的关键字,附录 B 介绍 Rust 的运算符和符号,附录 C 介绍标准库提供的可派生 Trait,附录 D 涉及一些有用的开发工具,附录 E 介绍 Rust 的不同版本。
本书没有错误的阅读方式,可以尽管跳过部分内容,遇到困惑时再回看前面的章节。
学习 Rust 的一个重点在于了解如何阅读编译器提供的错误信息,它们会指导你编写出能运行的代码。为此,我们会提供很多无法通过编译的示例,并附上错误信息。运行示例代码的时候务必阅读上下文,看看这段代码是否是故意写错的,部分示例代码就是无法编译的!Ferris 也会帮助你分辨哪些代码是故意写错的:
Ferris | 含义 |
---|---|
这段代码无法通过编译! | |
这段代码会 Panic! | |
这段代码的运行结果不符合预期。 |
在大部分情况,我们会指导你将无法通过编译的代码修改为正确版本。
源代码
生成本书的源码可以在 GitHub 上找到。
译者注:此译本也有 GitHub 仓库,欢迎提交 Issue 和 PR :)