Update Ch10

This commit is contained in:
Peng Hailin, 2023-04-12 21:06:10 +08:00
parent d64120937b
commit 0e51754616

View File

@ -437,13 +437,13 @@ fn main() {
`main` 函数中,咱们定义了一个有着 `x``i32` (值为 `5`),及 `y``f64` (值为 `10.4`)的 `Point`。变量 `p2` 是个有着 `x` 为字符串切片(值为 `Hello`),同时 `y``char` (值为 `c`)的 `Point` 结构体。以参数 `p2` 调用 `p1` 上的 `mixup`,就给到咱们 `p3`,由于 `p3``x` 来自于 `p1`,因此将有一个 `i32``x`。而由于这个变量 `p3``y` 来自于 `p2`, 因此他将有一个 `char``y`。那个 `println!` 宏调用,将打印 `p3.x = 5, p3.y = c`
此示例的目的,是要对其中有些泛型参数是以 `impl` 来声明,而另一些泛型参数则是以方法定义来声明的情形,加以演示。由于这里的泛型参数 `T``U` 与结构体定义在一起,因此他们是在 `impl` 后声明的。而其中的泛型参数 `X``Y`,则由于他们只与那个方法 `mixup` 有关,所以他们就被声明在了 `fn mixup` 之后。
此示例的目的,是要对其中有些泛型参数是以 `impl` 来声明,而另一些泛型参数则是以方法定义来声明的情形,加以演示。由于这里的泛型参数 `T``U` 与结构体定义在一起,因此他们是在 `impl` 后声明的。而其中的泛型参数 `X``Y`,则由于他们只与方法 `mixup` 有关,所以他们就被声明在了 `fn mixup` 之后。
### 使用泛型参数代码的性能问题
这里或许想了解,在运用了泛型参数时,是否有着运行时的开销。好消息就是,相比于使用具体类型,使用泛型并不会令到程序运行得更慢。
咱们或许想知道,在运用了泛型参数时,是否有着运行时的开销。好消息就是,相比于使用具体类型,使用泛型并不会令到程序运行得更慢。
Rust 通过在编译时完成那些使用了泛型代码的单态化performing monomorphization of the code using generics实现了这一点。所谓 *单态化monomorphization*,即通过将在编译后用到的具体类型填入进去,而将通用代码转换为具体代码的过程。在此过程中,编译器会执行与清单 10-5 中曾创建通用函数相反的步骤:编译器会查看所有泛型代码被调用到的地方,并生成调用到泛型代码的那些具体类型的代码。