Merge pull request #413 from AllanDowney/patch-2

Update: unified format
pull/414/head
孙飞Sunface 3 years ago committed by GitHub
commit dfee1f125c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -29,16 +29,16 @@ Rust 生命周期之所以难,是因为这个概念对于我们来说是全新
此处 `r` 就是一个悬垂指针,它引用了提前被释放的变量 `x`,可以预料到,这段代码会报错:
```console
error[E0597]: `x` does not live long enough // x活得不够久
error[E0597]: `x` does not live long enough // `x` 活得不够久
--> src/main.rs:7:17
|
7 | r = &x;
| ^^ borrowed value does not live long enough // 被借用的x活得不够久
| ^^ borrowed value does not live long enough // 被借用的 `x` 活得不够久
8 | }
| - `x` dropped here while still borrowed // x在这里被丢弃但是它依然还在被借用
| - `x` dropped here while still borrowed // `x` 在这里被丢弃,但是它依然还在被借用
9 |
10 | println!("r: {}", r);
| - borrow later used here // 对x的借用在此处被使用
| - borrow later used here // 对 `x` 的借用在此处被使用
```
在这里 `r` 拥有更大的作用域,或者说**活得更久**。如果 Rust 不阻止该垂悬引用的发生,那么当 `x` 被释放后,`r` 所引用的值就不再是合法的,会导致我们程序发生异常行为,且该异常行为有时候会很难被发现。
@ -55,7 +55,7 @@ error[E0597]: `x` does not live long enough // x活得不够久
} // -+ |
// |
println!("r: {}", r); // |
}
} // ---------+
```
这段代码和之前的一模一样,唯一的区别在于增加了对变量生命周期的注释。这里,`r` 变量被赋予了生命周期 `'a``x` 被赋予了生命周期 `'b`,从图示上可以明显看出生命周期 `'b``'a` 小很多。
@ -126,7 +126,7 @@ help: consider introducing a named lifetime parameter // 考虑引入一个生
因此,这时就回到了文章开头说的内容:在存在多个引用时,编译器有时会无法自动推导生命周期,此时就需要我们手动去标注,通过为参数标注合适的生命周期来帮助编译器进行借用检查的分析。
## 生命周期标注语法
> 生命周期标注并不会改变任何引用的实际作用域 - 鲁迅
> 生命周期标注并不会改变任何引用的实际作用域 -- 鲁迅
鲁迅说过的话,总是值得重点标注,当你未来更加理解生命周期时,你才会发现这句话的精髓和重要!现在先简单记住,**标记的生命周期只是为了取悦编译器,让编译器不要难为我们**,记住了吗?没记住,再回头看一遍,这对未来你遇到生命周期问题时会有很大的帮助!
@ -588,6 +588,6 @@ where
## 总结
我不知道支撑我一口气写完的勇气是什么,也许是不做完不爽夫斯基,也许是一些读者对本书的期待,不管如何,这章足足写了 17000 字,可惜不是写小说,不然肯定可以获取很多月票 :)
从本章开始,最大的收获就是可以在结构体中使用引用类型了,说实话,为了引入这个特性,我已经憋了足足30章节。。
从本章开始,最大的收获就是可以在结构体中使用引用类型了,说实话,为了引入这个特性,我已经憋了足足 30 章节……
但是,还没完,是的,就算是将近2万字,生命周期的旅程依然没有完结,下一节将介绍一些关于生命周期的高级特性,这些特性你在其它中文书中目前还看不到的。
但是,还没完,是的,就算是将近万字,生命周期的旅程依然没有完结,下一节将介绍一些关于生命周期的高级特性,这些特性你在其它中文书中目前还看不到的。

@ -2,7 +2,7 @@
但凡经历过 C/C++ 或 Go 语言 1.10 版本之前的用户都知道,一个好的包管理工具有多么的重要!!我那个时候是如此的渴望类似 `nodejs``npm `包管理工具,但是却求而不得。
包管理工具最重要的意义就是**任何用户拿到你的代码,都能运行起来**",而不会因为各种包版本依赖焦头烂额。
包管理工具最重要的意义就是**任何用户拿到你的代码,都能运行起来**,而不会因为各种包版本依赖焦头烂额。
Go 语言在 1.10 版本之前,所有的包都是在 `github.com` 下存放,导致了所有的项目都公用一套依赖代码,在本地项目复杂后,这简直是一种灾难。

@ -14,7 +14,7 @@
打开终端并输入下面命令:
```console
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
```
这个命令将下载一个脚本并开始安装 `rustup` 工具,此工具将安装 Rust 的最新稳定版本。可能会提示你输入管理员密码。
@ -34,7 +34,7 @@ Rust 对运行环境的依赖和 Go 语言很像,几乎所有环境都可以
**MacOS 下:**
```console
xcode-select --install
$ xcode-select --install
```
**Linux 下:**
@ -82,7 +82,7 @@ Current installation options:
配置好后,在 MSYS 中输入下面的命令来安装 rustup。
```bash
curl https://sh.rustup.rs -sSf | sh
$ curl https://sh.rustup.rs -sSf | sh
```
之后,根据以下输出进行配置。
@ -135,7 +135,7 @@ Current installation options:
要卸载 Rust 和 `rustup`,在终端执行以下命令即可卸载:
```bash
rustup self uninstall
$ rustup self uninstall
```
## 检查安装是否成功
@ -143,10 +143,10 @@ rustup self uninstall
检查是否正确安装了 Rust可打开终端并输入下面这行此时能看到最新发布的稳定版本的版本号、提交哈希值和提交日期
```bash
rustc -V
$ rustc -V
rustc 1.56.1 (59eed8a2a 2021-11-01)
cargo -V
$ cargo -V
cargo 1.57.0 (b2e52d7ca 2021-10-21)
```
> 注:若发现版本号不同,以您的版本号为准

Loading…
Cancel
Save