@@ -41,7 +41,7 @@ DST を指すポインタは結果的に、普通のポインタと DST を補
4141There are two major DSTs exposed by the language: trait objects, and slices.
4242-->
4343
44- 言語が提供する DST のうち重要なものが 2 つあります。trait オブジェクトとスライスです 。
44+ 言語が提供する DST のうち重要なものが 2 つあります。トレイトオブジェクトとスライスです 。
4545
4646<!--
4747A trait object represents some type that implements the traits it specifies.
@@ -50,7 +50,7 @@ with a vtable containing all the information necessary to use the type.
5050This is the information that completes a trait object: a pointer to its vtable.
5151-->
5252
53- Trait オブジェクトは、それが指す Trait を実装するある型を表現します 。
53+ トレイトオブジェクトは、それが指すトレイトを実装するある型を表現します 。
5454元となった型は消去されますが、vtable とリフレクションとによって実行時にはその型を利用することができます。
5555つまり、Trait オブジェクトを補完する情報とは vtable へのポインタとなります。
5656
@@ -60,8 +60,8 @@ A slice is simply a view into some contiguous storage -- typically an array or
6060it points to.
6161-->
6262
63- スライスとは、単純にある連続したスペース(通常はアレイか ` Vec ` )のビューです。
64- スライスを補完する情報とは、単にポインタが指すエレメントの数です 。
63+ スライスとは、単純にある連続したスペース(通常は配列か ` Vec ` )のビューです。
64+ スライスを補完する情報とは、単にポインタが指す要素の数です 。
6565
6666<!--
6767Structs can actually store a single DST directly as their last field, but this
@@ -105,8 +105,8 @@ struct Foo; // フィールドがない = サイズ 0
105105// すべてのフィールドのサイズがない = サイズ 0
106106struct Baz {
107107 foo : Foo ,
108- qux : (), // empty tuple has no size
109- baz : [u8 ; 0 ], // empty array has no size
108+ qux : (), // 空のタプルにはサイズがありません
109+ baz : [u8 ; 0 ], // 空の配列にはサイズがありません
110110}
111111```
112112
@@ -120,7 +120,7 @@ type, so anything that loads it can just produce it from the aether -- which is
120120also a no-op since it doesn't occupy any space.
121121-->
122122
123- サイズ 0 の型(ZST)は、当然ながら、それ自体ではほとんど価値があありません 。
123+ サイズ 0 の型(ZST)は、当然ながら、それ自体ではほとんど価値がありません 。
124124しかし、多くの興味深いレイアウトの選択肢と組み合わせると、ZST が潜在的に役に立つことがいろいろな
125125ケースで明らかになります。Rust は、ZST を生成したり保存したりするオペレーションが no-op に
126126還元できることを理解しています。
@@ -139,7 +139,7 @@ the compiler.
139139
140140究極の ZST の利用法として、Set と Map を考えてみましょう。
141141` Map<Key, Value> ` があるときに、` Set<Key> ` を ` Map<Key, UselessJunk> ` の
142- 簡単なラッパーとして実装することはよくあります 。
142+ 簡単なラッパとして実装することはよくあります 。
143143多くの言語では、UselessJunk のスペースを割り当てる必要があるでしょうし、
144144結果的に使わない UselessJunk を保存したり読み込んだりする必要もあるでしょう。
145145こういったことが不要であると示すのはコンパイラにとっては難しい仕事でしょう。
@@ -165,7 +165,7 @@ may return `nullptr` when a zero-sized allocation is requested, which is
165165indistinguishable from out of memory.
166166-->
167167
168- 安全なコードは ZST について心配する必要はありませんが、* 危険な * コードは
168+ 安全なコードは ZST について心配する必要はありませんが、* アンセーフな * コードは
169169サイズ 0 の型を使った時の結果について注意しなくてはなりません。
170170特に、ポインタのオフセットは no-op になることや、
171171(Rust のデフォルトである jemalloc を含む)標準的なメモリアロケータは、
@@ -208,7 +208,7 @@ this would require providing a value of type `Void`.
208208特定のケースでは絶対に失敗しないことがわかっているとします。
209209` Result<T, Void> ` を返すことで、この事実を型レベルで伝えることが可能です。
210210Void 型の値を提供することはできないので、この Result は Err に* なり得ないと静的にわかります* 。
211- そのため、この API の利用者は、自信を持って Result を unwrap することができます 。
211+ そのため、この API の利用者は、自信を持って Result をアンラップすることができます 。
212212
213213<!--
214214In principle, Rust can do some interesting analyses and optimizations based
@@ -236,7 +236,7 @@ the ability to be confident that certain situations are statically impossible.
236236-->
237237
238238ただし、どちらの例も現時点では動きません。
239- つまり、Void 型による利点は、静的な解析によて 、特定の状況が起こらないと確実に言えることだけです。
239+ つまり、Void 型による利点は、静的な解析によって 、特定の状況が起こらないと確実に言えることだけです。
240240
241241<!--
242242One final subtle detail about empty types is that raw pointers to them are
@@ -246,10 +246,10 @@ type with `*const Void`, but this doesn't necessarily gain anything over using
246246e.g. `*const ()`, which *is* safe to randomly dereference.
247247-->
248248
249- 最後に細かいことを一つ。空の型を指す生のポインタを構成することは有効ですが 、
250- それをデリファレンスすることは 、意味がないので、未定義の挙動となります。
249+ 最後に細かいことを一つ。空の型を指す生ポインタを構成することは有効ですが 、
250+ それを参照外しすることは 、意味がないので、未定義の挙動となります。
251251つまり、C における ` void * ` と同じような意味で ` *const Void ` を使うこと出来ますが、
252- これは、* 安全に* デリファレンスできる型 (例えば ` *const () ` )と比べて何も利点はありません。
252+ これは、* 安全に* 参照外しできる型 (例えば ` *const () ` )と比べて何も利点はありません。
253253
254254
255255[ dst-issue ] : https://github.com/rust-lang/rust/issues/26403
0 commit comments