From 3aa7aa573e68c4029b31ceae3aa93e3ea7e4f2a4 Mon Sep 17 00:00:00 2001 From: Unisko PENG Date: Thu, 13 Apr 2023 17:59:02 +0800 Subject: [PATCH] Update Ch10 --- ...Ch10_Generic_Types_Traits_and_Lifetimes.md | 4 ++-- src/Ch21_Appendix.md | 23 +++++++++++++------ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md index 7439664..31ef955 100644 --- a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md +++ b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md @@ -577,10 +577,10 @@ fn main() { 此代码会打印 `1 条推文:horse_ebooks: 当然,跟大家已经清楚的一样了,朋友们`。 -依赖于 `aggregator` 代码箱的其他代码箱,同样可以将 `Summary` 特质带入其作用域,以在他们自己的类型上实现 `Summary`。有个限制条件要注意,即只有在特质或类型二者至少有一个属于代码箱本地的时,咱们才能在类型上实现特质。比如,由于 `Tweet` 这个类型属于本地代码箱 `aggregator`,那么因此就可以将像是标准库的特质 `Display`,应用于像是定制类型 `Tweet` 上,而作为这个 `aggregator` 代码箱功能的一部分。由于那个 `Summary` 属于 `aggregator` 代码箱本地,因此在这里的 `aggregator` 代码箱中,还可将 `Summary` 应用在 `vec` 上。 +依赖于 `aggregator` 代码箱的其他代码箱,同样可以将 `Summary` 特质带入其作用域,以在他们自己的类型上实现 `Summary`。有个限制条件要注意,即只有在特质或类型二者至少有一个属于代码箱本地的时,咱们才能在类型上实现特质。比如,由于定制类型 `Tweet` 对于咱们的代码箱 `aggregator` 是本地的,因此咱们可以将比如 `Display` 这样的标准库特质,像 `aggregator` 代码箱功能的一部分那样,实现在 `Tweet` 上。由而于那个特质 `Summary` 属于 `aggregator` 代码箱本地,咱们便还可在咱们的 `aggregator` 代码箱中,将其实现在 `Vec` 上。 -但这里是无法将外部特质,应用在外部类型上的。比如,由于 `Display` 特质与 `vec` 类型都是定义在标准库中,而均不属于 `aggregator` 代码箱本地,那么在这里的 `aggregator` 代码箱里头,就不能够将 `Display` 特质,应用在 `vec` 上。这种限制属于一种名为 *内聚性(coherrnce)* 属性的一部分,更具体地讲,就是 *孤儿规则(the orphan rule)*,之所以这样称呼,是由于未父类型缺席了(this restriction is part of a property called *coherence*, and more specifically the *orphan rule*, so named because the parent type is not present)。此规则确保其他人的代码无法破坏自己的代码,反之亦然。在没有这条规则下,两个代码箱就会将同一特质,对同一类型加以实现,那么 Rust 就不清楚要使用那个实现了。 +不过咱们是无法将外部特质,实现在外部类型上的。比如,由于 `Display` 特质与 `Vec` 类型,都是定义在标准库中,而均不属于咱们的 `aggregator` 代码箱,咱们就不能在 `aggregator` 代码箱里头,将 `Display` 特质实现在 `Vec` 上。这种限制属于名为 *内聚,coherrnce* 的属性的一部分,更具体地说,便是 *孤儿规则,the orphan rule*,之所以这样叫法,是由于父类型缺席了,this restriction is part of a property called *coherence*, and more specifically the *orphan rule*, so named because the parent type is not present。这条规则确保了其他人的代码无法破坏咱们代码,反之亦然。若没有这条规则,两个代码箱就会对同样类型实现同一特质,那么 Rust 就不清楚要使用那个实现了。 ### 默认实现 diff --git a/src/Ch21_Appendix.md b/src/Ch21_Appendix.md index 06f93e5..6ff6900 100644 --- a/src/Ch21_Appendix.md +++ b/src/Ch21_Appendix.md @@ -741,14 +741,8 @@ $ rustup override set nightly 过了一段时间后,一旦那些用到每日发布的 Rust 开发者们,能够试用这项新特性,那么 Rust 团队成员将讨论这项特性,怎样将其编制到每日发布上,并决定其是否有那个被构造到稳定发布 Rust。而若决定是继续推进,那么特性门就会被移除,同时这项特性就被认为是稳定的了!他就会搭上列车,进到一个新的稳定发布 Rust 中。 -## 附录 H - 术语清单 -### 单态化,monomorphization - -所谓 *单态化,monomorphization*,是指即通过把在编译后用到的具体类型填入到泛型位置,而将通用代码转换为具体代码的过程。参考 [使用泛型代码的性能问题](Ch10_Generic_Types_Traits_and_Lifetimes.md#使用泛型参数代码的性能问题)。 - - -## 附录 I - 有用笔记 +## 附录 H - 有用笔记 此处记录学习及应用 Rust 编程软件过程中,觉得有用的一些东西。 @@ -789,3 +783,18 @@ ELF Header: $ cargo install cargo-binutils $ rustup component add llvm-tools-preview ``` + +## 附录 I - 术语清单 + +### 单态化,monomorphization + +所谓 *单态化,monomorphization*,是指即通过把在编译后用到的具体类型填入到泛型位置,而将通用代码转换为具体代码的过程。参考 [使用泛型代码的性能问题](Ch10_Generic_Types_Traits_and_Lifetimes.md#使用泛型参数代码的性能问题)。 + +### 内聚属性 + +a property called *coherence*,参见 [在类型上实现某个特质](Ch10_Generic_Types_Traits_and_Lifetimes.md#在类型上实现某个特质)。 + +### 孤儿规则 + +the orphan rule, 参见 [在类型上实现某个特质](Ch10_Generic_Types_Traits_and_Lifetimes.md#在类型上实现某个特质)。 +