mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2025-02-06 01:20:29 +08:00
Remove Ch22
This commit is contained in:
parent
0e51754616
commit
ba92c37dd1
@ -347,7 +347,7 @@ enum Result <T, E> {
|
||||
|
||||
`Result` 枚举对 `T` 和 `E` 两种类型通用,并有着两个变种:保存了一个类型 `T` 值的 `Ok`,与保存了一个类型 `E` 值的 `Err`。这个定义使得在某个操作可能成功(便返回某种类型 `T` 的一个值),或失败(便返回一个某种类型 `E` 的值)的地方,使用 `Result` 枚举方便起来。事实上,这正是咱们在清单 9-3 中,打开某个文件时所用到的,在文件被成功打开时,其中的 `T` 就以 `std::fs::File` 给填上了,而当打开那个文件时,若存在某些问题,那么其中的 `E` 就会被 `std::io::Error` 填充。
|
||||
|
||||
当咱们认识到咱们的代码中,有着仅在其所保存值类型上有区别的多个结构体或枚举的情况时,咱们就可以通过使用泛型避免代码重复。
|
||||
当咱们认识到咱们的代码中,有着仅在其所保存值类型方面有区别的多个结构体或枚举的情况时,咱们就可以通过使用泛型避免代码重复。
|
||||
|
||||
|
||||
### 在方法定义中
|
||||
@ -443,9 +443,9 @@ fn main() {
|
||||
### 使用泛型参数代码的性能问题
|
||||
|
||||
|
||||
咱们或许想知道,在运用了泛型参数时,是否有着运行时的开销。好消息就是,相比于使用具体类型,使用泛型并不会令到程序运行得更慢。
|
||||
咱们或许想知道,在运用了泛型参数时,是否有着运行时的开销。好消息就是,相比于使用具体类型,使用泛型不会令到咱们的程序运行得更慢。
|
||||
|
||||
Rust 通过在编译时,完成那些使用了泛型代码的单态化(performing monomorphization of the code using generics),实现了这一点。所谓 *单态化(monomorphization)*,即通过将在编译后用到的具体类型填入进去,而将通用代码转换为具体代码的过程。在此过程中,编译器会执行与清单 10-5 中曾创建通用函数相反的步骤:编译器会查看所有泛型代码被调用到的地方,并生成调用到泛型代码的那些具体类型的代码。
|
||||
Rust 通过在编译时,完成那些使用了泛型代码的单态化,performing monomorphization of the code using generics,达成这个目的。所谓 *单态化,monomorphization*,是指即通过把在编译后用到的具体类型填入到泛型位置,而将通用代码转换为具体代码的过程。在此过程中,编译器会执行与清单 10-5 中曾创建通用函数相反的步骤:编译器会查看所有泛型代码被调用到的地方,并生成调用到泛型代码的那些具体类型的代码。
|
||||
|
||||
下面就来通过使用标准库的通用 `Option<T>` 枚举,看看单态化的工作原理:
|
||||
|
||||
|
@ -741,4 +741,51 @@ $ rustup override set nightly
|
||||
|
||||
过了一段时间后,一旦那些用到每日发布的 Rust 开发者们,能够试用这项新特性,那么 Rust 团队成员将讨论这项特性,怎样将其编制到每日发布上,并决定其是否有那个被构造到稳定发布 Rust。而若决定是继续推进,那么特性门就会被移除,同时这项特性就被认为是稳定的了!他就会搭上列车,进到一个新的稳定发布 Rust 中。
|
||||
|
||||
<全书完>
|
||||
## 附录 H - 术语清单
|
||||
|
||||
### 单态化,monomorphization
|
||||
|
||||
所谓 *单态化,monomorphization*,是指即通过把在编译后用到的具体类型填入到泛型位置,而将通用代码转换为具体代码的过程。参考 [使用泛型代码的性能问题](Ch10_Generic_Types_Traits_and_Lifetimes.md#使用泛型参数代码的性能问题)。
|
||||
|
||||
|
||||
## 附录 I - 有用笔记
|
||||
|
||||
此处记录学习及应用 Rust 编程软件过程中,觉得有用的一些东西。
|
||||
|
||||
|
||||
## `cargo-binutils`
|
||||
|
||||
[这个项目](https://github.com/rust-embedded/cargo-binutils) 是 Embbeded-Rust 项目的,而不是 Rust 官方的,但提供了有用的功能。比如查看构建出的二进制程序文件的那些头部:
|
||||
|
||||
|
||||
```console
|
||||
$ cargo readobj --bin clippy_demo -- --file-headers
|
||||
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
|
||||
ELF Header:
|
||||
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
|
||||
Class: ELF64
|
||||
Data: 2's complement, little endian
|
||||
Version: 1 (current)
|
||||
OS/ABI: UNIX - System V
|
||||
ABI Version: 0
|
||||
Type: DYN (Shared object file)
|
||||
Machine: Advanced Micro Devices X86-64
|
||||
Version: 0x1
|
||||
Entry point address: 0x86D0
|
||||
Start of program headers: 64 (bytes into file)
|
||||
Start of section headers: 4305200 (bytes into file)
|
||||
Flags: 0x0
|
||||
Size of this header: 64 (bytes)
|
||||
Size of program headers: 56 (bytes)
|
||||
Number of program headers: 12
|
||||
Size of section headers: 64 (bytes)
|
||||
Number of section headers: 42
|
||||
Section header string table index: 41
|
||||
```
|
||||
|
||||
使用前需要进行如下安装:
|
||||
|
||||
```console
|
||||
$ cargo install cargo-binutils
|
||||
$ rustup component add llvm-tools-preview
|
||||
```
|
||||
|
@ -1,41 +0,0 @@
|
||||
# 有用笔记
|
||||
|
||||
此处记录学习及应用 Rust 编程软件过程中,觉得有用的一些东西。
|
||||
|
||||
|
||||
## `cargo-binutils`
|
||||
|
||||
[这个项目](https://github.com/rust-embedded/cargo-binutils) 是 Embbeded-Rust 项目的,而不是 Rust 官方的,但提供了有用的功能。比如查看构建出的二进制程序文件的那些头部:
|
||||
|
||||
|
||||
```console
|
||||
$ cargo readobj --bin clippy_demo -- --file-headers
|
||||
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
|
||||
ELF Header:
|
||||
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
|
||||
Class: ELF64
|
||||
Data: 2's complement, little endian
|
||||
Version: 1 (current)
|
||||
OS/ABI: UNIX - System V
|
||||
ABI Version: 0
|
||||
Type: DYN (Shared object file)
|
||||
Machine: Advanced Micro Devices X86-64
|
||||
Version: 0x1
|
||||
Entry point address: 0x86D0
|
||||
Start of program headers: 64 (bytes into file)
|
||||
Start of section headers: 4305200 (bytes into file)
|
||||
Flags: 0x0
|
||||
Size of this header: 64 (bytes)
|
||||
Size of program headers: 56 (bytes)
|
||||
Number of program headers: 12
|
||||
Size of section headers: 64 (bytes)
|
||||
Number of section headers: 42
|
||||
Section header string table index: 41
|
||||
```
|
||||
|
||||
使用前需要进行如下安装:
|
||||
|
||||
```console
|
||||
$ cargo install cargo-binutils
|
||||
$ rustup component add llvm-tools-preview
|
||||
```
|
@ -62,5 +62,3 @@
|
||||
- [最后项目:构建一个多线程的 Web 服务器](Ch20_Final_Project_Building_a_Multithreaded_Web_Server.md)
|
||||
|
||||
- [附录](Ch21_Appendix.md)
|
||||
|
||||
- [一些有用的 Tips](Ch22_Useful_Tips.md)
|
||||
|
Loading…
Reference in New Issue
Block a user