Skip to content

Commit 75649d4

Browse files
authored
Merge pull request #17 from woodyZootopia/second-edition-ja
和訳の修正
2 parents b05c9fb + 6642ce4 commit 75649d4

6 files changed

+21
-20
lines changed

second-edition/src/ch04-01-what-is-ownership.md

+8-7
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ Rustと所有権システムの規則と経験を積むにつれて、自然に
112112
>
113113
> スタックもヒープも、実行時にコードが使用できるメモリの一部になりますが、異なる手段で構成されています。
114114
> スタックは、得た順番に値を並べ、逆の順で値を取り除いていきます。これは、
115-
> *last in, first out*(`訳注`: あえて日本語にするなら、けつ入れ頭出しといったところでしょうか)と呼ばれます。
115+
> *last in, first out*(`訳注`: あえて日本語にするなら、「最後に入れたものが最初に出てくる」といったところでしょうか)と呼ばれます。
116116
> お皿の山を思い浮かべてください: お皿を追加する時には、山の一番上に置き、お皿が必要になったら、一番上から1枚を取り去りますよね。
117117
> 途中や一番下に追加したり、取り除いたりすることもできません。データを追加することは、
118118
> *スタックにpushする*といい、データを取り除くことは、*スタックからpopする*と表現します(`訳注`:
@@ -125,8 +125,8 @@ Rustと所有権システムの規則と経験を積むにつれて、自然に
125125
> コンパイル時にサイズがわからなかったり、サイズが可変のデータについては、代わりにヒープに格納することができます。
126126
> ヒープは、もっとごちゃごちゃしています: ヒープにデータを置く時、あるサイズのスペースを求めます。
127127
> OSはヒープ上に十分な大きさの空の領域を見つけ、使用中にし、*ポインタ*を返してきます。ポインタとは、その場所へのアドレスです。
128-
> この過程は、*ヒープに領域を確保する*と呼ばれ、時としてそのフレーズを単に*allocateする*などと省略したりします。
129-
> (`訳注`: こちらもこなれた日本語訳はないでしょう。allocateはメモリを確保すると訳したいところですが)
128+
> この過程は、*ヒープに領域を確保する(allocating on the heap)*と呼ばれ、時としてそのフレーズを単に*allocateする*などと省略したりします。
129+
> (`訳注`: こちらもこなれた日本語訳はないでしょう。allocateは「メモリを確保する」と訳したいところですが)
130130
> スタックに値を載せることは、メモリ確保とは考えられません。ポインタは、既知の固定サイズなので、
131131
> スタックに保管することができますが、実データが必要になったら、ポインタを追いかける必要があります。
132132
>
@@ -564,7 +564,8 @@ do if Rust copied the heap data as well</span> -->
564564
その変数が使っていたヒープメモリを片付けると述べました。しかし、図4-2は、
565565
両方のデータポインタが同じ場所を指していることを示しています。これは問題です: `s2``s1`がスコープを抜けたら、
566566
両方とも同じメモリを解放しようとします。これは*二重解放*エラーとして知られ、以前触れたメモリ安全性上のバグの一つになります。
567-
メモリを2回解放することは、メモリの退廃につながり、さらにセキュリティ上の脆弱性を生む可能性があります。
567+
メモリを2回解放することは、memory corruption (`訳注`: メモリの崩壊。意図せぬメモリの書き換え) につながり、
568+
セキュリティ上の脆弱性を生む可能性があります。
568569

569570
<!-- To ensure memory safety, there’s one more detail to what happens in this -->
570571
<!-- situation in Rust. Instead of trying to copy the allocated memory, Rust -->
@@ -672,7 +673,7 @@ println!("s1 = {}, s2 = {}", s1, s2);
672673
<!-- This works just fine and explicitly produces the behavior shown in Figure 4-3, -->
673674
<!-- where the heap data *does* get copied. -->
674675

675-
これは単純にうまく動き、図4-3で示した動作を明示的に生み出します。ここでは、
676+
これは問題なく動作し、図4-3で示した動作を明示的に生み出します。ここでは、
676677
ヒープデータが*実際に*コピーされています。
677678

678679
<!-- When you see a call to `clone`, you know that some arbitrary code is being -->
@@ -752,9 +753,9 @@ Rustには`Copy`トレイトと呼ばれる特別な注釈があり、
752753
<!-- `(i32, i32)` is `Copy`, but `(i32, String)` is not. -->
753754

754755
* あらゆる整数型。`u32`など。
755-
* 論理値型、`bool``true``false`という値がある。
756+
* 論理値型である`bool``true``false`という値がある。
756757
* あらゆる浮動小数点型、`f64`など。
757-
* 文字型、`char`
758+
* 文字型である`char`
758759
* タプル。ただ、`Copy`の型だけを含む場合。例えば、`(i32, i32)``Copy`だが、
759760
`(i32, String)`は違う。
760761

second-edition/src/ch04-03-slices.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,8 @@ fn main() {
201201
<!-- we write a `second_word` function. Its signature would have to look like this: -->
202202

203203
`word`内の添え字が`s`に格納されたデータと同期されなくなるのを心配することは、面倒ですし間違いになりやすいです!
204-
これらの添え字を管理するのは`second_word`関数を書いたら、さらに脆くなります
205-
そのシグニチャは以下のようにならなければおかしいです:
204+
これらの添え字の管理は`second_word`関数を書いたら、さらに難しくなります
205+
そのシグニチャは以下のようになるはずです:
206206

207207
```rust,ignore
208208
fn second_word(s: &String) -> (usize, usize) {
@@ -214,7 +214,7 @@ fn second_word(s: &String) -> (usize, usize) {
214214
<!-- need to be kept in sync. -->
215215

216216
今、私たちは開始**終端の添え字を追うようになりました。特定の状態のデータから計算されたけど、
217-
その状態に全く紐付かない値が増えました。同期を取る必要のある宙に浮いた関連性のない変数が3つになってしまいました
217+
その状態に全く紐付かない値が増えました。いつの間にか変わってしまうので、同期を取る必要のある、関連性のない変数が3つになってしまいました
218218

219219
<!-- Luckily, Rust has a solution to this problem: string slices. -->
220220

@@ -355,7 +355,7 @@ fn first_word(s: &String) -> &str {
355355
<!-- as the starting and ending indices. -->
356356

357357
リスト4-7で取った手段と同じ方法で単語の終端添え字を取得しています。つまり、最初の空白を探すことです。
358-
空白を発見したら、文字列の最初と、空白の添え字を開始、終了地点として使用して文字列スライスを返しています
358+
空白を発見したら、文字列の最初を開始地点、空白の添え字を終了地点として使用して文字列スライスを返しています
359359

360360
<!-- Now when we call `first_word`, we get back a single value that is tied to the -->
361361
<!-- underlying data. The value is made up of a reference to the starting point of -->

second-edition/src/ch05-02-example-structs.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ fn area(rectangle: &Rectangle) -> u32 {
208208
`area`関数は、`Rectangle`インスタンスの`width``height`フィールドにアクセスしています。
209209
これで、`area`の関数シグニチャは、我々の意図をズバリ示すようになりました: `width``height`フィールドを使って、
210210
`Rectangle`の面積を計算します。これにより、幅と高さが相互に関係していることが伝わり、
211-
タプルの`0``1`という添え字を使うのではなく、値に説明的な名前を与えられるのです。簡潔性を勝ち取ったわけですね
211+
タプルの`0``1`という添え字を使うよりも、これらの値に説明的な名前を与えられるのです。プログラムの意図が明瞭になりました
212212

213213
<!-- ### Adding Useful Functionality with Derived Traits -->
214214

second-edition/src/ch05-03-method-syntax.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ fn main() {
197197
>
198198
> 前者の方がずっと明確です。メソッドには自明な受け手(`self`の型)がいるので、この自動参照機能は動作するのです。
199199
> 受け手とメソッド名が与えられれば、コンパイラは確実にメソッドが読み込み専用(`&self`)か、書き込みもする(`&mut self`)のか、
200-
> 所有権を奪う(`self`)のか判断できるわけです。Rustにおいて、メソッドの受け手に関して借用が明示されないという事実は
201-
> 所有権を現実世界でエルゴノミックにさせる大部分を占めているのです
200+
> 所有権を奪う(`self`)のか判断できるわけです。メソッドの受け手に関して借用が明示されないというのが
201+
> 所有権を実際に使うのがRustにおいて簡単である大きな理由です
202202
203203
<!-- ### Methods with More Parameters -->
204204

second-edition/src/ch06-01-defining-an-enum.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -253,15 +253,15 @@ enum IpAddr {
253253

254254
このコードは、enum列挙子内にいかなる種類のデータでも格納できることを描き出しています:
255255
例を挙げれば、文字列、数値型、構造体などです。他のenumを含むことさえできます!また、
256-
標準ライブラリの型は、あなたが思い付いた可能性のあるものよりも複雑ではないことがしばしばあります
256+
標準ライブラリの型は、あなたの想像するよりも複雑ではないことがしばしばあります
257257

258258
<!-- Note that even though the standard library contains a definition for `IpAddr`, -->
259259
<!-- we can still create and use our own definition without conflict because we -->
260260
<!-- haven’t brought the standard library’s definition into our scope. We’ll talk -->
261261
<!-- more about bringing types into scope in Chapter 7. -->
262262

263-
標準ライブラリに`IpAddr`に対する定義は含まれるものの、標準ライブラリの定義をスコープに導入していないので
264-
まだ、干渉することなく自分自身の定義を生成して使用できることに注意してください。型をスコープに導入することについては、
263+
標準ライブラリに`IpAddr`に対する定義は含まれるものの、標準ライブラリの定義をまだ我々のスコープに導入していないので
264+
干渉することなく自分自身の定義を生成して使用できることに注意してください。型をスコープに導入することについては、
265265
第7章でもっと詳しく言及します。
266266

267267
<!-- Let’s look at another example of an enum in Listing 6-2: this one has a wide -->

second-edition/src/ch06-02-match.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -390,9 +390,9 @@ error[E0004]: non-exhaustive patterns: `None` not covered
390390

391391
全可能性を網羅していないことをコンパイラは検知しています。もっと言えば、どのパターンを忘れているかさえ知っているのです。
392392
Rustにおけるマッチは、*包括的*です: 全てのあらゆる可能性を網羅し尽くさなければ、コードは有効にならないのです。
393-
特に`Option<T>`の場合には、コンパイラが明示的に`None`の場合を扱うのを忘れないようにする時、
394-
nullになるかもしれない値があることを想定しないように、故に、前に議論した10億ドルの失敗を犯さないよう
395-
保護してくれるわけです
393+
特に`Option<T>`の場合には、私達が明示的に`None`の場合を処理するのを忘れないようにしてくれます。
394+
nullになるかもしれないのに値があると思い込まないよう、すなわち前に議論した10億ドルの失敗を犯さないよう
395+
コンパイラが保護してくれるわけです
396396

397397
<!-- ### The `_` Placeholder -->
398398

0 commit comments

Comments
 (0)