mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2025-05-25 03:18:39 +08:00
Compare commits
2 Commits
559dd74839
...
ebeb5156fb
Author | SHA1 | Date | |
---|---|---|---|
|
ebeb5156fb | ||
|
65ac464b86 |
@ -1,8 +1,7 @@
|
||||
# 简介
|
||||
|
||||
> [ch00-00-introduction.md](https://github.com/rust-lang/book/blob/main/src/ch00-00-introduction.md)
|
||||
> <br>
|
||||
> commit 1fb74c3f1d8aeba39373e9f4cdb9a4bdca95604f
|
||||
<!-- https://github.com/rust-lang/book/blob/main/src/ch00-00-introduction.md -->
|
||||
<!-- commit 56ec353290429e6547109e88afea4de027b0f1a9 -->
|
||||
|
||||
> 注意:此书的英文原版与 [No Starch Press][nsp] 出版的《[The Rust Programming Language][nsprust]》纸质版和电子版一致。
|
||||
|
||||
@ -17,8 +16,7 @@ Rust 因多种原因适合许多人。让我们看看几个最重要的群体。
|
||||
|
||||
### 开发者团队
|
||||
|
||||
Rust 已证明是一个对于具有不同系统编程知识水平的大型开发团队协作而言,非常高效的工具。底层代码容易出现各种微妙的错误,在大多数其他语言中,这些错误只能通过广泛的测试和经验丰富的开发者的仔细审核代码来捕捉。在 Rust 中,编译器充当了守门员的角色,拒绝编译包含这些难以察觉的错误的代码,包括并发错误。通过与编译器合作,团队可以将时间集中在程序逻辑上,而不是追踪 bug。
|
||||
|
||||
Rust 已被证明是一个对于具有不同系统编程知识水平的大型开发团队协作而言,非常高效的工具。底层代码容易出现各种微妙的错误,在大多数其他语言中,这些错误只能通过广泛的测试和经验丰富的开发者的仔细审核代码来捕捉。在 Rust 中,编译器充当了守门员的角色,拒绝编译包含这些难以察觉的错误的代码,包括并发错误。通过与编译器合作,团队可以将时间集中在程序逻辑上,而不是追踪 bug。
|
||||
|
||||
Rust 也为系统编程世界带来了现代化的开发工具:
|
||||
|
||||
@ -48,11 +46,11 @@ Rust 适合那些渴望在编程语言中寻求速度与稳定性的开发者。
|
||||
|
||||
## 本书适合哪些人
|
||||
|
||||
本书假设你已经有其他编程语言的经验,任何语言均可,我们尽可能让各种语言背景的人都能读懂。本书的重点不是程序设计**本身**,也不是程序设计思维。如果你完全没学过编程,建议你先阅读专门介绍程序设计的书籍。
|
||||
本书假设你已经有其他编程语言的经验,任何语言均可,我们力求让各种语言背景的人都能读懂。本书的重点不是程序设计**本身**,也不是程序设计思维。如果你完全没学过编程,建议你先阅读专门介绍程序设计的书籍。
|
||||
|
||||
## 如何阅读本书
|
||||
|
||||
本书大体上假设您按从头到尾的顺序阅读。后面的章节建立在前面章节概念的基础上。前面的章节可能不会深入介绍部分主题,而是留待后续章节重新讨论。
|
||||
本书大体上假设你按从头到尾的顺序阅读。后面的章节建立在前面章节概念的基础上。前面的章节可能不会深入介绍部分主题,而是留待后续章节重新讨论。
|
||||
|
||||
本书分为两类章节:概念章节和项目章节。在概念章节中,我们学习 Rust 的某个方面。在项目章节中,我们应用目前所学的知识一同构建小型程序。第二、十二和二十一章是项目章节;其余都是概念章节。
|
||||
|
||||
@ -64,19 +62,17 @@ Rust 适合那些渴望在编程语言中寻求速度与稳定性的开发者。
|
||||
|
||||
第十章深入介绍泛型(generic)、Trait 和生命周期(lifetime),这些功能让你能够定义适用于多种类型的代码。第十一章全面讲述了测试,因为就算 Rust 有安全保证,也需要测试确保程序逻辑正确。第十二章中将会构建我们自己的 `grep` 命令行工具的功能子集实现,用于在文件中搜索文本。为此会用到之前章节讨论的很多概念。
|
||||
|
||||
第十三章探索闭包(closure)和迭代器(iterator),这两个 Rust 特性来自函数式编程语言。第十四章会深入探讨 Cargo 并介绍分享代码库的最佳实践。第十五章讨论标准库提供的智能指针以及相关的 Trait。
|
||||
第十三章探索闭包(closure)和迭代器(iterator),这两个 Rust 特性来自函数式编程语言。第十四章会深入探讨 Cargo 并介绍分享代码库的最佳实践。第十五章讨论标准库提供的智能指针以及相关的 trait。
|
||||
|
||||
第十六章将引导我们了解不同的并发编程模型,并探讨 Rust 如何帮助你无畏地进行多线程编程。第十七章将在此基础上进一步探索 Rust 的 async 和 await 语法,以及它们所支持的轻量级并发模型。
|
||||
|
||||
第十八章着眼于 Rust 风格与你可能比较熟悉的 OOP(面向对象编程)原则之间的比较。
|
||||
第十八章着眼于 Rust 风格与你可能比较熟悉的 OOP(面向对象编程)原则之间的比较。第十九章是一个模式和模式匹配的参考,它们是在 Rust 程序中表达思想的有效方式。第二十章是一个高级主题大杂烩,包括不安全 Rust(unsafe Rust)、宏(macro)和更多关于生命周期、Trait、类型、函数和闭包的内容。
|
||||
|
||||
第十九章介绍模式和模式匹配,它是在 Rust 程序中表达思想的有效方式。第二十章是一个高级主题大杂烩,包括不安全 Rust(unsafe Rust)、宏(macro)和更多关于生命周期、Trait、类型、函数和闭包的内容。
|
||||
第二十一章我们将会完成一个项目,实现一个底层多线程的 Web 服务端!
|
||||
|
||||
第二十一章我们将会完成一个项目,实现一个底层的、多线程的 Web 服务器!
|
||||
最后的附录包含了一些关于该语言的实用信息,其格式更像是参考资料。附录 A 涵盖了 Rust 的关键字,附录 B 涵盖了 Rust 的运算符和符号,附录 C 涵盖了标准库提供的可派生 trait,附录 D 涵盖了一些有用的开发工具,而附录 E 解释了 Rust 版本。在附录 F 中,你可以找到本书的翻译版本,而在附录 G 中,我们将讨论 Rust 是如何制作的以及什么是 nightly Rust。
|
||||
|
||||
最后的附录包含了一些关于该语言的实用信息,其格式更像是参考资料。附录 A 涵盖了 Rust 的关键字,附录 B 涵盖了 Rust 的运算符和符号,附录 C 涵盖了标准库提供的可派生 Trait,附录 D 涵盖了一些有用的开发工具,而附录 E 解释了 Rust 版本。在附录 F 中,你可以找到本书的翻译版本,而在附录 G 中,我们将讨论 Rust 是如何制作的以及什么是 nightly Rust。
|
||||
|
||||
阅读本书没有错误的方式:如果你想跳过前面的内容,尽管跳过!如果你遇到任何困惑,可能需要回到前面的章节。请采取对你最有效的方式。
|
||||
阅读本书没有错误的方式:如果你想跳过前面的内容,尽管跳过!如果你遇到任何困惑,可能需要回到前面的章节。请采取对你最有效的方式进行阅读。
|
||||
|
||||
<span id="ferris"></span>
|
||||
|
||||
|
@ -1,8 +1,7 @@
|
||||
# 入门指南
|
||||
|
||||
> [ch01-00-getting-started.md](https://github.com/rust-lang/book/blob/main/src/ch01-00-getting-started.md)
|
||||
> <br>
|
||||
> commit 1fedfc4b96c2017f64ecfcf41a0a07e2e815f24f
|
||||
<!-- https://github.com/rust-lang/book/blob/main/src/ch01-00-getting-started.md -->
|
||||
<!-- commit 3a30e4c1fbe641afc066b3af9eb01dcdf5ed8b24 -->
|
||||
|
||||
让我们开始 Rust 之旅!有很多内容需要学习,但每次旅程总有起点。在本章中,我们会讨论:
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
## 安装
|
||||
|
||||
> [ch01-01-installation.md](https://github.com/rust-lang/book/blob/main/src/ch01-01-installation.md) <br>
|
||||
> commit d5eb2f7a8e9c6f51b4478f9cd46f55448e2ca2c1
|
||||
<!-- https://github.com/rust-lang/book/blob/main/src/ch01-01-installation.md -->
|
||||
<!-- a4f94174155ff413f23af936c3a31ab71f11cb6f -->
|
||||
|
||||
第一步是安装 Rust。我们会通过 `rustup` 下载 Rust,这是一个管理 Rust 版本和相关工具的命令行工具。下载时需要联网。
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
> ### 命令行标记
|
||||
>
|
||||
> 本章和全书中,我们会展示一些在终端中使用的命令。所有需要输入到终端的行都以 `$` 开头。你不需要输入`$`字符;这里显示的`$`字符表示命令行提示符,仅用于提示每行命令的起点。不以 `$` 起始的行通常展示前一个命令的输出。另外,PowerShell 专用的示例会采用 `>` 而不是 `$`。
|
||||
> 本章和全书中,我们会展示一些在终端中使用的命令。所有需要输入到终端的行都以 `$` 开头。你不需要输入 `$` 字符;这里显示的 `$` 字符表示命令行提示符,仅用于提示每行命令的起点。不以 `$` 起始的行通常展示前一个命令的输出。另外,PowerShell 专用的示例会采用 `>` 而不是 `$`。
|
||||
|
||||
### 在 Linux 或 macOS 上安装 `rustup`
|
||||
|
||||
@ -27,7 +27,7 @@ $ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
|
||||
Rust is installed now. Great!
|
||||
```
|
||||
|
||||
另外,你还需要一个 *链接器(linker)*,这是 Rust 用来将其编译的输出连接到一个文件中的程序。很可能你已经有一个了。如果你遇到了链接器错误,请尝试安装一个 C 编译器,它通常包括一个链接器。C 编译器也很有用,因为一些常见的 Rust 包依赖于 C 代码,因此需要安装一个 C 编译器。
|
||||
另外,你还需要一个 *链接器(linker)*,这是 Rust 用来将其编译的输出连接成一个文件中的程序。很可能你已经有一个了。如果你遇到了链接器错误,请尝试安装一个 C 编译器,它通常包括一个链接器。C 编译器也很有用,因为一些常见的 Rust 包依赖于 C 代码,因此需要安装一个 C 编译器。
|
||||
|
||||
在 macOS 上,你可以通过运行以下命令获得 C 语言编译器:
|
||||
|
||||
@ -57,11 +57,7 @@ $ rustc --version
|
||||
rustc x.y.z (abcabcabc yyyy-mm-dd)
|
||||
```
|
||||
|
||||
如果看到了这样的信息,就说明 Rust 已经安装成功了!
|
||||
|
||||
> 译者:恭喜入坑!(此处应该有掌声!)
|
||||
|
||||
如果没看到,请按照下面说明的方法检查 Rust 是否在您的 `%PATH%` 系统变量中。
|
||||
如果看到了这样的信息,就说明 Rust 已经安装成功了!如果没看到,请按照下面说明的方法检查 Rust 是否在您的 `%PATH%` 系统变量中。
|
||||
|
||||
在 Windows CMD 中,请使用命令:
|
||||
|
||||
@ -85,7 +81,7 @@ $ echo $PATH
|
||||
|
||||
## 更新与卸载
|
||||
|
||||
通过 `rustup` 安装了 Rust 之后,更新到最新版本就很简单了,只需要在您对应的命令行中运行如下更新脚本:
|
||||
通过 `rustup` 安装了 Rust 之后,更新到最新版本就很简单了。只需要在您对应的命令行中运行如下更新脚本:
|
||||
|
||||
```console
|
||||
$ rustup update
|
||||
@ -103,7 +99,24 @@ $ rustup self uninstall
|
||||
|
||||
任何时候,如果你拿不准标准库中的类型或函数的用途和用法,请查阅应用程序接口(application programming interface,API)文档!
|
||||
|
||||
### 文本编辑器和集成开发环境(Integrated Development Environments, IDE)
|
||||
|
||||
本书不会假设你使用何种工具来编写 Rust 代码。几乎任何文本编辑器都可以搞定!然而,很多文本编辑器和集成开发环境(IDE)内置了 Rust 支持。你总是可以在 Rust 官网的[工具页面][tools]找到很多相对流行的编辑器和 IDE 列表。
|
||||
|
||||
### 离线使用本书
|
||||
|
||||
在很多示例中,我们会使用多于标准库的 Rust 包。为了处理这些示例,要么需要网络连接要么需要提前下载这些依赖。为了提前下载这些依赖,可以运行如下命令。(我们稍后会详细解释 `cargo` 是什么以及这每一个命令在干什么。)
|
||||
|
||||
```console
|
||||
$ cargo new get-dependencies
|
||||
$ cd get-dependencies
|
||||
$ cargo add rand@0.8.5 trpl@0.2.0
|
||||
```
|
||||
|
||||
这会缓存这些包的下载所以之后你不用再下载它们。一旦你运行了这些命令,就可以在本书之后所有的 `cargo` 命令中使用 `--offline` 参数来使用这些缓存的版本而不是尝试使用网络。
|
||||
|
||||
[otherinstall]: https://forge.rust-lang.org/infra/other-installation-methods.html
|
||||
[install]: https://www.rust-lang.org/tools/install
|
||||
[msvc]: https://rust-lang.github.io/rustup/installation/windows-msvc.html
|
||||
[community]: https://www.rust-lang.org/community
|
||||
[tools]: https://www.rust-lang.org/tools
|
||||
|
@ -1,8 +1,7 @@
|
||||
## Hello, World!
|
||||
|
||||
> [ch01-02-hello-world.md](https://github.com/rust-lang/book/blob/main/src/ch01-02-hello-world.md)
|
||||
> <br>
|
||||
> commit 1fb74c3f1d8aeba39373e9f4cdb9a4bdca95604f
|
||||
<!-- https://github.com/rust-lang/book/blob/main/src/ch01-02-hello-world.md -->
|
||||
<!-- commit aba1ee29dca6c90a1737c996efd7c870957aefb8 -->
|
||||
|
||||
既然安装好了 Rust,是时候来编写第一个 Rust 程序了。当学习一门新语言的时候,使用该语言在屏幕上打印 `Hello, world!` 是一项传统,我们将沿用这一传统!
|
||||
|
||||
@ -25,7 +24,7 @@ $ cd hello_world
|
||||
|
||||
对于 Windows CMD,输入:
|
||||
|
||||
```doscon
|
||||
```cmd
|
||||
> mkdir "%USERPROFILE%\projects"
|
||||
> cd /d "%USERPROFILE%\projects"
|
||||
> mkdir hello_world
|
||||
@ -53,7 +52,7 @@ fn main() {
|
||||
</figure>
|
||||
|
||||
|
||||
保存文件,并回到当前目录为“~/projects/hello_world”的终端窗口。在 Linux 或 macOS 上,输入如下命令,编译并运行文件:
|
||||
保存文件,并回到当前目录为 *~/projects/hello_world* 的终端窗口。在 Linux 或 macOS 上,输入如下命令,编译并运行文件:
|
||||
|
||||
```console
|
||||
$ rustc main.rs
|
||||
@ -65,7 +64,7 @@ Hello, world!
|
||||
|
||||
```powershell
|
||||
> rustc main.rs
|
||||
> .\main.exe
|
||||
> .\main
|
||||
Hello, world!
|
||||
```
|
||||
|
||||
@ -73,7 +72,7 @@ Hello, world!
|
||||
|
||||
如果 `Hello, world!` 出现了,恭喜你!你已经正式编写了一个 Rust 程序。现在你成为一名 Rust 程序员,欢迎!
|
||||
|
||||
### 分析这个 Rust 程序
|
||||
### Rust 程序的结构
|
||||
|
||||
现在,让我们回过头来仔细看看这个 “Hello, world!” 程序。这是第一块拼图:
|
||||
|
||||
@ -89,19 +88,19 @@ fn main() {
|
||||
|
||||
> 注:如果你希望在 Rust 项目中保持一种标准风格,可以使用名为 `rustfmt` 的自动格式化工具将代码格式化为特定的风格(更多内容详见[附录 D][devtools] 中的 `rustfmt`<!-- ignore -->)。Rust 团队已经在标准的 Rust 发行版中包含了这个工具,就像 `rustc` 一样。所以它应该已经安装在你的电脑中了!
|
||||
|
||||
在 `main` 函数中有如下代码:
|
||||
在 `main` 函数体中有如下代码:
|
||||
|
||||
```rust
|
||||
println!("Hello, world!");
|
||||
println!("Hello, world!");
|
||||
```
|
||||
|
||||
这行代码完成这个简单程序的所有工作:在屏幕上打印文本。这里有四个重要的细节需要注意。首先 Rust 的缩进风格使用 4 个空格,而不是 1 个制表符(tab)。
|
||||
这行代码完成这个简单程序的所有工作:在屏幕上打印文本。这里有三个重要的细节需要注意。
|
||||
|
||||
第二,`println!` 调用了一个 Rust 宏(macro)。如果是调用函数,则应输入 `println`(没有`!`)。我们将在第二十章详细讨论宏。现在你只需记住,当看到符号 `!` 的时候,就意味着调用的是宏而不是普通函数,并且宏并不总是遵循与函数相同的规则。
|
||||
首先,`println!` 调用了一个 Rust 宏(macro)。如果是调用函数,则应输入 `println`(没有`!`)。我们将在[第二十章][ch20-macros]详细讨论宏。现在你只需记住,当看到符号 `!` 的时候,就意味着调用的是宏而不是普通函数,并且宏并不总是遵循与函数相同的规则。
|
||||
|
||||
第三,`"Hello, world!"` 是一个字符串。我们把这个字符串作为一个参数传递给 `println!`,字符串将被打印到屏幕上。
|
||||
第二,`"Hello, world!"` 是一个字符串。我们把这个字符串作为一个参数传递给 `println!`,字符串将被打印到屏幕上。
|
||||
|
||||
第四,该行以分号结尾(`;`),这代表一个表达式的结束和下一个表达式的开始。大部分 Rust 代码行以分号结尾。
|
||||
第三,该行以分号结尾(`;`),这代表一个表达式的结束和下一个表达式可以开始。大部分 Rust 代码行以分号结尾。
|
||||
|
||||
### 编译和运行是彼此独立的步骤
|
||||
|
||||
@ -122,9 +121,9 @@ $ ls
|
||||
main main.rs
|
||||
```
|
||||
|
||||
在 Linux 和 macOS,你会看到两个文件。在 Windows PowerShell 中,你会看到同使用 CMD 相同的三个文件。在 Windows 的 CMD 上,则输入如下内容:
|
||||
在 Linux 和 macOS,你会看到两个文件。在 Windows PowerShell 中,你会看到同使用 CMD 相同的三个文件。在 Windows 的 CMD 上,则输入如下命令:
|
||||
|
||||
```doscon
|
||||
```cmd
|
||||
> dir /B %= the /B option says to only show the file names =%
|
||||
main.exe
|
||||
main.pdb
|
||||
@ -145,3 +144,4 @@ $ ./main # Windows 是 .\main.exe
|
||||
|
||||
[troubleshooting]: ch01-01-installation.html#故障排除troubleshooting
|
||||
[devtools]: appendix-04-useful-development-tools.html
|
||||
[ch20-macros]: ch20-05-macros.html
|
||||
|
Loading…
Reference in New Issue
Block a user