From 00c2a7355f52e9be90e27891263a3bd3dbdff9a4 Mon Sep 17 00:00:00 2001 From: Au Date: Mon, 15 May 2023 21:14:39 +0800 Subject: [PATCH 1/2] Update flow-control.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 去掉希望强调所有权的提示, 转为所有权说明. 如有错误请指正. --- src/basic/flow-control.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/basic/flow-control.md b/src/basic/flow-control.md index f1ad02ac..373ffed3 100644 --- a/src/basic/flow-control.md +++ b/src/basic/flow-control.md @@ -179,7 +179,7 @@ for item in collection { 第一种方式是循环索引,然后通过索引下标去访问集合,第二种方式是直接循环集合中的元素,优劣如下: - **性能**:第一种使用方式中 `collection[index]` 的索引访问,会因为边界检查(Bounds Checking)导致运行时的性能损耗 —— Rust 会检查并确认 `index` 是否落在集合内,但是第二种直接迭代的方式就不会触发这种检查,因为编译器会在编译时就完成分析并证明这种访问是合法的 -- **安全**:第一种方式里对 `collection` 的索引访问是非连续的,存在一定可能性在两次访问之间,`collection` 发生了变化,导致脏数据产生。而第二种直接迭代的方式是连续访问,因此不存在这种风险(这里是因为所有权吗?是的话可能要强调一下) +- **安全**:第一种方式里对 `collection` 的索引访问是非连续的,存在一定可能性在两次访问之间,`collection` 发生了变化,导致脏数据产生。而第二种直接迭代的方式是连续访问,因此不存在这种风险。同时因为所有权限制,这里访问的过程中,数据并不会发生变化。 由于 `for` 循环无需任何条件限制,也不需要通过索引来访问,因此是最安全也是最常用的,通过与下面的 `while` 的对比,我们能看到为什么 `for` 会更加安全。 From 65d11ba5fec5824e93222dc4bc108b3531073f1a Mon Sep 17 00:00:00 2001 From: Sunface Date: Wed, 14 Jun 2023 08:38:45 +0800 Subject: [PATCH 2/2] Apply suggestions from code review --- src/basic/flow-control.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/basic/flow-control.md b/src/basic/flow-control.md index 373ffed3..02127317 100644 --- a/src/basic/flow-control.md +++ b/src/basic/flow-control.md @@ -179,7 +179,7 @@ for item in collection { 第一种方式是循环索引,然后通过索引下标去访问集合,第二种方式是直接循环集合中的元素,优劣如下: - **性能**:第一种使用方式中 `collection[index]` 的索引访问,会因为边界检查(Bounds Checking)导致运行时的性能损耗 —— Rust 会检查并确认 `index` 是否落在集合内,但是第二种直接迭代的方式就不会触发这种检查,因为编译器会在编译时就完成分析并证明这种访问是合法的 -- **安全**:第一种方式里对 `collection` 的索引访问是非连续的,存在一定可能性在两次访问之间,`collection` 发生了变化,导致脏数据产生。而第二种直接迭代的方式是连续访问,因此不存在这种风险。同时因为所有权限制,这里访问的过程中,数据并不会发生变化。 +- **安全**:第一种方式里对 `collection` 的索引访问是非连续的,存在一定可能性在两次访问之间,`collection` 发生了变化,导致脏数据产生。而第二种直接迭代的方式是连续访问,因此不存在这种风险( 由于所有权限制,在访问过程中,数据并不会发生变化)。 由于 `for` 循环无需任何条件限制,也不需要通过索引来访问,因此是最安全也是最常用的,通过与下面的 `while` 的对比,我们能看到为什么 `for` 会更加安全。