Skip to content

Commit a18f069

Browse files
committed
generate
1 parent 5ea2f9c commit a18f069

File tree

1 file changed

+57
-24
lines changed

1 file changed

+57
-24
lines changed

public/1.6/book/box-syntax-and-patterns.html

Lines changed: 57 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1.0">
66
<meta name="generator" content="rustdoc">
7-
<title>Box Syntax and Patterns</title>
7+
<title>Box構文とパターン</title>
88

99
<link rel="stylesheet" type="text/css" href="rustbook.css">
1010

@@ -185,11 +185,18 @@
185185
<div id='page'>
186186

187187

188-
<h1 class="title">Box Syntax and Patterns</h1>
189-
<p>Currently the only stable way to create a <code>Box</code> is via the <code>Box::new</code> method.
190-
Also it is not possible in stable Rust to destructure a <code>Box</code> in a match
191-
pattern. The unstable <code>box</code> keyword can be used to both create and destructure
192-
a <code>Box</code>. An example usage would be:</p>
188+
<h1 class="title">Box構文とパターン</h1>
189+
<!-- % Box Syntax and Patterns -->
190+
191+
<!-- Currently the only stable way to create a `Box` is via the `Box::new` method. -->
192+
193+
<!-- Also it is not possible in stable Rust to destructure a `Box` in a match -->
194+
195+
<!-- pattern. The unstable `box` keyword can be used to both create and destructure -->
196+
197+
<!-- a `Box`. An example usage would be: -->
198+
199+
<p>今のところ、安定版において <code>Box</code> を作成する唯一の方法は <code>Box::new</code> メソッドです。安定版のRustではパターンマッチで <code>Box</code> を分解することもできません。不安定版の <code>box</code> キーワードは <code>Box</code> の作成と分解の両方に使えます。使い方は以下の通りです。</p>
193200
<span class='rusttest'>#![feature(box_syntax, box_patterns)]
194201

195202
fn main() {
@@ -226,13 +233,22 @@ <h1 class="title">Box Syntax and Patterns</h1>
226233
}
227234
}</pre>
228235

229-
<p>Note that these features are currently hidden behind the <code>box_syntax</code> (box
230-
creation) and <code>box_patterns</code> (destructuring and pattern matching) gates
231-
because the syntax may still change in the future.</p>
236+
<!-- Note that these features are currently hidden behind the `box_syntax` (box -->
237+
238+
<!-- creation) and `box_patterns` (destructuring and pattern matching) gates -->
232239

233-
<h1 id='returning-pointers' class='section-header'><a href='#returning-pointers'>Returning Pointers</a></h1>
234-
<p>In many languages with pointers, you&#39;d return a pointer from a function
235-
so as to avoid copying a large data structure. For example:</p>
240+
<!-- because the syntax may still change in the future. -->
241+
242+
<p>注記: 将来的にこの構文は変わる可能性があるため、現時点でこれらのフィーチャは <code>box_syntax</code> (boxの作成)、 <code>box_patterns</code> (分解とパターンマッチ)を明示しなければ使えません。</p>
243+
244+
<!-- # Returning Pointers -->
245+
246+
<h1 id='ポインタ返し' class='section-header'><a href='#ポインタ返し'>ポインタ返し</a></h1>
247+
<!-- In many languages with pointers, you'd return a pointer from a function -->
248+
249+
<!-- so as to avoid copying a large data structure. For example: -->
250+
251+
<p>ポインタを持つ多くのプログラミング言語では、巨大なデータ構造のコピーを避けるため、関数からポインタを返してきました。例えば以下のように書くことができます。</p>
236252
<span class='rusttest'>struct BigStruct {
237253
one: i32,
238254
two: i32,
@@ -275,10 +291,15 @@ <h1 id='returning-pointers' class='section-header'><a href='#returning-pointers'
275291
<span class='kw'>let</span> <span class='ident'>y</span> <span class='op'>=</span> <span class='ident'>foo</span>(<span class='ident'>x</span>);
276292
}</pre>
277293

278-
<p>The idea is that by passing around a box, you&#39;re only copying a pointer, rather
279-
than the hundred <code>i32</code>s that make up the <code>BigStruct</code>.</p>
294+
<!-- The idea is that by passing around a box, you're only copying a pointer, rather -->
295+
296+
<!-- than the hundred `i32`s that make up the `BigStruct`. -->
280297

281-
<p>This is an antipattern in Rust. Instead, write this:</p>
298+
<p>考え方としては、boxで渡すことで <code>BigStruct</code> を構成する100個の <code>i32</code> の代わりにポインタのみのコピーで済む、というものです。</p>
299+
300+
<!-- This is an antipattern in Rust. Instead, write this: -->
301+
302+
<p>これはRustではアンチパターンです。代わりに以下のように書きます。</p>
282303
<span class='rusttest'>#![feature(box_syntax)]
283304

284305
struct BigStruct {
@@ -325,17 +346,29 @@ <h1 id='returning-pointers' class='section-header'><a href='#returning-pointers'
325346
<span class='kw'>let</span> <span class='ident'>y</span>: <span class='ident'>Box</span><span class='op'>&lt;</span><span class='ident'>BigStruct</span><span class='op'>&gt;</span> <span class='op'>=</span> <span class='kw'>box</span> <span class='ident'>foo</span>(<span class='ident'>x</span>);
326347
}</pre>
327348

328-
<p>This gives you flexibility without sacrificing performance.</p>
349+
<!-- This gives you flexibility without sacrificing performance. -->
350+
351+
<p>このように書くことでパフォーマンスを犠牲にすることなく、柔軟性を確保することができます。</p>
352+
353+
<!-- You may think that this gives us terrible performance: return a value and then -->
354+
355+
<!-- immediately box it up ?! Isn't this pattern the worst of both worlds? Rust is -->
356+
357+
<!-- smarter than that. There is no copy in this code. `main` allocates enough room -->
358+
359+
<!-- for the `box`, passes a pointer to that memory into `foo` as `x`, and then -->
360+
361+
<!-- `foo` writes the value straight into the `Box<T>`. -->
362+
363+
<p>このコードはひどいパフォーマンス低下をもたらすと感じるかもしれません。値を返して即座にboxに入れるなんて?! このパターンは悪いところどりになっているのでは? Rustはもう少し賢いため、このコードでコピーは発生しません。 <code>main</code> 内では <code>box</code> のために十分なメモリ領域を確保し、そのメモリへのポインタを <code>foo</code><code>x</code> として渡します。 <code>foo</code> はその値を直接 <code>Box&lt;T&gt;</code> (訳注: すなわち <code>y</code> )の中に書き込みます。</p>
364+
365+
<!-- This is important enough that it bears repeating: pointers are not for -->
366+
367+
<!-- optimizing returning values from your code. Allow the caller to choose how they -->
329368

330-
<p>You may think that this gives us terrible performance: return a value and then
331-
immediately box it up ?! Isn&#39;t this pattern the worst of both worlds? Rust is
332-
smarter than that. There is no copy in this code. <code>main</code> allocates enough room
333-
for the <code>box</code>, passes a pointer to that memory into <code>foo</code> as <code>x</code>, and then
334-
<code>foo</code> writes the value straight into the <code>Box&lt;T&gt;</code>.</p>
369+
<!-- want to use your output. -->
335370

336-
<p>This is important enough that it bears repeating: pointers are not for
337-
optimizing returning values from your code. Allow the caller to choose how they
338-
want to use your output.</p>
371+
<p>重要なことなので繰り返しますが、ポインタを戻り値の最適化のために使うべきではありません。呼び出し側が戻り値をどのように使うかを選択できるようにしましょう。</p>
339372

340373
<script type="text/javascript">
341374
window.playgroundUrl = "https://play.rust-lang.org";

0 commit comments

Comments
 (0)