2
2
# References
3
3
-->
4
4
5
- # リファレンス
5
+ # 参照
6
6
7
7
<!--
8
8
This section gives a high-level view of the memory model that *all* Rust
@@ -15,38 +15,38 @@ this more fundamental model is satisfied.
15
15
16
16
このセクションでは、* すべての* Rust プログラムが満たさなくてはならないメモリモデルを
17
17
ざっくりと見ていきます。
18
- 安全なコードは、ボローチェッカーによってこのモデルを満たしていることが静的に検証されます 。
19
- 危険なコードは、ボローチェッカーの裏をかくかもしれませんが 、このモデルを満たします。
18
+ 安全なコードは、借用チェッカによってこのモデルを満たしていることが静的に検証されます 。
19
+ アンセーフなコードは、借用チェッカの裏をかくかもしれませんが 、このモデルを満たします。
20
20
この基本的なモデルを満たしている限り、より多くのプログラムがコンパイルに通るように
21
- ボローチェッカーを拡張することも可能です 。
21
+ 借用チェッカを拡張することも可能です 。
22
22
23
23
<!--
24
24
There are two kinds of reference:
25
25
-->
26
26
27
- リファレンスには 2 種類があります 。
27
+ 参照には 2 種類あります 。
28
28
29
29
<!--
30
30
* Shared reference: `&`
31
31
* Mutable reference: `&mut`
32
32
-->
33
33
34
- * 共有リファレンス : ` & `
35
- * 可変リファレンス : ` &mut `
34
+ * 共有参照 : ` & `
35
+ * 可変参照 : ` &mut `
36
36
37
37
<!--
38
38
Which obey the following rules:
39
39
-->
40
40
41
- リファレンスは次のルールに従います 。
41
+ 参照は次のルールに従います 。
42
42
43
43
<!--
44
44
* A reference cannot outlive its referent
45
45
* A mutable reference cannot be aliased
46
46
-->
47
47
48
- * リファレンスのライフタイムが 、参照先のライフタイムより長くなることはできません。
49
- * 可変リファレンスは 、別名を持つことができません。
48
+ * 参照のライフタイムが 、参照先のライフタイムより長くなることはできません。
49
+ * 可変参照は 、別名を持つことができません。
50
50
51
51
<!--
52
52
That's it. That's the whole model. Of course, we should probably define
@@ -88,7 +88,7 @@ fields (if any), and so on.
88
88
もし、Rust が扱うのが値だけ(ポインタはない)であれば、
89
89
すべての値はただ一つの変数か複合型に所有されることになります。
90
90
ここから所有権の* 木構造* が自然に導かれます。
91
- スタック自信が木のルートになり 、変数が直接の子になります。
91
+ スタック自身が木のルートになり 、変数が直接の子になります。
92
92
変数がフィールドを持つのであれば、それは変数の直接の子になるでしょう。
93
93
94
94
<!--
@@ -110,8 +110,8 @@ reference, you're declaring that an ownership path exists to this address
110
110
of memory.
111
111
-->
112
112
113
- リファレンスは、単純にパスの名前と定義できます 。
114
- リファレンスを作成するということは 、あるメモリアドレスに所有権の
113
+ 参照は、単純にパスの * 名前 * と定義できます 。
114
+ 参照を作成するということは 、あるメモリアドレスに所有権の
115
115
パスが存在することを宣言するということです。
116
116
117
117
<!--
@@ -157,11 +157,11 @@ its children). If this is done, the value may be mutated. In particular, a
157
157
mutable reference can be taken.
158
158
-->
159
159
160
- 一般に、一意ではないパスを参照できるのは、共有リファレンスだけです 。
160
+ 一般に、一意ではないパスを参照できるのは、共有参照だけです 。
161
161
しかし、相互排他を保証するメカニズムがあれば、一時的にその値(とそしてすべての子ども)への唯一のパスを確立し、
162
162
「唯一の真の所有者」を確立できるかもしれません。
163
163
もしこれが可能なら、その値を変更できるかもしれません。
164
- とくに、可変リファレンスを取ることができるようになります 。
164
+ とくに、可変参照を取ることができるようになります 。
165
165
166
166
<!--
167
167
The most common way to establish such a path is through *interior mutability*,
@@ -182,8 +182,8 @@ refcount itself uses interior mutability.
182
182
-->
183
183
184
184
この効果を使った興味深い例が Rc 自身です。もし Rc の参照カウントが 1 なら、
185
- 内部状態を変更したり、move したりしても安全です 。
186
- refcount 自体も内部可変性を使っています 。
185
+ 内部状態を変更したり、ムーブしたりしても安全です 。
186
+ 参照カウント自体も内部可変性を使っています 。
187
187
188
188
<!--
189
189
In order to correctly communicate to the type system that a variable or field of
@@ -208,7 +208,7 @@ Note: Liveness is not the same thing as a *lifetime*, which will be explained
208
208
in detail in the next section of this chapter.
209
209
-->
210
210
211
- 生存性 (liveness) は、この章の次の節でで詳しく説明する * ライフタイム (lifetime)* とは違うことに注意してください。
211
+ 生存性 (liveness) は、この章の次の節で詳しく説明する * ライフタイム (lifetime)* とは違うことに注意してください。
212
212
213
213
<!--
214
214
Roughly, a reference is *live* at some point in a program if it can be
@@ -217,11 +217,11 @@ unreachable (for instance, they reside in freed or leaked memory). Mutable
217
217
references can be reachable but *not* live through the process of *reborrowing*.
218
218
-->
219
219
220
- 大雑把に言うと、リファレンスをデリファレンスできるとき 、
221
- そのリファレンスは 、プログラム中のある時点で * 生存している* といえます。
222
- 共有リファレンスは 、文字通り到達不可能な場合(たとえば、解放済みメモリやリークしてるメモリに
220
+ 大雑把に言うと、参照を参照外しできるとき 、
221
+ その参照は 、プログラム中のある時点で * 生存している* といえます。
222
+ 共有参照は 、文字通り到達不可能な場合(たとえば、解放済みメモリやリークしてるメモリに
223
223
存在している場合)を除いて、常に生存しています。
224
- 可変リファレンスには 、* 又貸し* というプロセスがあるので、到達できても生存して* いない* ことがあります。
224
+ 可変参照には 、* 又貸し* というプロセスがあるので、到達できても生存して* いない* ことがあります。
225
225
226
226
227
227
<!--
@@ -231,9 +231,9 @@ reborrows derived from it expire. For instance, a mutable reference can be
231
231
reborrowed to point to a field of its referent:
232
232
-->
233
233
234
- 可変リファレンスは、その子孫を他の共有リファレンスまたは可変リファレンスに又貸しすることができます 。
235
- 又貸ししたリファレンスは、派生したすべたの又貸しの有効期限が切れると、ふたたび生存することになります 。
236
- たとえば、可変リファレンスは、その参照先の一つのフィールドを指すリファレンスを又貸しすることができます 。
234
+ 可変参照は、その子孫を他の共有参照または可変参照に又貸しすることができます 。
235
+ 又貸しした参照は、派生したすべての又貸しの有効期限が切れると、再び生存することになります 。
236
+ 例えば、可変参照は、その参照先の一つのフィールドを指す参照を又貸しすることができます 。
237
237
238
238
``` rust
239
239
let x = & mut (1 , 2 );
@@ -243,7 +243,7 @@ let x = &mut (1, 2);
243
243
// この時点で y は生存しているが、x は生存していない
244
244
* y = 3 ;
245
245
}
246
- // y がスコープ外に出たので、x がふたたび生存中になる
246
+ // y がスコープ外に出たので、x が再び生存中になる
247
247
* x = (5 , 7 );
248
248
```
249
249
@@ -254,8 +254,8 @@ explicitly enables this to be done with disjoint struct fields, because
254
254
disjointness can be statically proven:
255
255
-->
256
256
257
- * 複数の* 可変リファレンスに又貸しすることも可能ですが、その複数のリファレンスは互いに素でなくてはいけません 。
258
- つまり、どのリファレンスも他のリファレンスの先祖であってはいけないということです 。
257
+ * 複数の* 可変参照に又貸しすることも可能ですが、その複数の参照は互いに素でなくてはいけません 。
258
+ つまり、どの参照も他の参照の先祖であってはいけないということです 。
259
259
Rust は、構造体のフィールドが互いに素であることを静的に証明できるので、
260
260
フィールドの又貸しが可能です。
261
261
@@ -294,28 +294,28 @@ only given to *live* owned references because moving its referent would of
294
294
course invalidate all outstanding references prematurely.
295
295
-->
296
296
297
- 話を単純にするために、変数をリファレンス型の一種 、* 所有中* リファレンス 、と仮定してみましょう。
298
- 所有中リファレンスは、可変リファレンスとほとんど同じ意味を持ちます 。
299
- 可変リファレンスまたは共有リファレンスに又貸しでき 、それによって生存中ではなくなります。
300
- 生存中の所有中リファレンスは 、値を解放(move out )できるという特殊な性質があります
301
- (とはいえ、可変リファレンスは値をスワップアウトできますが )。
302
- この能力は、* 生存中の* 所有中リファレンスのみに与えられています 。
303
- そうでなければ、早すぎるタイミングでその他のリファレンスを無効にすることになります 。
297
+ 話を単純にするために、変数を参照型の一種 、* 所有中* 参照 、と仮定してみましょう。
298
+ 所有中参照は、可変参照とほとんど同じ意味を持ちます 。
299
+ 可変参照または共有参照に又貸しでき 、それによって生存中ではなくなります。
300
+ 生存中の所有中参照は 、値を解放(ムーブアウト )できるという特殊な性質があります
301
+ (とはいえ、可変参照は値をスワップアウトできますが )。
302
+ この能力は、* 生存中の* 所有中参照のみに与えられています 。
303
+ そうでなければ、早すぎるタイミングでその他の参照を無効にすることになります 。
304
304
305
305
<!--
306
306
As a local lint against inappropriate mutation, only variables that are marked
307
307
as `mut` can be borrowed mutably.
308
308
-->
309
309
310
- 不適切な値の変更を lint が検出するので、` mut ` とマークされた変数だけが変更可能なように貸し出されます 。
310
+ 不適切な値の変更を lint が検出するので、` mut ` とマークされた変数だけが変更可能なように借用されます 。
311
311
312
312
<!--
313
313
It is interesting to note that Box behaves exactly like an owned reference. It
314
314
can be moved out of, and Rust understands it sufficiently to reason about its
315
315
paths like a normal variable.
316
316
-->
317
317
318
- Box がまさに所有中リファレンスのように振る舞うというおとを覚えておくと良いでしょう 。
318
+ Box がまさに所有中参照のように振る舞うということを覚えておくと良いでしょう 。
319
319
Box は値を解放することができ、変数が解放された時と同様に Rust はそのパスについて推論するための
320
320
十分な情報を持っています。
321
321
@@ -337,15 +337,15 @@ With liveness and paths defined, we can now properly define *aliasing*:
337
337
of its ancestors or descendants.**
338
338
-->
339
339
340
- ** 可変リファレンスは、その先祖か子孫に他のリファレンスが存在している時 、別名を持つといいます。**
340
+ ** 可変参照は、その先祖か子孫に他の参照が存在している時 、別名を持つといいます。**
341
341
342
342
<!--
343
343
(If you prefer, you may also say the two live references alias *each other*.
344
344
This has no semantic consequences, but is probably a more useful notion when
345
345
verifying the soundness of a construct.)
346
346
-->
347
347
348
- (二つの生存中のリファレンスが互いの別名になっている 、と言うこともできます。
348
+ (二つの生存中の参照が互いの別名になっている 、と言うこともできます。
349
349
意味上の違いは特にありませんが、プログラムの構造の健全性を検証する時には、
350
350
この考え方の方がわかりやすいでしょう。)
351
351
@@ -364,17 +364,17 @@ ownership or aliasing semantics. As a result, Rust makes absolutely no effort to
364
364
track that they are used correctly, and they are wildly unsafe.
365
365
-->
366
366
367
- 実際には、もう少し複雑です。リファレンスに加えて Rust には* 生のポインタ * もあります。
367
+ 実際には、もう少し複雑です。参照に加えて Rust には* 生ポインタ * もあります。
368
368
` *const T ` と ` *mut T ` のことです。
369
- 生のポインタには 、継承可能な所有権も別名という概念もありません。
370
- そのため、Rust は生のポインタを追跡する努力を一切しませんし、名前のポインタは極めて危険です 。
369
+ 生ポインタには 、継承可能な所有権も別名という概念もありません。
370
+ そのため、Rust は生ポインタを追跡する努力を一切しませんし、生ポインタは極めて危険です 。
371
371
372
372
<!--
373
373
**It is an open question to what degree raw pointers have alias semantics.
374
374
However it is important for these definitions to be sound that the existence of
375
375
a raw pointer does not imply some kind of live path.**
376
376
-->
377
377
378
- ** 生のポインタが別名という意味をどの程度持っているのか 、というのはまだ答えの出てない問題です。
379
- しかし、この節で出てきた定義が健全であるためには、生のポインタを使うとある種の生存パスが
378
+ ** 生ポインタが別名という意味をどの程度持っているのか 、というのはまだ答えの出てない問題です。
379
+ しかし、この節で出てきた定義が健全であるためには、生ポインタを使うとある種の生存パスが
380
380
わからなくなるということ重要です。**
0 commit comments