Skip to content

Commit e18c271

Browse files
authored
Merge pull request #140 from nojima/master-ja
ch10-03 の訳を一部修正する
2 parents 9da499d + b8e3bb6 commit e18c271

File tree

1 file changed

+32
-31
lines changed

1 file changed

+32
-31
lines changed

src/ch10-03-lifetime-syntax.md

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ detailed information.
3535
-->
3636

3737
ライフタイムの概念は、他のプログラミング言語の道具とはどこか異なり、間違いなく、
38-
Rustで一番際立った機能になっています。この章では、ライフタイムの全てを講義しないものの
39-
ライフタイム記法と遭遇する可能性のある一般的な手段を議論するので、その概念に馴染めます
40-
もっと詳しく知るには、第19章の「高度なライフタイム」節を参照されたし
38+
Rustで一番際立った機能になっています。この章では、ライフタイムの全体を解説することはしませんが
39+
ライフタイム記法が必要となる最も一般的な場合について議論しますので、ライフタイムの概念について馴染むことができるでしょう
40+
もっと詳しく知るには、第19章の「高度なライフタイム」節を参照してください
4141

4242
<!--
4343
### Preventing Dangling References with Lifetimes
@@ -391,9 +391,9 @@ the lifetimes of multiple references to each other without affecting the
391391
lifetimes.
392392
-->
393393

394-
ライフタイム注釈は、いかなる参照の生存期間も変えることはありません。シグニチャがジェネリックな型引数を指定していると、
395-
関数があらゆる型を受け入れるのと全く同様に、ジェネリックなライフタイム引数を指定することで関数は
396-
あらゆるライフタイムの参照を受け入れるのです。ライフタイム注釈は、ライフタイムに影響することなく、
394+
ライフタイム注釈は、いかなる参照の生存期間も変えることはありません。シグニチャにジェネリックな型引数を指定された
395+
関数が、あらゆる型を受け取ることができるのと同様に、ジェネリックなライフタイム引数を指定された関数は
396+
あらゆるライフタイムの参照を受け取ることができます。ライフタイム注釈は、ライフタイムに影響することなく、
397397
複数の参照のライフタイムのお互いの関係を記述します。
398398

399399
<!--
@@ -441,7 +441,7 @@ lifetime.
441441
お互いにどう関係するかをコンパイラに指示することを意図しているからです。例えば、
442442
ライフタイム`'a`付きの`i32`への参照となる引数`first`のある関数があるとしましょう。
443443
この関数にはさらに、`'a`のライフタイム付きの`i32`への別の参照となる`second`という別の引数もあります。
444-
ライフタイム注釈は、`first``second`の参照がどちらもジェネリックなライフタイムと同じだけ生きることを示唆します
444+
ライフタイム注釈は、`first``second`の参照がどちらもこのジェネリックなライフタイムと同じだけ生きることを示唆します
445445

446446
<!--
447447
### Lifetime Annotations in Function Signatures
@@ -459,10 +459,10 @@ We’ll name the lifetime `'a` and then add it to each reference, as shown in
459459
Listing 10-22.
460460
-->
461461

462-
さて、`longest`関数の文脈でライフタイム注釈を調査しましょう。ジェネリックな型引数同様、
463-
関数名と引数リストの間、山カッコの中にジェネリックなライフタイム引数を宣言する必要があります
464-
このシグニチャで表現したい制約は、引数の全参照と戻り値が同じライフタイムになることです
465-
ライフタイムを`'a`と名付け、それから各参照に追記します。リスト10-22に示したように
462+
さて、`longest`関数を例にライフタイム注釈を詳しく見ていきましょう。ジェネリックな型引数同様、
463+
関数名と引数リストの間の山カッコの中にジェネリックなライフタイム引数を宣言します
464+
このシグニチャで表現したい制約は、引数の全ての参照と戻り値が同じライフタイムを持つことです
465+
リスト10-22に示すように、ライフタイムを`'a`と名付け、それを各参照に付与します
466466

467467
<!--
468468
<span class="filename">Filename: src/main.rs</span>
@@ -486,7 +486,7 @@ specifying that all the references in the signature must have the same lifetime
486486
`'a`</span>
487487
-->
488488

489-
<span class="caption">リスト10-22: シグニチャの全参照が同じライフタイム`'a`になると指定した`longest`関数の定義</span>
489+
<span class="caption">リスト10-22: シグニチャの全参照が同じライフタイム`'a`を持つと指定した`longest`関数の定義</span>
490490

491491
<!--
492492
This code should compile and produce the result we want when we use it with the
@@ -512,11 +512,11 @@ that will satisfy this signature.
512512
これで関数シグニチャは、何らかのライフタイム`'a`に対して、関数は2つの引数を取り、
513513
どちらも少なくともライフタイム`'a`と同じだけ生きる文字列スライスであるとコンパイラに教えるようになりました。
514514
また、この関数シグニチャは、関数から返る文字列スライスも少なくともライフタイム`'a`と同じだけ生きると、
515-
コンパイラに教えています。これらの制約は、コンパイラに強制してほしいものです
515+
コンパイラに教えています。これらの制約は、まさに私たちがコンパイラに保証してほしかったものです
516516
この関数シグニチャでライフタイム引数を指定する時、渡されたり、返したりした、いかなる値のライフタイムも変更していないことを思い出してください。
517517
むしろ、借用チェッカーは、これらの制約を守らない値全てを拒否するべきと指定しています。
518-
`longest`関数は、正確に`x``y`の生存期間を知る必要はなく、何かのスコープが`'a`に代替され
519-
このシグニチャを満足することだけ知っている必要があることに注意してください
518+
`longest`関数は、`x``y`の正確な生存期間を知っている必要はなく
519+
このシグニチャを満たすようなスコープを`'a`に代入できることを知っているだけであることに注意してください
520520

521521
<!--
522522
When annotating lifetimes in functions, the annotations go in the function
@@ -528,10 +528,10 @@ might be different each time the function is called. This is why we need to
528528
annotate the lifetimes manually.
529529
-->
530530

531-
関数でライフタイムを注釈する際、注釈は関数シグニチャに<ruby>嵌<rp>(</rp><rt>はま</rt><rp>)</rp></ruby>り、
532-
関数本体には嵌りません。コンパイラは、なんの助けもなく、関数内のコードを解析できます。しかしながら、
533-
関数に、関数外からの参照や、関数外への参照がある場合、コンパイラは引数や戻り値のライフタイムをそれだけで解決することはほとんど不可能になります
534-
ライフタイムは、関数が呼び出される度に異なる可能性があります。このために、手動でライフタイムを注釈する必要があるのです。
531+
関数にライフタイムを注釈するときは、注釈は関数の本体ではなくシグニチャに付与します。
532+
コンパイラは注釈がなくとも関数内のコードを解析できます。しかしながら、
533+
関数に関数外からの参照や関数外への参照がある場合、コンパイラが引数や戻り値のライフタイムを自力で解決することはほとんど不可能になります
534+
そのライフタイムは、関数が呼び出される度に異なる可能性があります。このために、手動でライフタイムを注釈する必要があるのです。
535535

536536
<!--
537537
When we pass concrete references to `longest`, the concrete lifetime that is
@@ -543,7 +543,7 @@ the returned reference will also be valid for the length of the smaller of the
543543
lifetimes of `x` and `y`.
544544
-->
545545

546-
具体的な参照を`longest`に渡すと、`'a`を代替する具体的なライフタイムは、`y`のスコープと被さる`x`のスコープの一部になります
546+
具体的な参照を`longest`に渡すと、`'a`に代入される具体的なライフタイムは、`x`のスコープの一部であって`y`のスコープと重なる部分となります
547547
言い換えると、ジェネリックなライフタイム`'a`は、`x``y`のライフタイムのうち、小さい方に等しい具体的なライフタイムになるのです。
548548
返却される参照を同じライフタイム引数`'a`で注釈したので、返却される参照も`x``y`のライフタイムの小さい方と同じだけ有効になるでしょう。
549549

@@ -553,7 +553,7 @@ passing in references that have different concrete lifetimes. Listing 10-23 is
553553
a straightforward example.
554554
-->
555555

556-
ライフタイム注釈が異なる具体的なライフタイムになる参照を渡すことで`longest`関数を制限する方法を見ましょう。
556+
ライフタイム注釈が異なる具体的なライフタイムを持つ参照を渡すことで`longest`関数を制限する方法を見ましょう。
557557
リスト10-23は、率直な例です。
558558

559559
<!--
@@ -588,7 +588,7 @@ fn main() {
588588
references to `String` values that have different concrete lifetimes</span>
589589
-->
590590

591-
<span class="caption">リスト10-23: 異なる具体的なライフタイムの`String`値への参照で`longest`関数を使用する</span>
591+
<span class="caption">リスト10-23: 異なる具体的なライフタイムを持つ`String`値への参照で`longest`関数を使用する</span>
592592

593593
<!--
594594
In this example, `string1` is valid until the end of the outer scope, `string2`
@@ -669,7 +669,7 @@ this because we annotated the lifetimes of the function parameters and return
669669
values using the same lifetime parameter `'a`.
670670
-->
671671

672-
このエラーは、`result``println!`文に対して有効になるために`string2`が外側のスコープの終わりまで有効である必要があることを示しています。
672+
このエラーは、`result``println!`文に対して有効であるためには`string2`が外側のスコープの終わりまで有効である必要があることを示しています。
673673
関数引数と戻り値のライフタイムを同じライフタイム引数`'a`で注釈したので、コンパイラはこのことを知っています。
674674

675675
<!--
@@ -683,11 +683,11 @@ the lifetimes of the references passed in. Therefore, the borrow checker
683683
disallows the code in Listing 10-24 as possibly having an invalid reference.
684684
-->
685685

686-
人間からしたら、このコードを見て`string1``string2`よりも長いことが確認でき、
687-
故に`result``string1`への参照を含んでいます。まだ`string1`はスコープを抜けていないので、
688-
それでも`string1`への参照は`println!`にとって有効でしょう。ですが、コンパイラはこの場合、
686+
人間からしたら、`string1``string2`よりも長く、それ故に`result``string1`への参照を含んでいることは
687+
コードから明らかです。まだ`string1`はスコープを抜けていないので、
688+
`string1`への参照は`println!`にとって有効でしょう。ですが、コンパイラはこの場合、
689689
参照が有効であると見なせません。`longest`関数から返ってくる参照のライフタイムは、
690-
渡した参照のうちの小さい方と同じだとコンパイラに指示しました。それ故に
690+
渡した参照のうちの小さい方と同じだとコンパイラに指示しました。したがって
691691
借用チェッカーは、リスト10-24のコードを無効な参照がある可能性があるとして許可しないのです。
692692

693693
<!--
@@ -714,7 +714,7 @@ string slice, we wouldn’t need to specify a lifetime on the `y` parameter. The
714714
following code will compile:
715715
-->
716716

717-
ライフタイム引数を指定する必要のある手段は、関数が行っていることによります。例えば、
717+
何にライフタイム引数を指定する必要があるかは、関数が行っていることに依存します。例えば、
718718
`longest`関数の実装を最長の文字列スライスではなく、常に最初の引数を返すように変更したら、
719719
`y`引数に対してライフタイムを指定する必要はなくなるでしょう。以下のコードはコンパイルできます:
720720

@@ -821,9 +821,10 @@ enough information to allow memory-safe operations and disallow operations that
821821
would create dangling pointers or otherwise violate memory safety.
822822
-->
823823

824-
究極的にライフタイム記法は、関数のいろんな引数と戻り値のライフタイムを接続することに関するのです。
825-
一旦、繋がりができたら、メモリ安全な処理を許可するのに十分な情報がコンパイラにはあり、
826-
ダングリングポインタを生成するであろう処理を不認可し、さもなくばメモリ安全性を侵害するのです。
824+
究極的にライフタイム記法は、関数のいろんな引数と戻り値のライフタイムを接続することに関するものです。
825+
一旦それらが繋がれば、メモリ安全な処理を許可し、
826+
ダングリングポインタを生成したりメモリ安全性を侵害したりする処理を禁止するのに
827+
十分な情報をコンパイラは得たことになります。
827828

828829
<!--
829830
### Lifetime Annotations in Struct Definitions

0 commit comments

Comments
 (0)