88<!-- represents a certain number of `T` in sequence. But we don’t know how many -->
99<!-- there are, so the size is not known. -->
1010ほとんどの型はコンパイル時に知れる、バイト数で測った、サイズがあります。
11- 例えば 、 ` i32 ` 型は、32ビット(4バイト)というサイズです。
11+ たとえば 、 ` i32 ` 型は、32ビット(4バイト)というサイズです。
1212しかしながら、表現のためには便利であってもサイズが定まっていない型が存在します。
13- そのような型を 「サイズ不定」又は 「動的サイズ」型と呼びます。
13+ そのような型を 「サイズ不定」または 「動的サイズ」型と呼びます。
1414一例を上げると ` [T] ` 型は 一定のサイズの` T ` のシーケンスを意味していますが、その要素数については規定されていないため、サイズは不定となります。
1515
1616<!-- Rust understands a few of these types, but they have some restrictions. There -->
1717<!-- are three: -->
1818Rustはいくつかのそのような型を扱うことができますが、それらには以下の様な3つの制約が存在します:
1919
2020<!-- 1. We can only manipulate an instance of an unsized type via a pointer. An ->
21- <!-- `&[T]` works just fine, but a `[T]` does not. -->
21+ <!-- `&[T]` works fine, but a `[T]` does not. -->
2222<!-- 2. Variables and arguments cannot have dynamically sized types. -->
2323<!-- 3. Only the last field in a `struct` may have a dynamically sized type; the -->
2424<!-- other fields must not. Enum variants must not have dynamically sized types as -->
2525<!-- data. -->
26- 1 . サイズ不定型はポインタを通してのみ操作することができます、たとえば、 ` &[T] ` は大丈夫ですが、 ` [T] ` はそうではありません。
26+ 1 . サイズ不定型はポインタを通してのみ操作できます。
27+ たとえば、 ` &[T] ` は大丈夫ですが、 ` [T] ` はそうではありません。
27282 . 変数や引数は動的なサイズを持つことはできません。
28- 3 . ` struct ` の最後のフィールドのみ、動的なサイズを持つことが許されます、その他のフィールドはサイズが不定であってはなりません。
29+ 3 . ` struct ` の最後のフィールドのみ、動的なサイズを持つことが許されます。
30+ その他のフィールドはサイズが不定であってはなりません。
2931 また、Enumのバリアントはデータとして動的なサイズの型を持つ事はできません。
3032
3133<!-- So why bother? Well, because `[T]` can only be used behind a pointer, if we -->
3234<!-- didn’t have language support for unsized types, it would be impossible to write -->
3335<!-- this: -->
34- なぜこんなにややこしいのでしょうか? これは、 ` [T] ` はポインタを通してのみ操作可能であるため、
35- もし言語がサイズ不定型をサポートしていなかった場合、以下のようなコードを書くことは不可能となります:
36+ なぜこんなにややこしいのでしょうか?
37+ これは、 ` [T] ` はポインタを通してのみ操作可能であるため、 もし言語がサイズ不定型をサポートしていなかった場合、以下のようなコードを書くことは不可能となります:
3638
3739``` rust,ignore
3840impl Foo for str {
@@ -46,7 +48,7 @@ impl<T> Foo for [T] {
4648```
4749
4850<!-- Instead, you would have to write: -->
49- このように書く代わりに、以下のように書く必要があることになるでしょう :
51+ このように書く代わりに、以下のように書くことになるでしょう :
5052
5153``` rust,ignore
5254impl Foo for &str {
@@ -57,7 +59,7 @@ impl Foo for &str {
5759<!-- some point, there are some bugs to fix first) user-defined custom smart -->
5860<!-- pointers, can use this `impl`. -->
5961このように書いたとすると、このコードは [ 参照] [ ref ] に対してのみ動作するようになり、他のポインタ型に対しては動作しないことになります。
60- ` imp for str ` のように書くことで、すべてのポインタ、ユーザーの定義した独自のスマートポインタ( いくつかの点についてバグがあるので、それを先ずは直さなくてはなりませんが) もこの ` impl ` を利用可能になります。
62+ ` imp for str ` のように書くことで、すべてのポインタ、ユーザーの定義した独自のスマートポインタ( いくつかの点についてバグがあるので、それをまずは直さなくてはなりませんが) もこの ` impl ` を利用可能になります。
6163
6264[ ref ] : references-and-borrowing.html
6365
@@ -76,5 +78,6 @@ struct Foo<T: ?Sized> {
7678<!-- This `?`, read as “T may be `Sized`”, means that this bound is special: it -->
7779<!-- lets us match more kinds, not less. It’s almost like every `T` implicitly has -->
7880<!-- `T: Sized`, and the `?` undoes this default. -->
79- ` ? ` は 「Tは ` Sized ` かもしれない」と読みます、これは ` ? ` が特別な境界: より小さいカインドとマッチするのではなく、より大きいカインドとマッチする ということを意味しています。
80- これは、すべての ` T ` は暗黙的に ` T : Sized ` という制限がかけられていて、 ` ? ` はその制限を解除するというようなものです。
81+ ` ? ` は 「Tは ` Sized ` かもしれない」と読みます。
82+ これは ` ? ` が特別な境界であり、より小さいカインドとマッチするのではなく、より大きいカインドとマッチする ことを意味しています。
83+ これは、すべての ` T ` は暗黙的に ` T : Sized ` という制限がかけられていて、 ` ? ` はその制限を解除するようなものです。
0 commit comments