Skip to content

Commit 8de8c46

Browse files
authored
Merge pull request #178 from tatsuya6502/unsized-types-1.9
4.31. Unsized Types (1.9)
2 parents 8386fda + f1d7391 commit 8de8c46

File tree

2 files changed

+14
-23
lines changed

2 files changed

+14
-23
lines changed

1.9/ja/book/unsized-types.md

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,33 @@
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: -->
1818
Rustはいくつかのそのような型を扱うことができますが、それらには以下の様な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]` はそうではありません。
2728
2. 変数や引数は動的なサイズを持つことはできません。
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
3840
impl 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
5254
impl 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` という制限がかけられていて、 `?` はその制限を解除するようなものです。

diff-1.6.0..1.9.0/src/doc/book/unsized-types.md

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)