This commit is contained in:
Turing Zhu 2018-06-15 09:10:33 +00:00 committed by GitHub
commit 9ddd08d3e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
255 changed files with 22308 additions and 275 deletions

5
.gitignore vendored
View File

@ -1,4 +1,5 @@
_book/
book/
mdbook/
.DS_Store
.DS_Store
.idea

7
2018-edition/book.toml Normal file
View File

@ -0,0 +1,7 @@
[book]
title = "Rust 程序设计语言 简体中文版"
author = "Steve Klabnik 和 Carol Nichols以及来自 Rust 社区的贡献KaiserY 以及 Rust 中文社区翻译 Turing Zhu"
description = "Rust 程序设计语言 简体中文版"
[build-dir]
destination = "mdbook"

131
2018-edition/src/SUMMARY.md Normal file
View File

@ -0,0 +1,131 @@
# Rust 程序设计语言
[前言](foreword.md)
[介绍](ch00-00-introduction.md)
## 入门指南
- [入门指南](ch01-00-getting-started.md)
- [安装](ch01-01-installation.md)
- [Hello, World!](ch01-02-hello-world.md)
- [Hello, Cargo!](ch01-03-hello-cargo.md)
- [猜数游戏教程](ch02-00-guessing-game-tutorial.md)
- [通用编程概念](ch03-00-common-programming-concepts.md)
- [变量与可变性](ch03-01-variables-and-mutability.md)
- [数据类型](ch03-02-data-types.md)
- [函数如何工作](ch03-03-how-functions-work.md)
- [注释](ch03-04-comments.md)
- [控制流](ch03-05-control-flow.md)
- [认识所有权](ch04-00-understanding-ownership.md)
- [什么是所有权?](ch04-01-what-is-ownership.md)
- [引用与借用](ch04-02-references-and-borrowing.md)
- [切片](ch04-03-slices.md)
- [使用结构体来组织相关联的数据](ch05-00-structs.md)
- [定义并实例化结构体](ch05-01-defining-structs.md)
- [一个使用结构体的示例程序](ch05-02-example-structs.md)
- [方法语法](ch05-03-method-syntax.md)
- [枚举与模式匹配](ch06-00-enums.md)
- [定义枚举](ch06-01-defining-an-enum.md)
- [`match` 控制流运算符](ch06-02-match.md)
- [`if let` 简洁控制流](ch06-03-if-let.md)
## 基本 Rust 技能
- [模块](ch07-00-modules.md)
- [`mod` 与文件系统](ch07-01-mod-and-the-filesystem.md)
- [使用 `pub` 控制可见性](ch07-02-controlling-visibility-with-pub.md)
- [在不同的模块中引用命名](ch07-03-importing-names-with-use.md)
- [通用集合类型](ch08-00-common-collections.md)
- [vector](ch08-01-vectors.md)
- [字符串](ch08-02-strings.md)
- [哈希 map](ch08-03-hash-maps.md)
- [错误处理](ch09-00-error-handling.md)
- [不可恢复错误 `panic!`](ch09-01-unrecoverable-errors-with-panic.md)
- [可恢复错误 `Result`](ch09-02-recoverable-errors-with-result.md)
- [`panic!` 还是不 `panic!`](ch09-03-to-panic-or-not-to-panic.md)
- [泛型、trait 与生命周期](ch10-00-generics.md)
- [泛型数据类型](ch10-01-syntax.md)
- [trait定义共享的行为](ch10-02-traits.md)
- [生命周期与引用有效性](ch10-03-lifetime-syntax.md)
- [测试](ch11-00-testing.md)
- [编写测试](ch11-01-writing-tests.md)
- [运行测试](ch11-02-running-tests.md)
- [测试的组织结构](ch11-03-test-organization.md)
- [一个 I/O 项目:构建命令行程序](ch12-00-an-io-project.md)
- [接受命令行参数](ch12-01-accepting-command-line-arguments.md)
- [读取文件](ch12-02-reading-a-file.md)
- [重构以改进模块化与错误处理](ch12-03-improving-error-handling-and-modularity.md)
- [采用测试驱动开发完善库的功能](ch12-04-testing-the-librarys-functionality.md)
- [处理环境变量](ch12-05-working-with-environment-variables.md)
- [将错误信息输出到标准错误而不是标准输出](ch12-06-writing-to-stderr-instead-of-stdout.md)
## Rust 编程思想
- [Rust 中的函数式语言功能:迭代器与闭包](ch13-00-functional-features.md)
- [闭包:可以捕获其环境的匿名函数](ch13-01-closures.md)
- [使用迭代器处理元素序列](ch13-02-iterators.md)
- [改进之前的 I/O 项目](ch13-03-improving-our-io-project.md)
- [性能比较:循环对迭代器](ch13-04-performance.md)
- [更多关于 Cargo 和 Crates.io 的内容](ch14-00-more-about-cargo.md)
- [采用发布配置自定义构建](ch14-01-release-profiles.md)
- [将 crate 发布到 Crates.io](ch14-02-publishing-to-crates-io.md)
- [Cargo 工作空间](ch14-03-cargo-workspaces.md)
- [使用 `cargo install` 从 Crates.io 安装二进制文件](ch14-04-installing-binaries.md)
- [Cargo 自定义扩展命令](ch14-05-extending-cargo.md)
- [智能指针](ch15-00-smart-pointers.md)
- [`Box<T>` 指向堆上数据,并且可确定大小](ch15-01-box.md)
- [通过 `Deref` trait 将智能指针当作常规引用处理](ch15-02-deref.md)
- [`Drop` Trait 运行清理代码](ch15-03-drop.md)
- [`Rc<T>` 引用计数智能指针](ch15-04-rc.md)
- [`RefCell<T>` 与内部可变性模式](ch15-05-interior-mutability.md)
- [引用循环与内存泄漏是安全的](ch15-06-reference-cycles.md)
- [无畏并发](ch16-00-concurrency.md)
- [线程](ch16-01-threads.md)
- [消息传递](ch16-02-message-passing.md)
- [共享状态](ch16-03-shared-state.md)
- [可扩展的并发:`Sync` 与 `Send`](ch16-04-extensible-concurrency-sync-and-send.md)
- [Rust 的面向对象编程特征](ch17-00-oop.md)
- [面向对象语言的特点](ch17-01-what-is-oo.md)
- [为使用不同类型的值而设计的 trait 对象](ch17-02-trait-objects.md)
- [面向对象设计模式的实现](ch17-03-oo-design-patterns.md)
## 高级主题
- [模式用来匹配值的结构](ch18-00-patterns.md)
- [所有可能会用到模式的位置](ch18-01-all-the-places-for-patterns.md)
- [Refutability何时模式可能会匹配失败](ch18-02-refutability.md)
- [模式的全部语法](ch18-03-pattern-syntax.md)
- [高级特征](ch19-00-advanced-features.md)
- [不安全的 Rust](ch19-01-unsafe-rust.md)
- [高级生命周期](ch19-02-advanced-lifetimes.md)
- [高级 trait](ch19-03-advanced-traits.md)
- [高级类型](ch19-04-advanced-types.md)
- [高级函数与闭包](ch19-05-advanced-functions-and-closures.md)
- [最后的项目: 构建多线程 web server](ch20-00-final-project-a-web-server.md)
- [单线程 web server](ch20-01-single-threaded.md)
- [将单线程 server 变为多线程 server](ch20-02-multithreaded.md)
- [优雅停机与清理](ch20-03-graceful-shutdown-and-cleanup.md)
- [附录](appendix-00.md)
- [A - 关键字](appendix-01-keywords.md)
- [B - 运算符与符号](appendix-02-operators.md)
- [C - 可导出的 trait](appendix-03-derivable-traits.md)
- [D - 宏](appendix-04-macros.md)
- [E - 本书翻译](appendix-05-translation.md)
- [F - Rust 是如何开发的与 “Nightly Rust”](appendix-06-nightly-rust.md)

View File

@ -0,0 +1,85 @@
# 介绍
> [ch00-00-introduction.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch00-00-introduction.md)
> <br>
> commit [068a3062e1518e3742dd70876de053765a66117c](https://github.com/rust-lang/book/commit/068a3062e1518e3742dd70876de053765a66117c)
欢迎阅读 “Rust 程序设计语言”,一本介绍 Rust 的书。
Rust 是一门帮助你编写更快、更可靠软件的编程语言。高层工程学与底层控制在其他编程语言设计中往往是相互矛盾的Rust 则试图挑战该现象。通过对强大的技术能力与优秀的开发体验的平衡Rust 提供了控制底层细节(比如内存使用)的选择,并免受通常随之而来的所有烦恼。
## 谁会使用 Rust
Rust 因多种原因适用于很多开发者。让我们讨论一些最为重要的群体。
### 开发者团队
Rust 被证明是可用于大型的拥有不同层次系统编程水平开发者团队的生产力工具。底层代码易于出现大量隐晦的 bug对于其他编程语言这只能通过广泛的测试和有经验开发者细心的代码评审才能加以捕获。在 Rust 中,编译器充当了守门员的角色,它拒绝编译存在这类难以捕获 bug 的代码,包括并发 bug。通过与编译器合作团队可以利用更多的时间专注于程序逻辑而不是追踪 bug。
Rust 也带来了用于系统编程世界的现代化开发工具:
* Cargo内置的依赖管理器和构建工具它可以毫无痛苦的增加、编译和管理依赖并使其在整个 Rust 生态系统中保持一致。
* Rustfmt 在开发者之间确保了一致的代码风格。
* Rust Language Server 为集成开发环境Integrated Development Environment, IDE提供了强大的代码补全和内联错误信息。
通过使用这些和其他一些 Rust 生态系统中的工具,开发者可以在编写系统级别代码时保持高生产力。
### 学生
Rust 适用于学生以及那些对系统概念感兴趣的人。很多人通过 Rust已经了解了像操作系统开发这样的主题。社区非常欢迎并乐于解答学生们的问题。通过像这样一本书努力Rust 团队希望操作系统的概念为更多人所知,特别是那些对编程比较陌生的人。
### 公司
数以百计大大小小的公司正将 Rust 用于生产环境中的各种任务中。这些任务包括命令行工具、web 服务、DevOps 工具、嵌入式设备、音视频分析与转码、数字货币cryptocurrencies、生物信息学bioinformatics、搜索引擎、物联网internet of things, IOT程序、机器学习甚至还包括 Firefox 浏览器的大部分内容。
### 开源开发者
Rust 适用于希望构建 Rust 编程语言、社区、开发工具和库的开发者。我们期望你为 Rust 语言做贡献。
### 重视速度和稳定性的开发者
Rust 适用于渴望编程语言的速度与稳定性的开发者。对于速度,我们指你自身可以通过 Rust 开发程序的速度和 Rust 允许你开发他们的速度。Rust 的编译器检查确保了增加功能和重构代码时的稳定性这与缺少这些检查的语言中开发者害怕修改那些脆弱的遗留代码形成了鲜明的对比。通过力求零成本抽象zero-cost abstractions高层次代码所编译的底层代码与手写的一样快Rust 力图使安全的代码也同样快速。
虽然我们没有提供一个所有人希望 Rust 语言支持的功能的完整列表这里提到的是一些最大的功能。总体上讲Rust 最大的理想在于消除数十年来程序员所习惯接受的那些一分为二的取舍:安全 **与** 生产力、速度 **与** 工程学。请尝试 Rust看看这些选择是否适合你。
## 谁会阅读本书
本书假设你已经使用其他编程语言编写过代码,但并不假设你使用了何种语言。我们尝试使素材能广泛的适用于来自很多不同编程背景的开发者。我们不会花费很多时间讨论什么 **是** 编程或者如何理解它。如果编程对于你来说是完全陌生的,你最好先阅读专门介绍编程的书籍。
## 如何阅读本书
总体来说,本书假设你会从头到尾顺序阅读。后面的章节建立在之前章节的概念基础上,同时前面的章节可能不会深入挖掘主题的细节;通常稍后的章节会重新提到这些主题。
你会在本书中发现两类章节:概念章节和项目章节。在概念章节中,我们将学习 Rust 的某个方面。在项目章节中,我们应用目前所学的知识一同构建一些小程序。第二、十二和二十章是项目章节;其余则是概念章节。
第一张介绍了如何安装 Rust ,怎样写一个 Hello, World! 程序,以及怎样使用 Rust 的包管理工具和构建工具 Cargo 。第二章是一个 Rust 语言的介绍。此处包含了一些高级概念,以及随后的章节中会提供额外的详细介绍。如果你希望立刻就动手实践一下,第二章正好适合你。刚开始时,你甚至可能希望略过第三章,这里介绍了 Rust 中和其他编程语言中相类似的功能,然后直接跳到第四章学习 Rust 的所有权系统。然而,如果你是特别重视细节的学习者,并倾向于在继续之前学习每一个细节,你可能希望略过第二章并直接阅读第三章,并在想要构建项目来实践这些细节时再回到第二章。
第五章讨论了结构体和方法,第六章涉及了枚举、`match` 表达式和 `if let` 控制流结构。你会在 Rust 中使用结构体和枚举创建自定义类型。
第七章会学习 Rust 的模块系统和私有性规则来组织代码和公有应用程序设计接口Application Programming Interface, API。第八章讨论了一些标准库提供的通用集合数据结构比如 vector、字符串和哈希 map。第九章探索了 Rust 的错误处理哲学和技术。
第十章深入理解泛型、trait 和生命周期,他们提供了定义可适用于多种类型的代码的能力。第十一章全面介绍了测试,即便有 Rust 的安全保证,这在确保程序逻辑正确时仍然是必要的。第十二章,我们构建了属于自己的在文件中搜索文本的命令行工具 `grep` 的子功能实现。为此会使用之前章节讨论的很多概念。
第十三章探索了闭包和迭代器Rust 中来自函数式编程语言的功能。第十四章会更深层次的理解 Cargo 并讨论向他人分享库的最佳实践。第十五章讨论了标准库提供的智能指针以及trait的实用性。
第十六章会学习不同的并发编程模型并讨论 Rust 如何帮助你无畏的多线程开发。第十七章着眼于比较 Rust 风格与你可能熟悉的面向对象编程原则。
第十八章是一个模式与模式匹配的参考章节,他们是在整个 Rust 程序中表达观念的强大方式。第十九章包含一个有趣的高级主题的大杂烩,包括不安全 Rust 和更多关于生命周期、 trait、类型、函数和闭包的内容。
第二十章会完成一个实现了底层多线程 web server 的项目!
最后是一些附录,包含了一些关于语言的参考风格格式的实用信息。附录 A 涉及了 Rust 的关键字。附录 B 涉及 Rust 的运算符和符号。附录 C 涉及标准库提供的派生 trait。附录 D 涉及宏。
怎样阅读本书都不会有任何问题:如果你希望略过一些内容,请继续!如果你发现疑惑可能会再跳回之前的章节。无论怎样都是可以的。
学习 Rust 过程中一个重要的部分是学习如何阅读编译器提供的错误信息:它们会指导你编写代码。为此,我们会提供很多不能编译代码示例,以及各个情况下编译器会展示错误信息。请注意如果随便运行一个示例代码,它们可能无法编译!请确保阅读任何你尝试运行的示例周围的内容检视他们是否有意错误的。在大部分情况下,我们会把你从任何不能编译的代码指引到正确版本。
## 源代码
生成本书的源码可以在 [GitHub][book] 上找到。
[book]: https://github.com/rust-lang/book/tree/master/second-edition/src
> 译者注:本译本的 [GitHub 仓库][trpl-zh-cn],欢迎 Issue 和 PR :)
[trpl-zh-cn]: https://github.com/Turing-Chu/trpl-zh-cn

Some files were not shown because too many files have changed in this diff Show More