8
8
<!-- chapter: -->
9
9
このガイドはRustの所有権システムの3つの解説の1つです。
10
10
これはRustの最も独特で注目されている機能です。そして、Rust開発者はそれについて高度に精通しておくべきです。
11
- 所有権はどのようにRustがその最大の目標、メモリ安全性を得るのかということです 。
11
+ 所有権こそはRustがその最大の目標、メモリ安全性を得るための方法です 。
12
12
そこにはいくつかの別個の概念があり、各概念が独自の章を持ちます。
13
13
14
14
<!-- * ownership, which you’re reading now -->
@@ -147,7 +147,7 @@ println!("v[0] is: {}", v[0]);
147
147
<!-- we say that we’ve ‘moved’ the thing we refer to. You don’t need some sort of -->
148
148
<!-- special annotation here, it’s the default thing that Rust does. -->
149
149
「use of moved value」という同じエラーです。
150
- 所有権を何か別のものに転送するとき、参照するものを「移転する 」と言います。
150
+ 所有権を何か別のものに転送するとき、参照するものを「ムーブした 」と言います。
151
151
ここでは特別な種類の注釈を必要としません。
152
152
それはRustの行うデフォルトの動作です。
153
153
@@ -156,7 +156,7 @@ println!("v[0] is: {}", v[0]);
156
156
157
157
<!-- The reason that we cannot use a binding after we’ve moved it is subtle, but -->
158
158
<!-- important. When we write code like this: -->
159
- 束縛を移転した後ではそれを使うことができないということの理由は微妙ですが重要です 。
159
+ 束縛をムーブした後ではそれを使うことができないということの理由は微妙ですが重要です 。
160
160
このようなコードを書いたとします。
161
161
162
162
``` rust
@@ -174,10 +174,10 @@ let v2 = v;
174
174
<!-- after we’ve done the move. -->
175
175
最初の行はベクタオブジェクト` v ` とそれの含むデータのためのメモリを割り当てます。
176
176
ベクタオブジェクトは[ スタック] [ sh ] に保存され、[ ヒープ] [ sh ] に保存された内容(` [1, 2, 3] ` )へのポインタを含みます。
177
- ` v ` を` v2 ` に移転するとき 、それは` v2 ` のためにそのポインタのコピーを作ります。
177
+ ` v ` を` v2 ` にムーブするとき 、それは` v2 ` のためにそのポインタのコピーを作ります。
178
178
それは、ヒープ上のベクタの内容へのポインタが2つあることを意味します。
179
179
それはデータ競合を持ち込むことでRustの安全性保証に違反するでしょう。
180
- そのため、Rustは移転を終えた後の ` v ` の使用を禁止するのです。
180
+ そのため、Rustはムーブを終えた後の ` v ` の使用を禁止するのです。
181
181
182
182
[ sh ] : the-stack-and-the-heap.html
183
183
@@ -213,16 +213,16 @@ println!("v is: {}", v);
213
213
<!-- But, unlike a move, we can still use `v` afterward. This is because an `i32` -->
214
214
<!-- has no pointers to data somewhere else, copying it is a full copy. -->
215
215
この場合、` v ` は` i32 ` で、それは` Copy ` トレイトを実装します。
216
- これはちょうど移転と同じように 、` v ` を` v2 ` に割り当てるとき、データのコピーが作られるということを意味します。
217
- しかし、移転と違って後でまだ ` v ` を使うことができます。
216
+ これはちょうどムーブと同じように 、` v ` を` v2 ` に割り当てるとき、データのコピーが作られるということを意味します。
217
+ しかし、ムーブと違って後でまだ ` v ` を使うことができます。
218
218
これは` i32 ` がどこか別の場所へのポインタを持たず、コピーが完全コピーだからです。
219
219
220
220
<!-- All primitive types implement the `Copy` trait and their ownership is -->
221
221
<!-- therefore not moved like one would assume, following the ´ownership rules´. -->
222
222
<!-- To give an example, the two following snippets of code only compile because the -->
223
223
<!-- `i32` and `bool` types implement the `Copy` trait. -->
224
- 全てのプリミティブ型は` Copy ` トレイトを実装しているので、推測どおりそれらの所有権は「所有権ルール」に従っては移転しません 。
225
- 例を与えるために、2つのコードスニペットを単にコンパイルしましょう 。なぜなら、` i32 ` 型と` bool ` 型は` Copy ` トレイトを実装するからです。
224
+ 全てのプリミティブ型は` Copy ` トレイトを実装しているので、推測どおりそれらの所有権は「所有権ルール」に従ってはムーブしません 。
225
+ 例として、次の2つのコードスニペットはコンパイルが通ります 。なぜなら、` i32 ` 型と` bool ` 型は` Copy ` トレイトを実装するからです。
226
226
227
227
``` rust
228
228
fn main () {
@@ -252,7 +252,7 @@ fn change_truth(x: bool) -> bool {
252
252
253
253
<!-- If we had used types that do not implement the `Copy` trait, -->
254
254
<!-- we would have gotten a compile error because we tried to use a moved value. -->
255
- もし` Copy ` トレイトを実装していない型を使っていたならば、移転した値を使おうとしたため 、コンパイルエラーが出ていたでしょう。
255
+ もし` Copy ` トレイトを実装していない型を使っていたならば、ムーブした値を使おうとしたため 、コンパイルエラーが出ていたでしょう。
256
256
257
257
``` text
258
258
error: use of moved value: `a`
0 commit comments