Skip to content

Commit 43ab5b7

Browse files
author
Ken Kawamoto
authored
Reflect recent changes to the book (#20)
1 parent 6c58d44 commit 43ab5b7

10 files changed

+200
-196
lines changed

docs/exotic-sizes.html

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -178,23 +178,23 @@ <h1><a class="header" href="#動的サイズの型dst-dynamically-sized-type" id
178178
<!--
179179
There are two major DSTs exposed by the language: trait objects, and slices.
180180
-->
181-
<p>言語が提供する DST のうち重要なものが 2 つあります。trait オブジェクトとスライスです</p>
181+
<p>言語が提供する DST のうち重要なものが 2 つあります。トレイトオブジェクトとスライスです</p>
182182
<!--
183183
A trait object represents some type that implements the traits it specifies.
184184
The exact original type is *erased* in favor of runtime reflection
185185
with a vtable containing all the information necessary to use the type.
186186
This is the information that completes a trait object: a pointer to its vtable.
187187
-->
188-
<p>Trait オブジェクトは、それが指す Trait を実装するある型を表現します
188+
<p>トレイトオブジェクトは、それが指すトレイトを実装するある型を表現します
189189
元となった型は消去されますが、vtable とリフレクションとによって実行時にはその型を利用することができます。
190190
つまり、Trait オブジェクトを補完する情報とは vtable へのポインタとなります。</p>
191191
<!--
192192
A slice is simply a view into some contiguous storage -- typically an array or
193193
`Vec`. The information that completes a slice is just the number of elements
194194
it points to.
195195
-->
196-
<p>スライスとは、単純にある連続したスペース(通常はアレイか <code>Vec</code>)のビューです。
197-
スライスを補完する情報とは、単にポインタが指すエレメントの数です</p>
196+
<p>スライスとは、単純にある連続したスペース(通常は配列か <code>Vec</code>)のビューです。
197+
スライスを補完する情報とは、単にポインタが指す要素の数です</p>
198198
<!--
199199
Structs can actually store a single DST directly as their last field, but this
200200
makes them a DST as well:
@@ -231,8 +231,8 @@ <h1><a class="header" href="#サイズが-0-の型zst-zero-sized-type" id="サ
231231
// すべてのフィールドのサイズがない = サイズ 0
232232
struct Baz {
233233
foo: Foo,
234-
qux: (), // empty tuple has no size
235-
baz: [u8; 0], // empty array has no size
234+
qux: (), // 空のタプルにはサイズがありません
235+
baz: [u8; 0], // 空の配列にはサイズがありません
236236
}
237237
#}</code></pre></pre>
238238
<!--
@@ -244,7 +244,7 @@ <h1><a class="header" href="#サイズが-0-の型zst-zero-sized-type" id="サ
244244
type, so anything that loads it can just produce it from the aether -- which is
245245
also a no-op since it doesn't occupy any space.
246246
-->
247-
<p>サイズ 0 の型(ZST)は、当然ながら、それ自体ではほとんど価値があありません
247+
<p>サイズ 0 の型(ZST)は、当然ながら、それ自体ではほとんど価値がありません
248248
しかし、多くの興味深いレイアウトの選択肢と組み合わせると、ZST が潜在的に役に立つことがいろいろな
249249
ケースで明らかになります。Rust は、ZST を生成したり保存したりするオペレーションが no-op に
250250
還元できることを理解しています。
@@ -261,7 +261,7 @@ <h1><a class="header" href="#サイズが-0-の型zst-zero-sized-type" id="サ
261261
-->
262262
<p>究極の ZST の利用法として、Set と Map を考えてみましょう。
263263
<code>Map&lt;Key, Value&gt;</code> があるときに、<code>Set&lt;Key&gt;</code><code>Map&lt;Key, UselessJunk&gt;</code>
264-
簡単なラッパーとして実装することはよくあります
264+
簡単なラッパとして実装することはよくあります
265265
多くの言語では、UselessJunk のスペースを割り当てる必要があるでしょうし、
266266
結果的に使わない UselessJunk を保存したり読み込んだりする必要もあるでしょう。
267267
こういったことが不要であると示すのはコンパイラにとっては難しい仕事でしょう。</p>
@@ -283,7 +283,7 @@ <h1><a class="header" href="#サイズが-0-の型zst-zero-sized-type" id="サ
283283
may return `nullptr` when a zero-sized allocation is requested, which is
284284
indistinguishable from out of memory.
285285
-->
286-
<p>安全なコードは ZST について心配する必要はありませんが、<em>危険な</em> コードは
286+
<p>安全なコードは ZST について心配する必要はありませんが、<em>アンセーフな</em>コードは
287287
サイズ 0 の型を使った時の結果について注意しなくてはなりません。
288288
特に、ポインタのオフセットは no-op になることや、
289289
(Rust のデフォルトである jemalloc を含む)標準的なメモリアロケータは、
@@ -321,7 +321,7 @@ <h1><a class="header" href="#空の型" id="空の型">空の型</a></h1>
321321
特定のケースでは絶対に失敗しないことがわかっているとします。
322322
<code>Result&lt;T, Void&gt;</code> を返すことで、この事実を型レベルで伝えることが可能です。
323323
Void 型の値を提供することはできないので、この Result は Err に<em>なり得ないと静的にわかります</em>
324-
そのため、この API の利用者は、自信を持って Result を unwrap することができます</p>
324+
そのため、この API の利用者は、自信を持って Result をアンラップすることができます</p>
325325
<!--
326326
In principle, Rust can do some interesting analyses and optimizations based
327327
on this fact. For instance, `Result<T, Void>` could be represented as just `T`,
@@ -343,18 +343,18 @@ <h1><a class="header" href="#空の型" id="空の型">空の型</a></h1>
343343
the ability to be confident that certain situations are statically impossible.
344344
-->
345345
<p>ただし、どちらの例も現時点では動きません。
346-
つまり、Void 型による利点は、静的な解析によて、特定の状況が起こらないと確実に言えることだけです。</p>
346+
つまり、Void 型による利点は、静的な解析によって、特定の状況が起こらないと確実に言えることだけです。</p>
347347
<!--
348348
One final subtle detail about empty types is that raw pointers to them are
349349
actually valid to construct, but dereferencing them is Undefined Behavior
350350
because that doesn't actually make sense. That is, you could model C's `void *`
351351
type with `*const Void`, but this doesn't necessarily gain anything over using
352352
e.g. `*const ()`, which *is* safe to randomly dereference.
353353
-->
354-
<p>最後に細かいことを一つ。空の型を指す生のポインタを構成することは有効ですが
355-
それをデリファレンスすることは、意味がないので、未定義の挙動となります。
354+
<p>最後に細かいことを一つ。空の型を指す生ポインタを構成することは有効ですが
355+
それを参照外しすることは、意味がないので、未定義の挙動となります。
356356
つまり、C における <code>void *</code> と同じような意味で <code>*const Void</code> を使うこと出来ますが、
357-
これは、<em>安全に</em>デリファレンスできる型(例えば <code>*const ()</code>)と比べて何も利点はありません。</p>
357+
これは、<em>安全に</em>参照外しできる型(例えば <code>*const ()</code>)と比べて何も利点はありません。</p>
358358

359359
</main>
360360

docs/meet-safe-and-unsafe.html

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ <h1><a class="header" href="#安全と危険のご紹介" id="安全と危険の
199199
-->
200200
<p>安全な Rust は真の Rust プログラミング言語です。もしあなたが安全な Rust だけでコードを書くなら、
201201
型安全やメモリ安全性などを心配する必要はないでしょう。
202-
null ポインタや dangling ポインタ、馬鹿げた「未定義な挙動」などに我慢する必要はないのです。</p>
202+
ヌルポインタやダングリングポインタ、馬鹿げた「未定義な挙動」などに我慢する必要はないのです。</p>
203203
<!--
204204
*That's totally awesome.*
205205
-->
@@ -241,9 +241,9 @@ <h1><a class="header" href="#安全と危険のご紹介" id="安全と危険の
241241
* Mutate statics
242242
-->
243243
<ul>
244-
<li>生のポインタが指す値を得る</li>
245-
<li><code>unsafe</code> な関数を呼ぶ(C 言語で書かれた関数や、intrinsics、生のアロケータなど)</li>
246-
<li><code>unsafe</code> な trait を実装する</li>
244+
<li>生ポインタが指す値を得る</li>
245+
<li><code>unsafe</code> な関数を呼ぶ(C 言語で書かれた関数や、intrinsic、生のアロケータなど)</li>
246+
<li><code>unsafe</code> なトレイトを実装する</li>
247247
<li>静的な構造体を変更する</li>
248248
</ul>
249249
<!--
@@ -276,15 +276,15 @@ <h1><a class="header" href="#安全と危険のご紹介" id="安全と危険の
276276
* Causing a [data race][race]
277277
-->
278278
<ul>
279-
<li>null ポインタや dangling ポインタのデリファレンス</li>
279+
<li>ヌルポインタやダングリングポインタの参照外し</li>
280280
<li><a href="uninitialized.html">未初期化のメモリ</a> を読む</li>
281281
<li><a href="references.html">ポインタエイリアスルール</a> を破る</li>
282282
<li>不正なプリミティブな値を生成する
283283
<ul>
284-
<li>dangling リファレンス、null リファレンス</li>
284+
<li>ダングリング参照、ヌル参照</li>
285285
<li>0 でも 1 でもない <code>bool</code></li>
286286
<li>未定義な <code>enum</code> 判別式</li>
287-
<li>[0x0, 0xD7FF] と [0xE000, 0x10FFFF] 範囲外の <code>char</code> </li>
287+
<li>[0x0, 0xD7FF] と [0xE000, 0x10FFFF] 範囲外の <code>char</code></li>
288288
<li>utf8 ではない <code>str</code></li>
289289
</ul>
290290
</li>
@@ -300,9 +300,9 @@ <h1><a class="header" href="#安全と危険のご紹介" id="安全と危険の
300300
intrinsics that make special assumptions about how code can be optimized.
301301
-->
302302
<p>これだけです。これが、Rust が防ぐ「未定義な挙動」の原因です。
303-
もちろん、危険な関数や trait が「未定義な挙動」を起こさないための他の制約を作り出す事は可能ですが、
303+
もちろん、危険な関数やトレイトが「未定義な挙動」を起こさないための他の制約を作り出す事は可能ですが、
304304
そういった制約が破られた場合、たいてい上の問題のどれかを引き起こします。
305-
コンパイラ intrinsics がその他の制約を生み出し、コードの最適化に関する特別な仮定をすることもあります。</p>
305+
コンパイラ intrinsic がその他の制約を生み出し、コードの最適化に関する特別な仮定をすることもあります。</p>
306306
<!--
307307
Rust is otherwise quite permissive with respect to other dubious operations.
308308
Rust considers it "safe" to:
@@ -333,7 +333,7 @@ <h1><a class="header" href="#安全と危険のご紹介" id="安全と危険の
333333
these problems are considered impractical to categorically prevent.
334334
-->
335335
<p>とはいえ、こういうことをできてしまうプログラムは<em>恐らく</em>間違っていると言えるでしょう。
336-
Rust はこういった事をおきにくくするためのツールをたくさん提供します
336+
Rust はこういった事を起きにくくするためのツールをたくさん提供します
337337
しかし、これらの問題を完全に防ぐのは現実的ではないと考えられています。</p>
338338

339339
</main>

docs/other-reprs.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,8 @@ <h1><a class="header" href="#repru8-repru16-repru32-repru64" id="repru8-repru16-
213213
On non-C-like enums, this will inhibit certain optimizations like the null-
214214
pointer optimization.
215215
-->
216-
<p>C っぽくない enum (訳注:要素がパラメタをとるような enum)に <code>repr(u*)</code> を適用すると、
217-
null ポインタ最適化のようなある種の最適化ができなくなります</p>
216+
<p>C っぽくない enum (訳注:要素がパラメータをとるような enum)に <code>repr(u*)</code> を適用すると、
217+
ヌルポインタ最適化のようなある種の最適化ができなくなります</p>
218218
<!--
219219
These reprs have no effect on a struct.
220220
-->
@@ -228,7 +228,7 @@ <h1><a class="header" href="#reprpacked" id="reprpacked">repr(packed)</a></h1>
228228
byte. This may improve the memory footprint, but will likely have other negative
229229
side-effects.
230230
-->
231-
<p><code>repr(packed)</code> を使うと Rust はパディングを一切取り除き、すべてを byte 単位にアラインします
231+
<p><code>repr(packed)</code> を使うと Rust はパディングを一切取り除き、すべてをバイト単位にアラインします
232232
メモリ使用量は改善しますが、悪い副作用を引き起こす可能性が高いです。</p>
233233
<!--
234234
In particular, most architectures *strongly* prefer values to be aligned. This
@@ -238,17 +238,17 @@ <h1><a class="header" href="#reprpacked" id="reprpacked">repr(packed)</a></h1>
238238
However if you take a reference to a packed field, it's unlikely that the
239239
compiler will be able to emit code to avoid an unaligned load.
240240
-->
241-
<p>特にほとんどのアークテクチャは、値がアラインされていることを<em>強く</em>望んでいます。
241+
<p>特にほとんどのアーキテクチャは、値がアラインされていることを<em>強く</em>望んでいます。
242242
つまりアラインされていないデータの読み込みにはペナルティがある(x86)かもしれませんし、
243243
失敗する(いくつかの ARM チップ)かもしれません。
244244
パックされたフィールドを直接読んだり書いたりするという単純なケースでは、
245245
コンパイラがシフトやマスクを駆使してアラインメントの問題を隠してくれるかもしれません。
246-
しかし、パックされたフィールドへのリファレンスを扱う場合には、アラインされてない読み込みを避けるような
246+
しかし、パックされたフィールドへの参照を扱う場合には、アラインされてない読み込みを避けるような
247247
コードをコンパイラが生成することは期待できないでしょう。</p>
248248
<p><strong><a href="https://github.com/rust-lang/rust/issues/27060">Rust 1.0 時点では、これは未定義な挙動です。</a></strong></p>
249249
<p><code>repr(packed)</code> は気軽に使えるものではありません。
250250
極端な要求に応えようとしているのでない限り、使うべきではありません。</p>
251-
<p>この repr は <code>repr(C)</code><code>repr(rust)</code> の就職誌として使えます</p>
251+
<p>この repr は <code>repr(C)</code><code>repr(rust)</code> の修飾子として使えます</p>
252252

253253
</main>
254254

docs/ownership.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ <h1><a class="header" href="#所有権とライフタイム" id="所有権とラ
185185
let s = format!(&quot;{}&quot;, data);
186186

187187
// しまった! この関数内でしか存在しないオブジェクトへの
188-
// リファレンスを返してしまった!
188+
// 参照を返してしまった!
189189
// ダングリングポインタだ! メモリ解放後の参照だ! うわーー!
190190
// (このコードは Rust ではコンパイルエラーになります)
191191
&amp;s
@@ -217,12 +217,12 @@ <h1><a class="header" href="#所有権とライフタイム" id="所有権とラ
217217
because ensuring pointers are always valid is much more complicated than this.
218218
For instance in this code,
219219
-->
220-
<p>もちろん、リファレンスが参照先のスコープから逃げ出していないことを検証することよりも
220+
<p>もちろん、参照が参照先のスコープから逃げ出していないことを検証することよりも
221221
所有権に関する Rust の話はもっともっと複雑です。
222-
ポインタがつねに有効であることを証明するのは、もっともっと複雑だからです。
222+
ポインタが常に有効であることを証明するのは、もっともっと複雑だからです。
223223
例えばこのコードを見てみましょう。</p>
224224
<pre><code class="language-rust ignore">let mut data = vec![1, 2, 3];
225-
// 内部データのリファレンスを取る
225+
// 内部データの参照を取る
226226
let x = &amp;data[0];
227227

228228
// しまった! `push` によって `data` の格納先が再割り当てされてしまった。
@@ -241,7 +241,7 @@ <h1><a class="header" href="#所有権とライフタイム" id="所有権とラ
241241
<p>単純なスコープ解析では、このバグは防げません。
242242
<code>data</code> のライフタイムは十分に長いからです。
243243
問題は、その参照を保持している間に、参照先が<em>変わって</em>しまったことです。
244-
Rust でリファレンスを取ると、参照先とその所有者がフリーズされるのは、こういう理由なのです。</p>
244+
Rust で参照を取ると、参照先とその所有者がフリーズされるのは、こういう理由なのです。</p>
245245

246246
</main>
247247

0 commit comments

Comments
 (0)