@@ -15,9 +15,8 @@ most often.
15
15
-->
16
16
17
17
* ポインタ* は、メモリのアドレスを含む変数の一般的な概念です。このアドレスは、何らかの他のデータを参照、または「指します」。
18
- Rustにおいて、最もありふれた種類のポインタは、参照であり、第4章で習いましたね。参照は、
19
- ` & ` 記号で示唆され、指している値を借用します。データを参照すること以外に特別な能力は何もありません。
20
- また、オーバーヘッドもなく、最も頻繁に使われる種類のポインタです。
18
+ Rustにおいて最もありふれた種類のポインタは参照です。参照については第4章で習いましたね。参照は` & ` 記号で示唆され、指している値を借用します。データを参照すること以外に特別な能力は何もありません。
19
+ また、オーバーヘッドもなく、ポインタの中では最も頻繁に使われます。
21
20
22
21
<!--
23
22
*Smart pointers*, on the other hand, are data structures that not only act like
@@ -32,11 +31,11 @@ the data.
32
31
-->
33
32
34
33
一方、* スマートポインタ* は、ポインタのように振る舞うだけでなく、追加のメタデータと能力があるデータ構造です。
35
- スマートポインタという概念は、Rustに特有のものではありません: スマートポインタは、C++に端を発し、
34
+ スマートポインタという概念は、Rustに特有のものではありません。 スマートポインタは、C++に端を発し、
36
35
他の言語にも存在しています。Rustでは、標準ライブラリに定義された色々なスマートポインタが、
37
36
参照以上の機能を提供します。この章で探究する一つの例が、* 参照カウント* 方式のスマートポインタ型です。
38
- このポインタにより、所有者の数を追いかけることでデータに複数の所有者を持たせることができ、
39
- 所有者がいなくなったら、データの片付けをしてくれます 。
37
+ このポインタのおかげでデータに複数の所有者を持たせることができます。
38
+ 所有者の数を追いかけ、所有者がいなくなったらデータの片付けをしてくれるからです 。
40
39
41
40
<!--
42
41
In Rust, which uses the concept of ownership and borrowing, an additional
@@ -45,7 +44,7 @@ pointers that only borrow data; in contrast, in many cases, smart pointers
45
44
*own* the data they point to.
46
45
-->
47
46
48
- 所有権と借用の概念を使うRustで、参照とスマートポインタの別の差異は、参照はデータを借用するだけのポインタであることです;
47
+ 所有権と借用の概念を使うRustにおいて、参照とスマートポインタにはもう1つ違いがあります。参照はデータを借用するだけのポインタなのです。
49
48
対照的に多くの場合、スマートポインタは指しているデータを* 所有* します。
50
49
51
50
<!--
@@ -57,10 +56,9 @@ and extra capabilities or guarantees (such as with `String` ensuring its data
57
56
will always be valid UTF-8).
58
57
-->
59
58
60
- その時は、スマートポインタとは呼ばなかったものの、第8章の` String ` や` Vec<T> ` のように、
61
- この本の中でいくつかのスマートポインタに遭遇してきました。これらの型はどちらも、
62
- あるメモリを所有し、それを弄ることができるので、スマートポインタに数えられます。また、
63
- メタデータ(キャパシティなど)や追加の能力、あるいは保証(` String ` ならデータが常に有効なUTF-8であると保証することなど)もあります。
59
+ 私達はすでに、この本の中でいくつかのスマートポインタに遭遇してきました。例えば第8章の` String ` や` Vec<T> ` です。ただし、私達はそれらをスマートポインタとは呼んでいませんでした。
60
+ これらの型がどちらもスマートポインタに数えられるのは、あるメモリを所有しそれを弄ることができるからです。
61
+ また、メタデータ(キャパシティなど)や追加の能力、あるいは保証(` String ` ならデータが常に有効なUTF-8であると保証することなど)もあります。
64
62
65
63
<!--
66
64
Smart pointers are usually implemented using structs. The characteristic that
@@ -74,7 +72,7 @@ why they’re important to smart pointers.
74
72
-->
75
73
76
74
スマートポインタは普通、構造体を使用して実装されています。スマートポインタを通常の構造体と区別する特徴は、
77
- スマートポインタは、 ` Deref ` と` Drop ` トレイトを実装していることです。` Deref ` トレイトにより、スマートポインタ構造体のインスタンスは、
75
+ スマートポインタが ` Deref ` と` Drop ` トレイトを実装していることです。` Deref ` トレイトにより、スマートポインタ構造体のインスタンスは、
78
76
参照のように振る舞うことができるので、参照あるいはスマートポインタのどちらとも動作するコードを書くことができます。
79
77
` Drop ` トレイトにより、スマートポインタのインスタンスがスコープを外れた時に走るコードをカスタマイズすることができます。
80
78
この章では、どちらのトレイトについても議論し、これらのトレイトがスマートポインタにとって重要な理由を説明します。
@@ -86,9 +84,9 @@ libraries have their own smart pointers, and you can even write your own. We’l
86
84
cover the most common smart pointers in the standard library:
87
85
-->
88
86
89
- スマートポインタパターンがRustにおいてよく使われる一般的なデザインパターンだとして、この章では、全ての既存のスマートポインタを講義しません 。
90
- 多くのライブラリに独自のスマートポインタがあり、自分だけのスマートポインタを書くことさえできます 。
91
- 標準ライブラリの最もありふれたスマートポインタを講義します:
87
+ スマートポインタパターンがRustにおいてよく使われる一般的なデザインパターンであることを考えれば、この章で既存のスマートポインタを全て取り扱うことなどできません 。
88
+ 多くのライブラリに独自のスマートポインタがあり、自分だけのスマートポインタを書くことさえできるのです 。
89
+ ここでは標準ライブラリの最もありふれたスマートポインタを取り扱っていきます。
92
90
93
91
<!--
94
92
* `Box<T>` for allocating values on the heap
@@ -107,8 +105,8 @@ type exposes an API for mutating an interior value. We’ll also discuss
107
105
*reference cycles*: how they can leak memory and how to prevent them.
108
106
-->
109
107
110
- さらに、不変な型が、内部の値を可変化するAPIを晒す * 内部可変性* パターンについても講義します 。
111
- また、* 循環参照* についても議論します: 循環参照により、メモリがリークする方法とそれを回避する方法です 。
108
+ さらに、* 内部可変性* パターンも扱います。そこでは不変な型が、内部の値を変更するためのAPIを公開するのです 。
109
+ また、* 循環参照* についても議論します。つまり、循環参照によっていかにしてメモリがリークするのか、そしてどうやってそれを回避するのかを議論します 。
112
110
113
111
<!--
114
112
Let’s dive in!
0 commit comments