Skip to content

Commit 4e41af6

Browse files
committed
ci: generate pages at e18c271 [ci skip]
1 parent e18c271 commit 4e41af6

File tree

4 files changed

+66
-64
lines changed

4 files changed

+66
-64
lines changed

docs/ch10-03-lifetime-syntax.html

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,9 @@ <h2><a class="header" href="#ライフタイムで参照を検証する" id="ラ
200200
detailed information.
201201
-->
202202
<p>ライフタイムの概念は、他のプログラミング言語の道具とはどこか異なり、間違いなく、
203-
Rustで一番際立った機能になっています。この章では、ライフタイムの全てを講義しないものの
204-
ライフタイム記法と遭遇する可能性のある一般的な手段を議論するので、その概念に馴染めます
205-
もっと詳しく知るには、第19章の「高度なライフタイム」節を参照されたし</p>
203+
Rustで一番際立った機能になっています。この章では、ライフタイムの全体を解説することはしませんが
204+
ライフタイム記法が必要となる最も一般的な場合について議論しますので、ライフタイムの概念について馴染むことができるでしょう
205+
もっと詳しく知るには、第19章の「高度なライフタイム」節を参照してください</p>
206206
<!--
207207
### Preventing Dangling References with Lifetimes
208208
-->
@@ -492,9 +492,9 @@ <h3><a class="header" href="#ライフタイム注釈記法" id="ライフタイ
492492
the lifetimes of multiple references to each other without affecting the
493493
lifetimes.
494494
-->
495-
<p>ライフタイム注釈は、いかなる参照の生存期間も変えることはありません。シグニチャがジェネリックな型引数を指定していると、
496-
関数があらゆる型を受け入れるのと全く同様に、ジェネリックなライフタイム引数を指定することで関数は
497-
あらゆるライフタイムの参照を受け入れるのです。ライフタイム注釈は、ライフタイムに影響することなく、
495+
<p>ライフタイム注釈は、いかなる参照の生存期間も変えることはありません。シグニチャにジェネリックな型引数を指定された
496+
関数が、あらゆる型を受け取ることができるのと同様に、ジェネリックなライフタイム引数を指定された関数は
497+
あらゆるライフタイムの参照を受け取ることができます。ライフタイム注釈は、ライフタイムに影響することなく、
498498
複数の参照のライフタイムのお互いの関係を記述します。</p>
499499
<!--
500500
Lifetime annotations have a slightly unusual syntax: the names of lifetime
@@ -534,7 +534,7 @@ <h3><a class="header" href="#ライフタイム注釈記法" id="ライフタイ
534534
お互いにどう関係するかをコンパイラに指示することを意図しているからです。例えば、
535535
ライフタイム<code>'a</code>付きの<code>i32</code>への参照となる引数<code>first</code>のある関数があるとしましょう。
536536
この関数にはさらに、<code>'a</code>のライフタイム付きの<code>i32</code>への別の参照となる<code>second</code>という別の引数もあります。
537-
ライフタイム注釈は、<code>first</code><code>second</code>の参照がどちらもジェネリックなライフタイムと同じだけ生きることを示唆します</p>
537+
ライフタイム注釈は、<code>first</code><code>second</code>の参照がどちらもこのジェネリックなライフタイムと同じだけ生きることを示唆します</p>
538538
<!--
539539
### Lifetime Annotations in Function Signatures
540540
-->
@@ -548,10 +548,10 @@ <h3><a class="header" href="#関数シグニチャにおけるライフタイム
548548
We’ll name the lifetime `'a` and then add it to each reference, as shown in
549549
Listing 10-22.
550550
-->
551-
<p>さて、<code>longest</code>関数の文脈でライフタイム注釈を調査しましょう。ジェネリックな型引数同様、
552-
関数名と引数リストの間、山カッコの中にジェネリックなライフタイム引数を宣言する必要があります
553-
このシグニチャで表現したい制約は、引数の全参照と戻り値が同じライフタイムになることです
554-
ライフタイムを<code>'a</code>と名付け、それから各参照に追記します。リスト10-22に示したように</p>
551+
<p>さて、<code>longest</code>関数を例にライフタイム注釈を詳しく見ていきましょう。ジェネリックな型引数同様、
552+
関数名と引数リストの間の山カッコの中にジェネリックなライフタイム引数を宣言します
553+
このシグニチャで表現したい制約は、引数の全ての参照と戻り値が同じライフタイムを持つことです
554+
リスト10-22に示すように、ライフタイムを<code>'a</code>と名付け、それを各参照に付与します</p>
555555
<!--
556556
<span class="filename">Filename: src/main.rs</span>
557557
-->
@@ -573,7 +573,7 @@ <h3><a class="header" href="#関数シグニチャにおけるライフタイム
573573
specifying that all the references in the signature must have the same lifetime
574574
`'a`</span>
575575
-->
576-
<p><span class="caption">リスト10-22: シグニチャの全参照が同じライフタイム<code>'a</code>になると指定した<code>longest</code>関数の定義</span></p>
576+
<p><span class="caption">リスト10-22: シグニチャの全参照が同じライフタイム<code>'a</code>を持つと指定した<code>longest</code>関数の定義</span></p>
577577
<!--
578578
This code should compile and produce the result we want when we use it with the
579579
`main` function in Listing 10-20.
@@ -595,11 +595,11 @@ <h3><a class="header" href="#関数シグニチャにおけるライフタイム
595595
<p>これで関数シグニチャは、何らかのライフタイム<code>'a</code>に対して、関数は2つの引数を取り、
596596
どちらも少なくともライフタイム<code>'a</code>と同じだけ生きる文字列スライスであるとコンパイラに教えるようになりました。
597597
また、この関数シグニチャは、関数から返る文字列スライスも少なくともライフタイム<code>'a</code>と同じだけ生きると、
598-
コンパイラに教えています。これらの制約は、コンパイラに強制してほしいものです
598+
コンパイラに教えています。これらの制約は、まさに私たちがコンパイラに保証してほしかったものです
599599
この関数シグニチャでライフタイム引数を指定する時、渡されたり、返したりした、いかなる値のライフタイムも変更していないことを思い出してください。
600600
むしろ、借用チェッカーは、これらの制約を守らない値全てを拒否するべきと指定しています。
601-
<code>longest</code>関数は、正確に<code>x</code><code>y</code>の生存期間を知る必要はなく、何かのスコープが<code>'a</code>に代替され
602-
このシグニチャを満足することだけ知っている必要があることに注意してください</p>
601+
<code>longest</code>関数は、<code>x</code><code>y</code>の正確な生存期間を知っている必要はなく
602+
このシグニチャを満たすようなスコープを<code>'a</code>に代入できることを知っているだけであることに注意してください</p>
603603
<!--
604604
When annotating lifetimes in functions, the annotations go in the function
605605
signature, not in the function body. Rust can analyze the code within the
@@ -609,10 +609,10 @@ <h3><a class="header" href="#関数シグニチャにおけるライフタイム
609609
might be different each time the function is called. This is why we need to
610610
annotate the lifetimes manually.
611611
-->
612-
<p>関数でライフタイムを注釈する際、注釈は関数シグニチャに<ruby><rp>(</rp><rt>はま</rt><rp>)</rp></ruby>り、
613-
関数本体には嵌りません。コンパイラは、なんの助けもなく、関数内のコードを解析できます。しかしながら、
614-
関数に、関数外からの参照や、関数外への参照がある場合、コンパイラは引数や戻り値のライフタイムをそれだけで解決することはほとんど不可能になります
615-
ライフタイムは、関数が呼び出される度に異なる可能性があります。このために、手動でライフタイムを注釈する必要があるのです。</p>
612+
<p>関数にライフタイムを注釈するときは、注釈は関数の本体ではなくシグニチャに付与します。
613+
コンパイラは注釈がなくとも関数内のコードを解析できます。しかしながら、
614+
関数に関数外からの参照や関数外への参照がある場合、コンパイラが引数や戻り値のライフタイムを自力で解決することはほとんど不可能になります
615+
そのライフタイムは、関数が呼び出される度に異なる可能性があります。このために、手動でライフタイムを注釈する必要があるのです。</p>
616616
<!--
617617
When we pass concrete references to `longest`, the concrete lifetime that is
618618
substituted for `'a` is the part of the scope of `x` that overlaps with the
@@ -622,15 +622,15 @@ <h3><a class="header" href="#関数シグニチャにおけるライフタイム
622622
the returned reference will also be valid for the length of the smaller of the
623623
lifetimes of `x` and `y`.
624624
-->
625-
<p>具体的な参照を<code>longest</code>に渡すと、<code>'a</code>を代替する具体的なライフタイムは<code>y</code>のスコープと被さる<code>x</code>のスコープの一部になります
625+
<p>具体的な参照を<code>longest</code>に渡すと、<code>'a</code>に代入される具体的なライフタイムは<code>x</code>のスコープの一部であって<code>y</code>のスコープと重なる部分となります
626626
言い換えると、ジェネリックなライフタイム<code>'a</code>は、<code>x</code><code>y</code>のライフタイムのうち、小さい方に等しい具体的なライフタイムになるのです。
627627
返却される参照を同じライフタイム引数<code>'a</code>で注釈したので、返却される参照も<code>x</code><code>y</code>のライフタイムの小さい方と同じだけ有効になるでしょう。</p>
628628
<!--
629629
Let’s look at how the lifetime annotations restrict the `longest` function by
630630
passing in references that have different concrete lifetimes. Listing 10-23 is
631631
a straightforward example.
632632
-->
633-
<p>ライフタイム注釈が異なる具体的なライフタイムになる参照を渡すことで<code>longest</code>関数を制限する方法を見ましょう。
633+
<p>ライフタイム注釈が異なる具体的なライフタイムを持つ参照を渡すことで<code>longest</code>関数を制限する方法を見ましょう。
634634
リスト10-23は、率直な例です。</p>
635635
<!--
636636
<span class="filename">Filename: src/main.rs</span>
@@ -659,7 +659,7 @@ <h3><a class="header" href="#関数シグニチャにおけるライフタイム
659659
<span class="caption">Listing 10-23: Using the `longest` function with
660660
references to `String` values that have different concrete lifetimes</span>
661661
-->
662-
<p><span class="caption">リスト10-23: 異なる具体的なライフタイムの<code>String</code>値への参照で<code>longest</code>関数を使用する</span></p>
662+
<p><span class="caption">リスト10-23: 異なる具体的なライフタイムを持つ<code>String</code>値への参照で<code>longest</code>関数を使用する</span></p>
663663
<!--
664664
In this example, `string1` is valid until the end of the outer scope, `string2`
665665
is valid until the end of the inner scope, and `result` references something
@@ -724,7 +724,7 @@ <h3><a class="header" href="#関数シグニチャにおけるライフタイム
724724
this because we annotated the lifetimes of the function parameters and return
725725
values using the same lifetime parameter `'a`.
726726
-->
727-
<p>このエラーは、<code>result</code><code>println!</code>文に対して有効になるために<code>string2</code>が外側のスコープの終わりまで有効である必要があることを示しています。
727+
<p>このエラーは、<code>result</code><code>println!</code>文に対して有効であるためには<code>string2</code>が外側のスコープの終わりまで有効である必要があることを示しています。
728728
関数引数と戻り値のライフタイムを同じライフタイム引数<code>'a</code>で注釈したので、コンパイラはこのことを知っています。</p>
729729
<!--
730730
As humans, we can look at this code and see that `string1` is longer than
@@ -736,11 +736,11 @@ <h3><a class="header" href="#関数シグニチャにおけるライフタイム
736736
the lifetimes of the references passed in. Therefore, the borrow checker
737737
disallows the code in Listing 10-24 as possibly having an invalid reference.
738738
-->
739-
<p>人間からしたら、このコードを見て<code>string1</code><code>string2</code>よりも長いことが確認でき、
740-
故に<code>result</code><code>string1</code>への参照を含んでいます。まだ<code>string1</code>はスコープを抜けていないので、
741-
それでも<code>string1</code>への参照は<code>println!</code>にとって有効でしょう。ですが、コンパイラはこの場合、
739+
<p>人間からしたら、<code>string1</code><code>string2</code>よりも長く、それ故に<code>result</code><code>string1</code>への参照を含んでいることは
740+
コードから明らかです。まだ<code>string1</code>はスコープを抜けていないので、
741+
<code>string1</code>への参照は<code>println!</code>にとって有効でしょう。ですが、コンパイラはこの場合、
742742
参照が有効であると見なせません。<code>longest</code>関数から返ってくる参照のライフタイムは、
743-
渡した参照のうちの小さい方と同じだとコンパイラに指示しました。それ故に
743+
渡した参照のうちの小さい方と同じだとコンパイラに指示しました。したがって
744744
借用チェッカーは、リスト10-24のコードを無効な参照がある可能性があるとして許可しないのです。</p>
745745
<!--
746746
Try designing more experiments that vary the values and lifetimes of the
@@ -761,7 +761,7 @@ <h3><a class="header" href="#ライフタイムの観点で思考する" id="ラ
761761
string slice, we wouldn’t need to specify a lifetime on the `y` parameter. The
762762
following code will compile:
763763
-->
764-
<p>ライフタイム引数を指定する必要のある手段は、関数が行っていることによります。例えば、
764+
<p>何にライフタイム引数を指定する必要があるかは、関数が行っていることに依存します。例えば、
765765
<code>longest</code>関数の実装を最長の文字列スライスではなく、常に最初の引数を返すように変更したら、
766766
<code>y</code>引数に対してライフタイムを指定する必要はなくなるでしょう。以下のコードはコンパイルできます:</p>
767767
<!--
@@ -852,9 +852,10 @@ <h3><a class="header" href="#ライフタイムの観点で思考する" id="ラ
852852
enough information to allow memory-safe operations and disallow operations that
853853
would create dangling pointers or otherwise violate memory safety.
854854
-->
855-
<p>究極的にライフタイム記法は、関数のいろんな引数と戻り値のライフタイムを接続することに関するのです。
856-
一旦、繋がりができたら、メモリ安全な処理を許可するのに十分な情報がコンパイラにはあり、
857-
ダングリングポインタを生成するであろう処理を不認可し、さもなくばメモリ安全性を侵害するのです。</p>
855+
<p>究極的にライフタイム記法は、関数のいろんな引数と戻り値のライフタイムを接続することに関するものです。
856+
一旦それらが繋がれば、メモリ安全な処理を許可し、
857+
ダングリングポインタを生成したりメモリ安全性を侵害したりする処理を禁止するのに
858+
十分な情報をコンパイラは得たことになります。</p>
858859
<!--
859860
### Lifetime Annotations in Struct Definitions
860861
-->

0 commit comments

Comments
 (0)