diff --git a/doc/po/ja/complement-cheatsheet.md.po b/doc/po/ja/complement-cheatsheet.md.po new file mode 100644 index 00000000000..5c13cd20c3d --- /dev/null +++ b/doc/po/ja/complement-cheatsheet.md.po @@ -0,0 +1,152 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" +"PO-Revision-Date: 2014-01-13 12:01+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Plain text +#: doc/complement-cheatsheet.md:13 +#, fuzzy +#| msgid "" +#| "~~~~ let x: f64 = 4.0; let y: uint = x as uint; assert!(y == 4u); ~~~~" +msgid "~~~ let x: int = 42; let y: ~str = x.to_str(); ~~~" +msgstr "" +"~~~~\n" +"let x: f64 = 4.0;\n" +"let y: uint = x as uint;\n" +"assert!(y == 4u);\n" +"~~~~" + +#. type: Plain text +#: doc/complement-cheatsheet.md:17 +#, fuzzy +#| msgid "" +#| "[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz [win-exe]: " +#| "http://static.rust-lang.org/dist/rust-0.7-install.exe" +msgid "" +"Use [`FromStr`](http://static.rust-lang.org/doc/master/std/from_str/trait." +"FromStr.html), and its helper function, [`from_str`](http://static.rust-lang." +"org/doc/master/std/from_str/fn.from_str.html)." +msgstr "" +"[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz\n" +"[win-exe]: http://static.rust-lang.org/dist/rust-0.7-install.exe" + +#. type: Plain text +#: doc/complement-cheatsheet.md:22 +#, fuzzy +#| msgid "" +#| "~~~~ let x: f64 = 4.0; let y: uint = x as uint; assert!(y == 4u); ~~~~" +msgid "~~~ let x: Option = from_str(\"42\"); let y: int = x.unwrap(); ~~~" +msgstr "" +"~~~~\n" +"let x: f64 = 4.0;\n" +"let y: uint = x as uint;\n" +"assert!(y == 4u);\n" +"~~~~" + +#. type: Plain text +#: doc/complement-cheatsheet.md:29 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~ use std::num::ToStrRadix;" +msgstr "" +"~~~~\n" +"use std::task::spawn;" + +#. type: Plain text +#: doc/complement-cheatsheet.md:33 +#, fuzzy +#| msgid "" +#| "~~~~ let x: f64 = 4.0; let y: uint = x as uint; assert!(y == 4u); ~~~~" +msgid "let x: int = 42; let y: ~str = x.to_str_radix(16); ~~~" +msgstr "" +"~~~~\n" +"let x: f64 = 4.0;\n" +"let y: uint = x as uint;\n" +"assert!(y == 4u);\n" +"~~~~" + +#. type: Plain text +#: doc/complement-cheatsheet.md:37 +#, fuzzy +#| msgid "" +#| "[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz [win-exe]: " +#| "http://static.rust-lang.org/dist/rust-0.7-install.exe" +msgid "" +"Use [`FromStrRadix`](http://static.rust-lang.org/doc/master/std/num/trait." +"FromStrRadix.html), and its helper function, [`from_str_radix`](http://" +"static.rust-lang.org/doc/master/std/num/fn.from_str_radix.html)." +msgstr "" +"[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz\n" +"[win-exe]: http://static.rust-lang.org/dist/rust-0.7-install.exe" + +#. type: Plain text +#: doc/complement-cheatsheet.md:40 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~ use std::num::from_str_radix;" +msgstr "" +"~~~~\n" +"use std::task::spawn;" + +#. type: Plain text +#: doc/complement-cheatsheet.md:46 +#, fuzzy +#| msgid "## Operators" +msgid "# File operations" +msgstr "## 演算子" + +#. type: Plain text +#: doc/complement-cheatsheet.md:54 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~ {.xfail-test} use std::path::Path; use std::io::fs::File;" +msgstr "" +"~~~~\n" +"use std::task::spawn;" + +#. type: Plain text +#: doc/complement-cheatsheet.md:63 +#, fuzzy +#| msgid "" +#| "[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz [win-exe]: " +#| "http://static.rust-lang.org/dist/rust-0.7-install.exe" +msgid "" +"Use the [`lines`](http://static.rust-lang.org/doc/master/std/io/trait.Buffer." +"html#method.lines) method on a [`BufferedReader`](http://static.rust-lang." +"org/doc/master/std/io/buffered/struct.BufferedReader.html)." +msgstr "" +"[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz\n" +"[win-exe]: http://static.rust-lang.org/dist/rust-0.7-install.exe" + +#. type: Plain text +#: doc/complement-cheatsheet.md:77 +#, fuzzy +#| msgid "## Using other crates" +msgid "# String operations" +msgstr "## 他のクレートの利用" + +#. type: Plain text +#: doc/complement-cheatsheet.md:88 doc/guide-container.md:4 +#, fuzzy +msgid "# Containers" +msgstr "## 本書の表記について" + +#. type: Plain text +#: doc/complement-cheatsheet.md:176 +#, fuzzy +#| msgid "[The foreign function interface][ffi]" +msgid "# FFI (Foreign Function Interface)" +msgstr "[他言語間インターフェース (foreign function inferface)][ffi]" diff --git a/doc/po/ja/complement-lang-faq.md.po b/doc/po/ja/complement-lang-faq.md.po new file mode 100644 index 00000000000..a4d16a82c44 --- /dev/null +++ b/doc/po/ja/complement-lang-faq.md.po @@ -0,0 +1,47 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" +"PO-Revision-Date: 2014-01-13 12:01+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Plain text +#: doc/complement-lang-faq.md:83 +#, fuzzy +#| msgid "" +#| "[bug-3319]: https://github.com/mozilla/rust/issues/3319 [wiki-start]: " +#| "https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust" +msgid "" +"[rustc]: https://github.com/mozilla/rust/tree/master/src/librustc [resolve]: " +"https://github.com/mozilla/rust/blob/master/src/librustc/middle/resolve.rs " +"[borrowck]: https://github.com/mozilla/rust/blob/master/src/librustc/middle/" +"borrowck/" +msgstr "" +"[bug-3319]: https://github.com/mozilla/rust/issues/3319\n" +"[wiki-start]: https://github.com/mozilla/rust/wiki/Note-getting-started-" +"developing-Rust" + +#. type: Plain text +#: doc/complement-lang-faq.md:110 +#, fuzzy +#| msgid "" +#| "[bug-3319]: https://github.com/mozilla/rust/issues/3319 [wiki-start]: " +#| "https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust" +msgid "" +"[unwind]: https://github.com/mozilla/rust/issues/908 [libgcc]: https://" +"github.com/mozilla/rust/issues/1603" +msgstr "" +"[bug-3319]: https://github.com/mozilla/rust/issues/3319\n" +"[wiki-start]: https://github.com/mozilla/rust/wiki/Note-getting-started-" +"developing-Rust" diff --git a/doc/po/ja/complement-project-faq.md.po b/doc/po/ja/complement-project-faq.md.po new file mode 100644 index 00000000000..100e1d5653c --- /dev/null +++ b/doc/po/ja/complement-project-faq.md.po @@ -0,0 +1,24 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" +"PO-Revision-Date: 2014-01-13 12:01+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Bullet: '* ' +#: doc/complement-project-faq.md:36 +#, fuzzy +#| msgid "## The standard library" +msgid "An evolving standard library." +msgstr "## 標準ライブラリ" diff --git a/doc/po/ja/guide-conditions.md.po b/doc/po/ja/guide-conditions.md.po new file mode 100644 index 00000000000..505d55a512c --- /dev/null +++ b/doc/po/ja/guide-conditions.md.po @@ -0,0 +1,73 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" +"PO-Revision-Date: 2014-01-13 12:01+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Plain text +#: doc/guide-conditions.md:2 +#, fuzzy +#| msgid "% The Rust Language Tutorial" +msgid "% The Rust Condition and Error-handling Guide" +msgstr "% Rust 言語チュートリアル" + +#. type: Plain text +#: doc/guide-conditions.md:4 doc/guide-ffi.md:4 doc/guide-lifetimes.md:4 +#: doc/guide-macros.md:4 doc/guide-rustpkg.md:4 doc/guide-tasks.md:4 +#: doc/rust.md:4 doc/rustpkg.md:4 doc/tutorial.md:4 +msgid "# Introduction" +msgstr "# イントロダクション" + +#. type: Bullet: ' - ' +#: doc/guide-conditions.md:14 +#, fuzzy +#| msgid "# Functions" +msgid "Options" +msgstr "# 関数" + +#. type: Bullet: ' - ' +#: doc/guide-conditions.md:14 +#, fuzzy +#| msgid "## Conditionals" +msgid "Conditions" +msgstr "## 条件式" + +#. type: Plain text +#: doc/guide-conditions.md:19 +#, fuzzy +#| msgid "## Tuples" +msgid "# Example program" +msgstr "## タプル" + +#. type: Plain text +#: doc/guide-conditions.md:112 +#, fuzzy +#| msgid "# Functions" +msgid "# Options" +msgstr "# 関数" + +#. type: Plain text +#: doc/guide-conditions.md:318 +#, fuzzy +#| msgid "## Conditionals" +msgid "# Conditions" +msgstr "## 条件式" + +#. type: Plain text +#: doc/guide-conditions.md:415 +#, fuzzy +#| msgid "## Traits" +msgid "# Trapping a condition" +msgstr "## トレイト" diff --git a/doc/po/ja/guide-container.md.po b/doc/po/ja/guide-container.md.po new file mode 100644 index 00000000000..6113f1f554e --- /dev/null +++ b/doc/po/ja/guide-container.md.po @@ -0,0 +1,114 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" +"PO-Revision-Date: 2014-01-13 12:01+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Plain text +#: doc/complement-cheatsheet.md:88 doc/guide-container.md:4 +#, fuzzy +msgid "# Containers" +msgstr "## 本書の表記について" + +#. type: Plain text +#: doc/guide-container.md:2 +#, fuzzy +#| msgid "% The Rust Language Tutorial" +msgid "% The Rust Containers and Iterators Guide" +msgstr "% Rust 言語チュートリアル" + +#. type: Plain text +#: doc/guide-container.md:8 +#, fuzzy +#| msgid "# Control structures" +msgid "## Unique vectors" +msgstr "# 制御構造" + +#. type: Plain text +#: doc/guide-container.md:18 +#, fuzzy +#| msgid "## Managed closures" +msgid "## Maps and sets" +msgstr "## マネージドクロージャ" + +#. type: Plain text +#: doc/guide-container.md:24 +#, fuzzy +#| msgid "## The standard library" +msgid "The standard library provides three owned map/set types:" +msgstr "## 標準ライブラリ" + +#. type: Plain text +#: doc/guide-container.md:68 +#, fuzzy +#| msgid "## Operators" +msgid "# Iterators" +msgstr "## 演算子" + +#. type: Plain text +#: doc/guide-container.md:70 +#, fuzzy +#| msgid "# Introduction" +msgid "## Iteration protocol" +msgstr "# イントロダクション" + +#. type: Plain text +#: doc/guide-container.md:119 +#, fuzzy +#| msgid "# Control structures" +msgid "## Container iterators" +msgstr "# 制御構造" + +#. type: Plain text +#: doc/guide-container.md:131 +#, fuzzy +#| msgid "## Freezing" +msgid "### Freezing" +msgstr "## 凍結" + +#. type: Plain text +#: doc/guide-container.md:151 +#, fuzzy +#| msgid "## Operators" +msgid "## Iterator adaptors" +msgstr "## 演算子" + +#. type: Plain text +#: doc/guide-container.md:201 +#, fuzzy +#| msgid "## Loops" +msgid "## For loops" +msgstr "## ループ" + +#. type: Plain text +#: doc/guide-container.md:257 +#, fuzzy +#| msgid "## Conventions" +msgid "## Conversion" +msgstr "## 本書の表記について" + +#. type: Plain text +#: doc/guide-container.md:334 +#, fuzzy +#| msgid "# Control structures" +msgid "## Double-ended iterators" +msgstr "# 制御構造" + +#. type: Plain text +#: doc/guide-container.md:385 +#, fuzzy +#| msgid "# Control structures" +msgid "## Random-access iterators" +msgstr "# 制御構造" diff --git a/doc/po/ja/guide-ffi.md.po b/doc/po/ja/guide-ffi.md.po new file mode 100644 index 00000000000..b61c8efece1 --- /dev/null +++ b/doc/po/ja/guide-ffi.md.po @@ -0,0 +1,82 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" +"PO-Revision-Date: 2014-01-13 12:01+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Plain text +#: doc/guide-conditions.md:4 doc/guide-ffi.md:4 doc/guide-lifetimes.md:4 +#: doc/guide-macros.md:4 doc/guide-rustpkg.md:4 doc/guide-tasks.md:4 +#: doc/rust.md:4 doc/rustpkg.md:4 doc/tutorial.md:4 +msgid "# Introduction" +msgstr "# イントロダクション" + +#. type: Plain text +#: doc/guide-ffi.md:2 +#, fuzzy +#| msgid "[The foreign function interface][ffi]" +msgid "% The Rust Foreign Function Interface Guide" +msgstr "[他言語間インターフェース (foreign function inferface)][ffi]" + +#. type: Plain text +#: doc/guide-ffi.md:16 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~~ {.xfail-test} use std::libc::size_t;" +msgstr "" +"~~~~\n" +"use std::task::spawn;" + +#. type: Plain text +#: doc/guide-ffi.md:48 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~~ {.xfail-test} use std::libc::{c_int, size_t};" +msgstr "" +"~~~~\n" +"use std::task::spawn;" + +#. type: Plain text +#: doc/guide-ffi.md:168 doc/tutorial.md:875 +msgid "# Destructors" +msgstr "# デストラクタ" + +#. type: Plain text +#: doc/guide-ffi.md:333 +#, fuzzy +#| msgid "~~~~ let square = |x: int| -> uint { (x * x) as uint }; ~~~~" +msgid "~~~~ unsafe fn kaboom(ptr: *int) -> int { *ptr } ~~~~" +msgstr "" +"~~~~\n" +"let square = |x: int| -> uint { (x * x) as uint };\n" +"~~~~~~~~\n" + +#. type: Plain text +#: doc/guide-ffi.md:344 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~{.xfail-test} use std::libc;" +msgstr "" +"~~~~\n" +"use std::task::spawn;" + +#. type: Plain text +#: doc/guide-ffi.md:363 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~{.xfail-test} use std::libc; use std::ptr;" +msgstr "" +"~~~~\n" +"use std::task::spawn;" diff --git a/doc/po/ja/guide-lifetimes.md.po b/doc/po/ja/guide-lifetimes.md.po new file mode 100644 index 00000000000..e491afcfee7 --- /dev/null +++ b/doc/po/ja/guide-lifetimes.md.po @@ -0,0 +1,315 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" +"PO-Revision-Date: 2014-01-13 12:01+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Plain text +#: doc/guide-conditions.md:4 doc/guide-ffi.md:4 doc/guide-lifetimes.md:4 +#: doc/guide-macros.md:4 doc/guide-rustpkg.md:4 doc/guide-tasks.md:4 +#: doc/rust.md:4 doc/rustpkg.md:4 doc/tutorial.md:4 +msgid "# Introduction" +msgstr "# イントロダクション" + +#. type: Plain text +#: doc/guide-lifetimes.md:2 +#, fuzzy +#| msgid "% The Rust Language Tutorial" +msgid "% The Rust References and Lifetimes Guide" +msgstr "% Rust 言語チュートリアル" + +#. type: Plain text +#: doc/guide-lifetimes.md:26 +#, fuzzy +#| msgid "## A minimal example" +msgid "# By example" +msgstr "## 最小限の例" + +#. type: Plain text +#: doc/guide-lifetimes.md:33 +#, fuzzy +#| msgid "As an example, consider a simple struct type, `Point`:" +msgid "As an example, consider a simple struct type `Point`:" +msgstr "例として、シンプルな構造体型の `Point` について考えます。" + +#. type: Plain text +#: doc/guide-lifetimes.md:41 +#, fuzzy +#| msgid "" +#| "We can use this simple definition to allocate points in many different " +#| "ways. For example, in this code, each of these three local variables " +#| "contains a point, but allocated in a different location:" +msgid "" +"We can use this simple definition to allocate points in many different ways. " +"For example, in this code, each of these three local variables contains a " +"point, but allocated in a different place:" +msgstr "" +"シンプルな定義ですが、この定義を使って `Point` 型のオブジェクトを様々な方法で" +"割り当てることができます。例えば、このコードの3つのローカル変数は、それぞれ異" +"なった場所に `Point` 型のオブジェクトを割り当てています。" + +#. type: Plain text +#: doc/guide-lifetimes.md:48 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" +msgid "" +"~~~\n" +"# struct Point {x: f64, y: f64}\n" +"let on_the_stack : Point = Point {x: 3.0, y: 4.0};\n" +"let managed_box : @Point = @Point {x: 5.0, y: 1.0};\n" +"let owned_box : ~Point = ~Point {x: 7.0, y: 9.0};\n" +"~~~\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"# struct Point { x: f64, y: f64 }\n" +"let mut mypoint = Point { x: 1.0, y: 1.0 };\n" +"let origin = Point { x: 0.0, y: 0.0 };" + +#. type: Plain text +#: doc/guide-lifetimes.md:60 +#, fuzzy +#| msgid "" +#| "Suppose we want to write a procedure that computes the distance between " +#| "any two points, no matter where they are stored. For example, we might " +#| "like to compute the distance between `on_the_stack` and `managed_box`, or " +#| "between `managed_box` and `owned_box`. One option is to define a function " +#| "that takes two arguments of type point—that is, it takes the points by " +#| "value. But this will cause the points to be copied when we call the " +#| "function. For points, this is probably not so bad, but often copies are " +#| "expensive. So we’d like to define a function that takes the points by " +#| "pointer. We can use borrowed pointers to do this:" +msgid "" +"Suppose we wanted to write a procedure that computed the distance between " +"any two points, no matter where they were stored. For example, we might like " +"to compute the distance between `on_the_stack` and `managed_box`, or between " +"`managed_box` and `owned_box`. One option is to define a function that takes " +"two arguments of type `Point`—that is, it takes the points by value. But if " +"we define it this way, calling the function will cause the points to be " +"copied. For points, this is probably not so bad, but often copies are " +"expensive. Worse, if the data type contains mutable fields, copying can " +"change the semantics of your program in unexpected ways. So we'd like to " +"define a function that takes the points by pointer. We can use references to " +"do this:" +msgstr "" +"`Point` 型のオブジェクトの割り当て先がどこであったとしても利用可能な、任意の " +"2 点間の距離を計算する処理を書きたいとします。例えば、 `on_the_stack`, " +"`managed_box` 間や `managed_box`, `owned_box` 間の距離を計算する処理です。 1" +"つ目の実装方法として、2つの `Point` 型オブジェクトを引数にとる関数を定義する" +"方法、すなわち、オブジェクトを値で受け渡す方法があります。しかし、この方法で" +"は関数呼び出し時に `Point` オブジェクトのコピーが行われます。`Point` オブジェ" +"クトの場合、このような実装はそれほど悪いものではないでしょうが、コピー処理の" +"コストは高い場合もあります。したがって、`Point` オブジェクトをポインタ渡しす" +"る関数を定義する必要があります。そのために、借用ポインタを利用することが可能" +"です。" + +#. type: Plain text +#: doc/guide-lifetimes.md:72 doc/tutorial.md:1394 +msgid "Now we can call `compute_distance()` in various ways:" +msgstr "" +"上記の `compute_distance()` 関数は、様々な方法で呼び出すことができます。" + +#. type: Plain text +#: doc/guide-lifetimes.md:82 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" +msgid "" +"~~~\n" +"# struct Point {x: f64, y: f64}\n" +"# let on_the_stack : Point = Point{x: 3.0, y: 4.0};\n" +"# let managed_box : @Point = @Point{x: 5.0, y: 1.0};\n" +"# let owned_box : ~Point = ~Point{x: 7.0, y: 9.0};\n" +"# fn compute_distance(p1: &Point, p2: &Point) -> f64 { 0.0 }\n" +"compute_distance(&on_the_stack, managed_box);\n" +"compute_distance(managed_box, owned_box);\n" +"~~~\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"# struct Point { x: f64, y: f64 }\n" +"let mut mypoint = Point { x: 1.0, y: 1.0 };\n" +"let origin = Point { x: 0.0, y: 0.0 };" + +#. type: Plain text +#: doc/guide-lifetimes.md:89 +#, fuzzy +#| msgid "" +#| "Here the `&` operator is used to take the address of the variable " +#| "`on_the_stack`; this is because `on_the_stack` has the type `Point` (that " +#| "is, a struct value) and we have to take its address to get a value. We " +#| "also call this _borrowing_ the local variable `on_the_stack`, because we " +#| "are creating an alias: that is, another route to the same data." +msgid "" +"Here, the `&` operator takes the address of the variable `on_the_stack`; " +"this is because `on_the_stack` has the type `Point` (that is, a struct " +"value) and we have to take its address to get a value. We also call this " +"_borrowing_ the local variable `on_the_stack`, because we have created an " +"alias: that is, another name for the same data." +msgstr "" +"ここで `&` 演算子は `on_the_stack` 変数のアドレスを取得するために使われていま" +"す。これは、 `on_the_stack` の型は `Point` (つまり、構造体の値) であり、呼び" +"出した関数から値を取得させるため、構造体のアドレスを渡す必要があるからです。" +"値の別名 (エイリアス)、すなわち、同じデータへアクセスするための別の方法を提供" +"するので、このような操作のことをローカル変数 `on_the_stack` の __借用__ " +"(_borrowing_) と呼びます。" + +#. type: Plain text +#: doc/guide-lifetimes.md:95 +#, fuzzy +#| msgid "" +#| "In the case of the boxes `managed_box` and `owned_box`, however, no " +#| "explicit action is necessary. The compiler will automatically convert a " +#| "box like `@point` or `~point` to a borrowed pointer like `&point`. This " +#| "is another form of borrowing; in this case, the contents of the managed/" +#| "owned box are being lent out." +msgid "" +"In contrast, we can pass the boxes `managed_box` and `owned_box` to " +"`compute_distance` directly. The compiler automatically converts a box like " +"`@Point` or `~Point` to a reference like `&Point`. This is another form of " +"borrowing: in this case, the caller lends the contents of the managed or " +"owned box to the callee." +msgstr "" +"ボックスである `managed_box` と `owned_box` の場合は、特に明示的な操作を行う" +"必要はありません。コンパイラは `@point` や `~point` のようなボックスを自動的" +"に `&point` のような借用ポインタへと変換します。これは、別の形態の借用 " +"(borrowing) です。この場合、マネージド/所有ボックスの内容が貸し出されていま" +"す。" + +#. type: Plain text +#: doc/guide-lifetimes.md:105 +#, fuzzy +#| msgid "" +#| "Whenever a value is borrowed, there are some limitations on what you can " +#| "do with the original. For example, if the contents of a variable have " +#| "been lent out, you cannot send that variable to another task, nor will " +#| "you be permitted to take actions that might cause the borrowed value to " +#| "be freed or to change its type. This rule should make intuitive sense: " +#| "you must wait for a borrowed value to be returned (that is, for the " +#| "borrowed pointer to go out of scope) before you can make full use of it " +#| "again." +msgid "" +"Whenever a caller lends data to a callee, there are some limitations on what " +"the caller can do with the original. For example, if the contents of a " +"variable have been lent out, you cannot send that variable to another task. " +"In addition, the compiler will reject any code that might cause the borrowed " +"value to be freed or overwrite its component fields with values of different " +"types (I'll get into what kinds of actions those are shortly). This rule " +"should make intuitive sense: you must wait for a borrower to return the " +"value that you lent it (that is, wait for the reference to go out of scope) " +"before you can make full use of it again." +msgstr "" +"値が借用されている間、借用元の値に対して行える操作がいくらか制限されます。例" +"えば、変数の内容が貸し出された場合、その変数を他のタスクに送信することはでき" +"ませんし、借用された値を解放したり、型が変化させるような操作も行うことができ" +"ません。このルールは理にかなったものでしょう。貸し出した値を最大限に活用する " +"(make full use of it) ためには、貸し出した値の返却 (借用ポインタが存在するス" +"コープを抜ける) を待たなければなりません。" + +#. type: Plain text +#: doc/guide-lifetimes.md:114 +#, fuzzy +#| msgid "" +#| "~~~ # struct Point { x: f64, y: f64 } let point = &@~Point { x: 10f, y: " +#| "20f }; println(fmt!(\"%f\", point.x)); ~~~" +msgid "" +"~~~ # struct Point {x: f64, y: f64} let on_the_stack: Point = Point {x: 3.0, " +"y: 4.0}; ~~~" +msgstr "" +"~~~\n" +"# struct Point { x: f64, y: f64 }\n" +"let point = &@~Point { x: 10f, y: 20f };\n" +"println(fmt!(\"%f\", point.x));\n" +"~~~" + +#. type: Plain text +#: doc/guide-lifetimes.md:124 +#, fuzzy +#| msgid "" +#| "~~~ # struct Point { x: f64, y: f64 } let point = &@~Point { x: 10f, y: " +#| "20f }; println(fmt!(\"%f\", point.x)); ~~~" +msgid "" +"~~~ # struct Point {x: f64, y: f64} let on_the_stack2: &Point = &Point {x: " +"3.0, y: 4.0}; ~~~" +msgstr "" +"~~~\n" +"# struct Point { x: f64, y: f64 }\n" +"let point = &@~Point { x: 10f, y: 20f };\n" +"println(fmt!(\"%f\", point.x));\n" +"~~~" + +#. type: Plain text +#: doc/guide-lifetimes.md:134 +#, fuzzy +#| msgid "" +#| "~~~ # struct Point { x: f64, y: f64 } let point = &@~Point { x: 10f, y: " +#| "20f }; println(fmt!(\"%f\", point.x)); ~~~" +msgid "" +"~~~ # struct Point {x: f64, y: f64} let tmp = Point {x: 3.0, y: 4.0}; let " +"on_the_stack2 : &Point = &tmp; ~~~" +msgstr "" +"~~~\n" +"# struct Point { x: f64, y: f64 }\n" +"let point = &@~Point { x: 10f, y: 20f };\n" +"println(fmt!(\"%f\", point.x));\n" +"~~~" + +#. type: Plain text +#: doc/guide-lifetimes.md:180 +#, fuzzy +#| msgid "# Borrowed pointers" +msgid "# Borrowing managed boxes and rooting" +msgstr "# 借用ポインタ" + +#. type: Plain text +#: doc/guide-lifetimes.md:262 +#, fuzzy +#| msgid "# Borrowed pointers" +msgid "# Borrowing owned boxes" +msgstr "# 借用ポインタ" + +#. type: Plain text +#: doc/guide-lifetimes.md:367 +#, fuzzy +#| msgid "# Borrowed pointers" +msgid "# Borrowing and enums" +msgstr "# 借用ポインタ" + +#. type: Plain text +#: doc/guide-lifetimes.md:477 +#, fuzzy +#| msgid "# Dereferencing pointers" +msgid "# Returning references" +msgstr "# ポインタのデリファレンス" + +#. type: Plain text +#: doc/guide-lifetimes.md:490 +#, fuzzy +#| msgid "" +#| "~~~ # struct Point { x: f64, y: f64 } let point = &@~Point { x: 10f, y: " +#| "20f }; println(fmt!(\"%f\", point.x)); ~~~" +msgid "" +"~~~ struct Point {x: f64, y: f64} fn get_x<'r>(p: &'r Point) -> &'r f64 { &p." +"x } ~~~" +msgstr "" +"~~~\n" +"# struct Point { x: f64, y: f64 }\n" +"let point = &@~Point { x: 10f, y: 20f };\n" +"println(fmt!(\"%f\", point.x));\n" +"~~~" + +#. type: Plain text +#: doc/guide-lifetimes.md:659 +#, fuzzy +#| msgid "## Conventions" +msgid "# Conclusion" +msgstr "## 本書の表記について" diff --git a/doc/po/ja/guide-macros.md.po b/doc/po/ja/guide-macros.md.po new file mode 100644 index 00000000000..41ba4b04926 --- /dev/null +++ b/doc/po/ja/guide-macros.md.po @@ -0,0 +1,94 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" +"PO-Revision-Date: 2014-01-13 12:01+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Plain text +#: doc/guide-conditions.md:4 doc/guide-ffi.md:4 doc/guide-lifetimes.md:4 +#: doc/guide-macros.md:4 doc/guide-rustpkg.md:4 doc/guide-tasks.md:4 +#: doc/rust.md:4 doc/rustpkg.md:4 doc/tutorial.md:4 +msgid "# Introduction" +msgstr "# イントロダクション" + +#. type: Plain text +#: doc/guide-macros.md:2 +#, fuzzy +#| msgid "% The Rust Language Tutorial" +msgid "% The Rust Macros Guide" +msgstr "% Rust 言語チュートリアル" + +#. type: Plain text +#: doc/guide-macros.md:67 +#, fuzzy +#| msgid "## Do syntax" +msgid "# Invocation syntax" +msgstr "## do 構文" + +#. type: Plain text +#: doc/guide-macros.md:100 +#, fuzzy +#| msgid "# Introduction" +msgid "## Invocation location" +msgstr "# イントロダクション" + +#. type: Plain text +#: doc/guide-macros.md:115 +#, fuzzy +#| msgid "## Traits" +msgid "# Transcription syntax" +msgstr "## トレイト" + +#. type: Plain text +#: doc/guide-macros.md:135 +#, fuzzy +#| msgid "# Introduction" +msgid "## Interpolation location" +msgstr "# イントロダクション" + +#. type: Plain text +#: doc/guide-macros.md:143 +#, fuzzy +#| msgid "# Introduction" +msgid "## Invocation" +msgstr "# イントロダクション" + +#. type: Plain text +#: doc/guide-macros.md:181 +#, fuzzy +#| msgid "## Traits" +msgid "### Transcription" +msgstr "## トレイト" + +#. type: Plain text +#: doc/guide-macros.md:193 +#, fuzzy +#| msgid "## Pattern matching" +msgid "## Parsing limitations" +msgstr "## パターンマッチ" + +#. type: Plain text +#: doc/guide-macros.md:212 +#, fuzzy +#| msgid "## Pattern matching" +msgid "# Macro argument pattern matching" +msgstr "## パターンマッチ" + +#. type: Plain text +#: doc/guide-macros.md:214 +#, fuzzy +#| msgid "## Conventions" +msgid "## Motivation" +msgstr "## 本書の表記について" diff --git a/doc/po/ja/guide-pointers.md.po b/doc/po/ja/guide-pointers.md.po new file mode 100644 index 00000000000..bd23e1a4666 --- /dev/null +++ b/doc/po/ja/guide-pointers.md.po @@ -0,0 +1,292 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" +"PO-Revision-Date: 2014-01-13 12:01+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Plain text +#: doc/guide-pointers.md:2 +#, fuzzy +#| msgid "% The Rust Language Tutorial" +msgid "% The Rust Pointer Guide" +msgstr "% Rust 言語チュートリアル" + +#. type: Plain text +#: doc/guide-pointers.md:21 +#, fuzzy +#| msgid "~~~~ let square = |x: int| -> uint { (x * x) as uint }; ~~~~" +msgid "~~~rust fn succ(x: &int) -> int { *x + 1 } ~~~" +msgstr "" +"~~~~\n" +"let square = |x: int| -> uint { (x * x) as uint };\n" +"~~~~~~~~\n" + +#. type: Plain text +#: doc/guide-pointers.md:58 +#, fuzzy +#| msgid "~~~~ let square = |x: int| -> uint { (x * x) as uint }; ~~~~" +msgid "~~~rust fn succ(x: int) -> int { x + 1 }" +msgstr "" +"~~~~\n" +"let square = |x: int| -> uint { (x * x) as uint };\n" +"~~~~~~~~\n" + +#. type: Plain text +#: doc/guide-pointers.md:115 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" +msgid "" +"fn main() {\n" +" let p0 = Point { x: 5, y: 10};\n" +" let p1 = transform(p0);\n" +" println!(\"{:?}\", p1);\n" +"}\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"# struct Point { x: f64, y: f64 }\n" +"let mut mypoint = Point { x: 1.0, y: 1.0 };\n" +"let origin = Point { x: 0.0, y: 0.0 };" + +#. type: Plain text +#: doc/guide-pointers.md:129 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" +msgid "" +"~~~rust\n" +"# struct Point {\n" +"# x: int,\n" +"# y: int,\n" +"# }\n" +"# let p0 = Point { x: 5, y: 10};\n" +"fn transform(p: &Point) -> Point {\n" +" Point { x: p.x + 1, y: p.y + 1}\n" +"}\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"# struct Point { x: f64, y: f64 }\n" +"let mut mypoint = Point { x: 1.0, y: 1.0 };\n" +"let origin = Point { x: 0.0, y: 0.0 };" + +#. type: Plain text +#: doc/guide-pointers.md:145 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" +msgid "" +"fn transform(p: Point) -> Point {\n" +" Point { x: p.x + 1, y: p.y + 1}\n" +"}\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"# struct Point { x: f64, y: f64 }\n" +"let mut mypoint = Point { x: 1.0, y: 1.0 };\n" +"let origin = Point { x: 0.0, y: 0.0 };" + +#. type: Plain text +#: doc/guide-pointers.md:152 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" +msgid "" +"fn main() {\n" +" let p0 = Point { x: 5, y: 10};\n" +" let p1 = transform(p0);\n" +" println!(\"{:?}\", p1);\n" +"}\n" +"~~~\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"# struct Point { x: f64, y: f64 }\n" +"let mut mypoint = Point { x: 1.0, y: 1.0 };\n" +"let origin = Point { x: 0.0, y: 0.0 };" + +#. type: Plain text +#: doc/guide-pointers.md:162 +#, fuzzy +#| msgid "# Borrowed pointers" +msgid "# Owned Pointers" +msgstr "# 借用ポインタ" + +#. type: Plain text +#: doc/guide-pointers.md:175 +#, fuzzy +msgid "## References to Traits" +msgstr "# ポインタのデリファレンス" + +#. type: Plain text +#: doc/guide-pointers.md:181 +#, fuzzy +#| msgid "# Data structures" +msgid "## Recursive Data Structures" +msgstr "# データ構造" + +#. type: Plain text +#: doc/guide-pointers.md:229 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" +msgid "" +"fn main() {\n" +" let a = Point { x: 10, y: 20 };\n" +" do spawn {\n" +" println!(\"{}\", a.x);\n" +" }\n" +"}\n" +"~~~\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"# struct Point { x: f64, y: f64 }\n" +"let mut mypoint = Point { x: 1.0, y: 1.0 };\n" +"let origin = Point { x: 0.0, y: 0.0 };" + +#. type: Plain text +#: doc/guide-pointers.md:246 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" +msgid "" +"fn main() {\n" +" let a = ~Point { x: 10, y: 20 };\n" +" do spawn {\n" +" println!(\"{}\", a.x);\n" +" }\n" +"}\n" +"~~~\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"# struct Point { x: f64, y: f64 }\n" +"let mut mypoint = Point { x: 1.0, y: 1.0 };\n" +"let origin = Point { x: 0.0, y: 0.0 };" + +#. type: Plain text +#: doc/guide-pointers.md:251 +#, fuzzy +#| msgid "## Managed boxes" +msgid "# Managed Pointers" +msgstr "## マネージドボックス" + +#. type: Plain text +#: doc/guide-pointers.md:277 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" +msgid "" +"fn main() {\n" +" let a = ~Point { x: 10, y: 20 };\n" +" let b = a;\n" +" println!(\"{}\", b.x);\n" +" println!(\"{}\", a.x);\n" +"}\n" +"~~~\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"# struct Point { x: f64, y: f64 }\n" +"let mut mypoint = Point { x: 1.0, y: 1.0 };\n" +"let origin = Point { x: 0.0, y: 0.0 };" + +#. type: Plain text +#: doc/guide-pointers.md:308 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" +msgid "" +"fn main() {\n" +" let a = @Point { x: 10, y: 20 };\n" +" let b = a;\n" +" println!(\"{}\", b.x);\n" +" println!(\"{}\", a.x);\n" +"}\n" +"~~~\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"# struct Point { x: f64, y: f64 }\n" +"let mut mypoint = Point { x: 1.0, y: 1.0 };\n" +"let origin = Point { x: 0.0, y: 0.0 };" + +#. type: Plain text +#: doc/guide-pointers.md:326 doc/tutorial.md:1345 +#, fuzzy +msgid "# References" +msgstr "# ポインタのデリファレンス" + +#. type: Plain text +#: doc/guide-pointers.md:336 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~rust use std::num::sqrt;" +msgstr "" +"~~~~\n" +"use std::task::spawn;" + +#. type: Plain text +#: doc/guide-pointers.md:352 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" +msgid "" +"fn main() {\n" +" let origin = @Point { x: 0.0, y: 0.0 };\n" +" let p1 = ~Point { x: 5.0, y: 3.0 };\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"# struct Point { x: f64, y: f64 }\n" +"let mut mypoint = Point { x: 1.0, y: 1.0 };\n" +"let origin = Point { x: 0.0, y: 0.0 };" + +#. type: Plain text +#: doc/guide-pointers.md:378 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println(~\"hello \" + world::explore()); } ~~~~" +msgid "" +"~~~rust{.xfail-test}\n" +"fn main() {\n" +" println!(\"{}\", x);\n" +" let x = 5;\n" +"}\n" +"~~~\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"// main.rs\n" +"extern mod world;\n" +"fn main() { println(~\"hello \" + world::explore()); }\n" +"~~~~" + +#. type: Plain text +#: doc/guide-pointers.md:433 +#, fuzzy +#| msgid "# Dereferencing pointers" +msgid "# Returning Pointers" +msgstr "# ポインタのデリファレンス" + +#. type: Plain text +#: doc/guide-pointers.md:444 +#, fuzzy, no-wrap +#| msgid "~~~~ let square = |x: int| -> uint { (x * x) as uint }; ~~~~" +msgid "" +"~~~rust\n" +"fn foo(x: ~int) -> ~int {\n" +" return ~*x;\n" +"}\n" +msgstr "" +"~~~~\n" +"let square = |x: int| -> uint { (x * x) as uint };\n" +"~~~~~~~~\n" + +#. type: Plain text +#: doc/guide-pointers.md:457 doc/guide-pointers.md:471 +#, fuzzy, no-wrap +#| msgid "~~~~ let square = |x: int| -> uint { (x * x) as uint }; ~~~~" +msgid "" +"~~~rust\n" +"fn foo(x: ~int) -> int {\n" +" return *x;\n" +"}\n" +msgstr "" +"~~~~\n" +"let square = |x: int| -> uint { (x * x) as uint };\n" +"~~~~~~~~\n" diff --git a/doc/po/ja/guide-rustpkg.md.po b/doc/po/ja/guide-rustpkg.md.po new file mode 100644 index 00000000000..d8d2b808e9d --- /dev/null +++ b/doc/po/ja/guide-rustpkg.md.po @@ -0,0 +1,112 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" +"PO-Revision-Date: 2014-01-13 12:01+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Plain text +#: doc/guide-conditions.md:4 doc/guide-ffi.md:4 doc/guide-lifetimes.md:4 +#: doc/guide-macros.md:4 doc/guide-rustpkg.md:4 doc/guide-tasks.md:4 +#: doc/rust.md:4 doc/rustpkg.md:4 doc/tutorial.md:4 +msgid "# Introduction" +msgstr "# イントロダクション" + +#. type: Plain text +#: doc/guide-rustpkg.md:2 +#, fuzzy +#| msgid "% The Rust Language Tutorial" +msgid "% The Rust Packaging Guide" +msgstr "% Rust 言語チュートリアル" + +#. type: Plain text +#: doc/guide-rustpkg.md:11 +#, fuzzy +#| msgid "## Using other crates" +msgid "# Installing External Packages" +msgstr "## 他のクレートの利用" + +#. type: Plain text +#: doc/guide-rustpkg.md:22 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println(~\"hello \" + world::explore()); } ~~~~" +msgid "" +"fn main() {\n" +" hello::world();\n" +"}\n" +"~~~~\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"// main.rs\n" +"extern mod world;\n" +"fn main() { println(~\"hello \" + world::explore()); }\n" +"~~~~" + +#. type: Plain text +#: doc/guide-rustpkg.md:91 +#, fuzzy +#| msgid "## Using other crates" +msgid "# Building your own Package" +msgstr "## 他のクレートの利用" + +#. type: Plain text +#: doc/guide-rustpkg.md:98 +#, fuzzy +#| msgid "## Using other crates" +msgid "## Creating our workspace" +msgstr "## 他のクレートの利用" + +#. type: Plain text +#: doc/guide-rustpkg.md:115 +#, fuzzy +#| msgid "# Introduction" +msgid "## Installation" +msgstr "# イントロダクション" + +#. type: Plain text +#: doc/guide-rustpkg.md:149 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println(~\"hello \" + world::explore()); } ~~~~" +msgid "" +"pub fn world() {\n" +" println!(\"Hello, world.\");\n" +"}\n" +"~~~\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"// main.rs\n" +"extern mod world;\n" +"fn main() { println(~\"hello \" + world::explore()); }\n" +"~~~~" + +#. type: Plain text +#: doc/guide-rustpkg.md:161 +#, fuzzy +#| msgid "## Using other crates" +msgid "## Building your package" +msgstr "## 他のクレートの利用" + +#. type: Plain text +#: doc/guide-rustpkg.md:209 +#, fuzzy +#| msgid "## Using other crates" +msgid "# Testing your Package" +msgstr "## 他のクレートの利用" + +#. type: Plain text +#: doc/guide-rustpkg.md:257 +#, fuzzy +#| msgid "## Managed boxes" +msgid "# More resources" +msgstr "## マネージドボックス" diff --git a/doc/po/ja/guide-tasks.md.po b/doc/po/ja/guide-tasks.md.po new file mode 100644 index 00000000000..a86a204397b --- /dev/null +++ b/doc/po/ja/guide-tasks.md.po @@ -0,0 +1,81 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" +"PO-Revision-Date: 2014-01-13 12:01+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Plain text +#: doc/guide-conditions.md:4 doc/guide-ffi.md:4 doc/guide-lifetimes.md:4 +#: doc/guide-macros.md:4 doc/guide-rustpkg.md:4 doc/guide-tasks.md:4 +#: doc/rust.md:4 doc/rustpkg.md:4 doc/tutorial.md:4 +msgid "# Introduction" +msgstr "# イントロダクション" + +#. type: Plain text +#: doc/guide-tasks.md:2 +#, fuzzy +#| msgid "[Tasks and communication][tasks]" +msgid "% The Rust Tasks and Communication Guide" +msgstr "[タスクと通信][tasks]" + +#. type: Plain text +#: doc/guide-tasks.md:64 +#, fuzzy +#| msgid "# Syntax basics" +msgid "# Basics" +msgstr "# 基本的な構文" + +#. type: Plain text +#: doc/guide-tasks.md:73 doc/guide-tasks.md:132 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~~ # use std::task::spawn;" +msgstr "" +"~~~~\n" +"use std::task::spawn;" + +#. type: Plain text +#: doc/guide-tasks.md:113 +#, fuzzy +#| msgid "## Conditionals" +msgid "## Communication" +msgstr "## 条件式" + +#. type: Plain text +#: doc/guide-tasks.md:214 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~ # use std::task::spawn;" +msgstr "" +"~~~~\n" +"use std::task::spawn;" + +#. type: Plain text +#: doc/guide-tasks.md:246 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~ # use std::task::spawn; # use std::vec;" +msgstr "" +"~~~~\n" +"use std::task::spawn;" + +#. type: Plain text +#: doc/guide-tasks.md:327 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~ # use std::vec; # use std::rand; use extra::arc::Arc;" +msgstr "" +"~~~~\n" +"use std::task::spawn;" diff --git a/doc/po/ja/guide-testing.md.po b/doc/po/ja/guide-testing.md.po new file mode 100644 index 00000000000..b42d0feee2f --- /dev/null +++ b/doc/po/ja/guide-testing.md.po @@ -0,0 +1,75 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" +"PO-Revision-Date: 2014-01-13 12:01+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Plain text +#: doc/guide-testing.md:2 +#, fuzzy +#| msgid "% The Rust Language Tutorial" +msgid "% The Rust Testing Guide" +msgstr "% Rust 言語チュートリアル" + +#. type: Plain text +#: doc/guide-testing.md:4 +#, fuzzy +#| msgid "# Getting started" +msgid "# Quick start" +msgstr "# はじめに" + +#. type: Plain text +#: doc/guide-testing.md:127 doc/tutorial.md:776 +#, fuzzy +#| msgid "## A minimal example" +msgid "For example:" +msgstr "## 最小限の例" + +#. type: Plain text +#: doc/guide-testing.md:131 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~ extern mod extra; use std::vec;" +msgstr "" +"~~~~\n" +"use std::task::spawn;" + +#. type: Plain text +#: doc/guide-testing.md:167 +#, fuzzy +#| msgid "## Tuples" +msgid "## Examples" +msgstr "## タプル" + +#. type: Plain text +#: doc/guide-testing.md:169 +#, fuzzy +#| msgid "## Tuple structs" +msgid "### Typical test run" +msgstr "## タプル構造体" + +#. type: Plain text +#: doc/guide-testing.md:197 +#, fuzzy +#| msgid "# Dereferencing pointers" +msgid "### Running ignored tests" +msgstr "# ポインタのデリファレンス" + +#. type: Plain text +#: doc/guide-testing.md:235 +#, fuzzy +#| msgid "## Declaring and implementing traits" +msgid "## Saving and ratcheting metrics" +msgstr "## トレイトの宣言と実装" diff --git a/doc/po/ja/index.md.po b/doc/po/ja/index.md.po new file mode 100644 index 00000000000..2941d50012d --- /dev/null +++ b/doc/po/ja/index.md.po @@ -0,0 +1,31 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-14 21:02+0900\n" +"PO-Revision-Date: 2014-01-14 21:02+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Plain text +#: doc/index.md:2 +#, fuzzy +#| msgid "## Using the rust tool" +msgid "% Rust documentation" +msgstr "## `rust` コマンドを利用する" + +#. type: Plain text +#: doc/index.md:26 +#, fuzzy +#| msgid "## Using other crates" +msgid "# Libraries" +msgstr "## 他のクレートの利用" diff --git a/doc/po/ja/rust.md.po b/doc/po/ja/rust.md.po index 99392964e7a..d3567449e0e 100644 --- a/doc/po/ja/rust.md.po +++ b/doc/po/ja/rust.md.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Rust 0.8\n" -"POT-Creation-Date: 2013-08-12 02:06+0900\n" +"POT-Creation-Date: 2014-01-14 21:02+0900\n" "PO-Revision-Date: 2013-08-05 19:40+0900\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -17,2505 +17,354 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" #. type: Plain text -#: doc/rust.md:2 -msgid "% Rust Reference Manual" -msgstr "" - -#. type: Plain text +#: doc/guide-conditions.md:4 doc/guide-ffi.md:4 doc/guide-lifetimes.md:4 +#: doc/guide-macros.md:4 doc/guide-rustpkg.md:4 doc/guide-tasks.md:4 #: doc/rust.md:4 doc/rustpkg.md:4 doc/tutorial.md:4 -#: doc/tutorial-borrowed-ptr.md:4 doc/tutorial-ffi.md:4 -#: doc/tutorial-macros.md:4 doc/tutorial-tasks.md:4 msgid "# Introduction" msgstr "# イントロダクション" #. type: Plain text -#: doc/rust.md:7 -msgid "" -"This document is the reference manual for the Rust programming language. It " -"provides three kinds of material:" -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:15 -msgid "" -"Chapters that formally define the language grammar and, for each construct, " -"informally describe its semantics and give examples of its use." -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:15 -msgid "" -"Chapters that informally describe the memory model, concurrency model, " -"runtime services, linkage model and debugging facilities." -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:15 -msgid "" -"Appendix chapters providing rationale and references to languages that " -"influenced the design." -msgstr "" - -#. type: Plain text -#: doc/rust.md:19 -msgid "" -"This document does not serve as a tutorial introduction to the language. " -"Background familiarity with the language is assumed. A separate [tutorial] " -"document is available to help acquire such background familiarity." -msgstr "" - -#. type: Plain text -#: doc/rust.md:24 -msgid "" -"This document also does not serve as a reference to the [standard] or " -"[extra] libraries included in the language distribution. Those libraries are " -"documented separately by extracting documentation attributes from their " -"source code." -msgstr "" - -#. type: Plain text -#: doc/rust.md:28 -msgid "" -"[tutorial]: tutorial.html [standard]: std/index.html [extra]: extra/index." -"html" -msgstr "" - -#. type: Plain text -#: doc/rust.md:30 doc/rustpkg.md:8 -msgid "## Disclaimer" -msgstr "" - -#. type: Plain text -#: doc/rust.md:34 -msgid "" -"Rust is a work in progress. The language continues to evolve as the design " -"shifts and is fleshed out in working code. Certain parts work, certain parts " -"do not, certain parts will be removed or changed." -msgstr "" - -#. type: Plain text -#: doc/rust.md:39 -msgid "" -"This manual is a snapshot written in the present tense. All features " -"described exist in working code unless otherwise noted, but some are quite " -"primitive or remain to be further modified by planned work. Some may be " -"temporary. It is a *draft*, and we ask that you not take anything you read " -"here as final." -msgstr "" - -#. type: Plain text -#: doc/rust.md:43 -msgid "" -"If you have suggestions to make, please try to focus them on *reductions* to " -"the language: possible features that can be combined or omitted. We aim to " -"keep the size and complexity of the language under control." -msgstr "" - -#. type: Plain text -#: doc/rust.md:52 -msgid "" -"> **Note:** The grammar for Rust given in this document is rough and > very " -"incomplete; only a modest number of sections have accompanying grammar > " -"rules. Formalizing the grammar accepted by the Rust parser is ongoing work, " -"> but future versions of this document will contain a complete > grammar. " -"Moreover, we hope that this grammar will be extracted and verified > as " -"LL(1) by an automated grammar-analysis tool, and further tested against the " -"> Rust sources. Preliminary versions of this automation exist, but are not " -"yet > complete." -msgstr "" +#: doc/rust.md:2 +#, fuzzy +#| msgid "% The Rust Language Tutorial" +msgid "% The Rust Reference Manual" +msgstr "% Rust 言語チュートリアル" #. type: Plain text #: doc/rust.md:54 +#, fuzzy +#| msgid "## Conventions" msgid "# Notation" -msgstr "" - -#. type: Plain text -#: doc/rust.md:62 -msgid "" -"Rust's grammar is defined over Unicode codepoints, each conventionally " -"denoted `U+XXXX`, for 4 or more hexadecimal digits `X`. _Most_ of Rust's " -"grammar is confined to the ASCII range of Unicode, and is described in this " -"document by a dialect of Extended Backus-Naur Form (EBNF), specifically a " -"dialect of EBNF supported by common automated LL(k) parsing tools such as " -"`llgen`, rather than the dialect given in ISO 14977. The dialect can be " -"defined self-referentially as follows:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:64 -msgid "~~~~~~~~ {.ebnf .notation}" -msgstr "" - -#. type: Plain text -#: doc/rust.md:72 -#, no-wrap -msgid "" -"grammar : rule + ;\n" -"rule : nonterminal ':' productionrule ';' ;\n" -"productionrule : production [ '|' production ] * ;\n" -"production : term * ;\n" -"term : element repeats ;\n" -"element : LITERAL | IDENTIFIER | '[' productionrule ']' ;\n" -"repeats : [ '*' | '+' ] NUMBER ? | NUMBER ? | '?' ;\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:74 doc/rust.md:416 doc/rust.md:486 -msgid "~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:76 -msgid "Where:" -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:89 -msgid "Whitespace in the grammar is ignored." -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:89 -msgid "Square brackets are used to group rules." -msgstr "" - -#. type: Plain text -#: doc/rust.md:89 -#, no-wrap -msgid "" -" - `LITERAL` is a single printable ASCII character, or an escaped hexadecimal\n" -" ASCII code of the form `\\xQQ`, in single quotes, denoting the corresponding\n" -" Unicode codepoint `U+00QQ`.\n" -" - `IDENTIFIER` is a nonempty string of ASCII letters and underscores.\n" -" - The `repeat` forms apply to the adjacent `element`, and are as follows:\n" -" - `?` means zero or one repetition\n" -" - `*` means zero or more repetitions\n" -" - `+` means one or more repetitions\n" -" - NUMBER trailing a repeat symbol gives a maximum repetition count\n" -" - NUMBER on its own gives an exact repetition count\n" -msgstr "" +msgstr "## 本書の表記について" #. type: Plain text #: doc/rust.md:91 -msgid "This EBNF dialect should hopefully be familiar to many readers." -msgstr "" - -#. type: Plain text -#: doc/rust.md:93 +#, fuzzy +#| msgid "# Introduction" msgid "## Unicode productions" -msgstr "" +msgstr "# イントロダクション" #. type: Plain text #: doc/rust.md:98 -msgid "" -"A few productions in Rust's grammar permit Unicode codepoints outside the " -"ASCII range. We define these productions in terms of character properties " -"specified in the Unicode standard, rather than in terms of ASCII-range " -"codepoints. The section [Special Unicode Productions](#special-unicode-" -"productions) lists these productions." -msgstr "" - -#. type: Plain text -#: doc/rust.md:100 +#, fuzzy +#| msgid "## Using other crates" msgid "## String table productions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:109 -msgid "" -"Some rules in the grammar -- notably [unary operators](#unary-operator-" -"expressions), [binary operators](#binary-operator-expressions), and " -"[keywords](#keywords) -- are given in a simplified form: as a listing of a " -"table of unquoted, printable whitespace-separated strings. These cases form " -"a subset of the rules regarding the [token](#tokens) rule, and are assumed " -"to be the result of a lexical-analysis phase feeding the parser, driven by a " -"DFA, operating over the disjunction of all such string table entries." -msgstr "" +msgstr "## 他のクレートの利用" #. type: Plain text #: doc/rust.md:113 -msgid "" -"When such a string enclosed in double-quotes (`\"`) occurs inside the " -"grammar, it is an implicit reference to a single member of such a string " -"table production. See [tokens](#tokens) for more information." -msgstr "" - -#. type: Plain text -#: doc/rust.md:116 +#, fuzzy +#| msgid "# Data structures" msgid "# Lexical structure" -msgstr "" +msgstr "# データ構造" #. type: Plain text -#: doc/rust.md:118 -msgid "## Input format" -msgstr "" - -#. type: Plain text -#: doc/rust.md:124 -msgid "" -"Rust input is interpreted as a sequence of Unicode codepoints encoded in " -"UTF-8, normalized to Unicode normalization form NFKC. Most Rust grammar " -"rules are defined in terms of printable ASCII-range codepoints, but a small " -"number are defined in terms of Unicode properties or explicit codepoint " -"lists. ^[Substitute definitions for the special Unicode productions are " -"provided to the grammar verifier, restricted to ASCII range, when verifying " -"the grammar in this document.]" -msgstr "" - -#. type: Plain text -#: doc/rust.md:126 -msgid "## Special Unicode Productions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:129 -msgid "" -"The following productions in the Rust grammar are defined in terms of " -"Unicode properties: `ident`, `non_null`, `non_star`, `non_eol`, " -"`non_slash_or_star`, `non_single_quote` and `non_double_quote`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:131 -msgid "### Identifiers" -msgstr "" - -#. type: Plain text -#: doc/rust.md:133 -msgid "" -"The `ident` production is any nonempty Unicode string of the following form:" -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:136 -msgid "The first character has property `XID_start`" -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:136 -msgid "The remaining characters have property `XID_continue`" -msgstr "" - -#. type: Plain text -#: doc/rust.md:138 -msgid "that does _not_ occur in the set of [keywords](#keywords)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:142 -msgid "" -"Note: `XID_start` and `XID_continue` as character properties cover the " -"character ranges used to form the more familiar C and Java language-family " -"identifiers." -msgstr "" - -#. type: Plain text -#: doc/rust.md:144 -msgid "### Delimiter-restricted productions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:146 -msgid "" -"Some productions are defined by exclusion of particular Unicode characters:" -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:153 -msgid "`non_null` is any single Unicode character aside from `U+0000` (null)" -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:153 -msgid "`non_eol` is `non_null` restricted to exclude `U+000A` (`'\\n'`)" -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:153 -msgid "`non_star` is `non_null` restricted to exclude `U+002A` (`*`)" -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:153 -msgid "" -"`non_slash_or_star` is `non_null` restricted to exclude `U+002F` (`/`) and `U" -"+002A` (`*`)" -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:153 -msgid "`non_single_quote` is `non_null` restricted to exclude `U+0027` (`'`)" -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:153 -msgid "`non_double_quote` is `non_null` restricted to exclude `U+0022` (`\"`)" -msgstr "" - -#. type: Plain text -#: doc/rust.md:155 +#: doc/rust.md:152 +#, fuzzy +#| msgid "## Conventions" msgid "## Comments" -msgstr "" +msgstr "## 本書の表記について" #. type: Plain text -#: doc/rust.md:162 -msgid "" -"~~~~~~~~ {.ebnf .gram} comment : block_comment | line_comment ; " -"block_comment : \"/*\" block_comment_body * '*' + '/' ; block_comment_body : " -"non_star * | '*' + non_slash_or_star ; line_comment : \"//\" non_eol * ; " -"~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:165 -msgid "" -"Comments in Rust code follow the general C++ style of line and block-comment " -"forms, with no nesting of block-comment delimiters." -msgstr "" - -#. type: Plain text -#: doc/rust.md:170 -msgid "" -"Line comments beginning with _three_ slashes (`///`), and block comments " -"beginning with a repeated asterisk in the block-open sequence (`/**`), are " -"interpreted as a special syntax for `doc` [attributes](#attributes). That " -"is, they are equivalent to writing `#[doc \"...\"]` around the comment's " -"text." -msgstr "" - -#. type: Plain text -#: doc/rust.md:172 -msgid "Non-doc comments are interpreted as a form of whitespace." -msgstr "" - -#. type: Plain text -#: doc/rust.md:174 -msgid "## Whitespace" -msgstr "" - -#. type: Plain text -#: doc/rust.md:179 -msgid "" -"~~~~~~~~ {.ebnf .gram} whitespace_char : '\\x20' | '\\x09' | '\\x0a' | " -"'\\x0d' ; whitespace : [ whitespace_char | comment ] + ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:183 -msgid "" -"The `whitespace_char` production is any nonempty Unicode string consisting " -"of any of the following Unicode characters: `U+0020` (space, `' '`), `U" -"+0009` (tab, `'\\t'`), `U+000A` (LF, `'\\n'`), `U+000D` (CR, `'\\r'`)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:186 -msgid "" -"Rust is a \"free-form\" language, meaning that all forms of whitespace serve " -"only to separate _tokens_ in the grammar, and have no semantic significance." -msgstr "" - -#. type: Plain text -#: doc/rust.md:189 -msgid "" -"A Rust program has identical meaning if each whitespace element is replaced " -"with any other legal whitespace element, such as a single space character." -msgstr "" - -#. type: Plain text -#: doc/rust.md:191 +#: doc/rust.md:190 +#, fuzzy +#| msgid "## Tuples" msgid "## Tokens" -msgstr "" +msgstr "## タプル" #. type: Plain text -#: doc/rust.md:196 -msgid "" -"~~~~~~~~ {.ebnf .gram} simple_token : keyword | unop | binop ; token : " -"simple_token | ident | literal | symbol | whitespace token ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:201 -msgid "" -"Tokens are primitive productions in the grammar defined by regular (non-" -"recursive) languages. \"Simple\" tokens are given in [string table " -"production](#string-table-productions) form, and occur in the rest of the " -"grammar as double-quoted strings. Other tokens have exact rules given." -msgstr "" - -#. type: Plain text -#: doc/rust.md:203 -msgid "### Keywords" -msgstr "" - -#. type: Plain text -#: doc/rust.md:205 -msgid "The keywords are the following strings:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:222 -msgid "" -"~~~~~~~~ {.keyword} as break do else enum extern false fn for if impl let " -"loop match mod mut priv pub ref return self static struct super true trait " -"type unsafe use while ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:225 -msgid "" -"Each of these keywords has special meaning in its grammar, and all of them " -"are excluded from the `ident` rule." -msgstr "" - -#. type: Plain text -#: doc/rust.md:227 +#: doc/rust.md:226 +#, fuzzy +#| msgid "## Operators" msgid "### Literals" -msgstr "" +msgstr "## 演算子" #. type: Plain text -#: doc/rust.md:233 -msgid "" -"A literal is an expression consisting of a single token, rather than a " -"sequence of tokens, that immediately and directly denotes the value it " -"evaluates to, rather than referring to it by name or some other evaluation " -"rule. A literal is a form of constant expression, so is evaluated " -"(primarily) at compile time." -msgstr "" - -#. type: Plain text -#: doc/rust.md:237 -msgid "" -"~~~~~~~~ {.ebnf .gram} literal : string_lit | char_lit | num_lit ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:239 +#: doc/rust.md:238 +#, fuzzy +#| msgid "# Vectors and strings" msgid "#### Character and string literals" -msgstr "" - -#. type: Plain text -#: doc/rust.md:243 -msgid "" -"~~~~~~~~ {.ebnf .gram} char_lit : '\\x27' char_body '\\x27' ; string_lit : " -"'\"' string_body * '\"' ;" -msgstr "" - -#. type: Plain text -#: doc/rust.md:246 -#, no-wrap -msgid "" -"char_body : non_single_quote\n" -" | '\\x5c' [ '\\x27' | common_escape ] ;\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:249 -#, no-wrap -msgid "" -"string_body : non_double_quote\n" -" | '\\x5c' [ '\\x22' | common_escape ] ;\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:255 -#, no-wrap -msgid "" -"common_escape : '\\x5c'\n" -" | 'n' | 'r' | 't'\n" -" | 'x' hex_digit 2\n" -" | 'u' hex_digit 4\n" -" | 'U' hex_digit 8 ;\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:263 -#, no-wrap -msgid "" -"hex_digit : 'a' | 'b' | 'c' | 'd' | 'e' | 'f'\n" -" | 'A' | 'B' | 'C' | 'D' | 'E' | 'F'\n" -" | dec_digit ;\n" -"dec_digit : '0' | nonzero_dec ;\n" -"nonzero_dec: '1' | '2' | '3' | '4'\n" -" | '5' | '6' | '7' | '8' | '9' ;\n" -"~~~~~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:267 -msgid "" -"A _character literal_ is a single Unicode character enclosed within two `U" -"+0027` (single-quote) characters, with the exception of `U+0027` itself, " -"which must be _escaped_ by a preceding U+005C character (`\\`)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:271 -msgid "" -"A _string literal_ is a sequence of any Unicode characters enclosed within " -"two `U+0022` (double-quote) characters, with the exception of `U+0022` " -"itself, which must be _escaped_ by a preceding `U+005C` character (`\\`)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:275 -msgid "" -"Some additional _escapes_ are available in either character or string " -"literals. An escape starts with a `U+005C` (`\\`) and continues with one of " -"the following forms:" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:290 -msgid "" -"An _8-bit codepoint escape_ escape starts with `U+0078` (`x`) and is " -"followed by exactly two _hex digits_. It denotes the Unicode codepoint equal " -"to the provided hex value." -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:290 -msgid "" -"A _16-bit codepoint escape_ starts with `U+0075` (`u`) and is followed by " -"exactly four _hex digits_. It denotes the Unicode codepoint equal to the " -"provided hex value." -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:290 -msgid "" -"A _32-bit codepoint escape_ starts with `U+0055` (`U`) and is followed by " -"exactly eight _hex digits_. It denotes the Unicode codepoint equal to the " -"provided hex value." -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:290 -msgid "" -"A _whitespace escape_ is one of the characters `U+006E` (`n`), `U+0072` " -"(`r`), or `U+0074` (`t`), denoting the unicode values `U+000A` (LF), `U" -"+000D` (CR) or `U+0009` (HT) respectively." -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:290 -msgid "" -"The _backslash escape_ is the character U+005C (`\\`) which must be escaped " -"in order to denote *itself*." -msgstr "" - -#. type: Plain text -#: doc/rust.md:292 -msgid "#### Number literals" -msgstr "" - -#. type: Plain text -#: doc/rust.md:294 doc/rust.md:406 doc/rust.md:473 -msgid "~~~~~~~~ {.ebnf .gram}" -msgstr "" - -#. type: Plain text -#: doc/rust.md:299 -#, no-wrap -msgid "" -"num_lit : nonzero_dec [ dec_digit | '_' ] * num_suffix ?\n" -" | '0' [ [ dec_digit | '_' ] + num_suffix ?\n" -" | 'b' [ '1' | '0' | '_' ] + int_suffix ?\n" -" | 'x' [ hex_digit | '_' ] + int_suffix ? ] ;\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:301 -msgid "num_suffix : int_suffix | float_suffix ;" -msgstr "" - -#. type: Plain text -#: doc/rust.md:305 -#, no-wrap -msgid "" -"int_suffix : 'u' int_suffix_size ?\n" -" | 'i' int_suffix_size ? ;\n" -"int_suffix_size : [ '8' | '1' '6' | '3' '2' | '6' '4' ] ;\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:311 -msgid "" -"float_suffix : [ exponent | '.' dec_lit exponent ? ] ? float_suffix_ty ? ; " -"float_suffix_ty : 'f' [ '3' '2' | '6' '4' ] ; exponent : ['E' | 'e'] ['-' | " -"'+' ] ? dec_lit ; dec_lit : [ dec_digit | '_' ] + ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:315 -msgid "" -"A _number literal_ is either an _integer literal_ or a _floating-point " -"literal_. The grammar for recognizing the two kinds of literals is mixed, as " -"they are differentiated by suffixes." -msgstr "" - -#. type: Plain text -#: doc/rust.md:317 -msgid "##### Integer literals" -msgstr "" - -#. type: Plain text -#: doc/rust.md:319 -msgid "An _integer literal_ has one of three forms:" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:326 -msgid "" -"A _decimal literal_ starts with a *decimal digit* and continues with any " -"mixture of *decimal digits* and _underscores_." -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:326 -msgid "" -"A _hex literal_ starts with the character sequence `U+0030` `U+0078` (`0x`) " -"and continues as any mixture hex digits and underscores." -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:326 -msgid "" -"An _octal literal_ starts with the character sequence `U+0030` `U+006F` (`0o`) " -"and continues as any mixture octal digits and underscores." -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:326 -msgid "" -"A _binary literal_ starts with the character sequence `U+0030` `U+0062` " -"(`0b`) and continues as any mixture binary digits and underscores." -msgstr "" - -#. type: Plain text -#: doc/rust.md:330 -msgid "" -"An integer literal may be followed (immediately, without any spaces) by an " -"_integer suffix_, which changes the type of the literal. There are two kinds " -"of integer literal suffix:" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:336 -msgid "" -"The `i` and `u` suffixes give the literal type `int` or `uint`, respectively." -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:336 -msgid "" -"Each of the signed and unsigned machine types `u8`, `i8`, `u16`, `i16`, " -"`u32`, `i32`, `u64` and `i64` give the literal the corresponding machine " -"type." -msgstr "" - -#. type: Plain text -#: doc/rust.md:343 -msgid "" -"The type of an _unsuffixed_ integer literal is determined by type " -"inference. If a integer type can be _uniquely_ determined from the " -"surrounding program context, the unsuffixed integer literal has that type. " -"If the program context underconstrains the type, the unsuffixed integer " -"literal's type is `int`; if the program context overconstrains the type, it " -"is considered a static type error." -msgstr "" +msgstr "# ベクタと文字列" #. type: Plain text #: doc/rust.md:345 -msgid "Examples of integer literals of various forms:" -msgstr "" +#, fuzzy +#| msgid "# Control structures" +msgid "##### Integer literals" +msgstr "# 制御構造" #. type: Plain text -#: doc/rust.md:350 -#, no-wrap -msgid "" -"~~~~\n" -"123; 0xff00; // type determined by program context\n" -" // defaults to int in absence of type\n" -" // information\n" +#: doc/rust.md:459 +#, fuzzy +#| msgid "~~~~ {.ignore} let foo = 10;" +msgid "~~~~ {.ignore} x; x::y::z; ~~~~" msgstr "" +"~~~~ {.ignore}\n" +"let foo = 10;" #. type: Plain text -#: doc/rust.md:356 -#, no-wrap -msgid "" -"123u; // type uint\n" -"123_u; // type uint\n" -"0xff_u8; // type u8\n" -"0o70_i16; // type i16\n" -"0b1111_1111_1001_0000_i32; // type i32\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:358 -msgid "##### Floating-point literals" -msgstr "" - -#. type: Plain text -#: doc/rust.md:360 -msgid "A _floating-point literal_ has one of two forms:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:365 -msgid "" -"Two _decimal literals_ separated by a period character `U+002E` (`.`), with " -"an optional _exponent_ trailing after the second decimal literal." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:365 -msgid "A single _decimal literal_ followed by an _exponent_." -msgstr "" - -#. type: Plain text -#: doc/rust.md:372 -msgid "" -"By default, a floating-point literal is of type `float`. A floating-point " -"literal may be followed (immediately, without any spaces) by a _floating-" -"point suffix_, which changes the type of the literal. There are three " -"floating-point suffixes: `f` (for the base `float` type), `f32`, and `f64` " -"(the 32-bit and 64-bit floating point types)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:374 -msgid "Examples of floating-point literals of various forms:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:382 -#, no-wrap -msgid "" -"~~~~\n" -"123.0; // type float\n" -"0.1; // type float\n" -"3f; // type float\n" -"0.1f32; // type f32\n" -"12E+99_f64; // type f64\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:384 -msgid "##### Unit and boolean literals" -msgstr "" - -#. type: Plain text -#: doc/rust.md:387 -msgid "" -"The _unit value_, the only value of the type that has the same name, is " -"written as `()`. The two values of the boolean type are written `true` and " -"`false`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:389 -msgid "### Symbols" -msgstr "" - -#. type: Plain text -#: doc/rust.md:395 -#, no-wrap -msgid "" -"~~~~~~~~ {.ebnf .gram}\n" -"symbol : \"::\" \"->\"\n" -" | '#' | '[' | ']' | '(' | ')' | '{' | '}'\n" -" | ',' | ';' ;\n" -"~~~~~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:401 -msgid "" -"Symbols are a general class of printable [token](#tokens) that play " -"structural roles in a variety of grammar productions. They are catalogued " -"here for completeness as the set of remaining miscellaneous printable tokens " -"that do not otherwise appear as [unary operators](#unary-operator-" -"expressions), [binary operators](#binary-operator-expressions), or [keywords]" -"(#keywords)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:404 -msgid "## Paths" -msgstr "" - -#. type: Plain text -#: doc/rust.md:410 -#, no-wrap -msgid "" -"expr_path : ident [ \"::\" expr_path_tail ] + ;\n" -"expr_path_tail : '<' type_expr [ ',' type_expr ] + '>'\n" -" | expr_path ;\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:414 -#, no-wrap -msgid "" -"type_path : ident [ type_path_tail ] + ;\n" -"type_path_tail : '<' type_expr [ ',' type_expr ] + '>'\n" -" | \"::\" type_path ;\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:421 -msgid "" -"A _path_ is a sequence of one or more path components _logically_ separated " -"by a namespace qualifier (`::`). If a path consists of only one component, " -"it may refer to either an [item](#items) or a [slot](#memory-slots) in a " -"local control scope. If a path has multiple components, it refers to an item." -msgstr "" - -#. type: Plain text -#: doc/rust.md:425 -msgid "" -"Every item has a _canonical path_ within its crate, but the path naming an " -"item is only meaningful within a given crate. There is no global namespace " -"across crates; an item's canonical path merely identifies it within the " -"crate." -msgstr "" - -#. type: Plain text -#: doc/rust.md:427 -msgid "Two examples of simple paths consisting of only identifier components:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:432 -msgid "~~~~{.ignore} x; x::y::z; ~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:439 -msgid "" -"Path components are usually [identifiers](#identifiers), but the trailing " -"component of a path may be an angle-bracket-enclosed list of type arguments. " -"In [expression](#expressions) context, the type argument list is given after " -"a final (`::`) namespace qualifier in order to disambiguate it from a " -"relational expression involving the less-than symbol (`<`). In type " -"expression context, the final namespace qualifier is omitted." -msgstr "" - -#. type: Plain text -#: doc/rust.md:441 -msgid "Two examples of paths with type arguments:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:450 -#, no-wrap -msgid "" -"~~~~\n" -"# use std::hashmap::HashMap;\n" -"# fn f() {\n" -"# fn id(t: T) -> T { t }\n" -"type t = HashMap; // Type arguments used in a type expression\n" -"let x = id::(10); // Type arguments used in a call expression\n" -"# }\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:452 +#: doc/rust.md:479 +#, fuzzy +#| msgid "## Syntax extensions" msgid "# Syntax extensions" -msgstr "" +msgstr "## 構文拡張" #. type: Plain text -#: doc/rust.md:457 -msgid "" -"A number of minor features of Rust are not central enough to have their own " -"syntax, and yet are not implementable as functions. Instead, they are given " -"names, and invoked through a consistent syntax: `name!(...)`. Examples " -"include:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:466 -msgid "`fmt!` : format data into a string" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:466 -msgid "`env!` : look up an environment variable's value at compile time" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:466 -msgid "`stringify!` : pretty-print the Rust expression given as an argument" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:466 -msgid "`proto!` : define a protocol for inter-task communication" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:466 -msgid "`include!` : include the Rust expression in the given file" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:466 -msgid "`include_str!` : include the contents of the given file as a string" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:466 -msgid "" -"`include_bin!` : include the contents of the given file as a binary blob" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:466 -msgid "`error!`, `warn!`, `info!`, `debug!` : provide diagnostic information." -msgstr "" - -#. type: Plain text -#: doc/rust.md:469 -msgid "" -"All of the above extensions, with the exception of `proto!`, are expressions " -"with values. `proto!` is an item, defining a new name." -msgstr "" - -#. type: Plain text -#: doc/rust.md:471 -msgid "## Macros" -msgstr "" - -#. type: Plain text -#: doc/rust.md:484 -#, no-wrap -msgid "" -"expr_macro_rules : \"macro_rules\" '!' ident '(' macro_rule * ')'\n" -"macro_rule : '(' matcher * ')' \"=>\" '(' transcriber * ')' ';'\n" -"matcher : '(' matcher * ')' | '[' matcher * ']'\n" -" | '{' matcher * '}' | '$' ident ':' ident\n" -" | '$' '(' matcher * ')' sep_token? [ '*' | '+' ]\n" -" | non_special_token\n" -"transcriber : '(' transcriber * ')' | '[' transcriber * ']'\n" -" | '{' transcriber * '}' | '$' ident\n" -" | '$' '(' transcriber * ')' sep_token? [ '*' | '+' ]\n" -" | non_special_token\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:490 -msgid "" -"User-defined syntax extensions are called \"macros\", and the `macro_rules` " -"syntax extension defines them. Currently, user-defined macros can expand to " -"expressions, statements, or items." -msgstr "" - -#. type: Plain text -#: doc/rust.md:493 -msgid "" -"(A `sep_token` is any token other than `*` and `+`. A `non_special_token` " -"is any token other than a delimiter or `$`.)" -msgstr "" - -#. type: Plain text -#: doc/rust.md:499 -msgid "" -"The macro expander looks up macro invocations by name, and tries each macro " -"rule in turn. It transcribes the first successful match. Matching and " -"transcription are closely related to each other, and we will describe them " -"together." -msgstr "" - -#. type: Plain text -#: doc/rust.md:501 +#: doc/rust.md:524 +#, fuzzy +#| msgid "## A minimal example" msgid "### Macro By Example" -msgstr "" +msgstr "## 最小限の例" #. type: Plain text -#: doc/rust.md:504 -msgid "" -"The macro expander matches and transcribes every token that does not begin " -"with a `$` literally, including delimiters. For parsing reasons, delimiters " -"must be balanced, but they are otherwise not special." -msgstr "" - -#. type: Plain text -#: doc/rust.md:510 -msgid "" -"In the matcher, `$` _name_ `:` _designator_ matches the nonterminal in the " -"Rust syntax named by _designator_. Valid designators are `item`, `block`, " -"`stmt`, `pat`, `expr`, `ty` (type), `ident`, `path`, `matchers` (lhs of the " -"`=>` in macro rules), `tt` (rhs of the `=>` in macro rules). In the " -"transcriber, the designator is already known, and so only the name of a " -"matched nonterminal comes after the dollar sign." -msgstr "" - -#. type: Plain text -#: doc/rust.md:519 -msgid "" -"In both the matcher and transcriber, the Kleene star-like operator indicates " -"repetition. The Kleene star operator consists of `$` and parens, optionally " -"followed by a separator token, followed by `*` or `+`. `*` means zero or " -"more repetitions, `+` means at least one repetition. The parens are not " -"matched or transcribed. On the matcher side, a name is bound to _all_ of " -"the names it matches, in a structure that mimics the structure of the " -"repetition encountered on a successful match. The job of the transcriber is " -"to sort that structure out." -msgstr "" - -#. type: Plain text -#: doc/rust.md:525 -msgid "" -"The rules for transcription of these repetitions are called \"Macro By " -"Example\". Essentially, one \"layer\" of repetition is discharged at a " -"time, and all of them must be discharged by the time a name is transcribed. " -"Therefore, `( $( $i:ident ),* ) => ( $i )` is an invalid macro, but `( $( $i:" -"ident ),* ) => ( $( $i:ident ),* )` is acceptable (if trivial)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:533 -msgid "" -"When Macro By Example encounters a repetition, it examines all of the `$` " -"_name_ s that occur in its body. At the \"current layer\", they all must " -"repeat the same number of times, so ` ( $( $i:ident ),* ; $( $j:ident ),* ) " -"=> ( $( ($i,$j) ),* )` is valid if given the argument `(a,b,c ; d,e,f)`, but " -"not `(a,b,c ; d,e)`. The repetition walks through the choices at that layer " -"in lockstep, so the former input transcribes to `( (a,d), (b,e), (c,f) )`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:535 -msgid "Nested repetitions are allowed." -msgstr "" - -#. type: Plain text -#: doc/rust.md:537 +#: doc/rust.md:560 +#, fuzzy +#| msgid "## Pattern matching" msgid "### Parsing limitations" -msgstr "" +msgstr "## パターンマッチ" #. type: Plain text -#: doc/rust.md:540 -msgid "" -"The parser used by the macro system is reasonably powerful, but the parsing " -"of Rust syntax is restricted in two ways:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:546 -#, no-wrap -msgid "" -"1. The parser will always parse as much as possible. If it attempts to match\n" -"`$i:expr [ , ]` against `8 [ , ]`, it will attempt to parse `i` as an array\n" -"index operation and fail. Adding a separator can solve this problem.\n" -"2. The parser must have eliminated all ambiguity by the time it reaches a `$` _name_ `:` _designator_.\n" -"This requirement most often affects name-designator pairs when they occur at the beginning of, or immediately after, a `$(...)*`; requiring a distinctive token in front can solve the problem.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:549 -msgid "## Syntax extensions useful for the macro author" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:554 -msgid "`log_syntax!` : print out the arguments at compile time" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:554 -msgid "" -"`trace_macros!` : supply `true` or `false` to enable or disable macro " -"expansion logging" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:554 -msgid "`stringify!` : turn the identifier argument into a string literal" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:554 -msgid "" -"`concat_idents!` : create a new identifier by concatenating the arguments" -msgstr "" - -#. type: Plain text -#: doc/rust.md:556 +#: doc/rust.md:579 +#, fuzzy +#| msgid "# Modules and crates" msgid "# Crates and source files" -msgstr "" +msgstr "# モジュールとクレート" #. type: Plain text -#: doc/rust.md:563 -msgid "" -"Rust is a *compiled* language. Its semantics obey a *phase distinction* " -"between compile-time and run-time. Those semantic rules that have a *static " -"interpretation* govern the success or failure of compilation. We refer to " -"these rules as \"static semantics\". Semantic rules called \"dynamic " -"semantics\" govern the behavior of programs at run-time. A program that " -"fails to compile due to violation of a compile-time rule has no defined " -"dynamic semantics; the compiler should halt with an error report, and " -"produce no executable artifact." +#: doc/rust.md:626 +#, fuzzy +#| msgid "// Turn on a warning #[warn(non_camel_case_types)]" +msgid "// Turn on a warning #[ warn(non_camel_case_types) ]; ~~~~" msgstr "" +"// 警告を有効にする\n" +"#[warn(non_camel_case_types)]" #. type: Plain text -#: doc/rust.md:569 -msgid "" -"The compilation model centres on artifacts called _crates_. Each " -"compilation processes a single crate in source form, and if successful, " -"produces a single crate in binary form: either an executable or a library." -"^[A crate is somewhat analogous to an *assembly* in the ECMA-335 CLI model, " -"a *library* in the SML/NJ Compilation Manager, a *unit* in the Owens and " -"Flatt module system, or a *configuration* in Mesa.]" -msgstr "" - -#. type: Plain text -#: doc/rust.md:573 -msgid "" -"A _crate_ is a unit of compilation and linking, as well as versioning, " -"distribution and runtime loading. A crate contains a _tree_ of nested " -"[module](#modules) scopes. The top level of this tree is a module that is " -"anonymous (from the point of view of paths within the module) and any item " -"within a crate has a canonical [module path](#paths) denoting its location " -"within the crate's module tree." -msgstr "" - -#. type: Plain text -#: doc/rust.md:577 -msgid "" -"The Rust compiler is always invoked with a single source file as input, and " -"always produces a single output crate. The processing of that source file " -"may result in other source files being loaded as modules. Source files have " -"the extension `.rs`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:582 -msgid "" -"A Rust source file describes a module, the name and location of which -- in " -"the module tree of the current crate -- are defined from outside the source " -"file: either by an explicit `mod_item` in a referencing source file, or by " -"the name of the crate itself." -msgstr "" - -#. type: Plain text -#: doc/rust.md:587 -msgid "" -"Each source file contains a sequence of zero or more `item` definitions, and " -"may optionally begin with any number of `attributes` that apply to the " -"containing module. Atributes on the anonymous crate module define important " -"metadata that influences the behavior of the compiler." -msgstr "" - -#. type: Plain text -#: doc/rust.md:593 -#, no-wrap -msgid "" -"~~~~~~~~\n" -"// Linkage attributes\n" -"#[ link(name = \"projx\",\n" -" vers = \"2.5\",\n" -" uuid = \"9cccc5d5-aceb-4af5-8285-811211826b82\") ];\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:598 -msgid "" -"// Additional metadata attributes #[ desc = \"Project X\" ]; #[ license = " -"\"BSD\" ]; #[ author = \"Jane Doe\" ];" -msgstr "" - -#. type: Plain text -#: doc/rust.md:601 -msgid "// Specify the output type #[ crate_type = \"lib\" ];" -msgstr "" - -#. type: Plain text -#: doc/rust.md:605 -msgid "// Turn on a warning #[ warn(non_camel_case_types) ]; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:608 -msgid "" -"A crate that contains a `main` function can be compiled to an executable. " -"If a `main` function is present, its return type must be [`unit`](#primitive-" -"types) and it must take no arguments." -msgstr "" - -#. type: Plain text -#: doc/rust.md:611 +#: doc/rust.md:631 +#, fuzzy +#| msgid "# Vectors and strings" msgid "# Items and attributes" -msgstr "" +msgstr "# ベクタと文字列" #. type: Plain text -#: doc/rust.md:614 -msgid "" -"Crates contain [items](#items), each of which may have some number of " -"[attributes](#attributes) attached to it." -msgstr "" - -#. type: Plain text -#: doc/rust.md:616 +#: doc/rust.md:636 +#, fuzzy +#| msgid "## Operators" msgid "## Items" -msgstr "" - -#. type: Plain text -#: doc/rust.md:621 -#, no-wrap -msgid "" -"~~~~~~~~ {.ebnf .gram}\n" -"item : mod_item | fn_item | type_item | struct_item | enum_item\n" -" | static_item | trait_item | impl_item | extern_block ;\n" -"~~~~~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:627 -msgid "" -"An _item_ is a component of a crate; some module items can be defined in " -"crate files, but most are defined in source files. Items are organized " -"within a crate by a nested set of [modules](#modules). Every crate has a " -"single \"outermost\" anonymous module; all further items within the crate " -"have [paths](#paths) within the module tree of the crate." -msgstr "" - -#. type: Plain text -#: doc/rust.md:630 -msgid "" -"Items are entirely determined at compile-time, generally remain fixed during " -"execution, and may reside in read-only memory." -msgstr "" - -#. type: Plain text -#: doc/rust.md:632 -msgid "There are several kinds of item:" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:641 -msgid "[modules](#modules)" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:641 -msgid "[functions](#functions)" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:641 -msgid "[type definitions](#type-definitions)" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:641 -msgid "[structures](#structures)" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:641 -msgid "[enumerations](#enumerations)" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:641 -msgid "[static items](#static-items)" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:641 -msgid "[traits](#traits)" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:641 -msgid "[implementations](#implementations)" -msgstr "" - -#. type: Plain text -#: doc/rust.md:651 -msgid "" -"Some items form an implicit scope for the declaration of sub-items. In other " -"words, within a function or module, declarations of items can (in many " -"cases) be mixed with the statements, control blocks, and similar artifacts " -"that otherwise compose the item body. The meaning of these scoped items is " -"the same as if the item was declared outside the scope -- it is still a " -"static item -- except that the item's *path name* within the module " -"namespace is qualified by the name of the enclosing item, or is private to " -"the enclosing item (in the case of functions). The grammar specifies the " -"exact locations in which sub-item declarations may appear." -msgstr "" - -#. type: Plain text -#: doc/rust.md:653 -msgid "### Type Parameters" -msgstr "" - -#. type: Plain text -#: doc/rust.md:662 -msgid "" -"All items except modules may be *parameterized* by type. Type parameters are " -"given as a comma-separated list of identifiers enclosed in angle brackets " -"(`<...>`), after the name of the item and before its definition. The type " -"parameters of an item are considered \"part of the name\", not part of the " -"type of the item. A referencing [path](#paths) must (in principle) provide " -"type arguments as a list of comma-separated types enclosed within angle " -"brackets, in order to refer to the type-parameterized item. In practice, " -"the type-inference system can usually infer such argument types from " -"context. There are no general type-parametric types, only type-parametric " -"items. That is, Rust has no notion of type abstraction: there are no first-" -"class \"forall\" types." -msgstr "" - -#. type: Plain text -#: doc/rust.md:664 -msgid "### Modules" -msgstr "" - -#. type: Plain text -#: doc/rust.md:669 -msgid "" -"~~~~~~~~ {.ebnf .gram} mod_item : \"mod\" ident ( ';' | '{' mod '}' ); mod : " -"[ view_item | item ] * ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:674 -msgid "" -"A module is a container for zero or more [view items](#view-items) and zero " -"or more [items](#items). The view items manage the visibility of the items " -"defined within the module, as well as the visibility of names from outside " -"the module when referenced from inside the module." -msgstr "" - -#. type: Plain text -#: doc/rust.md:678 -msgid "" -"A _module item_ is a module, surrounded in braces, named, and prefixed with " -"the keyword `mod`. A module item introduces a new, named module into the " -"tree of modules making up a crate. Modules can nest arbitrarily." -msgstr "" - -#. type: Plain text -#: doc/rust.md:680 -msgid "An example of a module:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:698 -#, no-wrap -msgid "" -"~~~~~~~~\n" -"mod math {\n" -" type complex = (f64, f64);\n" -" fn sin(f: f64) -> f64 {\n" -" ...\n" -"# fail!();\n" -" }\n" -" fn cos(f: f64) -> f64 {\n" -" ...\n" -"# fail!();\n" -" }\n" -" fn tan(f: f64) -> f64 {\n" -" ...\n" -"# fail!();\n" -" }\n" -"}\n" -"~~~~~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:703 -msgid "" -"Modules and types share the same namespace. Declaring a named type that has " -"the same name as a module in scope is forbidden: that is, a type definition, " -"trait, struct, enumeration, or type parameter can't shadow the name of a " -"module in scope, or vice versa." -msgstr "" - -#. type: Plain text -#: doc/rust.md:708 -msgid "" -"A module without a body is loaded from an external file, by default with the " -"same name as the module, plus the `.rs` extension. When a nested submodule " -"is loaded from an external file, it is loaded from a subdirectory path that " -"mirrors the module hierarchy." -msgstr "" - -#. type: Plain text -#: doc/rust.md:712 -msgid "~~~ {.xfail-test} // Load the `vec` module from `vec.rs` mod vec;" -msgstr "" - -#. type: Plain text -#: doc/rust.md:718 -#, no-wrap -msgid "" -"mod task {\n" -" // Load the `local_data` module from `task/local_data.rs`\n" -" mod local_data;\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:721 -msgid "" -"The directories and files used for loading external file modules can be " -"influenced with the `path` attribute." -msgstr "" - -#. type: Plain text -#: doc/rust.md:730 -#, no-wrap -msgid "" -"~~~ {.xfail-test}\n" -"#[path = \"task_files\"]\n" -"mod task {\n" -" // Load the `local_data` module from `task_files/tls.rs`\n" -" #[path = \"tls.rs\"]\n" -" mod local_data;\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:732 -msgid "#### View items" -msgstr "" - -#. type: Plain text -#: doc/rust.md:736 -msgid "" -"~~~~~~~~ {.ebnf .gram} view_item : extern_mod_decl | use_decl ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:740 -msgid "" -"A view item manages the namespace of a module. View items do not define new " -"items, but rather, simply change other items' visibility. There are several " -"kinds of view item:" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:743 -msgid "[`extern mod` declarations](#extern-mod-declarations)" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:743 -msgid "[`use` declarations](#use-declarations)" -msgstr "" - -#. type: Plain text -#: doc/rust.md:745 -msgid "##### Extern mod declarations" -msgstr "" - -#. type: Plain text -#: doc/rust.md:751 -msgid "" -"~~~~~~~~ {.ebnf .gram} extern_mod_decl : \"extern\" \"mod\" ident [ '(' " -"link_attrs ')' ] ? [ '=' string_lit ] ? ; link_attrs : link_attr [ ',' " -"link_attrs ] + ; link_attr : ident '=' literal ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:755 -msgid "" -"An _`extern mod` declaration_ specifies a dependency on an external crate. " -"The external crate is then bound into the declaring scope as the `ident` " -"provided in the `extern_mod_decl`." -msgstr "" +msgstr "## 演算子" #. type: Plain text #: doc/rust.md:765 -msgid "" -"The external crate is resolved to a specific `soname` at compile time, and a " -"runtime linkage requirement to that `soname` is passed to the linker for " -"loading at runtime. The `soname` is resolved at compile time by scanning " -"the compiler's library path and matching the `link_attrs` provided in the " -"`use_decl` against any `#link` attributes that were declared on the external " -"crate when it was compiled. If no `link_attrs` are provided, a default " -"`name` attribute is assumed, equal to the `ident` given in the `use_decl`." -msgstr "" +#, fuzzy +#| msgid "## Using other crates" +msgid "##### Extern mod declarations" +msgstr "## 他のクレートの利用" #. type: Plain text -#: doc/rust.md:775 -msgid "" -"Optionally, an identifier in an `extern mod` declaration may be followed by " -"an equals sign, then a string literal denoting a relative path on the " -"filesystem. This path should exist in one of the directories in the Rust " -"path, which by default contains the `.rust` subdirectory of the current " -"directory and each of its parents, as well as any directories in the colon-" -"separated (or semicolon-separated on Windows) list of paths that is the " -"`RUST_PATH` environment variable. The meaning of `extern mod a = \"b/c/d\";" -"`, supposing that `/a` is in the RUST_PATH, is that the name `a` should be " -"taken as a reference to the crate whose absolute location is `/a/b/c/d`." +#: doc/rust.md:788 +#, fuzzy +#| msgid "~~~~ {.ignore} let foo = 10;" +msgid "~~~~ {.xfail-test} extern mod pcre;" msgstr "" +"~~~~ {.ignore}\n" +"let foo = 10;" #. type: Plain text -#: doc/rust.md:777 -msgid "Four examples of `extern mod` declarations:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:780 -msgid "" -"~~~~~~~~{.xfail-test} extern mod pcre (uuid = \"54aba0f8-" -"a7b1-4beb-92f1-4cf625264841\");" -msgstr "" - -#. type: Plain text -#: doc/rust.md:782 -msgid "" -"extern mod extra; // equivalent to: extern mod extra ( name = \"extra\" );" -msgstr "" - -#. type: Plain text -#: doc/rust.md:784 -msgid "" -"extern mod rustextra (name = \"extra\"); // linking to 'extra' under another " -"name" -msgstr "" - -#. type: Plain text -#: doc/rust.md:787 -msgid "extern mod complicated_mod = \"some-file/in/the-rust/path\"; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:789 +#: doc/rust.md:797 +#, fuzzy +#| msgid "## Conventions" msgid "##### Use declarations" -msgstr "" +msgstr "## 本書の表記について" #. type: Plain text -#: doc/rust.md:793 -#, no-wrap -msgid "" -"~~~~~~~~ {.ebnf .gram}\n" -"use_decl : \"pub\"? \"use\" ident [ '=' path\n" -" | \"::\" path_glob ] ;\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:798 -#, no-wrap -msgid "" -"path_glob : ident [ \"::\" path_glob ] ?\n" -" | '*'\n" -" | '{' ident [ ',' ident ] * '}'\n" -"~~~~~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:802 -msgid "" -"A _use declaration_ creates one or more local name bindings synonymous with " -"some other [path](#paths). Usually a `use` declaration is used to shorten " -"the path required to refer to a module item." -msgstr "" - -#. type: Plain text -#: doc/rust.md:806 -#, no-wrap -msgid "" -"*Note*: Unlike in many languages,\n" -"`use` declarations in Rust do *not* declare linkage dependency with external crates.\n" -"Rather, [`extern mod` declarations](#extern-mod-declarations) declare linkage dependencies.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:808 -msgid "Use declarations support a number of convenient shortcuts:" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:813 -msgid "" -"Rebinding the target name as a new local name, using the syntax `use x = p::" -"q::r;`." -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:813 -msgid "" -"Simultaneously binding a list of paths differing only in their final " -"element, using the glob-like brace syntax `use a::b::{c,d,e,f};`" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:813 -msgid "" -"Binding all paths matching a given prefix, using the asterisk wildcard " -"syntax `use a::b::*;`" -msgstr "" - -#. type: Plain text -#: doc/rust.md:815 -msgid "An example of `use` declarations:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:819 +#: doc/rust.md:827 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" msgid "~~~~ use std::num::sin; use std::option::{Some, None};" msgstr "" - -#. type: Plain text -#: doc/rust.md:823 -#, no-wrap -msgid "" -"fn main() {\n" -" // Equivalent to 'info!(std::num::sin(1.0));'\n" -" info!(sin(1.0));\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:828 -#, no-wrap -msgid "" -" // Equivalent to 'info!(~[std::option::Some(1.0), std::option::None]);'\n" -" info!(~[Some(1.0), None]);\n" -"}\n" "~~~~\n" -msgstr "" +"use std::task::spawn;" #. type: Plain text -#: doc/rust.md:836 -msgid "" -"Like items, `use` declarations are private to the containing module, by " -"default. Also like items, a `use` declaration can be public, if qualified " -"by the `pub` keyword. Such a `use` declaration serves to _re-export_ a " -"name. A public `use` declaration can therefore _redirect_ some public name " -"to a different target definition: even a definition with a private canonical " -"path, inside a different module. If a sequence of such redirections form a " -"cycle or cannot be resolved unambiguously, they represent a compile-time " -"error." -msgstr "" - -#. type: Plain text -#: doc/rust.md:842 -#, no-wrap -msgid "" -"An example of re-exporting:\n" -"~~~~\n" -"# fn main() { }\n" -"mod quux {\n" -" pub use quux::foo::*;\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:849 -#, no-wrap -msgid "" -" pub mod foo {\n" -" pub fn bar() { }\n" -" pub fn baz() { }\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:851 -msgid "" -"In this example, the module `quux` re-exports all of the public names " -"defined in `foo`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:854 -msgid "" -"Also note that the paths contained in `use` items are relative to the crate " -"root. So, in the previous example, the `use` refers to `quux::foo::*`, and " -"not simply to `foo::*`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:856 +#: doc/rust.md:900 +#, fuzzy +#| msgid "# Functions" msgid "### Functions" -msgstr "" +msgstr "# 関数" #. type: Plain text -#: doc/rust.md:860 -msgid "" -"A _function item_ defines a sequence of [statements](#statements) and an " -"optional final [expression](#expressions), along with a name and a set of " -"parameters. Functions are declared with the keyword `fn`. Functions " -"declare a set of *input* [*slots*](#memory-slots) as parameters, through " -"which the caller passes arguments into the function, and an *output* [*slot*]" -"(#memory-slots) through which the function passes results back to the caller." +#: doc/rust.md:930 +#, fuzzy +#| msgid "~~~ fn first((value, _): (int, f64)) -> int { value } ~~~" +msgid "~~~~ fn first((value, _): (int, int)) -> int { value } ~~~~" msgstr "" +"~~~\n" +"fn first((value, _): (int, f64)) -> int { value }\n" +"~~~" #. type: Plain text -#: doc/rust.md:865 -msgid "" -"A function may also be copied into a first class *value*, in which case the " -"value has the corresponding [*function type*](#function-types), and can be " -"used otherwise exactly as a function item (with a minor additional cost of " -"calling the function indirectly)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:871 -msgid "" -"Every control path in a function logically ends with a `return` expression " -"or a diverging expression. If the outermost block of a function has a value-" -"producing expression in its final-expression position, that expression is " -"interpreted as an implicit `return` expression applied to the final-" -"expression." -msgstr "" - -#. type: Plain text -#: doc/rust.md:873 -msgid "An example of a function:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:879 -#, no-wrap -msgid "" -"~~~~\n" -"fn add(x: int, y: int) -> int {\n" -" return x + y;\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:882 -msgid "" -"As with `let` bindings, function arguments are irrefutable patterns, so any " -"pattern that is valid in a let binding is also valid as an argument." -msgstr "" - -#. type: Plain text -#: doc/rust.md:886 -msgid "~~~ fn first((value, _): (int, int)) -> int { value } ~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:889 +#: doc/rust.md:933 +#, fuzzy +#| msgid "## Conventions" msgid "#### Generic functions" -msgstr "" +msgstr "## 本書の表記について" #. type: Plain text -#: doc/rust.md:894 -msgid "" -"A _generic function_ allows one or more _parameterized types_ to appear in " -"its signature. Each type parameter must be explicitly declared, in an angle-" -"bracket-enclosed, comma-separated list following the function name." -msgstr "" - -#. type: Plain text -#: doc/rust.md:905 -#, no-wrap -msgid "" -"~~~~ {.xfail-test}\n" -"fn iter(seq: &[T], f: |T|) {\n" -" for elt in seq.iter() { f(elt); }\n" -"}\n" -"fn map(seq: &[T], f: |T| -> U) -> ~[U] {\n" -" let mut acc = ~[];\n" -" for elt in seq.iter() { acc.push(f(elt)); }\n" -" acc\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:908 -msgid "" -"Inside the function signature and body, the name of the type parameter can " -"be used as a type name." -msgstr "" - -#. type: Plain text -#: doc/rust.md:914 -msgid "" -"When a generic function is referenced, its type is instantiated based on the " -"context of the reference. For example, calling the `iter` function defined " -"above on `[1, 2]` will instantiate type parameter `T` with `int`, and " -"require the closure parameter to have type `fn(int)`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:919 -msgid "" -"The type parameters can also be explicitly supplied in a trailing [path]" -"(#paths) component after the function name. This might be necessary if there " -"is not sufficient context to determine the type parameters. For example, " -"`mem::size_of::() == 4`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:923 -msgid "" -"Since a parameter type is opaque to the generic function, the set of " -"operations that can be performed on it is limited. Values of parameter type " -"can only be moved, not copied." -msgstr "" - -#. type: Plain text -#: doc/rust.md:927 +#: doc/rust.md:971 +#, fuzzy +#| msgid "~~~~ let square = |x: int| -> uint { (x * x) as uint }; ~~~~" msgid "~~~~ fn id(x: T) -> T { x } ~~~~" msgstr "" +"~~~~\n" +"let square = |x: int| -> uint { (x * x) as uint };\n" +"~~~~~~~~\n" #. type: Plain text -#: doc/rust.md:931 -msgid "" -"Similarly, [trait](#traits) bounds can be specified for type parameters to " -"allow methods with that trait to be called on values of that type." -msgstr "" - -#. type: Plain text -#: doc/rust.md:934 -msgid "#### Unsafe functions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:937 -msgid "" -"Unsafe functions are those containing unsafe operations that are not " -"contained in an [`unsafe` block](#unsafe-blocks). Such a function must be " -"prefixed with the keyword `unsafe`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:940 -msgid "" -"Unsafe operations are those that potentially violate the memory-safety " -"guarantees of Rust's static semantics. Specifically, the following " -"operations are considered unsafe:" -msgstr "" +#: doc/rust.md:978 +#, fuzzy +#| msgid "## Conventions" +msgid "#### Unsafety" +msgstr "## 本書の表記について" #. type: Bullet: ' - ' -#: doc/rust.md:944 +#: doc/rust.md:985 +#, fuzzy +#| msgid "# Dereferencing pointers" msgid "Dereferencing a [raw pointer](#pointer-types)." -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:944 -msgid "Casting a [raw pointer](#pointer-types) to a safe pointer type." -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:944 -msgid "Calling an unsafe function." -msgstr "" +msgstr "# ポインタのデリファレンス" #. type: Plain text -#: doc/rust.md:946 +#: doc/rust.md:987 +#, fuzzy +#| msgid "## Conventions" +msgid "##### Unsafe functions" +msgstr "## 本書の表記について" + +#. type: Plain text +#: doc/rust.md:992 +#, fuzzy +#| msgid "## Conventions" msgid "##### Unsafe blocks" -msgstr "" +msgstr "## 本書の表記について" + +#. type: Bullet: '* ' +#: doc/rust.md:1034 +#, fuzzy +#| msgid "# Data structures" +msgid "Data races" +msgstr "# データ構造" + +#. type: Bullet: '* ' +#: doc/rust.md:1034 +#, fuzzy +#| msgid "# Dereferencing pointers" +msgid "Dereferencing a null/dangling raw pointer" +msgstr "# ポインタのデリファレンス" #. type: Plain text -#: doc/rust.md:950 -msgid "" -"A block of code can also be prefixed with the `unsafe` keyword, to permit a " -"sequence of unsafe operations in an otherwise-safe function. This facility " -"exists because the static semantics of Rust are a necessary approximation of " -"the dynamic semantics. When a programmer has sufficient conviction that a " -"sequence of unsafe operations is actually safe, they can encapsulate that " -"sequence (taken as a whole) within an `unsafe` block. The compiler will " -"consider uses of such code \"safe\", to the surrounding context." -msgstr "" - -#. type: Plain text -#: doc/rust.md:953 +#: doc/rust.md:1049 +#, fuzzy +#| msgid "## Conventions" msgid "#### Diverging functions" -msgstr "" +msgstr "## 本書の表記について" #. type: Plain text -#: doc/rust.md:956 -msgid "" -"A special kind of function can be declared with a `!` character where the " -"output slot type would normally be. For example:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:963 -#, no-wrap -msgid "" -"~~~~\n" -"fn my_err(s: &str) -> ! {\n" -" info!(s);\n" -" fail!();\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:970 -msgid "" -"We call such functions \"diverging\" because they never return a value to " -"the caller. Every control path in a diverging function must end with a `fail!" -"()` or a call to another diverging function on every control path. The `!` " -"annotation does *not* denote a type. Rather, the result type of a diverging " -"function is a special type called $\\bot$ (\"bottom\") that unifies with any " -"type. Rust has no syntax for $\\bot$." -msgstr "" - -#. type: Plain text -#: doc/rust.md:976 -msgid "" -"It might be necessary to declare a diverging function because as mentioned " -"previously, the typechecker checks that every control path in a function " -"ends with a [`return`](#return-expressions) or diverging expression. So, if " -"`my_err` were declared without the `!` annotation, the following code would " -"not typecheck:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:979 -msgid "~~~~ # fn my_err(s: &str) -> ! { fail!() }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:989 -#, no-wrap -msgid "" -"fn f(i: int) -> int {\n" -" if i == 42 {\n" -" return 42;\n" -" }\n" -" else {\n" -" my_err(\"Bad number!\");\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:997 -msgid "" -"This will not compile without the `!` annotation on `my_err`, since the " -"`else` branch of the conditional in `f` does not return an `int`, as " -"required by the signature of `f`. Adding the `!` annotation to `my_err` " -"informs the typechecker that, should control ever enter `my_err`, no further " -"type judgments about `f` need to hold, since control will never resume in " -"any context that relies on those judgments. Thus the return type on `f` " -"only needs to reflect the `if` branch of the conditional." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1000 +#: doc/rust.md:1096 +#, fuzzy +#| msgid "## Conventions" msgid "#### Extern functions" -msgstr "" +msgstr "## 本書の表記について" #. type: Plain text -#: doc/rust.md:1007 -msgid "" -"Extern functions are part of Rust's foreign function interface, providing " -"the opposite functionality to [external blocks](#external-blocks). Whereas " -"external blocks allow Rust code to call foreign code, extern functions with " -"bodies defined in Rust code _can be called by foreign code_. They are " -"defined in the same way as any other Rust function, except that they have " -"the `extern` modifier." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1011 -msgid "~~~ extern fn new_vec() -> ~[int] { ~[] } ~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1014 -msgid "" -"Extern functions may not be called from Rust code, but Rust code may take " -"their value as a raw `u8` pointer." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1019 -msgid "" -"~~~ # extern fn new_vec() -> ~[int] { ~[] } let fptr: *u8 = new_vec; ~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1023 -msgid "" -"The primary motivation for extern functions is to create callbacks for " -"foreign functions that expect to receive function pointers." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1025 +#: doc/rust.md:1125 +#, fuzzy +#| msgid "## Conventions" msgid "### Type definitions" -msgstr "" +msgstr "## 本書の表記について" #. type: Plain text -#: doc/rust.md:1029 -msgid "" -"A _type definition_ defines a new name for an existing [type](#types). Type " -"definitions are declared with the keyword `type`. Every value has a single, " -"specific type; the type-specified aspects of a value include:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1035 -msgid "Whether the value is composed of sub-values or is indivisible." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1035 -msgid "Whether the value represents textual or numerical information." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1035 -msgid "Whether the value represents integral or floating-point information." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1035 -msgid "The sequence of memory operations required to access the value." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1035 -msgid "The [kind](#type-kinds) of the type." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1038 -msgid "" -"For example, the type `(u8, u8)` defines the set of immutable values that " -"are composite pairs, each containing two unsigned 8-bit integers accessed by " -"pattern-matching and laid out in memory with the `x` component preceding the " -"`y` component." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1040 +#: doc/rust.md:1140 +#, fuzzy +#| msgid "## Structs" msgid "### Structures" -msgstr "" +msgstr "## 構造体" #. type: Plain text -#: doc/rust.md:1042 -msgid "" -"A _structure_ is a nominal [structure type](#structure-types) defined with " -"the keyword `struct`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1044 -msgid "An example of a `struct` item and its use:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1050 +#: doc/rust.md:1150 +#, fuzzy +#| msgid "" +#| "~~~ # struct Point { x: f64, y: f64 } let point = &@~Point { x: 10f, y: " +#| "20f }; println(fmt!(\"%f\", point.x)); ~~~" msgid "" "~~~~ struct Point {x: int, y: int} let p = Point {x: 10, y: 11}; let px: int " "= p.x; ~~~~" msgstr "" - -#. type: Plain text -#: doc/rust.md:1053 -msgid "" -"A _tuple structure_ is a nominal [tuple type](#tuple-types), also defined " -"with the keyword `struct`. For example:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1059 -msgid "" -"~~~~ struct Point(int, int); let p = Point(10, 11); let px: int = match p " -"{ Point(x, _) => x }; ~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1063 -msgid "" -"A _unit-like struct_ is a structure without any fields, defined by leaving " -"off the list of fields entirely. Such types will have a single value, just " -"like the [unit value `()`](#unit-and-boolean-literals) of the unit type. " -"For example:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1068 -msgid "~~~~ struct Cookie; let c = [Cookie, Cookie, Cookie, Cookie]; ~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1070 -msgid "### Enumerations" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1073 -msgid "" -"An _enumeration_ is a simultaneous definition of a nominal [enumerated type]" -"(#enumerated-types) as well as a set of *constructors*, that can be used to " -"create or pattern-match values of the corresponding enumerated type." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1075 -msgid "Enumerations are declared with the keyword `enum`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1077 -msgid "An example of an `enum` item and its use:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1083 -#, no-wrap -msgid "" -"~~~~\n" -"enum Animal {\n" -" Dog,\n" -" Cat\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1087 -msgid "let mut a: Animal = Dog; a = Cat; ~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1094 -#, no-wrap -msgid "" -"Enumeration constructors can have either named or unnamed fields:\n" -"~~~~\n" -"enum Animal {\n" -" Dog (~str, float),\n" -" Cat { name: ~str, weight: float }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1098 -msgid "" -"let mut a: Animal = Dog(~\"Cocoa\", 37.2); a = Cat{ name: ~\"Spotty\", " -"weight: 2.7 }; ~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1101 -msgid "" -"In this example, `Cat` is a _struct-like enum variant_, whereas `Dog` is " -"simply called an enum variant." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1103 -msgid "### Static items" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1107 -msgid "" -"~~~~~~~~ {.ebnf .gram} static_item : \"static\" ident ':' type '=' expr " -"';' ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1114 -msgid "" -"A *static item* is a named _constant value_ stored in the global data " -"section of a crate. Immutable static items are stored in the read-only data " -"section. The constant value bound to a static item is, like all constant " -"values, evaluated at compile time. Static items have the `static` lifetime, " -"which outlives all other lifetimes in a Rust program. Static items are " -"declared with the `static` keyword. A static item must have a _constant " -"expression_ giving its definition." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1119 -msgid "" -"Static items must be explicitly typed. The type may be ```bool```, " -"```char```, a number, or a type derived from those primitive types. The " -"derived types are borrowed pointers with the `'static` lifetime, fixed-size " -"arrays, tuples, and structs." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1123 -msgid "~~~~ static BIT1: uint = 1 << 0; static BIT2: uint = 1 << 1;" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1126 -msgid "" -"static BITS: [uint, ..2] = [BIT1, BIT2]; static STRING: &'static str = " -"\"bitstring\";" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1131 -#, no-wrap -msgid "" -"struct BitsNStrings<'self> {\n" -" mybits: [uint, ..2],\n" -" mystring: &'self str\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1137 -#, no-wrap -msgid "" -"static bits_n_strings: BitsNStrings<'static> = BitsNStrings {\n" -" mybits: BITS,\n" -" mystring: STRING\n" -"};\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1139 -msgid "#### Mutable statics" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1147 -msgid "" -"If a static item is declared with the ```mut``` keyword, then it is allowed " -"to be modified by the program. One of Rust's goals is to make concurrency " -"bugs hard to run into, and this is obviously a very large source of race " -"conditions or other bugs. For this reason, an ```unsafe``` block is required " -"when either reading or writing a mutable static variable. Care should be " -"taken to ensure that modifications to a mutable static are safe with respect " -"to other tasks running in the same process." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1150 -msgid "" -"Mutable statics are still very useful, however. They can be used with C " -"libraries and can also be bound from C libraries (in an ```extern``` block)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1153 -msgid "~~~ # fn atomic_add(_: &mut uint, _: uint) -> uint { 2 }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1155 -msgid "static mut LEVELS: uint = 0;" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1163 -#, no-wrap -msgid "" -"// This violates the idea of no shared state, and this doesn't internally\n" -"// protect against races, so this function is `unsafe`\n" -"unsafe fn bump_levels_unsafe1() -> uint {\n" -" let ret = LEVELS;\n" -" LEVELS += 1;\n" -" return ret;\n" -"}\n" -msgstr "" +"~~~\n" +"# struct Point { x: f64, y: f64 }\n" +"let point = &@~Point { x: 10f, y: 20f };\n" +"println(fmt!(\"%f\", point.x));\n" +"~~~" #. type: Plain text #: doc/rust.md:1170 -#, no-wrap -msgid "" -"// Assuming that we have an atomic_add function which returns the old value,\n" -"// this function is \"safe\" but the meaning of the return value may not be what\n" -"// callers expect, so it's still marked as `unsafe`\n" -"unsafe fn bump_levels_unsafe2() -> uint {\n" -" return atomic_add(&mut LEVELS, 1);\n" -"}\n" -msgstr "" +#, fuzzy +#| msgid "## Enums" +msgid "### Enumerations" +msgstr "## 列挙型" #. type: Plain text -#: doc/rust.md:1172 -msgid "~~~" -msgstr "" +#: doc/rust.md:1204 +#, fuzzy +#| msgid "## Structs" +msgid "### Static items" +msgstr "## 構造体" #. type: Plain text -#: doc/rust.md:1174 +#: doc/rust.md:1240 +#, fuzzy +#| msgid "# Move semantics" +msgid "#### Mutable statics" +msgstr "# ムーブセマンティクス" + +#. type: Plain text +#: doc/rust.md:1274 +#, fuzzy +#| msgid "## Traits" msgid "### Traits" -msgstr "" +msgstr "## トレイト" #. type: Plain text -#: doc/rust.md:1176 -msgid "A _trait_ describes a set of method types." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1181 -msgid "" -"Traits can include default implementations of methods, written in terms of " -"some unknown [`self` type](#self-types); the `self` type may either be " -"completely unspecified, or constrained by some other trait." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1183 -msgid "" -"Traits are implemented for specific types through separate [implementations]" -"(#implementations)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1187 -msgid "~~~~ # type Surface = int; # type BoundingBox = int;" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1193 -#, no-wrap -msgid "" -"trait Shape {\n" -" fn draw(&self, Surface);\n" -" fn bounding_box(&self) -> BoundingBox;\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1197 -msgid "" -"This defines a trait with two methods. All values that have " -"[implementations](#implementations) of this trait in scope can have their " -"`draw` and `bounding_box` methods called, using `value.bounding_box()` " -"[syntax](#method-call-expressions)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1200 -msgid "" -"Type parameters can be specified for a trait to make it generic. These " -"appear after the trait name, using the same syntax used in [generic " -"functions](#generic-functions)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1208 -#, no-wrap -msgid "" -"~~~~\n" -"trait Seq {\n" -" fn len(&self) -> uint;\n" -" fn elt_at(&self, n: uint) -> T;\n" -" fn iter(&self, |T|);\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1214 -msgid "" -"Generic functions may use traits as _bounds_ on their type parameters. This " -"will have two effects: only types that have the trait may instantiate the " -"parameter, and within the generic function, the methods of the trait can be " -"called on values that have the parameter's type. For example:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1218 -msgid "~~~~ # type Surface = int; # trait Shape { fn draw(&self, Surface); }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1224 -#, no-wrap -msgid "" -"fn draw_twice(surface: Surface, sh: T) {\n" -" sh.draw(surface);\n" -" sh.draw(surface);\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1229 -msgid "" -"Traits also define an [object type](#object-types) with the same name as the " -"trait. Values of this type are created by [casting](#type-cast-expressions) " -"pointer values (pointing to a type for which an implementation of the given " -"trait is in scope) to pointers to the trait name, used as a type." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1234 -msgid "~~~~ # trait Shape { } # impl Shape for int { } # let mycircle = 0;" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1237 -msgid "let myshape: @Shape = @mycircle as @Shape; ~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1243 -msgid "" -"The resulting value is a managed box containing the value that was cast, " -"along with information that identifies the methods of the implementation " -"that was used. Values with a trait type can have [methods called](#method-" -"call-expressions) on them, for any method in the trait, and can be used to " -"instantiate type parameters that are bounded by the trait." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1251 -msgid "" -"Trait methods may be static, which means that they lack a `self` argument. " -"This means that they can only be called with function call syntax (`f(x)`) " -"and not method call syntax (`obj.f()`). The way to refer to the name of a " -"static method is to qualify it with the trait name, treating the trait name " -"like a module. For example:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1261 -#, no-wrap -msgid "" -"~~~~\n" -"trait Num {\n" -" fn from_int(n: int) -> Self;\n" -"}\n" -"impl Num for float {\n" -" fn from_int(n: int) -> float { n as float }\n" -"}\n" -"let x: float = Num::from_int(42);\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1263 +#: doc/rust.md:1363 +#, fuzzy +#| msgid "Enum variants may also be structs. For example:" msgid "Traits may inherit from other traits. For example, in" -msgstr "" +msgstr "以下の例のように、列挙型バリアントを構造体にすることも可能です。" #. type: Plain text -#: doc/rust.md:1268 +#: doc/rust.md:1368 +#, fuzzy +#| msgid "" +#| "~~~~ trait Shape { fn area(&self) -> f64; } trait Circle : Shape { fn " +#| "radius(&self) -> f64; } ~~~~" msgid "" -"~~~~ trait Shape { fn area() -> float; } trait Circle : Shape { fn radius() -" -"> float; } ~~~~" +"~~~~ trait Shape { fn area() -> f64; } trait Circle : Shape { fn radius() -> " +"f64; } ~~~~" msgstr "" +"~~~~\n" +"trait Shape { fn area(&self) -> f64; }\n" +"trait Circle : Shape { fn radius(&self) -> f64; }\n" +"~~~~" #. type: Plain text -#: doc/rust.md:1273 -msgid "" -"the syntax `Circle : Shape` means that types that implement `Circle` must " -"also have an implementation for `Shape`. Multiple supertraits are separated " -"by spaces, `trait Circle : Shape Eq { }`. In an implementation of `Circle` " -"for a given type `T`, methods can refer to `Shape` methods, since the " -"typechecker checks that any type with an implementation of `Circle` also has " -"an implementation of `Shape`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1277 doc/tutorial.md:2176 +#: doc/rust.md:1377 +#, fuzzy +#| msgid "" +#| "In type-parameterized functions, methods of the supertrait may be called " +#| "on values of subtrait-bound type parameters. Refering to the previous " +#| "example of `trait Circle : Shape`:" msgid "" "In type-parameterized functions, methods of the supertrait may be called on " -"values of subtrait-bound type parameters. Refering to the previous example " +"values of subtrait-bound type parameters. Referring to the previous example " "of `trait Circle : Shape`:" msgstr "" "型パラメータを持つ関数では、サブトレイトの境界型パラメータの値によりスーパー" @@ -2523,3981 +372,657 @@ msgstr "" "を参照してください。" #. type: Plain text -#: doc/rust.md:1286 doc/tutorial.md:2185 -#, no-wrap +#: doc/rust.md:1386 +#, fuzzy, no-wrap +#| msgid "" +#| "~~~\n" +#| "# trait Shape { fn area(&self) -> f64; }\n" +#| "# trait Circle : Shape { fn radius(&self) -> f64; }\n" +#| "fn radius_times_area(c: T) -> f64 {\n" +#| " // `c` is both a Circle and a Shape\n" +#| " c.radius() * c.area()\n" +#| "}\n" +#| "~~~\n" msgid "" -"~~~\n" -"# trait Shape { fn area(&self) -> float; }\n" -"# trait Circle : Shape { fn radius(&self) -> float; }\n" -"fn radius_times_area(c: T) -> float {\n" +"~~~~\n" +"# trait Shape { fn area(&self) -> f64; }\n" +"# trait Circle : Shape { fn radius(&self) -> f64; }\n" +"fn radius_times_area(c: T) -> f64 {\n" " // `c` is both a Circle and a Shape\n" " c.radius() * c.area()\n" "}\n" -"~~~\n" +"~~~~\n" msgstr "" "~~~\n" -"# trait Shape { fn area(&self) -> float; }\n" -"# trait Circle : Shape { fn radius(&self) -> float; }\n" -"fn radius_times_area(c: T) -> float {\n" +"# trait Shape { fn area(&self) -> f64; }\n" +"# trait Circle : Shape { fn radius(&self) -> f64; }\n" +"fn radius_times_area(c: T) -> f64 {\n" " // `c` は Circle でもあり、Shape でもある\n" " c.radius() * c.area()\n" "}\n" "~~~\n" #. type: Plain text -#: doc/rust.md:1288 doc/tutorial.md:2187 +#: doc/rust.md:1388 doc/tutorial.md:2508 msgid "Likewise, supertrait methods may also be called on trait objects." msgstr "" "同様に、スーパートレイトのメソッドは、トレイトオブジェクトについても呼び出す" "ことが可能です。" #. type: Plain text -#: doc/rust.md:1295 +#: doc/rust.md:1395 +#, fuzzy +#| msgid "" +#| "~~~ {.xfail-test} use std::f64::consts::pi; # trait Shape { fn " +#| "area(&self) -> f64; } # trait Circle : Shape { fn radius(&self) -> f64; } " +#| "# struct Point { x: f64, y: f64 } # struct CircleStruct { center: Point, " +#| "radius: f64 } # impl Circle for CircleStruct { fn radius(&self) -> f64 " +#| "{ (self.area() / pi).sqrt() } } # impl Shape for CircleStruct { fn " +#| "area(&self) -> f64 { pi * square(self.radius) } }" msgid "" -"~~~ {.xfail-test} # trait Shape { fn area(&self) -> float; } # trait " -"Circle : Shape { fn radius(&self) -> float; } # impl Shape for int { fn " -"area(&self) -> float { 0.0 } } # impl Circle for int { fn radius(&self) -> " -"float { 0.0 } } # let mycircle = 0;" +"~~~~ {.xfail-test} # trait Shape { fn area(&self) -> f64; } # trait Circle : " +"Shape { fn radius(&self) -> f64; } # impl Shape for int { fn area(&self) -> " +"f64 { 0.0 } } # impl Circle for int { fn radius(&self) -> f64 { 0.0 } } # " +"let mycircle = 0;" msgstr "" +"~~~ {.xfail-test}\n" +"use std::f64::consts::pi;\n" +"# trait Shape { fn area(&self) -> f64; }\n" +"# trait Circle : Shape { fn radius(&self) -> f64; }\n" +"# struct Point { x: f64, y: f64 }\n" +"# struct CircleStruct { center: Point, radius: f64 }\n" +"# impl Circle for CircleStruct { fn radius(&self) -> f64 { (self.area() / " +"pi).sqrt() } }\n" +"# impl Shape for CircleStruct { fn area(&self) -> f64 { pi * square(self." +"radius) } }" #. type: Plain text -#: doc/rust.md:1299 +#: doc/rust.md:1399 +#, fuzzy +#| msgid "" +#| "let concrete = @CircleStruct{center:Point{x:3f,y:4f},radius:5f}; let " +#| "mycircle: @Circle = concrete as @Circle; let nonsense = mycircle.radius() " +#| "* mycircle.area(); ~~~" msgid "" "let mycircle: Circle = @mycircle as @Circle; let nonsense = mycircle." -"radius() * mycircle.area(); ~~~" +"radius() * mycircle.area(); ~~~~" msgstr "" +"let concrete = @CircleStruct{center:Point{x:3f,y:4f},radius:5f};\n" +"let mycircle: @Circle = concrete as @Circle;\n" +"let nonsense = mycircle.radius() * mycircle.area();\n" +"~~~" #. type: Plain text -#: doc/rust.md:1301 +#: doc/rust.md:1401 +#, fuzzy +#| msgid "# Introduction" msgid "### Implementations" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1303 -msgid "" -"An _implementation_ is an item that implements a [trait](#traits) for a " -"specific type." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1305 -msgid "Implementations are defined with the keyword `impl`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1312 -msgid "" -"~~~~ # struct Point {x: float, y: float}; # type Surface = int; # struct " -"BoundingBox {x: float, y: float, width: float, height: float}; # trait Shape " -"{ fn draw(&self, Surface); fn bounding_box(&self) -> BoundingBox; } # fn " -"do_draw_circle(s: Surface, c: Circle) { }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1317 -#, no-wrap -msgid "" -"struct Circle {\n" -" radius: float,\n" -" center: Point,\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1327 -#, no-wrap -msgid "" -"impl Shape for Circle {\n" -" fn draw(&self, s: Surface) { do_draw_circle(s, *self); }\n" -" fn bounding_box(&self) -> BoundingBox {\n" -" let r = self.radius;\n" -" BoundingBox{x: self.center.x - r, y: self.center.y - r,\n" -" width: 2.0 * r, height: 2.0 * r}\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1334 -msgid "" -"It is possible to define an implementation without referring to a trait. " -"The methods in such an implementation can only be used as direct calls on " -"the values of the type that the implementation targets. In such an " -"implementation, the trait type and `for` after `impl` are omitted. Such " -"implementations are limited to nominal types (enums, structs), and the " -"implementation must appear in the same module or a sub-module as the `self` " -"type." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1338 -msgid "" -"When a trait _is_ specified in an `impl`, all methods declared as part of " -"the trait must be implemented, with matching types and type parameter counts." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1342 -msgid "" -"An implementation can take type parameters, which can be different from the " -"type parameters taken by the trait it implements. Implementation parameters " -"are written after the `impl` keyword." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1345 -msgid "~~~~ # trait Seq { }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1353 -#, no-wrap -msgid "" -"impl Seq for ~[T] {\n" -" ...\n" -"}\n" -"impl Seq for u32 {\n" -" /* Treat the integer as a sequence of bits */\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1355 -msgid "### External blocks" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1360 -msgid "" -"~~~ {.ebnf .gram} extern_block_item : \"extern\" '{' extern_block '} ; " -"extern_block : [ foreign_fn ] * ; ~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1364 -msgid "" -"External blocks form the basis for Rust's foreign function interface. " -"Declarations in an external block describe symbols in external, non-Rust " -"libraries." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1369 -msgid "" -"Functions within external blocks are declared in the same way as other Rust " -"functions, with the exception that they may not have a body and are instead " -"terminated by a semicolon." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1373 -msgid "~~~ # use std::libc::{c_char, FILE}; # #[nolink]" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1378 -#, no-wrap -msgid "" -"extern {\n" -" fn fopen(filename: *c_char, mode: *c_char) -> *FILE;\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1383 -msgid "" -"Functions within external blocks may be called by Rust code, just like " -"functions defined in Rust. The Rust compiler automatically translates " -"between the Rust ABI and the foreign ABI." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1386 -msgid "" -"A number of [attributes](#attributes) control the behavior of external " -"blocks." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1390 -msgid "" -"By default external blocks assume that the library they are calling uses the " -"standard C \"cdecl\" ABI. Other ABIs may be specified using the `abi` " -"attribute as in" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1396 -msgid "" -"~~~{.xfail-test} // Interface to the Windows API #[abi = \"stdcall\"] extern " -"{ } ~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1398 -msgid "" -"The `link_name` attribute allows the name of the library to be specified." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1403 -msgid "~~~{.xfail-test} #[link_name = \"crypto\"] extern { } ~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1409 -msgid "" -"The `nolink` attribute tells the Rust compiler not to do any linking for the " -"external block. This is particularly useful for creating external blocks " -"for libc, which tends to not follow standard library naming conventions and " -"is linked to all Rust programs anyway." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1411 -msgid "## Attributes" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1418 -#, no-wrap -msgid "" -"~~~~~~~~{.ebnf .gram}\n" -"attribute : '#' '[' attr_list ']' ;\n" -"attr_list : attr [ ',' attr_list ]*\n" -"attr : ident [ '=' literal\n" -" | '(' attr_list ')' ] ? ;\n" -"~~~~~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1424 -msgid "" -"Static entities in Rust -- crates, modules and items -- may have " -"_attributes_ applied to them. ^[Attributes in Rust are modeled on Attributes " -"in ECMA-335, C#] An attribute is a general, free-form metadatum that is " -"interpreted according to name, convention, and language and compiler " -"version. Attributes may appear as any of" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1428 -msgid "A single identifier, the attribute name" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1428 -msgid "" -"An identifier followed by the equals sign '=' and a literal, providing a key/" -"value pair" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1428 -msgid "" -"An identifier followed by a parenthesized list of sub-attribute arguments" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1431 -msgid "" -"Attributes terminated by a semi-colon apply to the entity that the attribute " -"is declared within. Attributes that are not terminated by a semi-colon apply " -"to the next entity." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1433 -msgid "An example of attributes:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1437 -msgid "" -"~~~~~~~~{.xfail-test} // General metadata applied to the enclosing module or " -"crate. #[license = \"BSD\"];" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1443 -#, no-wrap -msgid "" -"// A function marked as a unit test\n" -"#[test]\n" -"fn test_foo() {\n" -" ...\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1449 -#, no-wrap -msgid "" -"// A conditionally-compiled module\n" -"#[cfg(target_os=\"linux\")]\n" -"mod bar {\n" -" ...\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1454 -msgid "" -"// A lint attribute used to suppress a warning/error " -"#[allow(non_camel_case_types)] pub type int8_t = i8; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1457 -msgid "" -"> **Note:** In future versions of Rust, user-provided extensions to the " -"compiler will be able to interpret attributes. > When this facility is " -"provided, the compiler will distinguish between language-reserved and user-" -"available attributes." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1460 -msgid "" -"At present, only the Rust compiler interprets attributes, so all attribute " -"names are effectively reserved. Some significant attributes include:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1471 -msgid "The `doc` attribute, for documenting code in-place." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1471 -msgid "" -"The `cfg` attribute, for conditional-compilation by build-configuration." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1471 -msgid "" -"The `lang` attribute, for custom definitions of traits and functions that " -"are known to the Rust compiler (see [Language items](#language-items))." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1471 -msgid "The `link` attribute, for describing linkage metadata for a crate." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1471 -msgid "The `test` attribute, for marking functions as unit tests." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1471 -msgid "" -"The `allow`, `warn`, `forbid`, and `deny` attributes, for controlling lint " -"checks (see [Lint check attributes](#lint-check-attributes))." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1471 -msgid "" -"The `deriving` attribute, for automatically generating implementations of " -"certain traits." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1471 -msgid "" -"The `static_assert` attribute, for asserting that a static bool is true at " -"compiletime" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1473 -msgid "" -"Other attributes may be added or removed during development of the language." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1475 -msgid "### Lint check attributes" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1479 -msgid "" -"A lint check names a potentially undesirable coding pattern, such as " -"unreachable code or omitted documentation, for the static entity to which " -"the attribute applies." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1481 -msgid "For any lint check `C`:" -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:1488 -msgid "`warn(C)` warns about violations of `C` but continues compilation," -msgstr "" - -#. type: Bullet: ' * ' -#: doc/rust.md:1488 -msgid "`deny(C)` signals an error after encountering a violation of `C`," -msgstr "" - -#. type: Plain text -#: doc/rust.md:1488 -#, no-wrap -msgid "" -" * `allow(C)` overrides the check for `C` so that violations will go\n" -" unreported,\n" -" * `forbid(C)` is the same as `deny(C)`, but also forbids uses of\n" -" `allow(C)` within the entity.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1491 -msgid "" -"The lint checks supported by the compiler can be found via `rustc -W help`, " -"along with their default settings." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1497 -#, no-wrap -msgid "" -"~~~{.xfail-test}\n" -"mod m1 {\n" -" // Missing documentation is ignored here\n" -" #[allow(missing_doc)]\n" -" pub fn undocumented_one() -> int { 1 }\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1501 -#, no-wrap -msgid "" -" // Missing documentation signals a warning here\n" -" #[warn(missing_doc)]\n" -" pub fn undocumented_too() -> int { 2 }\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1507 -#, no-wrap -msgid "" -" // Missing documentation signals an error here\n" -" #[deny(missing_doc)]\n" -" pub fn undocumented_end() -> int { 3 }\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1510 -msgid "" -"This example shows how one can use `allow` and `warn` to toggle a particular " -"check on and off." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1518 -#, no-wrap -msgid "" -"~~~{.xfail-test}\n" -"#[warn(missing_doc)]\n" -"mod m2{\n" -" #[allow(missing_doc)]\n" -" mod nested {\n" -" // Missing documentation is ignored here\n" -" pub fn undocumented_one() -> int { 1 }\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1524 -#, no-wrap -msgid "" -" // Missing documentation signals a warning here,\n" -" // despite the allow above.\n" -" #[warn(missing_doc)]\n" -" pub fn undocumented_two() -> int { 2 }\n" -" }\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1529 -#, no-wrap -msgid "" -" // Missing documentation signals a warning here\n" -" pub fn undocumented_too() -> int { 3 }\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1532 -msgid "" -"This example shows how one can use `forbid` to disallow uses of `allow` for " -"that lint check." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1542 -#, no-wrap -msgid "" -"~~~{.xfail-test}\n" -"#[forbid(missing_doc)]\n" -"mod m3 {\n" -" // Attempting to toggle warning signals an error here\n" -" #[allow(missing_doc)]\n" -" /// Returns 2.\n" -" pub fn undocumented_too() -> int { 2 }\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1544 -msgid "### Language items" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1550 -msgid "" -"Some primitive Rust operations are defined in Rust code, rather than being " -"implemented directly in C or assembly language. The definitions of these " -"operations have to be easy for the compiler to find. The `lang` attribute " -"makes it possible to declare these operations. For example, the `str` " -"module in the Rust standard library defines the string equality function:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1557 -#, no-wrap -msgid "" -"~~~ {.xfail-test}\n" -"#[lang=\"str_eq\"]\n" -"pub fn eq_slice(a: &str, b: &str) -> bool {\n" -" // details elided\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1561 -msgid "" -"The name `str_eq` has a special meaning to the Rust compiler, and the " -"presence of this definition means that it will use this definition when " -"generating calls to the string equality function." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1563 -msgid "A complete list of the built-in language items follows:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1565 -msgid "#### Traits" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1604 -#, no-wrap -msgid "" -"`const`\n" -" : Cannot be mutated.\n" -"`owned`\n" -" : Are uniquely owned.\n" -"`durable`\n" -" : Contain borrowed pointers.\n" -"`drop`\n" -" : Have finalizers.\n" -"`add`\n" -" : Elements can be added (for example, integers and floats).\n" -"`sub`\n" -" : Elements can be subtracted.\n" -"`mul`\n" -" : Elements can be multiplied.\n" -"`div`\n" -" : Elements have a division operation.\n" -"`rem`\n" -" : Elements have a remainder operation.\n" -"`neg`\n" -" : Elements can be negated arithmetically.\n" -"`not`\n" -" : Elements can be negated logically.\n" -"`bitxor`\n" -" : Elements have an exclusive-or operation.\n" -"`bitand`\n" -" : Elements have a bitwise `and` operation.\n" -"`bitor`\n" -" : Elements have a bitwise `or` operation.\n" -"`shl`\n" -" : Elements have a left shift operation.\n" -"`shr`\n" -" : Elements have a right shift operation.\n" -"`index`\n" -" : Elements can be indexed.\n" -"`eq`\n" -" : Elements can be compared for equality.\n" -"`ord`\n" -" : Elements have a partial ordering.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1606 -msgid "#### Operations" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1636 -#, no-wrap -msgid "" -"`str_eq`\n" -" : Compare two strings for equality.\n" -"`uniq_str_eq`\n" -" : Compare two owned strings for equality.\n" -"`annihilate`\n" -" : Destroy a box before freeing it.\n" -"`log_type`\n" -" : Generically print a string representation of any type.\n" -"`fail_`\n" -" : Abort the program with an error.\n" -"`fail_bounds_check`\n" -" : Abort the program with a bounds check error.\n" -"`exchange_malloc`\n" -" : Allocate memory on the exchange heap.\n" -"`exchange_free`\n" -" : Free memory that was allocated on the exchange heap.\n" -"`malloc`\n" -" : Allocate memory on the managed heap.\n" -"`free`\n" -" : Free memory that was allocated on the managed heap.\n" -"`borrow_as_imm`\n" -" : Create an immutable borrowed pointer to a mutable value.\n" -"`return_to_mut`\n" -" : Release a borrowed pointer created with `return_to_mut`\n" -"`check_not_borrowed`\n" -" : Fail if a value has existing borrowed pointers to it.\n" -"`strdup_uniq`\n" -" : Return a new unique string\n" -" containing a copy of the contents of a unique string.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1639 -msgid "" -"> **Note:** This list is likely to become out of date. We should auto-" -"generate it > from `librustc/middle/lang_items.rs`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1641 -msgid "### Deriving" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1647 -msgid "" -"The `deriving` attribute allows certain traits to be automatically " -"implemented for data structures. For example, the following will create an " -"`impl` for the `Eq` and `Clone` traits for `Foo`, the type parameter `T` " -"will be given the `Eq` or `Clone` constraints for the appropriate `impl`:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1655 -#, no-wrap -msgid "" -"~~~\n" -"#[deriving(Eq, Clone)]\n" -"struct Foo {\n" -" a: int,\n" -" b: T\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1657 -msgid "The generated `impl` for `Eq` is equivalent to" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1664 -#, no-wrap -msgid "" -"~~~\n" -"# struct Foo { a: int, b: T }\n" -"impl Eq for Foo {\n" -" fn eq(&self, other: &Foo) -> bool {\n" -" self.a == other.a && self.b == other.b\n" -" }\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1670 -#, no-wrap -msgid "" -" fn ne(&self, other: &Foo) -> bool {\n" -" self.a != other.a || self.b != other.b\n" -" }\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1672 -msgid "Supported traits for `deriving` are:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1683 -msgid "Comparison traits: `Eq`, `TotalEq`, `Ord`, `TotalOrd`." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1683 -msgid "Serialization: `Encodable`, `Decodable`. These require `extra`." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1683 -msgid "`Clone` and `DeepClone`, to perform (deep) copies." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1683 -msgid "`IterBytes`, to iterate over the bytes in a data type." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1683 -msgid "`Rand`, to create a random instance of a data type." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1683 -msgid "`Zero`, to create an zero (or empty) instance of a data type." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:1683 -msgid "" -"`ToStr`, to convert to a string. For a type with this instance, `obj." -"to_str()` has similar output as `fmt!(\"%?\", obj)`, but it differs in that " -"each constituent field of the type must also implement `ToStr` and will have " -"`field.to_str()` invoked to build up the result." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1685 -msgid "# Statements and expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1692 -msgid "" -"Rust is _primarily_ an expression language. This means that most forms of " -"value-producing or effect-causing evaluation are directed by the uniform " -"syntax category of _expressions_. Each kind of expression can typically " -"_nest_ within each other kind of expression, and rules for evaluation of " -"expressions involve specifying both the value produced by the expression and " -"the order in which its sub-expressions are themselves evaluated." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1695 -msgid "" -"In contrast, statements in Rust serve _mostly_ to contain and explicitly " -"sequence expression evaluation." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1697 -msgid "## Statements" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1700 -msgid "" -"A _statement_ is a component of a block, which is in turn a component of an " -"outer [expression](#expressions) or [function](#functions)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1704 -msgid "" -"Rust has two kinds of statement: [declaration statements](#declaration-" -"statements) and [expression statements](#expression-statements)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1706 -msgid "### Declaration statements" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1709 -msgid "" -"A _declaration statement_ is one that introduces one or more *names* into " -"the enclosing statement block. The declared names may denote new slots or " -"new items." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1711 -msgid "#### Item declarations" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1718 -msgid "" -"An _item declaration statement_ has a syntactic form identical to an [item]" -"(#items) declaration within a module. Declaring an item -- a function, " -"enumeration, structure, type, static, trait, implementation or module -- " -"locally within a statement block is simply a way of restricting its scope to " -"a narrow region containing all of its uses; it is otherwise identical in " -"meaning to declaring the item outside the statement block." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1721 -msgid "" -"Note: there is no implicit capture of the function's dynamic environment " -"when declaring a function-local item." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1724 -msgid "#### Slot declarations" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1729 -msgid "" -"~~~~~~~~{.ebnf .gram} let_decl : \"let\" pat [':' type ] ? [ init ] ? ';' ; " -"init : [ '=' ] expr ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1735 -msgid "" -"A _slot declaration_ introduces a new set of slots, given by a pattern. The " -"pattern may be followed by a type annotation, and/or an initializer " -"expression. When no type annotation is given, the compiler will infer the " -"type, or signal an error if insufficient type information is available for " -"definite inference. Any slots introduced by a slot declaration are visible " -"from the point of declaration until the end of the enclosing block scope." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1737 -msgid "### Expression statements" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1742 -msgid "" -"An _expression statement_ is one that evaluates an [expression]" -"(#expressions) and ignores its result. The type of an expression statement " -"`e;` is always `()`, regardless of the type of `e`. As a rule, an " -"expression statement's purpose is to trigger the effects of evaluating its " -"expression." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1744 -msgid "## Expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1753 -#, no-wrap -msgid "" -"An expression may have two roles: it always produces a *value*, and it may have *effects*\n" -"(otherwise known as \"side effects\").\n" -"An expression *evaluates to* a value, and has effects during *evaluation*.\n" -"Many expressions contain sub-expressions (operands).\n" -"The meaning of each kind of expression dictates several things:\n" -" * Whether or not to evaluate the sub-expressions when evaluating the expression\n" -" * The order in which to evaluate the sub-expressions\n" -" * How to combine the sub-expressions' values to obtain the value of the expression.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1758 -msgid "" -"In this way, the structure of expressions dictates the structure of " -"execution. Blocks are just another kind of expression, so blocks, " -"statements, expressions, and blocks again can recursively nest inside each " -"other to an arbitrary depth." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1760 -msgid "#### Lvalues, rvalues and temporaries" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1764 -msgid "" -"Expressions are divided into two main categories: _lvalues_ and _rvalues_. " -"Likewise within each expression, sub-expressions may occur in _lvalue " -"context_ or _rvalue context_. The evaluation of an expression depends both " -"on its own category and the context it occurs within." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1767 -msgid "" -"[Path](#path-expressions), [field](#field-expressions) and [index](#index-" -"expressions) expressions are lvalues. All other expressions are rvalues." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1775 -msgid "" -"The left operand of an [assignment](#assignment-expressions), [binary move]" -"(#binary-move-expressions) or [compound-assignment](#compound-assignment-" -"expressions) expression is an lvalue context, as is the single operand of a " -"unary [borrow](#unary-operator-expressions), or [move](#unary-move-" -"expressions) expression, and _both_ operands of a [swap](#swap-expressions) " -"expression. All other expression contexts are rvalue contexts." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1778 -msgid "" -"When an lvalue is evaluated in an _lvalue context_, it denotes a memory " -"location; when evaluated in an _rvalue context_, it denotes the value held " -"_in_ that memory location." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1781 -msgid "" -"When an rvalue is used in lvalue context, a temporary un-named lvalue is " -"created and used instead. A temporary's lifetime equals the largest " -"lifetime of any borrowed pointer that points to it." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1783 -msgid "#### Moved and copied types" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1792 -msgid "" -"When a [local variable](#memory-slots) is used as an [rvalue](#lvalues-" -"rvalues-and-temporaries) the variable will either be [moved](#move-" -"expressions) or copied, depending on its type. For types that contain " -"[owning pointers](#owning-pointers) or values that implement the special " -"trait `Drop`, the variable is moved. All other types are copied." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1795 -msgid "### Literal expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1799 -msgid "" -"A _literal expression_ consists of one of the [literal](#literals) forms " -"described earlier. It directly describes a number, character, string, " -"boolean value, or the unit value." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1806 -#, no-wrap -msgid "" -"~~~~~~~~ {.literals}\n" -"(); // unit type\n" -"\"hello\"; // string type\n" -"'5'; // character type\n" -"5; // integer type\n" -"~~~~~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1808 -msgid "### Path expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1811 -msgid "" -"A [path](#paths) used as an expression context denotes either a local " -"variable or an item. Path expressions are [lvalues](#lvalues-rvalues-and-" -"temporaries)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1813 -msgid "### Tuple expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1817 -msgid "" -"Tuples are written by enclosing one or more comma-separated expressions in " -"parentheses. They are used to create [tuple-typed](#tuple-types) values." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1823 -msgid "~~~~~~~~ {.tuple} (0,); (0f, 4.5f); (\"a\", 4u, true); ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1825 -msgid "### Structure expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1834 -#, no-wrap -msgid "" -"~~~~~~~~{.ebnf .gram}\n" -"struct_expr : expr_path '{' ident ':' expr\n" -" [ ',' ident ':' expr ] *\n" -" [ \"..\" expr ] '}' |\n" -" expr_path '(' expr\n" -" [ ',' expr ] * ')' |\n" -" expr_path\n" -"~~~~~~~~\n" -msgstr "" +msgstr "# イントロダクション" #. type: Plain text #: doc/rust.md:1841 -msgid "" -"There are several forms of structure expressions. A _structure expression_ " -"consists of the [path](#paths) of a [structure item](#structures), followed " -"by a brace-enclosed list of one or more comma-separated name-value pairs, " -"providing the field values of a new instance of the structure. A field name " -"can be any identifier, and is separated from its value expression by a " -"colon. The location denoted by a structure field is mutable if and only if " -"the enclosing structure is mutable." -msgstr "" +#, fuzzy +#| msgid "## Traits" +msgid "#### Traits" +msgstr "## トレイト" #. type: Plain text -#: doc/rust.md:1846 -msgid "" -"A _tuple structure expression_ consists of the [path](#paths) of a " -"[structure item](#structures), followed by a parenthesized list of one or " -"more comma-separated expressions (in other words, the path of a structure " -"item followed by a tuple expression). The structure item must be a tuple " -"structure item." -msgstr "" +#: doc/rust.md:1882 +#, fuzzy +#| msgid "## Operators" +msgid "#### Operations" +msgstr "## 演算子" #. type: Plain text -#: doc/rust.md:1848 -msgid "" -"A _unit-like structure expression_ consists only of the [path](#paths) of a " -"[structure item](#structures)." +#: doc/rust.md:1930 +#, fuzzy +#| msgid "Our example crate declared this set of `link` attributes:" +msgid "There are three different types of inline attributes:" msgstr "" +"先ほどのクレートの例では、 `link` 属性は以下のように宣言されていました。" #. type: Plain text -#: doc/rust.md:1850 -msgid "The following are examples of structure expressions:" -msgstr "" +#: doc/rust.md:1936 +#, fuzzy +#| msgid "## Freezing" +msgid "### Deriving" +msgstr "## 凍結" #. type: Plain text -#: doc/rust.md:1861 -msgid "" -"~~~~ # struct Point { x: float, y: float } # struct TuplePoint(float, " -"float); # mod game { pub struct User<'self> { name: &'self str, age: uint, " -"score: uint } } # struct Cookie; fn some_fn(t: T) {} Point {x: 10f, y: " -"20f}; TuplePoint(10f, 20f); let u = game::User {name: \"Joe\", age: 35, " -"score: 100_000}; some_fn::(Cookie); ~~~~" -msgstr "" +#: doc/rust.md:2038 +#, fuzzy +#| msgid "## Crates" +msgid "### Compiler Features" +msgstr "## クレート" #. type: Plain text -#: doc/rust.md:1864 -msgid "" -"A structure expression forms a new value of the named structure type. Note " -"that for a given *unit-like* structure type, this will always be the same " -"value." -msgstr "" +#: doc/rust.md:2126 +#, fuzzy +#| msgid "## Syntax extensions" +msgid "# Statements and expressions" +msgstr "## 構文拡張" #. type: Plain text -#: doc/rust.md:1871 -msgid "" -"A structure expression can terminate with the syntax `..` followed by an " -"expression to denote a functional update. The expression following `..` " -"(the base) must have the same structure type as the new structure type being " -"formed. The entire expression denotes the result of allocating a new " -"structure (with the same type as the base expression) with the given values " -"for the fields that were explicitly specified and the values in the base " -"record for all other fields." -msgstr "" +#: doc/rust.md:2138 +#, fuzzy +#| msgid "## Structs" +msgid "## Statements" +msgstr "## 構造体" #. type: Plain text -#: doc/rust.md:1877 +#: doc/rust.md:2147 +#, fuzzy +#| msgid "## Declaring and implementing traits" +msgid "### Declaration statements" +msgstr "## トレイトの宣言と実装" + +#. type: Plain text +#: doc/rust.md:2152 +#, fuzzy +#| msgid "## Operators" +msgid "#### Item declarations" +msgstr "## 演算子" + +#. type: Plain text +#: doc/rust.md:2164 +#, fuzzy +#| msgid "## Using other crates" +msgid "#### Slot declarations" +msgstr "## 他のクレートの利用" + +#. type: Plain text +#: doc/rust.md:2177 +#, fuzzy +#| msgid "## Expressions and semicolons" +msgid "### Expression statements" +msgstr "## 式とセミコロン" + +#. type: Plain text +#: doc/rust.md:2184 +#, fuzzy +#| msgid "## Expressions and semicolons" +msgid "## Expressions" +msgstr "## 式とセミコロン" + +#. type: Plain text +#: doc/rust.md:2238 +#, fuzzy +#| msgid "## Syntax extensions" +msgid "### Literal expressions" +msgstr "## 構文拡張" + +#. type: Plain text +#: doc/rust.md:2251 +#, fuzzy +#| msgid "## Syntax extensions" +msgid "### Path expressions" +msgstr "## 構文拡張" + +#. type: Plain text +#: doc/rust.md:2256 +#, fuzzy +#| msgid "## Tuples" +msgid "### Tuple expressions" +msgstr "## タプル" + +#. type: Plain text +#: doc/rust.md:2268 +#, fuzzy +#| msgid "## Syntax extensions" +msgid "### Structure expressions" +msgstr "## 構文拡張" + +#. type: Plain text +#: doc/rust.md:2320 +#, fuzzy +#| msgid "" +#| "~~~ # struct Point { x: f64, y: f64 } let point = &@~Point { x: 10f, y: " +#| "20f }; println(fmt!(\"%f\", point.x)); ~~~" msgid "" "~~~~ # struct Point3d { x: int, y: int, z: int } let base = Point3d {x: 1, " "y: 2, z: 3}; Point3d {y: 0, z: 10, .. base}; ~~~~" msgstr "" - -#. type: Plain text -#: doc/rust.md:1879 -msgid "### Record expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1885 -#, no-wrap -msgid "" -"~~~~~~~~{.ebnf .gram}\n" -"rec_expr : '{' ident ':' expr\n" -" [ ',' ident ':' expr ] *\n" -" [ \"..\" expr ] '}'\n" -"~~~~~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1887 -msgid "### Method-call expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1891 -msgid "" -"~~~~~~~~{.ebnf .gram} method_call_expr : expr '.' ident paren_expr_list ; " -"~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1896 -msgid "" -"A _method call_ consists of an expression followed by a single dot, an " -"identifier, and a parenthesized expression-list. Method calls are resolved " -"to methods on specific traits, either statically dispatching to a method if " -"the exact `self`-type of the left-hand-side is known, or dynamically " -"dispatching if the left-hand-side expression is an indirect [object type]" -"(#object-types)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1899 -msgid "### Field expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1903 -msgid "~~~~~~~~{.ebnf .gram} field_expr : expr '.' ident ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1907 -msgid "" -"A _field expression_ consists of an expression followed by a single dot and " -"an identifier, when not immediately followed by a parenthesized expression-" -"list (the latter is a [method call expression](#method-call-expressions)). " -"A field expression denotes a field of a [structure](#structure-types)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1912 -msgid "~~~~~~~~ {.field} myrecord.myfield; {a: 10, b: 20}.a; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1915 -msgid "" -"A field access on a record is an [lvalue](#lvalues-rvalues-and-temporaries) " -"referring to the value of that field. When the field is mutable, it can be " -"[assigned](#assignment-expressions) to." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1918 -msgid "" -"When the type of the expression to the left of the dot is a pointer to a " -"record or structure, it is automatically derferenced to make the field " -"access possible." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1921 -msgid "### Vector expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1924 -msgid "~~~~~~~~{.ebnf .gram} vec_expr : '[' \"mut\"? vec_elems? ']'" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1927 -msgid "vec_elems : [expr [',' expr]*] | [expr ',' \"..\" expr] ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1930 -msgid "" -"A [_vector_](#vector-types) _expression_ is written by enclosing zero or " -"more comma-separated expressions of uniform type in square brackets." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1934 -msgid "" -"In the `[expr ',' \"..\" expr]` form, the expression after the `\"..\"` must " -"be a constant expression that can be evaluated at compile time, such as a " -"[literal](#literals) or a [static item](#static-items)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1941 -#, no-wrap -msgid "" -"~~~~\n" -"[1, 2, 3, 4];\n" -"[\"a\", \"b\", \"c\", \"d\"];\n" -"[0, ..128]; // vector with 128 zeros\n" -"[0u8, 0u8, 0u8, 0u8];\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1943 -msgid "### Index expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1947 -msgid "~~~~~~~~{.ebnf .gram} idx_expr : expr '[' expr ']' ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1952 -msgid "" -"[Vector](#vector-types)-typed expressions can be indexed by writing a square-" -"bracket-enclosed expression (the index) after them. When the vector is " -"mutable, the resulting [lvalue](#lvalues-rvalues-and-temporaries) can be " -"assigned to." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1956 -msgid "" -"Indices are zero-based, and may be of any integral type. Vector access is " -"bounds-checked at run-time. When the check fails, it will put the task in a " -"_failing state_." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1960 -msgid "~~~~ # use std::task; # do task::spawn_unlinked {" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1963 -msgid "([1, 2, 3, 4])[0]; ([\"a\", \"b\"])[10]; // fails" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1966 doc/tutorial-tasks.md:648 -msgid "# } ~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1968 -msgid "### Unary operator expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1972 -msgid "" -"Rust defines six symbolic unary operators. They are all written as prefix " -"operators, before the expression they apply to." -msgstr "" - -#. type: Plain text -#: doc/rust.md:1991 -#, no-wrap -msgid "" -"`-`\n" -" : Negation. May only be applied to numeric types.\n" -"`*`\n" -" : Dereference. When applied to a [pointer](#pointer-types) it denotes the pointed-to location.\n" -" For pointers to mutable locations, the resulting [lvalue](#lvalues-rvalues-and-temporaries) can be assigned to.\n" -" For [enums](#enumerated-types) that have only a single variant, containing a single parameter,\n" -" the dereference operator accesses this parameter.\n" -"`!`\n" -" : Logical negation. On the boolean type, this flips between `true` and\n" -" `false`. On integer types, this inverts the individual bits in the\n" -" two's complement representation of the value.\n" -"`@` and `~`\n" -" : [Boxing](#pointer-types) operators. Allocate a box to hold the value they are applied to,\n" -" and store the value in it. `@` creates a managed box, whereas `~` creates an owned box.\n" -"`&`\n" -" : Borrow operator. Returns a borrowed pointer, pointing to its operand.\n" -" The operand of a borrowed pointer is statically proven to outlive the resulting pointer.\n" -" If the borrow-checker cannot prove this, it is a compilation error.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1993 -msgid "### Binary operator expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:1997 -msgid "~~~~~~~~{.ebnf .gram} binop_expr : expr binop expr ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2000 -msgid "" -"Binary operators expressions are given in terms of [operator precedence]" -"(#operator-precedence)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2002 -msgid "#### Arithmetic operators" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2007 -msgid "" -"Binary arithmetic expressions are syntactic sugar for calls to built-in " -"traits, defined in the `std::ops` module of the `std` library. This means " -"that arithmetic operators can be overridden for user-defined types. The " -"default meaning of the operators on standard types is given here." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2023 -#, no-wrap -msgid "" -"`+`\n" -" : Addition and vector/string concatenation.\n" -" Calls the `add` method on the `std::ops::Add` trait.\n" -"`-`\n" -" : Subtraction.\n" -" Calls the `sub` method on the `std::ops::Sub` trait.\n" -"`*`\n" -" : Multiplication.\n" -" Calls the `mul` method on the `std::ops::Mul` trait.\n" -"`/`\n" -" : Quotient.\n" -" Calls the `div` method on the `std::ops::Div` trait.\n" -"`%`\n" -" : Remainder.\n" -" Calls the `rem` method on the `std::ops::Rem` trait.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2025 -msgid "#### Bitwise operators" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2030 -msgid "" -"Like the [arithmetic operators](#arithmetic-operators), bitwise operators " -"are syntactic sugar for calls to methods of built-in traits. This means " -"that bitwise operators can be overridden for user-defined types. The " -"default meaning of the operators on standard types is given here." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2046 -#, no-wrap -msgid "" -"`&`\n" -" : And.\n" -" Calls the `bitand` method of the `std::ops::BitAnd` trait.\n" -"`|`\n" -" : Inclusive or.\n" -" Calls the `bitor` method of the `std::ops::BitOr` trait.\n" -"`^`\n" -" : Exclusive or.\n" -" Calls the `bitxor` method of the `std::ops::BitXor` trait.\n" -"`<<`\n" -" : Logical left shift.\n" -" Calls the `shl` method of the `std::ops::Shl` trait.\n" -"`>>`\n" -" : Logical right shift.\n" -" Calls the `shr` method of the `std::ops::Shr` trait.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2048 -msgid "#### Lazy boolean operators" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2055 -msgid "" -"The operators `||` and `&&` may be applied to operands of boolean type. The " -"`||` operator denotes logical 'or', and the `&&` operator denotes logical " -"'and'. They differ from `|` and `&` in that the right-hand operand is only " -"evaluated when the left-hand operand does not already determine the result " -"of the expression. That is, `||` only evaluates its right-hand operand when " -"the left-hand operand evaluates to `false`, and `&&` only when it evaluates " -"to `true`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2057 -msgid "#### Comparison operators" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2063 -msgid "" -"Comparison operators are, like the [arithmetic operators](#arithmetic-" -"operators), and [bitwise operators](#bitwise-operators), syntactic sugar for " -"calls to built-in traits. This means that comparison operators can be " -"overridden for user-defined types. The default meaning of the operators on " -"standard types is given here." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2082 -#, no-wrap -msgid "" -"`==`\n" -" : Equal to.\n" -" Calls the `eq` method on the `std::cmp::Eq` trait.\n" -"`!=`\n" -" : Unequal to.\n" -" Calls the `ne` method on the `std::cmp::Eq` trait.\n" -"`<`\n" -" : Less than.\n" -" Calls the `lt` method on the `std::cmp::Ord` trait.\n" -"`>`\n" -" : Greater than.\n" -" Calls the `gt` method on the `std::cmp::Ord` trait.\n" -"`<=`\n" -" : Less than or equal.\n" -" Calls the `le` method on the `std::cmp::Ord` trait.\n" -"`>=`\n" -" : Greater than or equal.\n" -" Calls the `ge` method on the `std::cmp::Ord` trait.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2085 -msgid "#### Type cast expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2087 -msgid "A type cast expression is denoted with the binary operator `as`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2090 -msgid "" -"Executing an `as` expression casts the value on the left-hand side to the " -"type on the right-hand side." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2094 -msgid "" -"A numeric value can be cast to any numeric type. A raw pointer value can be " -"cast to or from any integral type or raw pointer type. Any other cast is " -"unsupported and will fail to compile." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2096 -msgid "An example of an `as` expression:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2100 -msgid "" -"~~~~ # fn sum(v: &[float]) -> float { 0.0 } # fn len(v: &[float]) -> int " -"{ 0 }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2107 -#, no-wrap -msgid "" -"fn avg(v: &[float]) -> float {\n" -" let sum: float = sum(v);\n" -" let sz: float = len(v) as float;\n" -" return sum / sz;\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2109 -msgid "#### Assignment expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2112 -msgid "" -"An _assignment expression_ consists of an [lvalue](#lvalues-rvalues-and-" -"temporaries) expression followed by an equals sign (`=`) and an [rvalue]" -"(#lvalues-rvalues-and-temporaries) expression." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2114 -msgid "" -"Evaluating an assignment expression [either copies or moves](#moved-and-" -"copied-types) its right-hand operand to its left-hand operand." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2118 -msgid "~~~~ # let mut x = 0; # let y = 0;" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2121 -msgid "x = y; ~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2123 -msgid "#### Compound assignment expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2128 -msgid "" -"The `+`, `-`, `*`, `/`, `%`, `&`, `|`, `^`, `<<`, and `>>` operators may be " -"composed with the `=` operator. The expression `lval OP= val` is equivalent " -"to `lval = lval OP val`. For example, `x = x + 1` may be written as `x += 1`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2130 -msgid "Any such expression always has the [`unit`](#primitive-types) type." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2132 -msgid "#### Operator precedence" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2135 -msgid "" -"The precedence of Rust binary operators is ordered as follows, going from " -"strong to weak:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2148 -#, no-wrap -msgid "" -"~~~~ {.precedence}\n" -"* / %\n" -"as\n" -"+ -\n" -"<< >>\n" -"&\n" -"^\n" -"|\n" -"< > <= >=\n" -"== !=\n" -"&&\n" -"||\n" -"=\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2150 doc/rust.md:2237 doc/tutorial-macros.md:323 -msgid "~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2153 -msgid "" -"Operators at the same precedence level are evaluated left-to-right. [Unary " -"operators](#unary-operator-expressions) have the same precedence level and " -"it is stronger than any of the binary operators'." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2155 -msgid "### Grouped expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2159 -msgid "" -"An expression enclosed in parentheses evaluates to the result of the " -"enclosed expression. Parentheses can be used to explicitly specify " -"evaluation order within an expression." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2163 -msgid "~~~~~~~~{.ebnf .gram} paren_expr : '(' expr ')' ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2165 -msgid "An example of a parenthesized expression:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2169 -msgid "~~~~ let x = (2 + 3) * 4; ~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2172 -msgid "### Call expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2178 -msgid "" -"~~~~~~~~ {.abnf .gram} expr_list : [ expr [ ',' expr ]* ] ? ; " -"paren_expr_list : '(' expr_list ')' ; call_expr : expr paren_expr_list ; " -"~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2183 -msgid "" -"A _call expression_ invokes a function, providing zero or more input slots " -"and an optional reference slot to serve as the function's output, bound to " -"the `lval` on the right hand side of the call. If the function eventually " -"returns, then the expression completes." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2185 -msgid "Some examples of call expressions:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2189 -msgid "" -"~~~~ # use std::from_str::FromStr; # fn add(x: int, y: int) -> int { 0 }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2193 -msgid "" -"let x: int = add(1, 2); let pi = FromStr::from_str::(\"3.14\"); ~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2195 -msgid "### Lambda expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2200 -msgid "" -"~~~~~~~~ {.abnf .gram} ident_list : [ ident [ ',' ident ]* ] ? ; " -"lambda_expr : '|' ident_list '|' expr ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2204 -msgid "" -"A _lambda expression_ (sometimes called an \"anonymous function expression" -"\") defines a function and denotes it as a value, in a single expression. A " -"lambda expression is a pipe-symbol-delimited (`|`) list of identifiers " -"followed by an expression." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2209 -msgid "" -"A lambda expression denotes a function that maps a list of parameters " -"(`ident_list`) onto the expression that follows the `ident_list`. The " -"identifiers in the `ident_list` are the parameters to the function. These " -"parameters' types need not be specified, as the compiler infers them from " -"context." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2212 -msgid "" -"Lambda expressions are most useful when passing functions as arguments to " -"other functions, as an abbreviation for defining and capturing a separate " -"function." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2221 -msgid "" -"Significantly, lambda expressions _capture their environment_, which regular " -"[function definitions](#functions) do not. The exact type of capture " -"depends on the [function type](#function-types) inferred for the lambda " -"expression. In the simplest and least-expensive form (analogous to a " -"```|| { }``` expression), the lambda expression captures its environment " -"by reference, effectively borrowing pointers to all outer variables " -"mentioned inside the function. Alternately, the compiler may infer that a " -"lambda expression should copy or move values (depending on their type.) " -"from the environment into the lambda expression's captured environment." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2224 -msgid "" -"In this example, we define a function `ten_times` that takes a higher-order " -"function argument, and call it with a lambda expression as an argument." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2233 -#, no-wrap -msgid "" -"~~~~\n" -"fn ten_times(f: |int|) {\n" -" let mut i = 0;\n" -" while i < 10 {\n" -" f(i);\n" -" i += 1;\n" -" }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2235 -msgid "ten_times(|j| println(fmt!(\"hello, %d\", j)));" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2239 -msgid "### While loops" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2243 -msgid "" -"~~~~~~~~{.ebnf .gram} while_expr : \"while\" expr '{' block '}' ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2248 -msgid "" -"A `while` loop begins by evaluating the boolean loop conditional " -"expression. If the loop conditional expression evaluates to `true`, the " -"loop body block executes and control returns to the loop conditional " -"expression. If the loop conditional expression evaluates to `false`, the " -"`while` expression completes." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2250 -msgid "An example:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2253 -msgid "~~~~ let mut i = 0;" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2259 -#, no-wrap -msgid "" -"while i < 10 {\n" -" println(\"hello\\n\");\n" -" i = i + 1;\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2261 -msgid "### Infinite loops" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2265 -msgid "" -"The keyword `loop` in Rust appears both in _loop expressions_ and in " -"_continue expressions_. A loop expression denotes an infinite loop; see " -"[Continue expressions](#continue-expressions) for continue expressions." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2269 -msgid "" -"~~~~~~~~{.ebnf .gram} loop_expr : [ lifetime ':' ] \"loop\" '{' block '}'; " -"~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2274 -msgid "" -"A `loop` expression may optionally have a _label_. If a label is present, " -"then labeled `break` and `loop` expressions nested within this loop may exit " -"out of this loop or return control to its head. See [Break expressions]" -"(#break-expressions)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2276 -msgid "### Break expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2280 -msgid "~~~~~~~~{.ebnf .gram} break_expr : \"break\" [ lifetime ]; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2287 -msgid "" -"A `break` expression has an optional `label`. If the label is absent, then " -"executing a `break` expression immediately terminates the innermost loop " -"enclosing it. It is only permitted in the body of a loop. If the label is " -"present, then `break foo` terminates the loop with label `foo`, which need " -"not be the innermost label enclosing the `break` expression, but must " -"enclose it." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2289 -msgid "### Continue expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2293 -msgid "~~~~~~~~{.ebnf .gram} continue_expr : \"loop\" [ lifetime ]; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2304 -msgid "" -"A continue expression, written `loop`, also has an optional `label`. If the " -"label is absent, then executing a `loop` expression immediately terminates " -"the current iteration of the innermost loop enclosing it, returning control " -"to the loop *head*. In the case of a `while` loop, the head is the " -"conditional expression controlling the loop. In the case of a `for` loop, " -"the head is the call-expression controlling the loop. If the label is " -"present, then `loop foo` returns control to the head of the loop with label " -"`foo`, which need not be the innermost label enclosing the `break` " -"expression, but must enclose it." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2306 -msgid "A `loop` expression is only permitted in the body of a loop." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2309 -msgid "### Do expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2313 -msgid "" -"~~~~~~~~{.ebnf .gram} do_expr : \"do\" expr [ '|' ident_list '|' ] ? '{' " -"block '}' ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2316 -msgid "" -"A _do expression_ provides a more-familiar block-syntax for a [lambda " -"expression](#lambda-expressions), including a special translation of [return " -"expressions](#return-expressions) inside the supplied block." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2324 -msgid "" -"Any occurrence of a [return expression](#return-expressions) inside this " -"`block` expression is rewritten as a reference to an (anonymous) flag set in " -"the caller's environment, which is checked on return from the `expr` and, if " -"set, causes a corresponding return from the caller. In this way, the " -"meaning of `return` statements in language built-in control blocks is " -"preserved, if they are rewritten using lambda functions and `do` expressions " -"as abstractions." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2327 -msgid "" -"The optional `ident_list` and `block` provided in a `do` expression are " -"parsed as though they constitute a lambda expression; if the `ident_list` is " -"missing, an empty `ident_list` is implied." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2333 -msgid "" -"The lambda expression is then provided as a _trailing argument_ to the " -"outermost [call](#call-expressions) or [method call](#method-call-" -"expressions) expression in the `expr` following `do`. If the `expr` is a " -"[path expression](#path-expressions), it is parsed as though it is a call " -"expression. If the `expr` is a [field expression](#field-expressions), it " -"is parsed as though it is a method call expression." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2335 -msgid "In this example, both calls to `f` are equivalent:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2339 -msgid "~~~~ # fn f(f: |int|) { } # fn g(i: int) { }" -msgstr "" +"~~~\n" +"# struct Point { x: f64, y: f64 }\n" +"let point = &@~Point { x: 10f, y: 20f };\n" +"println(fmt!(\"%f\", point.x));\n" +"~~~" #. type: Plain text #: doc/rust.md:2341 -msgid "f(|j| g(j));" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2346 -#, no-wrap -msgid "" -"do f |j| {\n" -" g(j);\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2348 -msgid "" -"In this example, both calls to the (binary) function `k` are equivalent:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2352 -msgid "~~~~ # fn k(x:int, f: |int|) { } # fn l(i: int) { }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2354 -msgid "k(3, |j| l(j));" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2359 -#, no-wrap -msgid "" -"do k(3) |j| {\n" -" l(j);\n" -"}\n" -"~~~~\n" -msgstr "" +#, fuzzy +#| msgid "## Operators" +msgid "### Field expressions" +msgstr "## 演算子" #. type: Plain text #: doc/rust.md:2362 -msgid "### For expressions" -msgstr "" +#, fuzzy +#| msgid "## Syntax extensions" +msgid "### Vector expressions" +msgstr "## 構文拡張" #. type: Plain text -#: doc/rust.md:2366 -msgid "" -"~~~~~~~~{.ebnf .gram} for_expr : \"for\" expr [ '|' ident_list '|' ] ? '{' " -"block '}' ; ~~~~~~~~" -msgstr "" +#: doc/rust.md:2384 +#, fuzzy +#| msgid "## Syntax extensions" +msgid "### Index expressions" +msgstr "## 構文拡張" #. type: Plain text -#: doc/rust.md:2370 -msgid "" -"A _for expression_ is similar to a [`do` expression](#do-expressions), in " -"that it provides a special block-form of lambda expression, suited to " -"passing the `block` function to a higher-order function implementing a loop." +#: doc/rust.md:2400 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~~ {.xfail-test} # use std::task; # do task::spawn {" msgstr "" - -#. type: Plain text -#: doc/rust.md:2376 -msgid "" -"In contrast to a `do` expression, a `for` expression is designed to work " -"with methods such as `each` and `times`, that require the body block to " -"return a boolean. The `for` expression accommodates this by implicitly " -"returning `true` at the end of each block, unless a `break` expression is " -"evaluated." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2383 -msgid "" -"In addition, [`break`](#break-expressions) and [`loop`](#loop-expressions) " -"expressions are rewritten inside `for` expressions in the same way that " -"`return` expressions are, with a combination of local flag variables, and " -"early boolean-valued returns from the `block` function, such that the " -"meaning of `break` and `loop` is preserved in a primitive loop when " -"rewritten as a `for` loop controlled by a higher order function." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2385 -msgid "An example of a for loop over the contents of a vector:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2392 -msgid "" -"~~~~ # type foo = int; # fn bar(f: foo) { } # let a = 0; # let b = 0; # let " -"c = 0;" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2394 -msgid "let v: &[foo] = &[a, b, c];" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2399 -#, no-wrap -msgid "" -"for e in v.iter() {\n" -" bar(*e);\n" -"}\n" "~~~~\n" -msgstr "" +"use std::task::spawn;" #. type: Plain text -#: doc/rust.md:2401 -msgid "An example of a for loop over a series of integers:" -msgstr "" +#: doc/rust.md:2433 +#, fuzzy +#| msgid "## Using other crates" +msgid "### Binary operator expressions" +msgstr "## 他のクレートの利用" #. type: Plain text -#: doc/rust.md:2408 -#, no-wrap -msgid "" -"~~~~\n" -"# fn bar(b:uint) { }\n" -"for i in range(0u, 256) {\n" -" bar(i);\n" -"}\n" -"~~~~\n" -msgstr "" +#: doc/rust.md:2442 +#, fuzzy +#| msgid "## Operators" +msgid "#### Arithmetic operators" +msgstr "## 演算子" #. type: Plain text -#: doc/rust.md:2410 -msgid "### If expressions" -msgstr "" +#: doc/rust.md:2465 +#, fuzzy +#| msgid "## Operators" +msgid "#### Bitwise operators" +msgstr "## 演算子" #. type: Plain text -#: doc/rust.md:2414 -#, no-wrap -msgid "" -"~~~~~~~~{.ebnf .gram}\n" -"if_expr : \"if\" expr '{' block '}'\n" -" else_tail ? ;\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2418 -#, no-wrap -msgid "" -"else_tail : \"else\" [ if_expr\n" -" | '{' block '}' ] ;\n" -"~~~~~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2429 -msgid "" -"An `if` expression is a conditional branch in program control. The form of " -"an `if` expression is a condition expression, followed by a consequent " -"block, any number of `else if` conditions and blocks, and an optional " -"trailing `else` block. The condition expressions must have type `bool`. If a " -"condition expression evaluates to `true`, the consequent block is executed " -"and any subsequent `else if` or `else` block is skipped. If a condition " -"expression evaluates to `false`, the consequent block is skipped and any " -"subsequent `else if` condition is evaluated. If all `if` and `else if` " -"conditions evaluate to `false` then any `else` block is executed." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2432 -msgid "### Match expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2435 -msgid "" -"~~~~~~~~{.ebnf .gram} match_expr : \"match\" expr '{' match_arm [ '|' " -"match_arm ] * '}' ;" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2437 -msgid "match_arm : match_pat '=>' [ expr \",\" | '{' block '}' ] ;" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2440 -msgid "match_pat : pat [ \"..\" pat ] ? [ \"if\" expr ] ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2448 -msgid "" -"A `match` expression branches on a *pattern*. The exact form of matching " -"that occurs depends on the pattern. Patterns consist of some combination of " -"literals, destructured enum constructors, structures, records and tuples, " -"variable binding specifications, wildcards (`*`), and placeholders (`_`). A " -"`match` expression has a *head expression*, which is the value to compare to " -"the patterns. The type of the patterns must equal the type of the head " -"expression." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2452 -msgid "" -"In a pattern whose head expression has an `enum` type, a placeholder (`_`) " -"stands for a *single* data field, whereas a wildcard `*` stands for *all* " -"the fields of a particular variant. For example:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2455 -msgid "~~~~ enum List { Nil, Cons(X, @List) }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2457 doc/rust.md:2486 -msgid "let x: List = Cons(10, @Cons(11, @Nil));" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2464 -#, no-wrap -msgid "" -"match x {\n" -" Cons(_, @Nil) => fail!(\"singleton list\"),\n" -" Cons(*) => return,\n" -" Nil => fail!(\"empty list\")\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2469 -msgid "" -"The first pattern matches lists constructed by applying `Cons` to any head " -"value, and a tail value of `@Nil`. The second pattern matches _any_ list " -"constructed with `Cons`, ignoring the values of its arguments. The " -"difference between `_` and `*` is that the pattern `C(_)` is only type-" -"correct if `C` has exactly one argument, while the pattern `C(*)` is type-" -"correct for any enum variant `C`, regardless of how many arguments `C` has." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2475 -msgid "" -"To execute an `match` expression, first the head expression is evaluated, " -"then its value is sequentially compared to the patterns in the arms until a " -"match is found. The first arm with a matching pattern is chosen as the " -"branch target of the `match`, any variables bound by the pattern are " -"assigned to local variables in the arm's block, and control enters the block." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2477 -msgid "An example of an `match` expression:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2482 -msgid "~~~~ # fn process_pair(a: int, b: int) { } # fn process_ten() { }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2484 -msgid "enum List { Nil, Cons(X, @List) }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2502 -#, no-wrap -msgid "" -"match x {\n" -" Cons(a, @Cons(b, _)) => {\n" -" process_pair(a,b);\n" -" }\n" -" Cons(10, _) => {\n" -" process_ten();\n" -" }\n" -" Nil => {\n" -" return;\n" -" }\n" -" _ => {\n" -" fail!();\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2509 -msgid "" -"Patterns that bind variables default to binding to a copy or move of the " -"matched value (depending on the matched value's type). This can be changed " -"to bind to a borrowed pointer by using the ```ref``` keyword, or to a " -"mutable borrowed pointer using ```ref mut```." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2520 -msgid "" -"A pattern that's just an identifier, like `Nil` in the previous answer, " -"could either refer to an enum variant that's in scope, or bind a new " -"variable. The compiler resolves this ambiguity by forbidding variable " -"bindings that occur in ```match``` patterns from shadowing names of variants " -"that are in scope. For example, wherever ```List``` is in scope, a " -"```match``` pattern would not be able to bind ```Nil``` as a new name. The " -"compiler interprets a variable pattern `x` as a binding _only_ if there is " -"no variant named `x` in scope. A convention you can use to avoid conflicts " -"is simply to name variants with upper-case letters, and local variables with " -"lower-case letters." -msgstr "" +#: doc/rust.md:2497 +#, fuzzy +#| msgid "# Control structures" +msgid "#### Comparison operators" +msgstr "# 制御構造" #. type: Plain text #: doc/rust.md:2524 -msgid "" -"Multiple match patterns may be joined with the `|` operator. A range of " -"values may be specified with `..`. For example:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2527 -msgid "~~~~ # let x = 2;" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2534 -#, no-wrap -msgid "" -"let message = match x {\n" -" 0 | 1 => \"not many\",\n" -" 2 .. 9 => \"a few\",\n" -" _ => \"lots\"\n" -"};\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2538 -msgid "" -"Range patterns only work on scalar types (like integers and characters; not " -"like vectors and structs, which have sub-components). A range pattern may " -"not be a sub-range of another range pattern inside the same `match`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2543 -msgid "" -"Finally, match patterns can accept *pattern guards* to further refine the " -"criteria for matching a case. Pattern guards appear after the pattern and " -"consist of a bool-typed expression following the `if` keyword. A pattern " -"guard may refer to the variables bound within the pattern they follow." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2548 -msgid "" -"~~~~ # let maybe_digit = Some(0); # fn process_digit(i: int) { } # fn " -"process_other(i: int) { }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2555 -#, no-wrap -msgid "" -"let message = match maybe_digit {\n" -" Some(x) if x < 10 => process_digit(x),\n" -" Some(x) => process_other(x),\n" -" None => fail!()\n" -"};\n" -"~~~~\n" -msgstr "" +#, fuzzy +#| msgid "## Tuple structs" +msgid "#### Type cast expressions" +msgstr "## タプル構造体" #. type: Plain text #: doc/rust.md:2557 -msgid "### Return expressions" +#, fuzzy +#| msgid "~~~~ let hi = \"hi\"; let mut count = 0;" +msgid "~~~~ # let mut x = 0; # let y = 0;" msgstr "" - -#. type: Plain text -#: doc/rust.md:2561 -msgid "~~~~~~~~{.ebnf .gram} return_expr : \"return\" expr ? ; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2566 -msgid "" -"Return expressions are denoted with the keyword `return`. Evaluating a " -"`return` expression moves its argument into the output slot of the current " -"function, destroys the current function activation frame, and transfers " -"control to the caller frame." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2568 -msgid "An example of a `return` expression:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2577 -#, no-wrap -msgid "" "~~~~\n" -"fn max(a: int, b: int) -> int {\n" -" if a > b {\n" -" return a;\n" -" }\n" -" return b;\n" -"}\n" +" let hi = \"hi\";\n" +" let mut count = 0;" + +#. type: Plain text +#: doc/rust.md:2571 +#, fuzzy +#| msgid "## Operators" +msgid "#### Operator precedence" +msgstr "## 演算子" + +#. type: Plain text +#: doc/rust.md:2611 +#, fuzzy +#| msgid "## Syntax extensions" +msgid "### Call expressions" +msgstr "## 構文拡張" + +#. type: Plain text +#: doc/rust.md:2632 +#, fuzzy +#| msgid "" +#| "~~~~ let x: f64 = 4.0; let y: uint = x as uint; assert!(y == 4u); ~~~~" +msgid "" +"let x: int = add(1, 2); let pi: Option = FromStr::from_str(\"3.14\"); " +"~~~~" +msgstr "" "~~~~\n" -msgstr "" +"let x: f64 = 4.0;\n" +"let y: uint = x as uint;\n" +"assert!(y == 4u);\n" +"~~~~" #. type: Plain text -#: doc/rust.md:2580 -msgid "# Type system" -msgstr "" +#: doc/rust.md:2634 +#, fuzzy +#| msgid "## Syntax extensions" +msgid "### Lambda expressions" +msgstr "## 構文拡張" #. type: Plain text -#: doc/rust.md:2582 -msgid "## Types" -msgstr "" +#: doc/rust.md:2677 +#, fuzzy +#| msgid "## Loops" +msgid "### While loops" +msgstr "## ループ" #. type: Plain text -#: doc/rust.md:2585 -msgid "" -"Every slot, item and value in a Rust program has a type. The _type_ of a " -"*value* defines the interpretation of the memory holding it." -msgstr "" +#: doc/rust.md:2688 +#, fuzzy +#| msgid "## A minimal example" +msgid "An example:" +msgstr "## 最小限の例" #. type: Plain text -#: doc/rust.md:2589 -msgid "" -"Built-in types and type-constructors are tightly integrated into the " -"language, in nontrivial ways that are not possible to emulate in user-" -"defined types. User-defined types have limited capabilities." +#: doc/rust.md:2691 +#, fuzzy +#| msgid "~~~~ let hi = \"hi\"; let mut count = 0;" +msgid "~~~~ let mut i = 0;" msgstr "" +"~~~~\n" +" let hi = \"hi\";\n" +" let mut count = 0;" #. type: Plain text -#: doc/rust.md:2591 -msgid "### Primitive types" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2593 -msgid "The primitive types are the following:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:2599 -msgid "" -"The \"unit\" type `()`, having the single \"unit\" value `()` (occasionally " -"called \"nil\"). ^[The \"unit\" value `()` is *not* a sentinel \"null " -"pointer\" value for reference slots; the \"unit\" type is the implicit " -"return type from functions otherwise lacking a return type, and can be used " -"in other contexts (such as message-sending or type-parametric code) as a " -"zero-size type.]" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:2599 -msgid "The boolean type `bool` with values `true` and `false`." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:2599 -msgid "The machine types." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:2599 -msgid "The machine-dependent integer and floating-point types." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2601 -msgid "#### Machine types" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2603 -msgid "The machine types are the following:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:2608 -msgid "" -"The unsigned word types `u8`, `u16`, `u32` and `u64`, with values drawn from " -"the integer intervals $[0, 2^8 - 1]$, $[0, 2^{16} - 1]$, $[0, 2^{32} - 1]$ " -"and $[0, 2^{64} - 1]$ respectively." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:2613 -msgid "" -"The signed two's complement word types `i8`, `i16`, `i32` and `i64`, with " -"values drawn from the integer intervals $[-(2^7), 2^7 - 1]$, $[-(2^{15}), " -"2^{15} - 1]$, $[-(2^{31}), 2^{31} - 1]$, $[-(2^{63}), 2^{63} - 1]$ " -"respectively." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:2616 -msgid "" -"The IEEE 754-2008 `binary32` and `binary64` floating-point types: `f32` and " -"`f64`, respectively." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2618 -msgid "#### Machine-dependent integer types" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2623 -msgid "" -"The Rust type `uint`^[A Rust `uint` is analogous to a C99 `uintptr_t`.] is " -"an unsigned integer type with target-machine-dependent size. Its size, in " -"bits, is equal to the number of bits required to hold any memory address on " -"the target machine." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2628 -msgid "" -"The Rust type `int`^[A Rust `int` is analogous to a C99 `intptr_t`.] is a " -"two's complement signed integer type with target-machine-dependent size. Its " -"size, in bits, is equal to the size of the rust type `uint` on the same " -"target machine." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2631 -msgid "#### Machine-dependent floating point type" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2638 -msgid "" -"The Rust type `float` is a machine-specific type equal to one of the " -"supported Rust floating-point machine types (`f32` or `f64`). It is the " -"largest floating-point type that is directly supported by hardware on the " -"target machine, or if the target machine has no floating-point hardware " -"support, the largest floating-point type supported by the software floating-" -"point library used to support the other floating-point machine types." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2641 -msgid "" -"Note that due to the preference for hardware-supported floating-point, the " -"type `float` may not be equal to the largest *supported* floating-point type." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2644 -msgid "### Textual types" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2646 -msgid "The types `char` and `str` hold textual data." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2649 -msgid "" -"A value of type `char` is a Unicode character, represented as a 32-bit " -"unsigned word holding a UCS-4 codepoint." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2655 -msgid "" -"A value of type `str` is a Unicode string, represented as a vector of 8-bit " -"unsigned bytes holding a sequence of UTF-8 codepoints. Since `str` is of " -"unknown size, it is not a _first class_ type, but can only be instantiated " -"through a pointer type, such as `&str`, `@str` or `~str`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2658 -msgid "### Tuple types" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2661 -msgid "" -"The tuple type-constructor forms a new heterogeneous product of values " -"similar to the record type-constructor. The differences are as follows:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:2664 -msgid "tuple elements cannot be mutable, unlike record fields" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:2664 -msgid "" -"tuple elements are not named and can be accessed only by pattern-matching" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2668 -msgid "" -"Tuple types and values are denoted by listing the types or values of their " -"elements, respectively, in a parenthesized, comma-separated list." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2671 -msgid "" -"The members of a tuple are laid out in memory contiguously, like a record, " -"in order specified by the tuple type." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2673 -msgid "An example of a tuple type and its use:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2680 -msgid "" -"~~~~ type Pair<'self> = (int,&'self str); let p: Pair<'static> = (10,\"hello" -"\"); let (a, b) = p; assert!(b != \"world\"); ~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2683 -msgid "### Vector types" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2696 -msgid "" -"The vector type constructor represents a homogeneous array of values of a " -"given type. A vector has a fixed size. (Operations like `vec.push` operate " -"solely on owned vectors.) A vector type can be annotated with a _definite_ " -"size, written with a trailing asterisk and integer literal, such as `[int * " -"10]`. Such a definite-sized vector type is a first-class type, since its " -"size is known statically. A vector without such a size is said to be of " -"_indefinite_ size, and is therefore not a _first-class_ type. An indefinite-" -"size vector can only be instantiated through a pointer type, such as `&[T]`, " -"`@[T]` or `~[T]`. The kind of a vector type depends on the kind of its " -"element type, as with other simple structural types." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2700 -msgid "" -"Expressions producing vectors of definite size cannot be evaluated in a " -"context expecting a vector of indefinite size; one must copy the definite-" -"sized vector contents into a distinct vector of indefinite size." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2702 -msgid "An example of a vector type and its use:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2708 -msgid "" -"~~~~ let v: &[int] = &[7, 5, 3]; let i: int = v[2]; assert!(i == 3); ~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2711 -msgid "" -"All in-bounds elements of a vector are always initialized, and access to a " -"vector is always bounds-checked." -msgstr "" +#: doc/rust.md:2699 +#, fuzzy +#| msgid "## Loops" +msgid "### Infinite loops" +msgstr "## ループ" #. type: Plain text #: doc/rust.md:2714 -msgid "### Structure types" -msgstr "" +#, fuzzy +#| msgid "## Syntax extensions" +msgid "### Break expressions" +msgstr "## 構文拡張" #. type: Plain text -#: doc/rust.md:2719 -msgid "" -"A `struct` *type* is a heterogeneous product of other types, called the " -"*fields* of the type. ^[`struct` types are analogous `struct` types in C, " -"the *record* types of the ML family, or the *structure* types of the Lisp " -"family.]" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2721 -msgid "" -"New instances of a `struct` can be constructed with a [struct expression]" -"(#struct-expressions)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2725 -msgid "" -"The memory order of fields in a `struct` is given by the item defining it. " -"Fields may be given in any order in a corresponding struct *expression*; the " -"resulting `struct` value will always be laid out in memory in the order " -"specified by the corresponding *item*." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2728 -msgid "" -"The fields of a `struct` may be qualified by [visibility modifiers]" -"(#visibility-modifiers), to restrict access to implementation-private data " -"in a structure." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2730 -msgid "" -"A _tuple struct_ type is just like a structure type, except that the fields " -"are anonymous." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2733 -msgid "" -"A _unit-like struct_ type is like a structure type, except that it has no " -"fields. The one value constructed by the associated [structure expression]" -"(#structure-expression) is the only value that inhabits such a type." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2735 -msgid "### Enumerated types" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2740 -msgid "" -"An *enumerated type* is a nominal, heterogeneous disjoint union type, " -"denoted by the name of an [`enum` item](#enumerations). ^[The `enum` type " -"is analogous to a `data` constructor declaration in ML, or a *pick ADT* in " -"Limbo.]" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2743 -msgid "" -"An [`enum` item](#enumerations) declares both the type and a number of " -"*variant constructors*, each of which is independently named and takes an " -"optional tuple of arguments." -msgstr "" +#: doc/rust.md:2727 +#, fuzzy +#| msgid "# Control structures" +msgid "### Continue expressions" +msgstr "# 制御構造" #. type: Plain text #: doc/rust.md:2746 -msgid "" -"New instances of an `enum` can be constructed by calling one of the variant " -"constructors, in a [call expression](#call-expressions)." -msgstr "" +#, fuzzy +#| msgid "## Conventions" +msgid "### Do expressions" +msgstr "## 本書の表記について" #. type: Plain text -#: doc/rust.md:2748 -msgid "" -"Any `enum` value consumes as much memory as the largest variant constructor " -"for its corresponding `enum` type." -msgstr "" +#: doc/rust.md:2792 +#, fuzzy +#| msgid "## Freezing" +msgid "### For expressions" +msgstr "## 凍結" #. type: Plain text -#: doc/rust.md:2751 -msgid "" -"Enum types cannot be denoted *structurally* as types, but must be denoted by " -"named reference to an [`enum` item](#enumerations)." -msgstr "" +#: doc/rust.md:2826 +#, fuzzy +#| msgid "## Syntax extensions" +msgid "### If expressions" +msgstr "## 構文拡張" #. type: Plain text -#: doc/rust.md:2754 -msgid "### Recursive types" -msgstr "" +#: doc/rust.md:2847 +#, fuzzy +#| msgid "## Syntax extensions" +msgid "### Match expressions" +msgstr "## 構文拡張" #. type: Plain text -#: doc/rust.md:2758 -msgid "" -"Nominal types -- [enumerations](#enumerated-types) and [structures]" -"(#structure-types) -- may be recursive. That is, each `enum` constructor or " -"`struct` field may refer, directly or indirectly, to the enclosing `enum` or " -"`struct` type itself. Such recursion has restrictions:" +#: doc/rust.md:2940 +#, fuzzy +#| msgid "~~~~ # let mystery_object = ();" +msgid "~~~~ # let x = 2;" msgstr "" - -#. type: Plain text -#: doc/rust.md:2768 -#, no-wrap -msgid "" -"* Recursive types must include a nominal type in the recursion\n" -" (not mere [type definitions](#type-definitions),\n" -" or other structural types such as [vectors](#vector-types) or [tuples](#tuple-types)).\n" -"* A recursive `enum` item must have at least one non-recursive constructor\n" -" (in order to give the recursion a basis case).\n" -"* The size of a recursive type must be finite;\n" -" in other words the recursive fields of the type must be [pointer types](#pointer-types).\n" -"* Recursive type definitions can cross module boundaries, but not module *visibility* boundaries,\n" -" or crate boundaries (in order to simplify the module system and type checker).\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2770 -msgid "An example of a *recursive* type and its use:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2776 -#, no-wrap -msgid "" "~~~~\n" -"enum List {\n" -" Nil,\n" -" Cons(T, @List)\n" -"}\n" -msgstr "" +"# let mystery_object = ();" #. type: Plain text -#: doc/rust.md:2779 -msgid "let a: List = Cons(7, @Cons(13, @Nil)); ~~~~" -msgstr "" +#: doc/rust.md:2970 +#, fuzzy +#| msgid "## Syntax extensions" +msgid "### Return expressions" +msgstr "## 構文拡張" #. type: Plain text -#: doc/rust.md:2782 +#: doc/rust.md:2994 +#, fuzzy +#| msgid "## Tuples" +msgid "## Types" +msgstr "## タプル" + +#. type: Plain text +#: doc/rust.md:3003 +#, fuzzy +#| msgid "## Primitive types and literals" +msgid "### Primitive types" +msgstr "## プリミティブ型とリテラル" + +#. type: Plain text +#: doc/rust.md:3005 +#, fuzzy +#| msgid "## Primitive types and literals" +msgid "The primitive types are the following:" +msgstr "## プリミティブ型とリテラル" + +#. type: Plain text +#: doc/rust.md:3013 +#, fuzzy +#| msgid "# Closures" +msgid "#### Machine types" +msgstr "# クロージャ" + +#. type: Plain text +#: doc/rust.md:3041 +#, fuzzy +#| msgid "# Closures" +msgid "### Textual types" +msgstr "# クロージャ" + +#. type: Plain text +#: doc/rust.md:3054 +#, fuzzy +#| msgid "## Tuples" +msgid "### Tuple types" +msgstr "## タプル" + +#. type: Plain text +#: doc/rust.md:3078 +#, fuzzy +#| msgid "# Closures" +msgid "### Vector types" +msgstr "# クロージャ" + +#. type: Plain text +#: doc/rust.md:3102 +#, fuzzy +#| msgid "" +#| "~~~~ let x: f64 = 4.0; let y: uint = x as uint; assert!(y == 4u); ~~~~" +msgid "" +"~~~~ let v: &[int] = &[7, 5, 3]; let i: int = v[2]; assert!(i == 3); ~~~~" +msgstr "" +"~~~~\n" +"let x: f64 = 4.0;\n" +"let y: uint = x as uint;\n" +"assert!(y == 4u);\n" +"~~~~" + +#. type: Plain text +#: doc/rust.md:3107 +#, fuzzy +#| msgid "# Closures" +msgid "### Structure types" +msgstr "# クロージャ" + +#. type: Plain text +#: doc/rust.md:3128 +#, fuzzy +#| msgid "# Closures" +msgid "### Enumerated types" +msgstr "# クロージャ" + +#. type: Plain text +#: doc/rust.md:3146 +#, fuzzy +#| msgid "# Closures" +msgid "### Recursive types" +msgstr "# クロージャ" + +#. type: Plain text +#: doc/rust.md:3173 +#, fuzzy +#| msgid "# Closures" msgid "### Pointer types" -msgstr "" +msgstr "# クロージャ" #. type: Plain text -#: doc/rust.md:2786 -msgid "" -"All pointers in Rust are explicit first-class values. They can be copied, " -"stored into data structures, and returned from functions. There are four " -"varieties of pointer in Rust:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2796 -#, no-wrap -msgid "" -"Managed pointers (`@`)\n" -" : These point to managed heap allocations (or \"boxes\") in the task-local, managed heap.\n" -" Managed pointers are written `@content`,\n" -" for example `@int` means a managed pointer to a managed box containing an integer.\n" -" Copying a managed pointer is a \"shallow\" operation:\n" -" it involves only copying the pointer itself\n" -" (as well as any reference-count or GC-barriers required by the managed heap).\n" -" Dropping a managed pointer does not necessarily release the box it points to;\n" -" the lifecycles of managed boxes are subject to an unspecified garbage collection algorithm.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2805 -#, no-wrap -msgid "" -"Owning pointers (`~`)\n" -" : These point to owned heap allocations (or \"boxes\") in the shared, inter-task heap.\n" -" Each owned box has a single owning pointer; pointer and pointee retain a 1:1 relationship at all times.\n" -" Owning pointers are written `~content`,\n" -" for example `~int` means an owning pointer to an owned box containing an integer.\n" -" Copying an owned box is a \"deep\" operation:\n" -" it involves allocating a new owned box and copying the contents of the old box into the new box.\n" -" Releasing an owning pointer immediately releases its corresponding owned box.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2818 -#, no-wrap -msgid "" -"Borrowed pointers (`&`)\n" -" : These point to memory _owned by some other value_.\n" -" Borrowed pointers arise by (automatic) conversion from owning pointers, managed pointers,\n" -" or by applying the borrowing operator `&` to some other value,\n" -" including [lvalues, rvalues or temporaries](#lvalues-rvalues-and-temporaries).\n" -" Borrowed pointers are written `&content`, or in some cases `&f/content` for some lifetime-variable `f`,\n" -" for example `&int` means a borrowed pointer to an integer.\n" -" Copying a borrowed pointer is a \"shallow\" operation:\n" -" it involves only copying the pointer itself.\n" -" Releasing a borrowed pointer typically has no effect on the value it points to,\n" -" with the exception of temporary values,\n" -" which are released when the last borrowed pointer to them is released.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2828 -#, no-wrap -msgid "" -"Raw pointers (`*`)\n" -" : Raw pointers are pointers without safety or liveness guarantees.\n" -" Raw pointers are written `*content`,\n" -" for example `*int` means a raw pointer to an integer.\n" -" Copying or dropping a raw pointer is has no effect on the lifecycle of any other value.\n" -" Dereferencing a raw pointer or converting it to any other pointer type is an [`unsafe` operation](#unsafe-functions).\n" -" Raw pointers are generally discouraged in Rust code;\n" -" they exist to support interoperability with foreign code,\n" -" and writing performance-critical or low-level functions.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2831 +#: doc/rust.md:3221 +#, fuzzy +#| msgid "# Functions" msgid "### Function types" -msgstr "" +msgstr "# 関数" #. type: Plain text -#: doc/rust.md:2835 +#: doc/rust.md:3241 +#, fuzzy +#| msgid "# Closures" +msgid "### Closure types" +msgstr "# クロージャ" + +#. type: Plain text +#: doc/rust.md:3251 +#, fuzzy +#| msgid "" +#| "let captured_var = 20; let closure = |arg| println(fmt!(\"captured_var=" +#| "%d, arg=%d\", captured_var, arg));" +msgid "let closure_no_args = || println!(\"captured_var={}\", captured_var);" +msgstr "" +"let captured_var = 20;\n" +"let closure = |arg| println(fmt!(\"captured_var=%d, arg=%d\", captured_var, " +"arg));" + +#. type: Plain text +#: doc/rust.md:3256 +#, fuzzy, no-wrap +#| msgid "let captured_var = 20; let closure = |arg| println(fmt!(\"captured_var=%d, arg=%d\", captured_var, arg));" msgid "" -"The function type constructor `fn` forms new function types. A function " -"type consists of a possibly-empty set of function-type modifiers (such as " -"`unsafe` or `extern`), a sequence of input types and an output type." +"let closure_args = |arg: int| -> int {\n" +" println!(\"captured_var={}, arg={}\", captured_var, arg);\n" +" arg // Note lack of semicolon after 'arg'\n" +"};\n" msgstr "" +"let captured_var = 20;\n" +"let closure = |arg| println(fmt!(\"captured_var=%d, arg=%d\", captured_var, arg));" #. type: Plain text -#: doc/rust.md:2837 -msgid "An example of a `fn` type:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2842 -#, no-wrap -msgid "" -"~~~~~~~~\n" -"fn add(x: int, y: int) -> int {\n" -" return x + y;\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2844 -msgid "let mut x = add(5,7);" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2849 -msgid "" -"type Binop<'self> = 'self |int,int| -> int; let bo: Binop = add; x = " -"bo(5,7); ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2851 +#: doc/rust.md:3267 +#, fuzzy +#| msgid "# Closures" msgid "### Object types" -msgstr "" +msgstr "# クロージャ" #. type: Plain text -#: doc/rust.md:2858 -msgid "" -"Every trait item (see [traits](#traits)) defines a type with the same name " -"as the trait. This type is called the _object type_ of the trait. Object " -"types permit \"late binding\" of methods, dispatched using _virtual method " -"tables_ (\"vtables\"). Whereas most calls to trait methods are \"early bound" -"\" (statically resolved) to specific implementations at compile time, a call " -"to a method on an object type is only resolved to a vtable entry at compile " -"time. The actual implementation for each vtable entry can vary on an object-" -"by-object basis." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2863 -msgid "" -"Given a pointer-typed expression `E` of type `&T`, `~T` or `@T`, where `T` " -"implements trait `R`, casting `E` to the corresponding pointer type `&R`, " -"`~R` or `@R` results in a value of the _object type_ `R`. This result is " -"represented as a pair of pointers: the vtable pointer for the `T` " -"implementation of `R`, and the pointer value of `E`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2865 -msgid "An example of an object type:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2871 -#, no-wrap -msgid "" -"~~~~~~~~\n" -"# use std::int;\n" -"trait Printable {\n" -" fn to_str(&self) -> ~str;\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2875 -#, no-wrap -msgid "" -"impl Printable for int {\n" -" fn to_str(&self) -> ~str { int::to_str(*self) }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2879 -#, no-wrap -msgid "" -"fn print(a: @Printable) {\n" -" println(a.to_str());\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2884 -#, no-wrap +#: doc/rust.md:3299 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println(~\"hello \" + world::explore()); } ~~~~" msgid "" "fn main() {\n" " print(@10 as @Printable);\n" "}\n" -"~~~~~~~~\n" +"~~~~\n" msgstr "" +"~~~~ {.xfail-test}\n" +"// main.rs\n" +"extern mod world;\n" +"fn main() { println(~\"hello \" + world::explore()); }\n" +"~~~~" #. type: Plain text -#: doc/rust.md:2887 -msgid "" -"In this example, the trait `Printable` occurs as an object type in both the " -"type signature of `print`, and the cast expression in `main`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2889 -msgid "### Type parameters" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2891 -msgid "" -"Within the body of an item that has type parameter declarations, the names " -"of its type parameters are types:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2902 -#, no-wrap -msgid "" -"~~~~~~~\n" -"fn map(f: |A| -> B, xs: &[A]) -> ~[B] {\n" -" if xs.len() == 0 {\n" -" return ~[];\n" -" }\n" -" let first: B = f(xs[0].clone());\n" -" let rest: ~[B] = map(f, xs.slice(1, xs.len()));\n" -" return ~[first] + rest;\n" -"}\n" -"~~~~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2905 -msgid "" -"Here, `first` has type `B`, referring to `map`'s `B` type parameter; and " -"`rest` has type `~[B]`, a vector type with element type `B`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2907 +#: doc/rust.md:3322 +#, fuzzy +#| msgid "# Closures" msgid "### Self types" -msgstr "" +msgstr "# クロージャ" #. type: Plain text -#: doc/rust.md:2911 -msgid "" -"The special type `self` has a meaning within methods inside an impl item. It " -"refers to the type of the implicit `self` argument. For example, in:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2916 -#, no-wrap -msgid "" -"~~~~~~~~\n" -"trait Printable {\n" -" fn make_string(&self) -> ~str;\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2923 -#, no-wrap -msgid "" -"impl Printable for ~str {\n" -" fn make_string(&self) -> ~str {\n" -" (*self).clone()\n" -" }\n" -"}\n" -"~~~~~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2926 -msgid "" -"`self` refers to the value of type `~str` that is the receiver for a call to " -"the method `make_string`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2928 +#: doc/rust.md:3343 +#, fuzzy +#| msgid "## Tuples" msgid "## Type kinds" -msgstr "" +msgstr "## タプル" #. type: Plain text -#: doc/rust.md:2931 -msgid "" -"Types in Rust are categorized into kinds, based on various properties of the " -"components of the type. The kinds are:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2957 -#, no-wrap -msgid "" -"`Freeze`\n" -" : Types of this kind are deeply immutable;\n" -" they contain no mutable memory locations\n" -" directly or indirectly via pointers.\n" -"`Send`\n" -" : Types of this kind can be safely sent between tasks.\n" -" This kind includes scalars, owning pointers, owned closures, and\n" -" structural types containing only other owned types.\n" -" All `Send` types are `'static`.\n" -"`'static`\n" -" : Types of this kind do not contain any borrowed pointers;\n" -" this can be a useful guarantee for code\n" -" that breaks borrowing assumptions\n" -" using [`unsafe` operations](#unsafe-functions).\n" -"`Drop`\n" -" : This is not strictly a kind,\n" -" but its presence interacts with kinds:\n" -" the `Drop` trait provides a single method `drop`\n" -" that takes no parameters,\n" -" and is run when values of the type are dropped.\n" -" Such a method is called a \"destructor\",\n" -" and are always executed in \"top-down\" order:\n" -" a value is completely destroyed\n" -" before any of the values it owns run their destructors.\n" -" Only `Send` types can implement `Drop`.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2964 -#, no-wrap -msgid "" -"_Default_\n" -" : Types with destructors, closure environments,\n" -" and various other _non-first-class_ types,\n" -" are not copyable at all.\n" -" Such types can usually only be accessed through pointers,\n" -" or in some cases, moved between mutable locations.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2967 -msgid "" -"Kinds can be supplied as _bounds_ on type parameters, like traits, in which " -"case the parameter is constrained to types satisfying that kind." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2973 -msgid "" -"By default, type parameters do not carry any assumed kind-bounds at all. " -"When instantiating a type parameter, the kind bounds on the parameter are " -"checked to be the same or narrower than the kind of the type that it is " -"instantiated with." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2978 -msgid "" -"Sending operations are not part of the Rust language, but are implemented in " -"the library. Generic functions that send values bound the kind of these " -"values to sendable." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2980 -msgid "# Memory and concurrency models" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2985 -msgid "" -"Rust has a memory model centered around concurrently-executing _tasks_. Thus " -"its memory model and its concurrency model are best discussed " -"simultaneously, as parts of each only make sense when considered from the " -"perspective of the other." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2990 -msgid "" -"When reading about the memory model, keep in mind that it is partitioned in " -"order to support tasks; and when reading about tasks, keep in mind that " -"their isolation and communication mechanisms are only possible due to the " -"ownership and lifetime semantics of the memory model." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2992 -msgid "## Memory model" -msgstr "" - -#. type: Plain text -#: doc/rust.md:2996 -msgid "" -"A Rust program's memory consists of a static set of *items*, a set of [tasks]" -"(#tasks) each with its own *stack*, and a *heap*. Immutable portions of the " -"heap may be shared between tasks, mutable portions may not." -msgstr "" - -#. type: Plain text -#: doc/rust.md:2999 -msgid "" -"Allocations in the stack consist of *slots*, and allocations in the heap " -"consist of *boxes*." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3002 -msgid "### Memory allocation and lifetime" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3007 -msgid "" -"The _items_ of a program are those functions, modules and types that have " -"their value calculated at compile-time and stored uniquely in the memory " -"image of the rust process. Items are neither dynamically allocated nor freed." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3011 -msgid "" -"A task's _stack_ consists of activation frames automatically allocated on " -"entry to each function as the task executes. A stack allocation is reclaimed " -"when control leaves the frame containing it." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3018 -msgid "" -"The _heap_ is a general term that describes two separate sets of boxes: " -"managed boxes -- which may be subject to garbage collection -- and owned " -"boxes. The lifetime of an allocation in the heap depends on the lifetime of " -"the box values pointing to it. Since box values may themselves be passed in " -"and out of frames, or stored in the heap, heap allocations may outlive the " -"frame they are allocated within." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3020 +#: doc/rust.md:3440 +#, fuzzy +#| msgid "# Ownership" msgid "### Memory ownership" -msgstr "" +msgstr "# 所有権" #. type: Plain text -#: doc/rust.md:3023 -msgid "" -"A task owns all memory it can *safely* reach through local variables, as " -"well as managed, owning and borrowed pointers." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3030 -msgid "" -"When a task sends a value that has the `Send` trait to another task, it " -"loses ownership of the value sent and can no longer refer to it. This is " -"statically guaranteed by the combined use of \"move semantics\", and the " -"compiler-checked _meaning_ of the `Send` trait: it is only instantiated for " -"(transitively) sendable kinds of data constructor and pointers, never " -"including managed or borrowed pointers." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3033 -msgid "" -"When a stack frame is exited, its local allocations are all released, and " -"its references to boxes (both managed and owned) are dropped." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3039 -msgid "" -"A managed box may (in the case of a recursive, mutable managed type) be " -"cyclic; in this case the release of memory inside the managed structure may " -"be deferred until task-local garbage collection can reclaim it. Code can " -"ensure no such delayed deallocation occurs by restricting itself to owned " -"boxes and similar unmanaged kinds of data." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3042 -msgid "" -"When a task finishes, its stack is necessarily empty and it therefore has no " -"references to any boxes; the remainder of its heap is immediately freed." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3045 -msgid "### Memory slots" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3047 -msgid "A task's stack contains slots." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3050 -msgid "" -"A _slot_ is a component of a stack frame, either a function parameter, a " -"[temporary](#lvalues-rvalues-and-temporaries), or a local variable." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3053 -msgid "" -"A _local variable_ (or *stack-local* allocation) holds a value directly, " -"allocated within the stack's memory. The value is a part of the stack frame." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3058 -msgid "" -"Local variables are immutable unless declared with `let mut`. The `mut` " -"keyword applies to all local variables declared within that declaration (so " -"`let mut (x, y) = ...` declares two mutable variables, `x` and `y`)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3063 -msgid "" -"Function parameters are immutable unless declared with `mut`. The `mut` " -"keyword applies only to the following parameter (so `|mut x, y|` and `fn " -"f(mut x: ~int, y: ~int)` declare one mutable variable `x` and one immutable " -"variable `y`)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3069 -msgid "" -"Local variables are not initialized when allocated; the entire frame worth " -"of local variables are allocated at once, on frame-entry, in an " -"uninitialized state. Subsequent statements within a function may or may not " -"initialize the local variables. Local variables can be used only after they " -"have been initialized; this is enforced by the compiler." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3072 +#: doc/rust.md:3497 +#, fuzzy +#| msgid "## Managed boxes" msgid "### Memory boxes" -msgstr "" +msgstr "## マネージドボックス" #. type: Plain text -#: doc/rust.md:3075 -msgid "" -"A _box_ is a reference to a heap allocation holding another value. There are " -"two kinds of boxes: *managed boxes* and *owned boxes*." +#: doc/rust.md:3519 +#, fuzzy +#| msgid "~~~~ let hi = \"hi\"; let mut count = 0;" +msgid "~~~~ let x: @int = @10; let x: ~int = ~10; ~~~~" msgstr "" +"~~~~\n" +" let hi = \"hi\";\n" +" let mut count = 0;" #. type: Plain text -#: doc/rust.md:3077 -msgid "" -"A _managed box_ type or value is constructed by the prefix *at* sigil `@`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3079 -msgid "" -"An _owned box_ type or value is constructed by the prefix *tilde* sigil `~`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3084 -msgid "" -"Multiple managed box values can point to the same heap allocation; copying a " -"managed box value makes a shallow copy of the pointer (optionally " -"incrementing a reference count, if the managed box is implemented through " -"reference-counting)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3086 -msgid "" -"Owned box values exist in 1:1 correspondence with their heap allocation." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3089 -msgid "" -"An example of constructing one managed box type and value, and one owned box " -"type and value:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3094 -msgid "~~~~~~~~ let x: @int = @10; let x: ~int = ~10; ~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3097 -msgid "" -"Some operations (such as field selection) implicitly dereference boxes. An " -"example of an _implicit dereference_ operation performed on box values:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3103 -msgid "" -"~~~~~~~~ struct Foo { y: int } let x = @Foo{y: 10}; assert!(x.y == 10); " -"~~~~~~~~" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3109 -msgid "" -"Other operations act on box values as single-word-sized address values. For " -"these operations, to access the value held in the box requires an explicit " -"dereference of the box value. Explicitly dereferencing a box is indicated " -"with the unary *star* operator `*`. Examples of such _explicit dereference_ " -"operations are:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3112 -msgid "copying box values (`x = y`)" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3112 -msgid "passing box values to functions (`f(x,y)`)" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3115 -msgid "" -"An example of an explicit-dereference operation performed on box values:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3119 -msgid "~~~~~~~~ fn takes_boxed(b: @int) { }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3122 -msgid "fn takes_unboxed(b: int) { }" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3129 -#, no-wrap -msgid "" -"fn main() {\n" -" let x: @int = @10;\n" -" takes_boxed(x);\n" -" takes_unboxed(*x);\n" -"}\n" -"~~~~~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3131 +#: doc/rust.md:3555 +#, fuzzy +#| msgid "## Traits" msgid "## Tasks" -msgstr "" +msgstr "## トレイト" #. type: Plain text -#: doc/rust.md:3139 -msgid "" -"An executing Rust program consists of a tree of tasks. A Rust _task_ " -"consists of an entry function, a stack, a set of outgoing communication " -"channels and incoming communication ports, and ownership of some portion of " -"the heap of a single operating-system process. (We expect that many " -"programs will not use channels and ports directly, but will instead use " -"higher-level abstractions provided in standard libraries, such as pipes.)" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3154 -msgid "" -"Multiple Rust tasks may coexist in a single operating-system process. The " -"runtime scheduler maps tasks to a certain number of operating-system " -"threads. By default, the scheduler chooses the number of threads based on " -"the number of concurrent physical CPUs detected at startup. It's also " -"possible to override this choice at runtime. When the number of tasks " -"exceeds the number of threads -- which is likely -- the scheduler " -"multiplexes the tasks onto threads.^[ This is an M:N scheduler, which is " -"known to give suboptimal results for CPU-bound concurrency problems. In " -"such cases, running with the same number of threads and tasks can yield " -"better results. Rust has M:N scheduling in order to support very large " -"numbers of tasks in contexts where threads are too resource-intensive to use " -"in large number. The cost of threads varies substantially per operating " -"system, and is sometimes quite low, so this flexibility is not always worth " -"exploiting.]" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3157 +#: doc/rust.md:3580 +#, fuzzy +#| msgid "## Conditionals" msgid "### Communication between tasks" -msgstr "" +msgstr "## 条件式" #. type: Plain text -#: doc/rust.md:3162 -msgid "" -"Rust tasks are isolated and generally unable to interfere with one another's " -"memory directly, except through [`unsafe` code](#unsafe-functions). All " -"contact between tasks is mediated by safe forms of ownership transfer, and " -"data races on memory are prohibited by the type system." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3165 -msgid "" -"Inter-task communication and co-ordination facilities are provided in the " -"standard library. These include:" -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:3169 -msgid "" -"synchronous and asynchronous communication channels with various " -"communication topologies" -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:3169 -msgid "" -"read-only and read-write shared variables with various safe mutual exclusion " -"patterns" -msgstr "" - -#. type: Bullet: ' - ' -#: doc/rust.md:3169 -msgid "simple locks and semaphores" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3174 -msgid "" -"When such facilities carry values, the values are restricted to the [`Send` " -"type-kind](#type-kinds). Restricting communication interfaces to this kind " -"ensures that no borrowed or managed pointers move between tasks. Thus " -"access to an entire data structure can be mediated through its owning \"root" -"\" value; no further locking or copying is required to avoid data races " -"within the substructure of such a value." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3177 -msgid "### Task lifecycle" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3180 -msgid "" -"The _lifecycle_ of a task consists of a finite set of states and events that " -"cause transitions between the states. The lifecycle states of a task are:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3185 -msgid "running" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3185 -msgid "blocked" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3185 -msgid "failing" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3185 -msgid "dead" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3189 -msgid "" -"A task begins its lifecycle -- once it has been spawned -- in the *running* " -"state. In this state it executes the statements of its entry function, and " -"any functions called by the entry function." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3195 -msgid "" -"A task may transition from the *running* state to the *blocked* state any " -"time it makes a blocking communication call. When the call can be completed " -"-- when a message arrives at a sender, or a buffer opens to receive a " -"message -- then the blocked task will unblock and transition back to " -"*running*." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3214 -msgid "" -"A task may transition to the *failing* state at any time, due being killed " -"by some external event or internally, from the evaluation of a `fail!()` " -"macro. Once *failing*, a task unwinds its stack and transitions to the " -"*dead* state. Unwinding the stack of a task is done by the task itself, on " -"its own control stack. If a value with a destructor is freed during " -"unwinding, the code for the destructor is run, also on the task's control " -"stack. Running the destructor code causes a temporary transition to a " -"*running* state, and allows the destructor code to cause any subsequent " -"state transitions. The original task of unwinding and failing thereby may " -"suspend temporarily, and may involve (recursive) unwinding of the stack of a " -"failed destructor. Nonetheless, the outermost unwinding activity will " -"continue until the stack is unwound and the task transitions to the *dead* " -"state. There is no way to \"recover\" from task failure. Once a task has " -"temporarily suspended its unwinding in the *failing* state, failure " -"occurring from within this destructor results in *hard* failure. The " -"unwinding procedure of hard failure frees resources but does not execute " -"destructors. The original (soft) failure is still resumed at the point " -"where it was temporarily suspended." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3218 -msgid "" -"A task in the *dead* state cannot transition to other states; it exists only " -"to have its termination status inspected by other tasks, and/or to await " -"reclamation when the last reference to it drops." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3221 -msgid "### Task scheduling" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3225 -msgid "" -"The currently scheduled task is given a finite *time slice* in which to " -"execute, after which it is *descheduled* at a loop-edge or similar " -"preemption point, and another task within is scheduled, pseudo-randomly." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3229 -msgid "" -"An executing task can yield control at any time, by making a library call to " -"`std::task::yield`, which deschedules it immediately. Entering any other non-" -"executing state (blocked, dead) similarly deschedules the task." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3232 -msgid "# Runtime services, linkage and debugging" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3239 -msgid "" -"The Rust _runtime_ is a relatively compact collection of C++ and Rust code " -"that provides fundamental services and datatypes to all Rust tasks at run-" -"time. It is smaller and simpler than many modern language runtimes. It is " -"tightly integrated into the language's execution model of memory, tasks, " -"communication and logging." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3241 -msgid "" -"> **Note:** The runtime library will merge with the `std` library in future " -"versions of Rust." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3243 +#: doc/rust.md:3660 +#, fuzzy +#| msgid "# Introduction" msgid "### Memory allocation" -msgstr "" +msgstr "# イントロダクション" #. type: Plain text -#: doc/rust.md:3249 -msgid "" -"The runtime memory-management system is based on a _service-provider " -"interface_, through which the runtime requests blocks of memory from its " -"environment and releases them back to its environment when they are no " -"longer needed. The default implementation of the service-provider interface " -"consists of the C runtime functions `malloc` and `free`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3253 -msgid "" -"The runtime memory-management system, in turn, supplies Rust tasks with " -"facilities for allocating, extending and releasing stacks, as well as " -"allocating and freeing heap data." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3255 +#: doc/rust.md:3672 +#, fuzzy +#| msgid "# Closures" msgid "### Built in types" -msgstr "" +msgstr "# クロージャ" #. type: Plain text -#: doc/rust.md:3259 -msgid "" -"The runtime provides C and Rust code to assist with various built-in types, " -"such as vectors, strings, and the low level communication system (ports, " -"channels, tasks)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3262 -msgid "" -"Support for other built-in types such as simple types, tuples, records, and " -"enums is open-coded by the Rust compiler." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3266 +#: doc/rust.md:3681 +#, fuzzy +#| msgid "[Tasks and communication][tasks]" msgid "### Task scheduling and communication" -msgstr "" +msgstr "[タスクと通信][tasks]" #. type: Plain text -#: doc/rust.md:3272 -msgid "" -"The runtime provides code to manage inter-task communication. This includes " -"the system of task-lifecycle state transitions depending on the contents of " -"queues, as well as code to copy values between queues and their recipients " -"and to serialize values for transmission over operating-system inter-process " -"communication facilities." -msgstr "" +#: doc/rust.md:3689 +#, fuzzy +#| msgid "## Freezing" +msgid "### Linkage" +msgstr "## 凍結" #. type: Plain text -#: doc/rust.md:3275 -msgid "### Logging system" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3279 -msgid "" -"The runtime contains a system for directing [logging expressions](#log-" -"expressions) to a logging console and/or internal logging buffers. Logging " -"can be enabled per module." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3286 -msgid "" -"Logging output is enabled by setting the `RUST_LOG` environment variable. " -"`RUST_LOG` accepts a logging specification made up of a comma-separated list " -"of paths, with optional log levels. For each module containing log " -"expressions, if `RUST_LOG` contains the path to that module or a parent of " -"that module, then logs of the appropriate level will be output to the " -"console." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3294 -msgid "" -"The path to a module consists of the crate name, any parent modules, then " -"the module itself, all separated by double colons (`::`). The optional log " -"level can be appended to the module path with an equals sign (`=`) followed " -"by the log level, from 1 to 4, inclusive. Level 1 is the error level, 2 is " -"warning, 3 info, and 4 debug. Any logs less than or equal to the specified " -"level will be output. If not specified then log level 4 is assumed." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3300 -msgid "" -"As an example, to see all the logs generated by the compiler, you would set " -"`RUST_LOG` to `rustc`, which is the crate name (as specified in its `link` " -"[attribute](#attributes)). To narrow down the logs to just crate resolution, " -"you would set it to `rustc::metadata::creader`. To see just error logging " -"use `rustc=0`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3305 -msgid "" -"Note that when compiling source files that don't specify a crate name the " -"crate is given a default name that matches the source file, with the " -"extension removed. In that case, to turn on logging for a program compiled " -"from, e.g. `helloworld.rs`, `RUST_LOG` should be set to `helloworld`." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3309 -msgid "" -"As a convenience, the logging spec can also be set to a special pseudo-" -"crate, `::help`. In this case, when the application starts, the runtime will " -"simply output a list of loaded modules containing log expressions, then exit." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3314 -msgid "" -"The Rust runtime itself generates logging information. The runtime's logs " -"are generated for a number of artificial modules in the `::rt` pseudo-crate, " -"and can be enabled just like the logs for any standard module. The full list " -"of runtime logging modules follows." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3328 -msgid "`::rt::mem` Memory management" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3328 -msgid "`::rt::comm` Messaging and task communication" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3328 -msgid "`::rt::task` Task management" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3328 -msgid "`::rt::dom` Task scheduling" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3328 -msgid "`::rt::trace` Unused" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3328 -msgid "`::rt::cache` Type descriptor cache" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3328 -msgid "`::rt::upcall` Compiler-generated runtime calls" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3328 -msgid "`::rt::timer` The scheduler timer" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3328 -msgid "`::rt::gc` Garbage collection" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3328 -msgid "`::rt::stdlib` Functions used directly by the standard library" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3328 -msgid "`::rt::kern` The runtime kernel" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3328 -msgid "`::rt::backtrace` Log a backtrace on task failure" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3328 -msgid "`::rt::callback` Unused" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3330 -msgid "#### Logging Expressions" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3333 -msgid "" -"Rust provides several macros to log information. Here's a simple Rust " -"program that demonstrates all four of them:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3342 -#, no-wrap -msgid "" -"```rust\n" -"fn main() {\n" -" error!(\"This is an error log\")\n" -" warn!(\"This is a warn log\")\n" -" info!(\"this is an info log\")\n" -" debug!(\"This is a debug log\")\n" -"}\n" -"```\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3344 -msgid "" -"These four log levels correspond to levels 1-4, as controlled by `RUST_LOG`:" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3351 -msgid "" -"```bash $ RUST_LOG=rust=3 ./rust rust: ~\"\\\"This is an error log\\\"\" " -"rust: ~\"\\\"This is a warn log\\\"\" rust: ~\"\\\"this is an info log\\\"\" " -"```" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3353 -msgid "# Appendix: Rationales and design tradeoffs" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3355 -#, no-wrap -msgid "*TODO*.\n" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3357 -msgid "# Appendix: Influences and further references" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3359 +#: doc/rust.md:3861 +#, fuzzy msgid "## Influences" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3368 -msgid "" -"> The essential problem that must be solved in making a fault-tolerant > " -"software system is therefore that of fault-isolation. Different programmers " -"> will write different modules, some modules will be correct, others will " -"have > errors. We do not want the errors in one module to adversely affect " -"the > behaviour of a module which does not have any errors. > > — Joe " -"Armstrong" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3380 -msgid "" -"> In our approach, all data is private to some process, and processes can > " -"only communicate through communications channels. *Security*, as used > in " -"this paper, is the property which guarantees that processes in a system > " -"cannot affect each other except by explicit communication. > > When " -"security is absent, nothing which can be proven about a single module > in " -"isolation can be guaranteed to hold when that module is embedded in a > " -"system [...] > > — Robert Strom and Shaula Yemini" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3388 -msgid "" -"> Concurrent and applicative programming complement each other. The > " -"ability to send messages on channels provides I/O without side effects, > " -"while the avoidance of shared data helps keep concurrent processes from > " -"colliding. > > — Rob Pike" -msgstr "" - -#. type: Plain text -#: doc/rust.md:3395 -msgid "" -"Rust is not a particularly original language. It may however appear unusual " -"by contemporary standards, as its design elements are drawn from a number of " -"\"historical\" languages that have, with a few exceptions, fallen out of " -"favour. Five prominent lineages contribute the most, though their influences " -"have come and gone during the course of Rust's development:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3399 -msgid "" -"The NIL (1981) and Hermes (1990) family. These languages were developed by " -"Robert Strom, Shaula Yemini, David Bacon and others in their group at IBM " -"Watson Research Center (Yorktown Heights, NY, USA)." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3403 -msgid "" -"The Erlang (1987) language, developed by Joe Armstrong, Robert Virding, " -"Claes Wikström, Mike Williams and others in their group at the Ericsson " -"Computer Science Laboratory (Älvsjö, Stockholm, Sweden) ." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3408 -msgid "" -"The Sather (1990) language, developed by Stephen Omohundro, Chu-Cheow Lim, " -"Heinz Schmidt and others in their group at The International Computer " -"Science Institute of the University of California, Berkeley (Berkeley, CA, " -"USA)." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3413 -msgid "" -"The Newsqueak (1988), Alef (1995), and Limbo (1996) family. These languages " -"were developed by Rob Pike, Phil Winterbottom, Sean Dorward and others in " -"their group at Bell Labs Computing Sciences Research Center (Murray Hill, " -"NJ, USA)." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3417 -msgid "" -"The Napier (1985) and Napier88 (1988) family. These languages were developed " -"by Malcolm Atkinson, Ron Morrison and others in their group at the " -"University of St. Andrews (St. Andrews, Fife, UK)." -msgstr "" - -#. type: Plain text -#: doc/rust.md:3419 -msgid "" -"Additional specific influences can be seen from the following languages:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3427 -msgid "The stack-growth implementation of Go." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3427 -msgid "The structural algebraic types and compilation manager of SML." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3427 -msgid "The attribute and assembly systems of C#." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3427 -msgid "The references and deterministic destructor system of C++." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3427 -msgid "The memory region systems of the ML Kit and Cyclone." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3427 -msgid "The typeclass system of Haskell." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3427 -msgid "The lexical identifier rule of Python." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rust.md:3427 -msgid "The block syntax of Ruby." -msgstr "" +msgstr "# ポインタのデリファレンス" diff --git a/doc/po/ja/rustdoc.md.po b/doc/po/ja/rustdoc.md.po new file mode 100644 index 00000000000..9d5146ece7c --- /dev/null +++ b/doc/po/ja/rustdoc.md.po @@ -0,0 +1,52 @@ +# Japanese translations for Rust package +# Copyright (C) 2014 The Rust Project Developers +# This file is distributed under the same license as the Rust package. +# Automatically generated, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Rust 0.10-pre\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" +"PO-Revision-Date: 2014-01-13 12:01+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. type: Plain text +#: doc/rustdoc.md:2 +#, fuzzy +#| msgid "## Using the rust tool" +msgid "% Rust Documentation" +msgstr "## `rust` コマンドを利用する" + +#. type: Plain text +#: doc/rustdoc.md:9 +#, fuzzy +#| msgid "## Using the rust tool" +msgid "# Creating Documentation" +msgstr "## `rust` コマンドを利用する" + +#. type: Plain text +#: doc/rustdoc.md:79 +#, fuzzy +#| msgid "## Using the rust tool" +msgid "# Using the Documentation" +msgstr "## `rust` コマンドを利用する" + +#. type: Plain text +#: doc/rustdoc.md:90 +#, fuzzy +#| msgid "## Using the rust tool" +msgid "# Testing the Documentation" +msgstr "## `rust` コマンドを利用する" + +#. type: Plain text +#: doc/rustdoc.md:102 +#, fuzzy +#| msgid "# Dereferencing pointers" +msgid "## Defining tests" +msgstr "# ポインタのデリファレンス" diff --git a/doc/po/ja/rustpkg.md.po b/doc/po/ja/rustpkg.md.po index 699e17eb952..4df7d2fa583 100644 --- a/doc/po/ja/rustpkg.md.po +++ b/doc/po/ja/rustpkg.md.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Rust 0.8\n" -"POT-Creation-Date: 2013-07-30 07:07+0900\n" +"POT-Creation-Date: 2014-01-13 12:01+0900\n" "PO-Revision-Date: 2013-07-28 20:32+0900\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -17,307 +17,49 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" #. type: Plain text +#: doc/guide-conditions.md:4 doc/guide-ffi.md:4 doc/guide-lifetimes.md:4 +#: doc/guide-macros.md:4 doc/guide-rustpkg.md:4 doc/guide-tasks.md:4 #: doc/rust.md:4 doc/rustpkg.md:4 doc/tutorial.md:4 -#: doc/tutorial-borrowed-ptr.md:4 doc/tutorial-ffi.md:4 -#: doc/tutorial-macros.md:4 doc/tutorial-tasks.md:4 msgid "# Introduction" msgstr "# イントロダクション" -#. type: Plain text -#: doc/rust.md:30 doc/rustpkg.md:8 -msgid "## Disclaimer" -msgstr "" - #. type: Plain text #: doc/rustpkg.md:2 +#, fuzzy +#| msgid "% The Rust Language Tutorial" msgid "% Rustpkg Reference Manual" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:6 -msgid "" -"This document is the reference manual for the Rustpkg packaging and build " -"tool for the Rust programming language." -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:12 -msgid "" -"Rustpkg is a work in progress, as is this reference manual. If the actual " -"behavior of rustpkg differs from the behavior described in this reference, " -"that reflects either an incompleteness or a bug in rustpkg." -msgstr "" +msgstr "% Rust 言語チュートリアル" #. type: Plain text #: doc/rustpkg.md:14 +#, fuzzy +#| msgid "## Pattern matching" msgid "# Package searching" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:17 -msgid "" -"rustpkg searches for packages using the `RUST_PATH` environment variable, " -"which is a colon-separated list (semicolon-separated on Windows) of " -"directories." -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:19 -msgid "Each directory in this list is a *workspace* for rustpkg." -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:30 -msgid "" -"`RUST_PATH` implicitly contains an entry for `./.rust` (as well as `../." -"rust`, `../../.rust`, and so on for every parent of `.` up to the filesystem " -"root). That means that if `RUST_PATH` is not set, then rustpkg will still " -"search for workspaces in `./.rust` and so on. `RUST_PATH` also implicitly " -"contains an entry for the system path: `/usr/local` or the equivalent on " -"Windows. This entry comes after the implicit entries for `./.rust` and so " -"on. Finally, the last implicit entry in `RUST_PATH` is `~/.rust` or the " -"equivalent on Windows." -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:32 -msgid "Each workspace may contain one or more packages." -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:38 -msgid "" -"When building code that contains one or more directives of the form `extern " -"mod P`, rustpkg automatically searches for packages named `P` in the " -"`RUST_PATH` (as described above). It builds those dependencies if " -"necessary. Thus, when using rustpkg, there is no need for `-L` flags to " -"tell the linker where to find libraries for external crates." -msgstr "" +msgstr "## パターンマッチ" #. type: Plain text #: doc/rustpkg.md:40 +#, fuzzy +#| msgid "# Data structures" msgid "# Package structure" -msgstr "" +msgstr "# データ構造" #. type: Plain text -#: doc/rustpkg.md:42 -msgid "A valid workspace must contain each of the following subdirectories:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rustpkg.md:44 -msgid "" -"'src/': contains one subdirectory per package. Each subdirectory contains " -"source files for a given package." -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:49 -#, no-wrap -msgid "" -" For example, if `foo` is a workspace containing the package `bar`,\n" -" then `foo/src/bar/main.rs` could be the `main` entry point for\n" -" building a `bar` executable.\n" -"* 'lib/': `rustpkg install` installs libraries into a target-specific subdirectory of this directory.\n" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:56 -#, no-wrap -msgid "" -" For example, on a 64-bit machine running Mac OS X,\n" -" if `foo` is a workspace containing the package `bar`,\n" -" rustpkg will install libraries for bar to `foo/lib/x86_64-apple-darwin/`.\n" -" The libraries will have names of the form `foo/lib/x86_64-apple-darwin/libbar-[hash].dylib`,\n" -" where [hash] is a hash of the package ID.\n" -"* 'bin/': `rustpkg install` installs executable binaries into a target-specific subdirectory of this directory.\n" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:63 -#, no-wrap -msgid "" -" For example, on a 64-bit machine running Mac OS X,\n" -" if `foo` is a workspace, containing the package `bar`,\n" -" rustpkg will install executables for `bar` to\n" -" `foo/bin/x86_64-apple-darwin/`.\n" -" The executables will have names of the form `foo/bin/x86_64-apple-darwin/bar`.\n" -"* 'build/': `rustpkg build` stores temporary build artifacts in a target-specific subdirectory of this directory.\n" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:67 -#, no-wrap -msgid "" -" For example, on a 64-bit machine running Mac OS X,\n" -" if `foo` is a workspace containing the package `bar` and `foo/src/bar/main.rs` exists,\n" -" then `rustpkg build` will create `foo/build/x86_64-apple-darwin/bar/main.o`.\n" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:69 -msgid "# Package identifiers" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:87 -msgid "" -"A package identifier identifies a package uniquely. A package can be stored " -"in a workspace on the local file system, or on a remote Web server, in which " -"case the package ID resembles a URL. For example, `github.com/mozilla/rust` " -"is a package ID that would refer to the git repository browsable at `http://" -"github.com/mozilla/rust`. A package ID can also specify a version, like: " -"`github.com/mozilla/rust#0.3`. In this case, `rustpkg` will check that the " -"repository `github.com/mozilla/rust` has a tag named `0.3`, and report an " -"error otherwise. A package ID can also specify a particular revision of a " -"repository, like: `github.com/mozilla/rust#release-0.7`. When the refspec " -"(portion of the package ID after the `#`) can't be parsed as a decimal " -"number, rustpkg passes the refspec along to the version control system " -"without interpreting it. rustpkg also interprets any dependencies on such a " -"package ID literally (as opposed to versions, where a newer version " -"satisfies a dependency on an older version). Thus, `github.com/mozilla/" -"rust#5c4cd30f80` is also a valid package ID, since git can deduce that " -"5c4cd30f80 refers to a revision of the desired repository." -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:89 -msgid "## Source files" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:91 -msgid "" -"rustpkg searches for four different fixed filenames in order to determine " -"the crates to build:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/rustpkg.md:96 -msgid "`main.rs`: Assumed to be a main entry point for building an executable." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rustpkg.md:96 -msgid "`lib.rs`: Assumed to be a library crate." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rustpkg.md:96 -msgid "" -"`test.rs`: Assumed to contain tests declared with the `#[test]` attribute." -msgstr "" - -#. type: Bullet: '* ' -#: doc/rustpkg.md:96 -msgid "" -"`bench.rs`: Assumed to contain benchmarks declared with the `#[bench]` " -"attribute." -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:98 +#: doc/rustpkg.md:106 +#, fuzzy +#| msgid "## Conventions" msgid "## Versions" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:105 -msgid "" -"`rustpkg` packages do not need to declare their versions with an attribute " -"inside one of the source files, because `rustpkg` infers it from the version " -"control system. When building a package that is in a `git` repository, " -"`rustpkg` assumes that the most recent tag specifies the current version. " -"When building a package that is not under version control, or that has no " -"tags, `rustpkg` assumes the intended version is 0.1." -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:107 -msgid "# Dependencies" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:111 -msgid "" -"rustpkg infers dependencies from `extern mod` directives. Thus, there " -"should be no need to pass a `-L` flag to rustpkg to tell it where to find a " -"library. (In the future, it will also be possible to write an `extern mod` " -"directive referring to a remote package.)" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:113 -msgid "# Custom build scripts" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:117 -msgid "" -"A file called `pkg.rs` at the root level in a workspace is called a *package " -"script*. If a package script exists, rustpkg executes it to build the " -"package rather than inferring crates as described previously." -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:121 -msgid "" -"Inside `pkg.rs`, it's possible to call back into rustpkg to finish up the " -"build. `rustpkg::api` contains functions to build, install, or clean " -"libraries and executables in the way rustpkg normally would without custom " -"build logic." -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:123 -msgid "# Command reference" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:125 -msgid "## build" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:131 -msgid "" -"`rustpkg build foo` searches for a package with ID `foo` and builds it in " -"any workspace(s) where it finds one. Supposing such packages are found in " -"workspaces X, Y, and Z, the command leaves behind files in `X`'s, `Y`'s, and " -"`Z`'s `build` directories, but not in their `lib` or `bin` directories." -msgstr "" +msgstr "## 本書の表記について" #. type: Plain text #: doc/rustpkg.md:133 -msgid "## clean" -msgstr "" +#, fuzzy +msgid "# Command reference" +msgstr "# ポインタのデリファレンス" #. type: Plain text -#: doc/rustpkg.md:135 -msgid "`rustpkg clean foo` deletes the contents of `foo`'s `build` directory." -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:137 +#: doc/rustpkg.md:150 +#, fuzzy +#| msgid "# Introduction" msgid "## install" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:141 -msgid "" -"`rustpkg install foo` builds the libraries and/or executables that are " -"targets for `foo`, and then installs them either into `foo`'s `lib` and " -"`bin` directories, or into the `lib` and `bin` subdirectories of the first " -"entry in `RUST_PATH`." -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:143 -msgid "## test" -msgstr "" - -#. type: Plain text -#: doc/rustpkg.md:145 -msgid "" -"`rustpkg test foo` builds `foo`'s `test.rs` file if necessary, then runs the " -"resulting test executable." -msgstr "" +msgstr "# イントロダクション" diff --git a/doc/po/ja/tutorial-borrowed-ptr.md.po b/doc/po/ja/tutorial-borrowed-ptr.md.po deleted file mode 100644 index 19bf3adeb0b..00000000000 --- a/doc/po/ja/tutorial-borrowed-ptr.md.po +++ /dev/null @@ -1,1071 +0,0 @@ -# Japanese translations for Rust package -# Copyright (C) 2013 The Rust Project Developers -# This file is distributed under the same license as the Rust package. -# Automatically generated, 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: Rust 0.8\n" -"POT-Creation-Date: 2013-07-22 23:37+0900\n" -"PO-Revision-Date: 2013-07-28 20:32+0900\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: ja\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#. type: Plain text -#: doc/rust.md:4 doc/rustpkg.md:4 doc/tutorial.md:4 -#: doc/tutorial-borrowed-ptr.md:4 doc/tutorial-ffi.md:4 -#: doc/tutorial-macros.md:4 doc/tutorial-tasks.md:4 -msgid "# Introduction" -msgstr "# イントロダクション" - -#. type: Plain text -#: doc/tutorial.md:1108 doc/tutorial-borrowed-ptr.md:72 -msgid "Now we can call `compute_distance()` in various ways:" -msgstr "" -"上記の `compute_distance()` 関数は、様々な方法で呼び出すことができます。" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:2 -msgid "% Rust Borrowed Pointers Tutorial" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:14 -msgid "" -"Borrowed pointers are one of the more flexible and powerful tools available " -"in Rust. A borrowed pointer can point anywhere: into the managed or exchange " -"heap, into the stack, and even into the interior of another data structure. " -"A borrowed pointer is as flexible as a C pointer or C++ reference. However, " -"unlike C and C++ compilers, the Rust compiler includes special static checks " -"that ensure that programs use borrowed pointers safely. Another advantage of " -"borrowed pointers is that they are invisible to the garbage collector, so " -"working with borrowed pointers helps reduce the overhead of automatic memory " -"management." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:18 -msgid "" -"Despite their complete safety, a borrowed pointer's representation at " -"runtime is the same as that of an ordinary pointer in a C program. They " -"introduce zero overhead. The compiler does all safety checks at compile time." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:24 -msgid "" -"Although borrowed pointers have rather elaborate theoretical underpinnings " -"(region pointers), the core concepts will be familiar to anyone who has " -"worked with C or C++. Therefore, the best way to explain how they are used—" -"and their limitations—is probably just to work through several examples." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:26 -msgid "# By example" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:31 -msgid "" -"Borrowed pointers are called *borrowed* because they are only valid for a " -"limited duration. Borrowed pointers never claim any kind of ownership over " -"the data that they point to: instead, they are used for cases where you " -"would like to use data for a short time." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:33 -msgid "As an example, consider a simple struct type `Point`:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:37 -msgid "~~~ struct Point {x: float, y: float} ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:41 -msgid "" -"We can use this simple definition to allocate points in many different ways. " -"For example, in this code, each of these three local variables contains a " -"point, but allocated in a different place:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:48 -#, no-wrap -msgid "" -"~~~\n" -"# struct Point {x: float, y: float}\n" -"let on_the_stack : Point = Point {x: 3.0, y: 4.0};\n" -"let managed_box : @Point = @Point {x: 5.0, y: 1.0};\n" -"let owned_box : ~Point = ~Point {x: 7.0, y: 9.0};\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:60 -msgid "" -"Suppose we wanted to write a procedure that computed the distance between " -"any two points, no matter where they were stored. For example, we might like " -"to compute the distance between `on_the_stack` and `managed_box`, or between " -"`managed_box` and `owned_box`. One option is to define a function that takes " -"two arguments of type `Point`—that is, it takes the points by value. But if " -"we define it this way, calling the function will cause the points to be " -"copied. For points, this is probably not so bad, but often copies are " -"expensive. Worse, if the data type contains mutable fields, copying can " -"change the semantics of your program in unexpected ways. So we'd like to " -"define a function that takes the points by pointer. We can use borrowed " -"pointers to do this:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:70 -#, no-wrap -msgid "" -"~~~\n" -"# struct Point {x: float, y: float}\n" -"# fn sqrt(f: float) -> float { 0f }\n" -"fn compute_distance(p1: &Point, p2: &Point) -> float {\n" -" let x_d = p1.x - p2.x;\n" -" let y_d = p1.y - p2.y;\n" -" sqrt(x_d * x_d + y_d * y_d)\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:82 -#, no-wrap -msgid "" -"~~~\n" -"# struct Point {x: float, y: float}\n" -"# let on_the_stack : Point = Point{x: 3.0, y: 4.0};\n" -"# let managed_box : @Point = @Point{x: 5.0, y: 1.0};\n" -"# let owned_box : ~Point = ~Point{x: 7.0, y: 9.0};\n" -"# fn compute_distance(p1: &Point, p2: &Point) -> float { 0f }\n" -"compute_distance(&on_the_stack, managed_box);\n" -"compute_distance(managed_box, owned_box);\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:89 -msgid "" -"Here, the `&` operator takes the address of the variable `on_the_stack`; " -"this is because `on_the_stack` has the type `Point` (that is, a struct " -"value) and we have to take its address to get a value. We also call this " -"_borrowing_ the local variable `on_the_stack`, because we have created an " -"alias: that is, another name for the same data." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:95 -msgid "" -"In contrast, we can pass the boxes `managed_box` and `owned_box` to " -"`compute_distance` directly. The compiler automatically converts a box like " -"`@Point` or `~Point` to a borrowed pointer like `&Point`. This is another " -"form of borrowing: in this case, the caller lends the contents of the " -"managed or owned box to the callee." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:105 -msgid "" -"Whenever a caller lends data to a callee, there are some limitations on what " -"the caller can do with the original. For example, if the contents of a " -"variable have been lent out, you cannot send that variable to another task. " -"In addition, the compiler will reject any code that might cause the borrowed " -"value to be freed or overwrite its component fields with values of different " -"types (I'll get into what kinds of actions those are shortly). This rule " -"should make intuitive sense: you must wait for a borrower to return the " -"value that you lent it (that is, wait for the borrowed pointer to go out of " -"scope) before you can make full use of it again." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:107 -msgid "# Other uses for the & operator" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:109 -msgid "In the previous example, the value `on_the_stack` was defined like so:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:114 -msgid "" -"~~~ # struct Point {x: float, y: float} let on_the_stack: Point = Point {x: " -"3.0, y: 4.0}; ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:119 -msgid "" -"This declaration means that code can only pass `Point` by value to other " -"functions. As a consequence, we had to explicitly take the address of " -"`on_the_stack` to get a borrowed pointer. Sometimes however it is more " -"convenient to move the & operator into the definition of `on_the_stack`:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:124 -msgid "" -"~~~ # struct Point {x: float, y: float} let on_the_stack2: &Point = &Point " -"{x: 3.0, y: 4.0}; ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:128 -msgid "" -"Applying `&` to an rvalue (non-assignable location) is just a convenient " -"shorthand for creating a temporary and taking its address. A more verbose " -"way to write the same code is:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:134 -msgid "" -"~~~ # struct Point {x: float, y: float} let tmp = Point {x: 3.0, y: 4.0}; " -"let on_the_stack2 : &Point = &tmp; ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:136 -msgid "# Taking the address of fields" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:141 -msgid "" -"As in C, the `&` operator is not limited to taking the address of local " -"variables. It can also take the address of fields or individual array " -"elements. For example, consider this type definition for `rectangle`:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:147 -msgid "" -"~~~ struct Point {x: float, y: float} // as before struct Size {w: float, h: " -"float} // as before struct Rectangle {origin: Point, size: Size} ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:149 -msgid "Now, as before, we can define rectangles in a few different ways:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:161 -#, no-wrap -msgid "" -"~~~\n" -"# struct Point {x: float, y: float}\n" -"# struct Size {w: float, h: float} // as before\n" -"# struct Rectangle {origin: Point, size: Size}\n" -"let rect_stack = &Rectangle {origin: Point {x: 1f, y: 2f},\n" -" size: Size {w: 3f, h: 4f}};\n" -"let rect_managed = @Rectangle {origin: Point {x: 3f, y: 4f},\n" -" size: Size {w: 3f, h: 4f}};\n" -"let rect_owned = ~Rectangle {origin: Point {x: 5f, y: 6f},\n" -" size: Size {w: 3f, h: 4f}};\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:164 -msgid "" -"In each case, we can extract out individual subcomponents with the `&` " -"operator. For example, I could write:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:175 -msgid "" -"~~~ # struct Point {x: float, y: float} // as before # struct Size {w: " -"float, h: float} // as before # struct Rectangle {origin: Point, size: Size} " -"# let rect_stack = &Rectangle {origin: Point {x: 1f, y: 2f}, size: Size {w: " -"3f, h: 4f}}; # let rect_managed = @Rectangle {origin: Point {x: 3f, y: 4f}, " -"size: Size {w: 3f, h: 4f}}; # let rect_owned = ~Rectangle {origin: Point {x: " -"5f, y: 6f}, size: Size {w: 3f, h: 4f}}; # fn compute_distance(p1: &Point, " -"p2: &Point) -> float { 0f } compute_distance(&rect_stack.origin, " -"&rect_managed.origin); ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:178 -msgid "" -"which would borrow the field `origin` from the rectangle on the stack as " -"well as from the managed box, and then compute the distance between them." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:180 -msgid "# Borrowing managed boxes and rooting" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:186 -msgid "" -"We’ve seen a few examples so far of borrowing heap boxes, both managed and " -"owned. Up till this point, we’ve glossed over issues of safety. As stated in " -"the introduction, at runtime a borrowed pointer is simply a pointer, nothing " -"more. Therefore, avoiding C's problems with dangling pointers requires a " -"compile-time safety check." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:197 -msgid "" -"The basis for the check is the notion of _lifetimes_. A lifetime is a static " -"approximation of the span of execution during which the pointer is valid: it " -"always corresponds to some expression or block within the program. Code " -"inside that expression can use the pointer without restrictions. But if the " -"pointer escapes from that expression (for example, if the expression " -"contains an assignment expression that assigns the pointer to a mutable " -"field of a data structure with a broader scope than the pointer itself), the " -"compiler reports an error. We'll be discussing lifetimes more in the " -"examples to come, and a more thorough introduction is also available." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:202 -msgid "" -"When the `&` operator creates a borrowed pointer, the compiler must ensure " -"that the pointer remains valid for its entire lifetime. Sometimes this is " -"relatively easy, such as when taking the address of a local variable or a " -"field that is stored on the stack:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:211 -#, no-wrap -msgid "" -"~~~\n" -"struct X { f: int }\n" -"fn example1() {\n" -" let mut x = X { f: 3 };\n" -" let y = &mut x.f; // -+ L\n" -" ... // |\n" -"} // -+\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:216 -msgid "" -"Here, the lifetime of the borrowed pointer `y` is simply L, the remainder of " -"the function body. The compiler need not do any other work to prove that " -"code will not free `x.f`. This is true even if the code mutates `x`." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:218 -msgid "The situation gets more complex when borrowing data inside heap boxes:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:227 -#, no-wrap -msgid "" -"~~~\n" -"# struct X { f: int }\n" -"fn example2() {\n" -" let mut x = @X { f: 3 };\n" -" let y = &x.f; // -+ L\n" -" ... // |\n" -"} // -+\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:238 -msgid "" -"In this example, the value `x` is a heap box, and `y` is therefore a pointer " -"into that heap box. Again the lifetime of `y` is L, the remainder of the " -"function body. But there is a crucial difference: suppose `x` were to be " -"reassigned during the lifetime L? If the compiler isn't careful, the managed " -"box could become *unrooted*, and would therefore be subject to garbage " -"collection. A heap box that is unrooted is one such that no pointer values " -"in the heap point to it. It would violate memory safety for the box that was " -"originally assigned to `x` to be garbage-collected, since a non-heap pointer " -"*`y`* still points into it." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:241 -msgid "" -"> ***Note:*** Our current implementation implements the garbage collector > " -"using reference counting and cycle detection." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:247 -msgid "" -"For this reason, whenever an `&` expression borrows the interior of a " -"managed box stored in a mutable location, the compiler inserts a temporary " -"that ensures that the managed box remains live for the entire lifetime. So, " -"the above example would be compiled as if it were written" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:257 -#, no-wrap -msgid "" -"~~~\n" -"# struct X { f: int }\n" -"fn example2() {\n" -" let mut x = @X {f: 3};\n" -" let x1 = x;\n" -" let y = &x1.f; // -+ L\n" -" ... // |\n" -"} // -+\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:260 -msgid "" -"Now if `x` is reassigned, the pointer `y` will still remain valid. This " -"process is called *rooting*." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:262 -msgid "# Borrowing owned boxes" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:268 -msgid "" -"The previous example demonstrated *rooting*, the process by which the " -"compiler ensures that managed boxes remain live for the duration of a " -"borrow. Unfortunately, rooting does not work for borrows of owned boxes, " -"because it is not possible to have two references to a owned box." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:274 -msgid "" -"For owned boxes, therefore, the compiler will only allow a borrow *if the " -"compiler can guarantee that the owned box will not be reassigned or moved " -"for the lifetime of the pointer*. This does not necessarily mean that the " -"owned box is stored in immutable memory. For example, the following function " -"is legal:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:289 -#, no-wrap -msgid "" -"~~~\n" -"# fn some_condition() -> bool { true }\n" -"# struct Foo { f: int }\n" -"fn example3() -> int {\n" -" let mut x = ~Foo {f: 3};\n" -" if some_condition() {\n" -" let y = &x.f; // -+ L\n" -" return *y; // |\n" -" } // -+\n" -" x = ~Foo {f: 4};\n" -" ...\n" -"# return 0;\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:295 -msgid "" -"Here, as before, the interior of the variable `x` is being borrowed and `x` " -"is declared as mutable. However, the compiler can prove that `x` is not " -"assigned anywhere in the lifetime L of the variable `y`. Therefore, it " -"accepts the function, even though `x` is mutable and in fact is mutated " -"later in the function." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:301 -msgid "" -"It may not be clear why we are so concerned about mutating a borrowed " -"variable. The reason is that the runtime system frees any owned box _as soon " -"as its owning reference changes or goes out of scope_. Therefore, a program " -"like this is illegal (and would be rejected by the compiler):" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:310 -#, no-wrap -msgid "" -"~~~ {.xfail-test}\n" -"fn example3() -> int {\n" -" let mut x = ~X {f: 3};\n" -" let y = &x.f;\n" -" x = ~X {f: 4}; // Error reported here.\n" -" *y\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:313 -msgid "" -"To make this clearer, consider this diagram showing the state of memory " -"immediately before the re-assignment of `x`:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:316 doc/tutorial-borrowed-ptr.md:330 -#, no-wrap -msgid "" -"~~~ {.notrust}\n" -" Stack Exchange Heap\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:325 -#, no-wrap -msgid "" -" x +----------+\n" -" | ~{f:int} | ----+\n" -" y +----------+ |\n" -" | &int | ----+\n" -" +----------+ | +---------+\n" -" +--> | f: 3 |\n" -" +---------+\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:327 -msgid "Once the reassignment occurs, the memory will look like this:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:339 -#, no-wrap -msgid "" -" x +----------+ +---------+\n" -" | ~{f:int} | -------> | f: 4 |\n" -" y +----------+ +---------+\n" -" | &int | ----+\n" -" +----------+ | +---------+\n" -" +--> | (freed) |\n" -" +---------+\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:342 -msgid "" -"Here you can see that the variable `y` still points at the old box, which " -"has been freed." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:348 -msgid "" -"In fact, the compiler can apply the same kind of reasoning to any memory " -"that is _(uniquely) owned by the stack frame_. So we could modify the " -"previous example to introduce additional owned pointers and structs, and the " -"compiler will still be able to detect possible mutations:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:353 -#, no-wrap -msgid "" -"~~~ {.xfail-test}\n" -"fn example3() -> int {\n" -" struct R { g: int }\n" -" struct S { f: ~R }\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:361 -#, no-wrap -msgid "" -" let mut x = ~S {f: ~R {g: 3}};\n" -" let y = &x.f.g;\n" -" x = ~S {f: ~R {g: 4}}; // Error reported here.\n" -" x.f = ~R {g: 5}; // Error reported here.\n" -" *y\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:365 -msgid "" -"In this case, two errors are reported, one when the variable `x` is modified " -"and another when `x.f` is modified. Either modification would invalidate the " -"pointer `y`." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:367 -msgid "# Borrowing and enums" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:373 -msgid "" -"The previous example showed that the type system forbids any borrowing of " -"owned boxes found in aliasable, mutable memory. This restriction prevents " -"pointers from pointing into freed memory. There is one other case where the " -"compiler must be very careful to ensure that pointers remain valid: pointers " -"into the interior of an `enum`." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:376 -msgid "" -"As an example, let’s look at the following `shape` type that can represent " -"both rectangles and circles:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:385 -#, no-wrap -msgid "" -"~~~\n" -"struct Point {x: float, y: float}; // as before\n" -"struct Size {w: float, h: float}; // as before\n" -"enum Shape {\n" -" Circle(Point, float), // origin, radius\n" -" Rectangle(Point, Size) // upper-left, dimensions\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:389 -msgid "" -"Now we might write a function to compute the area of a shape. This function " -"takes a borrowed pointer to a shape, to avoid the need for copying." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:405 -#, no-wrap -msgid "" -"~~~\n" -"# struct Point {x: float, y: float}; // as before\n" -"# struct Size {w: float, h: float}; // as before\n" -"# enum Shape {\n" -"# Circle(Point, float), // origin, radius\n" -"# Rectangle(Point, Size) // upper-left, dimensions\n" -"# }\n" -"# static tau: float = 6.28f;\n" -"fn compute_area(shape: &Shape) -> float {\n" -" match *shape {\n" -" Circle(_, radius) => 0.5 * tau * radius * radius,\n" -" Rectangle(_, ref size) => size.w * size.h\n" -" }\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:410 -msgid "" -"The first case matches against circles. Here, the pattern extracts the " -"radius from the shape variant and the action uses it to compute the area of " -"the circle. (Like any up-to-date engineer, we use the [tau circle constant]" -"[tau] and not that dreadfully outdated notion of pi)." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:412 -msgid "[tau]: http://www.math.utah.edu/~palais/pi.html" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:418 -msgid "" -"The second match is more interesting. Here we match against a rectangle and " -"extract its size: but rather than copy the `size` struct, we use a by-" -"reference binding to create a pointer to it. In other words, a pattern " -"binding like `ref size` binds the name `size` to a pointer of type `&size` " -"into the _interior of the enum_." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:421 -msgid "" -"To make this more clear, let's look at a diagram of memory layout in the " -"case where `shape` points at a rectangle:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:424 doc/tutorial-borrowed-ptr.md:449 -#, no-wrap -msgid "" -"~~~ {.notrust}\n" -"Stack Memory\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:433 -#, no-wrap -msgid "" -"+-------+ +---------------+\n" -"| shape | ------> | rectangle( |\n" -"+-------+ | {x: float, |\n" -"| size | -+ | y: float}, |\n" -"+-------+ +----> | {w: float, |\n" -" | h: float}) |\n" -" +---------------+\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:440 -msgid "" -"Here you can see that rectangular shapes are composed of five words of " -"memory. The first is a tag indicating which variant this enum is " -"(`rectangle`, in this case). The next two words are the `x` and `y` fields " -"for the point and the remaining two are the `w` and `h` fields for the size. " -"The binding `size` is then a pointer into the inside of the shape." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:446 -msgid "" -"Perhaps you can see where the danger lies: if the shape were somehow to be " -"reassigned, perhaps to a circle, then although the memory used to store that " -"shape value would still be valid, _it would have a different type_! The " -"following diagram shows what memory would look like if code overwrote " -"`shape` with a circle:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:458 -#, no-wrap -msgid "" -"+-------+ +---------------+\n" -"| shape | ------> | circle( |\n" -"+-------+ | {x: float, |\n" -"| size | -+ | y: float}, |\n" -"+-------+ +----> | float) |\n" -" | |\n" -" +---------------+\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:463 -msgid "" -"As you can see, the `size` pointer would be pointing at a `float` instead of " -"a struct. This is not good: dereferencing the second field of a `float` as " -"if it were a struct with two fields would be a memory safety violation." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:475 -msgid "" -"So, in fact, for every `ref` binding, the compiler will impose the same " -"rules as the ones we saw for borrowing the interior of a owned box: it must " -"be able to guarantee that the `enum` will not be overwritten for the " -"duration of the borrow. In fact, the compiler would accept the example we " -"gave earlier. The example is safe because the shape pointer has type " -"`&Shape`, which means \"borrowed pointer to immutable memory containing a " -"`shape`\". If, however, the type of that pointer were `&mut Shape`, then the " -"ref binding would be ill-typed. Just as with owned boxes, the compiler will " -"permit `ref` bindings into data owned by the stack frame even if the data " -"are mutable, but otherwise it requires that the data reside in immutable " -"memory." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:477 -msgid "# Returning borrowed pointers" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:483 -msgid "" -"So far, all of the examples we have looked at, use borrowed pointers in a " -"“downward” direction. That is, a method or code block creates a borrowed " -"pointer, then uses it within the same scope. It is also possible to return " -"borrowed pointers as the result of a function, but as we'll see, doing so " -"requires some explicit annotation." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:485 -msgid "For example, we could write a subroutine like this:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:490 -msgid "" -"~~~ struct Point {x: float, y: float} fn get_x<'r>(p: &'r Point) -> &'r " -"float { &p.x } ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:498 -msgid "" -"Here, the function `get_x()` returns a pointer into the structure it was " -"given. The type of the parameter (`&'r Point`) and return type (`&'r float`) " -"both use a new syntactic form that we have not seen so far. Here the " -"identifier `r` names the lifetime of the pointer explicitly. So in effect, " -"this function declares that it takes a pointer with lifetime `r` and returns " -"a pointer with that same lifetime." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:504 -msgid "" -"In general, it is only possible to return borrowed pointers if they are " -"derived from a parameter to the procedure. In that case, the pointer result " -"will always have the same lifetime as one of the parameters; named lifetimes " -"indicate which parameter that is." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:510 -msgid "" -"In the previous examples, function parameter types did not include a " -"lifetime name. In those examples, the compiler simply creates a fresh name " -"for the lifetime automatically: that is, the lifetime name is guaranteed to " -"refer to a distinct lifetime from the lifetimes of all other parameters." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:518 -msgid "" -"Named lifetimes that appear in function signatures are conceptually the same " -"as the other lifetimes we have seen before, but they are a bit abstract: " -"they don’t refer to a specific expression within `get_x()`, but rather to " -"some expression within the *caller of `get_x()`*. The lifetime `r` is " -"actually a kind of *lifetime parameter*: it is defined by the caller to " -"`get_x()`, just as the value for the parameter `p` is defined by that caller." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:523 -msgid "" -"In any case, whatever the lifetime of `r` is, the pointer produced by `&p.x` " -"always has the same lifetime as `p` itself: a pointer to a field of a struct " -"is valid as long as the struct is valid. Therefore, the compiler accepts the " -"function `get_x()`." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:526 -msgid "" -"To emphasize this point, let’s look at a variation on the example, this time " -"one that does not compile:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:533 -#, no-wrap -msgid "" -"~~~ {.xfail-test}\n" -"struct Point {x: float, y: float}\n" -"fn get_x_sh(p: @Point) -> &float {\n" -" &p.x // Error reported here\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:541 -msgid "" -"Here, the function `get_x_sh()` takes a managed box as input and returns a " -"borrowed pointer. As before, the lifetime of the borrowed pointer that will " -"be returned is a parameter (specified by the caller). That means that " -"`get_x_sh()` promises to return a borrowed pointer that is valid for as long " -"as the caller would like: this is subtly different from the first example, " -"which promised to return a pointer that was valid for as long as its pointer " -"argument was valid." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:552 -msgid "" -"Within `get_x_sh()`, we see the expression `&p.x` which takes the address of " -"a field of a managed box. The presence of this expression implies that the " -"compiler must guarantee that, so long as the resulting pointer is valid, the " -"managed box will not be reclaimed by the garbage collector. But recall that " -"`get_x_sh()` also promised to return a pointer that was valid for as long as " -"the caller wanted it to be. Clearly, `get_x_sh()` is not in a position to " -"make both of these guarantees; in fact, it cannot guarantee that the pointer " -"will remain valid at all once it returns, as the parameter `p` may or may " -"not be live in the caller. Therefore, the compiler will report an error here." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:559 -msgid "" -"In general, if you borrow a managed (or owned) box to create a borrowed " -"pointer, the pointer will only be valid within the function and cannot be " -"returned. This is why the typical way to return borrowed pointers is to take " -"borrowed pointers as input (the only other case in which it can be legal to " -"return a borrowed pointer is if the pointer points at a static constant)." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:561 -msgid "# Named lifetimes" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:565 -msgid "" -"Let's look at named lifetimes in more detail. Named lifetimes allow for " -"grouping of parameters by lifetime. For example, consider this function:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:579 -#, no-wrap -msgid "" -"~~~\n" -"# struct Point {x: float, y: float}; // as before\n" -"# struct Size {w: float, h: float}; // as before\n" -"# enum Shape {\n" -"# Circle(Point, float), // origin, radius\n" -"# Rectangle(Point, Size) // upper-left, dimensions\n" -"# }\n" -"# fn compute_area(shape: &Shape) -> float { 0f }\n" -"fn select<'r, T>(shape: &'r Shape, threshold: float,\n" -" a: &'r T, b: &'r T) -> &'r T {\n" -" if compute_area(shape) > threshold {a} else {b}\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:585 -msgid "" -"This function takes three borrowed pointers and assigns each the same " -"lifetime `r`. In practice, this means that, in the caller, the lifetime `r` " -"will be the *intersection of the lifetime of the three region parameters*. " -"This may be overly conservative, as in this example:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:607 -#, no-wrap -msgid "" -"~~~\n" -"# struct Point {x: float, y: float}; // as before\n" -"# struct Size {w: float, h: float}; // as before\n" -"# enum Shape {\n" -"# Circle(Point, float), // origin, radius\n" -"# Rectangle(Point, Size) // upper-left, dimensions\n" -"# }\n" -"# fn compute_area(shape: &Shape) -> float { 0f }\n" -"# fn select<'r, T>(shape: &Shape, threshold: float,\n" -"# a: &'r T, b: &'r T) -> &'r T {\n" -"# if compute_area(shape) > threshold {a} else {b}\n" -"# }\n" -" // -+ r\n" -"fn select_based_on_unit_circle<'r, T>( // |-+ B\n" -" threshold: float, a: &'r T, b: &'r T) -> &'r T { // | |\n" -" // | |\n" -" let shape = Circle(Point {x: 0., y: 0.}, 1.); // | |\n" -" select(&shape, threshold, a, b) // | |\n" -"} // |-+\n" -" // -+\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:617 -msgid "" -"In this call to `select()`, the lifetime of the first parameter shape is B, " -"the function body. Both of the second two parameters `a` and `b` share the " -"same lifetime, `r`, which is a lifetime parameter of " -"`select_based_on_unit_circle()`. The caller will infer the intersection of " -"these two lifetimes as the lifetime of the returned value, and hence the " -"return value of `select()` will be assigned a lifetime of B. This will in " -"turn lead to a compilation error, because `select_based_on_unit_circle()` is " -"supposed to return a value with the lifetime `r`." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:622 -msgid "" -"To address this, we can modify the definition of `select()` to distinguish " -"the lifetime of the first parameter from the lifetime of the latter two. " -"After all, the first parameter is not being returned. Here is how the new " -"`select()` might look:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:636 -#, no-wrap -msgid "" -"~~~\n" -"# struct Point {x: float, y: float}; // as before\n" -"# struct Size {w: float, h: float}; // as before\n" -"# enum Shape {\n" -"# Circle(Point, float), // origin, radius\n" -"# Rectangle(Point, Size) // upper-left, dimensions\n" -"# }\n" -"# fn compute_area(shape: &Shape) -> float { 0f }\n" -"fn select<'r, 'tmp, T>(shape: &'tmp Shape, threshold: float,\n" -" a: &'r T, b: &'r T) -> &'r T {\n" -" if compute_area(shape) > threshold {a} else {b}\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:641 -msgid "" -"Here you can see that `shape`'s lifetime is now named `tmp`. The parameters " -"`a`, `b`, and the return value all have the lifetime `r`. However, since " -"the lifetime `tmp` is not returned, it would be more concise to just omit " -"the named lifetime for `shape` altogether:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:655 -#, no-wrap -msgid "" -"~~~\n" -"# struct Point {x: float, y: float}; // as before\n" -"# struct Size {w: float, h: float}; // as before\n" -"# enum Shape {\n" -"# Circle(Point, float), // origin, radius\n" -"# Rectangle(Point, Size) // upper-left, dimensions\n" -"# }\n" -"# fn compute_area(shape: &Shape) -> float { 0f }\n" -"fn select<'r, T>(shape: &Shape, threshold: float,\n" -" a: &'r T, b: &'r T) -> &'r T {\n" -" if compute_area(shape) > threshold {a} else {b}\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:657 -msgid "This is equivalent to the previous definition." -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:659 -msgid "# Conclusion" -msgstr "" - -#. type: Plain text -#: doc/tutorial-borrowed-ptr.md:663 -msgid "" -"So there you have it: a (relatively) brief tour of the borrowed pointer " -"system. For more details, we refer to the (yet to be written) reference " -"document on borrowed pointers, which will explain the full notation and give " -"more examples." -msgstr "" diff --git a/doc/po/ja/tutorial-container.md.po b/doc/po/ja/tutorial-container.md.po deleted file mode 100644 index 02513417844..00000000000 --- a/doc/po/ja/tutorial-container.md.po +++ /dev/null @@ -1,673 +0,0 @@ -# Japanese translations for Rust package -# Copyright (C) 2013 The Rust Project Developers -# This file is distributed under the same license as the Rust package. -# Automatically generated, 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: Rust 0.8\n" -"POT-Creation-Date: 2013-08-05 19:40+0900\n" -"PO-Revision-Date: 2013-07-28 20:32+0900\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: ja\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#. type: Plain text -#: doc/tutorial-container.md:2 -msgid "% Containers and iterators" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:4 -msgid "# Containers" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:6 -msgid "The container traits are defined in the `std::container` module." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:8 -msgid "## Unique and managed vectors" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:12 -msgid "" -"Vectors have `O(1)` indexing and removal from the end, along with `O(1)` " -"amortized insertion. Vectors are the most common container in Rust, and are " -"flexible enough to fit many use cases." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:16 -msgid "" -"Vectors can also be sorted and used as efficient lookup tables with the " -"`std::vec::bsearch` function, if all the elements are inserted at one time " -"and deletions are unnecessary." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:18 -msgid "## Maps and sets" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:22 -msgid "" -"Maps are collections of unique keys with corresponding values, and sets are " -"just unique keys without a corresponding value. The `Map` and `Set` traits " -"in `std::container` define the basic interface." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:24 -msgid "The standard library provides three owned map/set types:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-container.md:30 -msgid "" -"`std::hashmap::HashMap` and `std::hashmap::HashSet`, requiring the keys to " -"implement `Eq` and `Hash`" -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-container.md:30 -msgid "" -"`std::trie::TrieMap` and `std::trie::TrieSet`, requiring the keys to be " -"`uint`" -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-container.md:30 -msgid "" -"`extra::treemap::TreeMap` and `extra::treemap::TreeSet`, requiring the keys " -"to implement `TotalOrd`" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:34 -msgid "" -"These maps do not use managed pointers so they can be sent between tasks as " -"long as the key and value types are sendable. Neither the key or value type " -"has to be copyable." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:37 -msgid "" -"The `TrieMap` and `TreeMap` maps are ordered, while `HashMap` uses an " -"arbitrary order." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:42 -msgid "" -"Each `HashMap` instance has a random 128-bit key to use with a keyed hash, " -"making the order of a set of keys in a given hash table randomized. Rust " -"provides a [SipHash](https://131002.net/siphash/) implementation for any " -"type implementing the `IterBytes` trait." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:44 -msgid "## Double-ended queues" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:49 -msgid "" -"The `extra::deque` module implements a double-ended queue with `O(1)` " -"amortized inserts and removals from both ends of the container. It also has " -"`O(1)` indexing like a vector. The contained elements are not required to be " -"copyable, and the queue will be sendable if the contained type is sendable." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:51 -msgid "## Priority queues" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:55 -msgid "" -"The `extra::priority_queue` module implements a queue ordered by a key. The " -"contained elements are not required to be copyable, and the queue will be " -"sendable if the contained type is sendable." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:61 -msgid "" -"Insertions have `O(log n)` time complexity and checking or popping the " -"largest element is `O(1)`. Converting a vector to a priority queue can be " -"done in-place, and has `O(n)` complexity. A priority queue can also be " -"converted to a sorted vector in-place, allowing it to be used for an `O(n " -"log n)` in-place heapsort." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:63 -msgid "# Iterators" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:65 -msgid "## Iteration protocol" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:69 -msgid "" -"The iteration protocol is defined by the `Iterator` trait in the `std::" -"iterator` module. The minimal implementation of the trait is a `next` " -"method, yielding the next element from an iterator object:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:73 -msgid "~~~ /// An infinite stream of zeroes struct ZeroStream;" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:80 -#, no-wrap -msgid "" -"impl Iterator for ZeroStream {\n" -" fn next(&mut self) -> Option {\n" -" Some(0)\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:83 -msgid "" -"Reaching the end of the iterator is signalled by returning `None` instead of " -"`Some(item)`:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:89 doc/tutorial-container.md:262 -#, no-wrap -msgid "" -"~~~\n" -"/// A stream of N zeroes\n" -"struct ZeroStream {\n" -" priv remaining: uint\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:95 -#, no-wrap -msgid "" -"impl ZeroStream {\n" -" fn new(n: uint) -> ZeroStream {\n" -" ZeroStream { remaining: n }\n" -" }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:107 doc/tutorial-container.md:284 -#, no-wrap -msgid "" -"impl Iterator for ZeroStream {\n" -" fn next(&mut self) -> Option {\n" -" if self.remaining == 0 {\n" -" None\n" -" } else {\n" -" self.remaining -= 1;\n" -" Some(0)\n" -" }\n" -" }\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:109 -msgid "## Container iterators" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:112 -msgid "" -"Containers implement iteration over the contained elements by returning an " -"iterator object. For example, vector slices several iterators available:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-container.md:116 -msgid "`iter()` and `rev_iter()`, for immutable references to the elements" -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-container.md:116 -msgid "" -"`mut_iter()` and `mut_rev_iter()`, for mutable references to the elements" -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-container.md:116 -msgid "" -"`consume_iter()` and `consume_rev_iter`, to move the elements out by-value" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:119 -msgid "" -"A typical mutable container will implement at least `iter()`, `mut_iter()` " -"and `consume_iter()` along with the reverse variants if it maintains an " -"order." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:121 -msgid "### Freezing" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:125 -msgid "" -"Unlike most other languages with external iterators, Rust has no *iterator " -"invalidation*. As long an iterator is still in scope, the compiler will " -"prevent modification of the container through another handle." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:130 -#, no-wrap -msgid "" -"~~~\n" -"let mut xs = [1, 2, 3];\n" -"{\n" -" let _it = xs.iter();\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:136 -#, no-wrap -msgid "" -" // the vector is frozen for this scope, the compiler will statically\n" -" // prevent modification\n" -"}\n" -"// the vector becomes unfrozen again at the end of the scope\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:139 -msgid "" -"These semantics are due to most container iterators being implemented with " -"`&` and `&mut`." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:141 -msgid "## Iterator adaptors" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:145 -msgid "" -"The `IteratorUtil` trait implements common algorithms as methods extending " -"every `Iterator` implementation. For example, the `fold` method will " -"accumulate the items yielded by an `Iterator` into a single value:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:151 -msgid "" -"~~~ let xs = [1, 9, 2, 3, 14, 12]; let result = xs.iter().fold(0, |" -"accumulator, item| accumulator - *item); assert_eq!(result, -41); ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:153 -msgid "" -"Some adaptors return an adaptor object implementing the `Iterator` trait " -"itself:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:160 -msgid "" -"~~~ let xs = [1, 9, 2, 3, 14, 12]; let ys = [5, 2, 1, 8]; let sum = xs." -"iter().chain_(ys.iter()).fold(0, |a, b| a + *b); assert_eq!(sum, 57); ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:164 -msgid "" -"Note that some adaptors like the `chain_` method above use a trailing " -"underscore to work around an issue with method resolve. The underscores will " -"be dropped when they become unnecessary." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:166 -msgid "## For loops" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:168 -msgid "" -"The `for` keyword can be used as sugar for iterating through any iterator:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:171 -msgid "~~~ let xs = [2, 3, 5, 7, 11, 13, 17];" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:176 -#, no-wrap -msgid "" -"// print out all the elements in the vector\n" -"for x in xs.iter() {\n" -" println(x.to_str())\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:182 -#, no-wrap -msgid "" -"// print out all but the first 3 elements in the vector\n" -"for x in xs.iter().skip(3) {\n" -" println(x.to_str())\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:185 -msgid "" -"For loops are *often* used with a temporary iterator object, as above. They " -"can also advance the state of an iterator in a mutable location:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:189 -msgid "" -"~~~ let xs = [1, 2, 3, 4, 5]; let ys = [\"foo\", \"bar\", \"baz\", \"foobar" -"\"];" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:192 -msgid "" -"// create an iterator yielding tuples of elements from both vectors let mut " -"it = xs.iter().zip(ys.iter());" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:196 -#, no-wrap -msgid "" -"// print out the pairs of elements up to (&3, &\"baz\")\n" -"for (x, y) in it {\n" -" printfln!(\"%d %s\", *x, *y);\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:201 -#, no-wrap -msgid "" -" if *x == 3 {\n" -" break;\n" -" }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:204 -msgid "" -"// yield and print the last pair from the iterator printfln!(\"last: %?\", " -"it.next());" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:208 -msgid "// the iterator is now fully consumed assert!(it.next().is_none()); ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:210 -msgid "## Conversion" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:212 -msgid "" -"Iterators offer generic conversion to containers with the `collect` adaptor:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:218 -msgid "" -"~~~ let xs = [0, 1, 1, 2, 3, 5, 8]; let ys = xs.rev_iter().skip(1)." -"transform(|&x| x * 2).collect::<~[int]>(); assert_eq!(ys, ~[10, 6, 4, 2, 2, " -"0]); ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:221 -msgid "" -"The method requires a type hint for the container type, if the surrounding " -"code does not provide sufficient information." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:225 -msgid "" -"Containers can provide conversion from iterators through `collect` by " -"implementing the `FromIterator` trait. For example, the implementation for " -"vectors is as follows:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:238 -#, no-wrap -msgid "" -"~~~\n" -"impl> FromIterator for ~[A] {\n" -" pub fn from_iterator(iterator: &mut T) -> ~[A] {\n" -" let (lower, _) = iterator.size_hint();\n" -" let mut xs = with_capacity(lower);\n" -" for x in iterator {\n" -" xs.push(x);\n" -" }\n" -" xs\n" -" }\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:240 -msgid "### Size hints" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:243 -msgid "" -"The `Iterator` trait provides a `size_hint` default method, returning a " -"lower bound and optionally on upper bound on the length of the iterator:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:247 -msgid "~~~ fn size_hint(&self) -> (uint, Option) { (0, None) } ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:251 -msgid "" -"The vector implementation of `FromIterator` from above uses the lower bound " -"to pre-allocate enough space to hold the minimum number of elements the " -"iterator will yield." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:254 -msgid "" -"The default implementation is always correct, but it should be overridden if " -"the iterator can provide better information." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:256 -msgid "" -"The `ZeroStream` from earlier can provide an exact lower and upper bound:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:267 -#, no-wrap -msgid "" -"impl ZeroStream {\n" -" fn new(n: uint) -> ZeroStream {\n" -" ZeroStream { remaining: n }\n" -" }\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:272 -#, no-wrap -msgid "" -" fn size_hint(&self) -> (uint, Option) {\n" -" (self.remaining, Some(self.remaining))\n" -" }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:286 -msgid "## Double-ended iterators" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:290 -msgid "" -"The `DoubleEndedIterator` trait represents an iterator able to yield " -"elements from either end of a range. It inherits from the `Iterator` trait " -"and extends it with the `next_back` function." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:293 -msgid "" -"A `DoubleEndedIterator` can be flipped with the `invert` adaptor, returning " -"another `DoubleEndedIterator` with `next` and `next_back` exchanged." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:300 -msgid "" -"~~~ let xs = [1, 2, 3, 4, 5, 6]; let mut it = xs.iter(); printfln!(\"%?\", " -"it.next()); // prints `Some(&1)` printfln!(\"%?\", it.next()); // prints " -"`Some(&2)` printfln!(\"%?\", it.next_back()); // prints `Some(&6)`" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:306 -#, no-wrap -msgid "" -"// prints `5`, `4` and `3`\n" -"for &x in it.invert() {\n" -" printfln!(\"%?\", x)\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:309 -msgid "" -"The `rev_iter` and `mut_rev_iter` methods on vectors just return an inverted " -"version of the standard immutable and mutable vector iterators." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:312 -msgid "" -"The `chain_`, `transform`, `filter`, `filter_map` and `peek` adaptors are " -"`DoubleEndedIterator` implementations if the underlying iterators are." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:317 -msgid "" -"~~~ let xs = [1, 2, 3, 4]; let ys = [5, 6, 7, 8]; let mut it = xs.iter()." -"chain_(ys.iter()).transform(|&x| x * 2);" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:319 -msgid "printfln!(\"%?\", it.next()); // prints `Some(2)`" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:325 -#, no-wrap -msgid "" -"// prints `16`, `14`, `12`, `10`, `8`, `6`, `4`\n" -"for x in it.invert() {\n" -" printfln!(\"%?\", x);\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:327 -msgid "## Random-access iterators" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:331 -msgid "" -"The `RandomAccessIterator` trait represents an iterator offering random " -"access to the whole range. The `indexable` method retrieves the number of " -"elements accessible with the `idx` method." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:334 -msgid "" -"The `chain_` adaptor is an implementation of `RandomAccessIterator` if the " -"underlying iterators are." -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:343 -msgid "" -"~~~ let xs = [1, 2, 3, 4, 5]; let ys = ~[7, 9, 11]; let mut it = xs.iter()." -"chain_(ys.iter()); printfln!(\"%?\", it.idx(0)); // prints `Some(&1)` " -"printfln!(\"%?\", it.idx(5)); // prints `Some(&7)` printfln!(\"%?\", it." -"idx(7)); // prints `Some(&11)` printfln!(\"%?\", it.idx(8)); // prints `None`" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:348 -msgid "" -"// yield two elements from the beginning, and one from the end it.next(); it." -"next(); it.next_back();" -msgstr "" - -#. type: Plain text -#: doc/tutorial-container.md:352 -msgid "" -"printfln!(\"%?\", it.idx(0)); // prints `Some(&3)` printfln!(\"%?\", it." -"idx(4)); // prints `Some(&9)` printfln!(\"%?\", it.idx(6)); // prints `None` " -"~~~" -msgstr "" diff --git a/doc/po/ja/tutorial-ffi.md.po b/doc/po/ja/tutorial-ffi.md.po deleted file mode 100644 index 088970bf00d..00000000000 --- a/doc/po/ja/tutorial-ffi.md.po +++ /dev/null @@ -1,602 +0,0 @@ -# Japanese translations for Rust package -# Copyright (C) 2013 The Rust Project Developers -# This file is distributed under the same license as the Rust package. -# Automatically generated, 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: Rust 0.8\n" -"POT-Creation-Date: 2013-08-10 07:44+0900\n" -"PO-Revision-Date: 2013-07-22 23:37+0900\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: ja\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#. type: Plain text -#: doc/rust.md:4 doc/rustpkg.md:4 doc/tutorial.md:4 -#: doc/tutorial-borrowed-ptr.md:4 doc/tutorial-ffi.md:4 -#: doc/tutorial-macros.md:4 doc/tutorial-tasks.md:4 -msgid "# Introduction" -msgstr "# イントロダクション" - -#. type: Plain text -#: doc/tutorial.md:868 doc/tutorial-ffi.md:143 -msgid "# Destructors" -msgstr "# デストラクタ" - -#. type: Plain text -#: doc/tutorial-ffi.md:2 -msgid "% Rust Foreign Function Interface Tutorial" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:10 -msgid "" -"This tutorial will use the [snappy](https://code.google.com/p/snappy/) " -"compression/decompression library as an introduction to writing bindings for " -"foreign code. Rust is currently unable to call directly into a C++ library, " -"but snappy includes a C interface (documented in [`snappy-c.h`](https://code." -"google.com/p/snappy/source/browse/trunk/snappy-c.h))." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:13 -msgid "" -"The following is a minimal example of calling a foreign function which will " -"compile if snappy is installed:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:16 -msgid "~~~~ {.xfail-test} use std::libc::size_t;" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:21 -#, no-wrap -msgid "" -"#[link_args = \"-lsnappy\"]\n" -"extern {\n" -" fn snappy_max_compressed_length(source_length: size_t) -> size_t;\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:27 -#, no-wrap -msgid "" -"fn main() {\n" -" let x = unsafe { snappy_max_compressed_length(100) };\n" -" println(fmt!(\"max compressed length of a 100 byte buffer: %?\", x));\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:31 -msgid "" -"The `extern` block is a list of function signatures in a foreign library, in " -"this case with the platform's C ABI. The `#[link_args]` attribute is used to " -"instruct the linker to link against the snappy library so the symbols are " -"resolved." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:37 -msgid "" -"Foreign functions are assumed to be unsafe so calls to them need to be " -"wrapped with `unsafe {}` as a promise to the compiler that everything " -"contained within truly is safe. C libraries often expose interfaces that " -"aren't thread-safe, and almost any function that takes a pointer argument " -"isn't valid for all possible inputs since the pointer could be dangling, and " -"raw pointers fall outside of Rust's safe memory model." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:41 -msgid "" -"When declaring the argument types to a foreign function, the Rust compiler " -"will not check if the declaration is correct, so specifying it correctly is " -"part of keeping the binding correct at runtime." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:43 -msgid "The `extern` block can be extended to cover the entire snappy API:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:46 -msgid "~~~~ {.xfail-test} use std::libc::{c_int, size_t};" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:65 -#, no-wrap -msgid "" -"#[link_args = \"-lsnappy\"]\n" -"extern {\n" -" fn snappy_compress(input: *u8,\n" -" input_length: size_t,\n" -" compressed: *mut u8,\n" -" compressed_length: *mut size_t) -> c_int;\n" -" fn snappy_uncompress(compressed: *u8,\n" -" compressed_length: size_t,\n" -" uncompressed: *mut u8,\n" -" uncompressed_length: *mut size_t) -> c_int;\n" -" fn snappy_max_compressed_length(source_length: size_t) -> size_t;\n" -" fn snappy_uncompressed_length(compressed: *u8,\n" -" compressed_length: size_t,\n" -" result: *mut size_t) -> c_int;\n" -" fn snappy_validate_compressed_buffer(compressed: *u8,\n" -" compressed_length: size_t) -> c_int;\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:67 -msgid "# Creating a safe interface" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:71 -msgid "" -"The raw C API needs to be wrapped to provide memory safety and make use of " -"higher-level concepts like vectors. A library can choose to expose only the " -"safe, high-level interface and hide the unsafe internal details." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:76 -msgid "" -"Wrapping the functions which expect buffers involves using the `vec::raw` " -"module to manipulate Rust vectors as pointers to memory. Rust's vectors are " -"guaranteed to be a contiguous block of memory. The length is number of " -"elements currently contained, and the capacity is the total size in elements " -"of the allocated memory. The length is less than or equal to the capacity." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:84 -#, no-wrap -msgid "" -"~~~~ {.xfail-test}\n" -"pub fn validate_compressed_buffer(src: &[u8]) -> bool {\n" -" unsafe {\n" -" snappy_validate_compressed_buffer(src.as_ptr(), src.len() as size_t) == 0\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:88 -msgid "" -"The `validate_compressed_buffer` wrapper above makes use of an `unsafe` " -"block, but it makes the guarantee that calling it is safe for all inputs by " -"leaving off `unsafe` from the function signature." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:91 -msgid "" -"The `snappy_compress` and `snappy_uncompress` functions are more complex, " -"since a buffer has to be allocated to hold the output too." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:96 -msgid "" -"The `snappy_max_compressed_length` function can be used to allocate a vector " -"with the maximum required capacity to hold the compressed output. The vector " -"can then be passed to the `snappy_compress` function as an output parameter. " -"An output parameter is also passed to retrieve the true length after " -"compression for setting the length." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:102 -#, no-wrap -msgid "" -"~~~~ {.xfail-test}\n" -"pub fn compress(src: &[u8]) -> ~[u8] {\n" -" unsafe {\n" -" let srclen = src.len() as size_t;\n" -" let psrc = src.as_ptr();\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:106 -#, no-wrap -msgid "" -" let mut dstlen = snappy_max_compressed_length(srclen);\n" -" let mut dst = vec::with_capacity(dstlen as uint);\n" -" let pdst = dst.as_mut_ptr();\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:113 -#, no-wrap -msgid "" -" snappy_compress(psrc, srclen, pdst, &mut dstlen);\n" -" dst.set_len(dstlen as uint);\n" -" dst\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:116 -msgid "" -"Decompression is similar, because snappy stores the uncompressed size as " -"part of the compression format and `snappy_uncompressed_length` will " -"retrieve the exact buffer size required." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:122 -#, no-wrap -msgid "" -"~~~~ {.xfail-test}\n" -"pub fn uncompress(src: &[u8]) -> Option<~[u8]> {\n" -" unsafe {\n" -" let srclen = src.len() as size_t;\n" -" let psrc = src.as_ptr();\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:125 -#, no-wrap -msgid "" -" let mut dstlen: size_t = 0;\n" -" snappy_uncompressed_length(psrc, srclen, &mut dstlen);\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:128 -#, no-wrap -msgid "" -" let mut dst = vec::with_capacity(dstlen as uint);\n" -" let pdst = dst.as_mut_ptr();\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:138 -#, no-wrap -msgid "" -" if snappy_uncompress(psrc, srclen, pdst, &mut dstlen) == 0 {\n" -" dst.set_len(dstlen as uint);\n" -" Some(dst)\n" -" } else {\n" -" None // SNAPPY_INVALID_INPUT\n" -" }\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:141 -msgid "" -"For reference, the examples used here are also available as an [library on " -"GitHub](https://github.com/thestinger/rust-snappy)." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:147 -msgid "" -"Foreign libraries often hand off ownership of resources to the calling code, " -"which should be wrapped in a destructor to provide safety and guarantee " -"their release." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:150 -msgid "" -"A type with the same functionality as owned boxes can be implemented by " -"wrapping `malloc` and `free`:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:156 -msgid "" -"~~~~ use std::cast; use std::libc::{c_void, size_t, malloc, free}; use std::" -"ptr; use std::unstable::intrinsics;" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:161 -#, no-wrap -msgid "" -"// a wrapper around the handle returned by the foreign code\n" -"pub struct Unique {\n" -" priv ptr: *mut T\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:172 -#, no-wrap -msgid "" -"impl Unique {\n" -" pub fn new(value: T) -> Unique {\n" -" unsafe {\n" -" let ptr = malloc(std::mem::size_of::() as size_t) as *mut T;\n" -" assert!(!ptr::is_null(ptr));\n" -" // `*ptr` is uninitialized, and `*ptr = value` would attempt to destroy it\n" -" intrinsics::move_val_init(&mut *ptr, value);\n" -" Unique{ptr: ptr}\n" -" }\n" -" }\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:177 -#, no-wrap -msgid "" -" // the 'r lifetime results in the same semantics as `&*x` with ~T\n" -" pub fn borrow<'r>(&'r self) -> &'r T {\n" -" unsafe { cast::copy_lifetime(self, &*self.ptr) }\n" -" }\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:183 -#, no-wrap -msgid "" -" // the 'r lifetime results in the same semantics as `&mut *x` with ~T\n" -" pub fn borrow_mut<'r>(&'r mut self) -> &'r mut T {\n" -" unsafe { cast::copy_mut_lifetime(self, &mut *self.ptr) }\n" -" }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:195 -#, no-wrap -msgid "" -"#[unsafe_destructor]\n" -"impl Drop for Unique {\n" -" fn drop(&self) {\n" -" unsafe {\n" -" let x = intrinsics::init(); // dummy value to swap in\n" -" // moving the object out is needed to call the destructor\n" -" ptr::replace_ptr(self.ptr, x);\n" -" free(self.ptr as *c_void)\n" -" }\n" -" }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:202 -#, no-wrap -msgid "" -"// A comparison between the built-in ~ and this reimplementation\n" -"fn main() {\n" -" {\n" -" let mut x = ~5;\n" -" *x = 10;\n" -" } // `x` is freed here\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:209 -#, no-wrap -msgid "" -" {\n" -" let mut y = Unique::new(5);\n" -" *y.borrow_mut() = 10;\n" -" } // `y` is freed here\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:211 -msgid "# Linking" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:215 -msgid "" -"In addition to the `#[link_args]` attribute for explicitly passing arguments " -"to the linker, an `extern mod` block will pass `-lmodname` to the linker by " -"default unless it has a `#[nolink]` attribute applied." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:217 -msgid "# Unsafe blocks" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:221 -msgid "" -"Some operations, like dereferencing unsafe pointers or calling functions " -"that have been marked unsafe are only allowed inside unsafe blocks. Unsafe " -"blocks isolate unsafety and are a promise to the compiler that the unsafety " -"does not leak out of the block." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:224 -msgid "" -"Unsafe functions, on the other hand, advertise it to the world. An unsafe " -"function is written like this:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:228 -msgid "~~~~ unsafe fn kaboom(ptr: *int) -> int { *ptr } ~~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:230 -msgid "" -"This function can only be called from an `unsafe` block or another `unsafe` " -"function." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:232 -msgid "# Accessing foreign globals" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:236 -msgid "" -"Foreign APIs often export a global variable which could do something like " -"track global state. In order to access these variables, you declare them in " -"`extern` blocks with the `static` keyword:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:239 -msgid "~~~{.xfail-test} use std::libc;" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:244 -#, no-wrap -msgid "" -"#[link_args = \"-lreadline\"]\n" -"extern {\n" -" static rl_readline_version: libc::c_int;\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:250 -#, no-wrap -msgid "" -"fn main() {\n" -" println(fmt!(\"You have readline version %d installed.\",\n" -" rl_readline_version as int));\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:254 -msgid "" -"Alternatively, you may need to alter global state provided by a foreign " -"interface. To do this, statics can be declared with `mut` so rust can mutate " -"them." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:258 -msgid "~~~{.xfail-test} use std::libc; use std::ptr;" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:263 -#, no-wrap -msgid "" -"#[link_args = \"-lreadline\"]\n" -"extern {\n" -" static mut rl_prompt: *libc::c_char;\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:272 -#, no-wrap -msgid "" -"fn main() {\n" -" do \"[my-awesome-shell] $\".as_c_str |buf| {\n" -" unsafe { rl_prompt = buf; }\n" -" // get a line, process it\n" -" unsafe { rl_prompt = ptr::null(); }\n" -" }\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:274 -msgid "# Foreign calling conventions" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:279 -msgid "" -"Most foreign code exposes a C ABI, and Rust uses the platform's C calling " -"convention by default when calling foreign functions. Some foreign " -"functions, most notably the Windows API, use other calling conventions. Rust " -"provides the `abi` attribute as a way to hint to the compiler which calling " -"convention to use:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:288 -#, no-wrap -msgid "" -"~~~~\n" -"#[cfg(target_os = \"win32\")]\n" -"#[abi = \"stdcall\"]\n" -"#[link_name = \"kernel32\"]\n" -"extern {\n" -" fn SetEnvironmentVariableA(n: *u8, v: *u8) -> int;\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:292 -msgid "" -"The `abi` attribute applies to a foreign module (it cannot be applied to a " -"single function within a module), and must be either `\"cdecl\"` or `" -"\"stdcall\"`. The compiler may eventually support other calling conventions." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:294 -msgid "# Interoperability with foreign code" -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:298 -msgid "" -"Rust guarantees that the layout of a `struct` is compatible with the " -"platform's representation in C. A `#[packed]` attribute is available, which " -"will lay out the struct members without padding. However, there are " -"currently no guarantees about the layout of an `enum`." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:305 -msgid "" -"Rust's owned and managed boxes use non-nullable pointers as handles which " -"point to the contained object. However, they should not be manually created " -"because they are managed by internal allocators. Borrowed pointers can " -"safely be assumed to be non-nullable pointers directly to the type. However, " -"breaking the borrow checking or mutability rules is not guaranteed to be " -"safe, so prefer using raw pointers (`*`) if that's needed because the " -"compiler can't make as many assumptions about them." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:310 -msgid "" -"Vectors and strings share the same basic memory layout, and utilities are " -"available in the `vec` and `str` modules for working with C APIs. Strings " -"are terminated with `\\0` for interoperability with C, but it should not be " -"assumed because a slice will not always be nul-terminated. Instead, the " -"`str::as_c_str` function should be used." -msgstr "" - -#. type: Plain text -#: doc/tutorial-ffi.md:312 -msgid "" -"The standard library includes type aliases and function definitions for the " -"C standard library in the `libc` module, and Rust links against `libc` and " -"`libm` by default." -msgstr "" diff --git a/doc/po/ja/tutorial-macros.md.po b/doc/po/ja/tutorial-macros.md.po deleted file mode 100644 index a7704bc94c1..00000000000 --- a/doc/po/ja/tutorial-macros.md.po +++ /dev/null @@ -1,683 +0,0 @@ -# Japanese translations for Rust package -# Copyright (C) 2013 The Rust Project Developers -# This file is distributed under the same license as the Rust package. -# Automatically generated, 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: Rust 0.8\n" -"POT-Creation-Date: 2013-07-28 20:32+0900\n" -"PO-Revision-Date: 2013-07-28 20:32+0900\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: ja\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#. type: Plain text -#: doc/rust.md:4 doc/rustpkg.md:4 doc/tutorial.md:4 -#: doc/tutorial-borrowed-ptr.md:4 doc/tutorial-ffi.md:4 -#: doc/tutorial-macros.md:4 doc/tutorial-tasks.md:4 -msgid "# Introduction" -msgstr "# イントロダクション" - -#. type: Plain text -#: doc/rust.md:2136 doc/rust.md:2223 doc/tutorial-macros.md:323 -msgid "~~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:2 -msgid "% Rust Macros Tutorial" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:12 -msgid "" -"Functions are the primary tool that programmers can use to build " -"abstractions. Sometimes, however, programmers want to abstract over compile-" -"time syntax rather than run-time values. Macros provide syntactic " -"abstraction. For an example of how this can be useful, consider the " -"following two code fragments, which both pattern-match on their input and " -"both return early in one case, doing nothing otherwise:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:30 -#, no-wrap -msgid "" -"~~~~\n" -"# enum t { special_a(uint), special_b(uint) };\n" -"# fn f() -> uint {\n" -"# let input_1 = special_a(0);\n" -"# let input_2 = special_a(0);\n" -"match input_1 {\n" -" special_a(x) => { return x; }\n" -" _ => {}\n" -"}\n" -"// ...\n" -"match input_2 {\n" -" special_b(x) => { return x; }\n" -" _ => {}\n" -"}\n" -"# return 0u;\n" -"# }\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:38 -msgid "" -"This code could become tiresome if repeated many times. However, no " -"function can capture its functionality to make it possible to abstract the " -"repetition away. Rust's macro system, however, can eliminate the " -"repetition. Macros are lightweight custom syntax extensions, themselves " -"defined using the `macro_rules!` syntax extension. The following " -"`early_return` macro captures the pattern in the above code:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:59 -#, no-wrap -msgid "" -"~~~~\n" -"# enum t { special_a(uint), special_b(uint) };\n" -"# fn f() -> uint {\n" -"# let input_1 = special_a(0);\n" -"# let input_2 = special_a(0);\n" -"macro_rules! early_return(\n" -" ($inp:expr $sp:ident) => ( // invoke it like `(input_5 special_e)`\n" -" match $inp {\n" -" $sp(x) => { return x; }\n" -" _ => {}\n" -" }\n" -" );\n" -")\n" -"// ...\n" -"early_return!(input_1 special_a);\n" -"// ...\n" -"early_return!(input_2 special_b);\n" -"# return 0;\n" -"# }\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:65 -msgid "" -"Macros are defined in pattern-matching style: in the above example, the text " -"`($inp:expr $sp:ident)` that appears on the left-hand side of the `=>` is " -"the *macro invocation syntax*, a pattern denoting how to write a call to the " -"macro. The text on the right-hand side of the `=>`, beginning with `match " -"$inp`, is the *macro transcription syntax*: what the macro expands to." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:67 -msgid "# Invocation syntax" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:71 -msgid "" -"The macro invocation syntax specifies the syntax for the arguments to the " -"macro. It appears on the left-hand side of the `=>` in a macro definition. " -"It conforms to the following rules:" -msgstr "" - -#. type: Bullet: '1. ' -#: doc/tutorial-macros.md:76 -msgid "It must be surrounded by parentheses." -msgstr "" - -#. type: Bullet: '2. ' -#: doc/tutorial-macros.md:76 -msgid "`$` has special meaning (described below)." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:76 -#, no-wrap -msgid "" -"3. The `()`s, `[]`s, and `{}`s it contains must balance. For example, `([)` is\n" -"forbidden.\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:78 -msgid "Otherwise, the invocation syntax is free-form." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:83 -#, no-wrap -msgid "" -"To take as an argument a fragment of Rust code, write `$` followed by a name\n" -" (for use on the right-hand side), followed by a `:`, followed by a *fragment\n" -" specifier*. The fragment specifier denotes the sort of fragment to match. The\n" -" most common fragment specifiers are:\n" -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-macros.md:92 -msgid "" -"`ident` (an identifier, referring to a variable or item. Examples: `f`, `x`, " -"`foo`.)" -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-macros.md:92 -msgid "" -"`expr` (an expression. Examples: `2 + 2`; `if true then { 1 } else { 2 }`; " -"`f(42)`.)" -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-macros.md:92 -msgid "`ty` (a type. Examples: `int`, `~[(char, ~str)]`, `&T`.)" -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-macros.md:92 -msgid "" -"`pat` (a pattern, usually appearing in a `match` or on the left-hand side of " -"a declaration. Examples: `Some(t)`; `(17, 'a')`; `_`.)" -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-macros.md:92 -msgid "" -"`block` (a sequence of actions. Example: `{ log(error, \"hi\"); return 12; }" -"`)" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:95 -msgid "" -"The parser interprets any token that's not preceded by a `$` literally. " -"Rust's usual rules of tokenization apply," -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:98 -msgid "" -"So `($x:ident -> (($e:expr)))`, though excessively fancy, would designate a " -"macro that could be invoked like: `my_macro!(i->(( 2+2 )))`." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:100 -msgid "## Invocation location" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:105 -msgid "" -"A macro invocation may take the place of (and therefore expand to) an " -"expression, an item, or a statement. The Rust parser will parse the macro " -"invocation as a \"placeholder\" for whichever of those three nonterminals is " -"appropriate for the location." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:112 -msgid "" -"At expansion time, the output of the macro will be parsed as whichever of " -"the three nonterminals it stands in for. This means that a single macro " -"might, for example, expand to an item or an expression, depending on its " -"arguments (and cause a syntax error if it is called with the wrong argument " -"for its location). Although this behavior sounds excessively dynamic, it is " -"known to be useful under some circumstances." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:115 -msgid "# Transcription syntax" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:119 -msgid "" -"The right-hand side of the `=>` follows the same rules as the left-hand " -"side, except that a `$` need only be followed by the name of the syntactic " -"fragment to transcribe into the macro expansion; its type need not be " -"repeated." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:126 -msgid "" -"The right-hand side must be enclosed by delimiters, which the transcriber " -"ignores. Therefore `() => ((1,2,3))` is a macro that expands to a tuple " -"expression, `() => (let $x=$val)` is a macro that expands to a statement, " -"and `() => (1,2,3)` is a macro that expands to a syntax error (since the " -"transcriber interprets the parentheses on the right-hand-size as delimiters, " -"and `1,2,3` is not a valid Rust expression on its own)." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:133 -msgid "" -"Except for permissibility of `$name` (and `$(...)*`, discussed below), the " -"right-hand side of a macro definition is ordinary Rust syntax. In " -"particular, macro invocations (including invocations of the macro currently " -"being defined) are permitted in expression, statement, and item locations. " -"However, nothing else about the code is examined or executed by the macro " -"system; execution still has to wait until run-time." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:135 -msgid "## Interpolation location" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:139 -msgid "" -"The interpolation `$argument_name` may appear in any location consistent " -"with its fragment specifier (i.e., if it is specified as `ident`, it may be " -"used anywhere an identifier is permitted)." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:141 -msgid "# Multiplicity" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:143 -msgid "## Invocation" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:150 -msgid "" -"Going back to the motivating example, recall that `early_return` expanded " -"into a `match` that would `return` if the `match`'s scrutinee matched the " -"\"special case\" identifier provided as the second argument to " -"`early_return`, and do nothing otherwise. Now suppose that we wanted to " -"write a version of `early_return` that could handle a variable number of " -"\"special\" cases." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:156 -msgid "" -"The syntax `$(...)*` on the left-hand side of the `=>` in a macro definition " -"accepts zero or more occurrences of its contents. It works much like the `*` " -"operator in regular expressions. It also supports a separator token (a comma-" -"separated list could be written `$(...),*`), and `+` instead of `*` to mean " -"\"at least one\"." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:179 -#, no-wrap -msgid "" -"~~~~\n" -"# enum t { special_a(uint),special_b(uint),special_c(uint),special_d(uint)};\n" -"# fn f() -> uint {\n" -"# let input_1 = special_a(0);\n" -"# let input_2 = special_a(0);\n" -"macro_rules! early_return(\n" -" ($inp:expr, [ $($sp:ident)|+ ]) => (\n" -" match $inp {\n" -" $(\n" -" $sp(x) => { return x; }\n" -" )+\n" -" _ => {}\n" -" }\n" -" );\n" -")\n" -"// ...\n" -"early_return!(input_1, [special_a|special_c|special_d]);\n" -"// ...\n" -"early_return!(input_2, [special_b]);\n" -"# return 0;\n" -"# }\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:181 -msgid "### Transcription" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:191 -msgid "" -"As the above example demonstrates, `$(...)*` is also valid on the right-hand " -"side of a macro definition. The behavior of `*` in transcription, especially " -"in cases where multiple `*`s are nested, and multiple different names are " -"involved, can seem somewhat magical and intuitive at first. The system that " -"interprets them is called \"Macro By Example\". The two rules to keep in " -"mind are (1) the behavior of `$(...)*` is to walk through one \"layer\" of " -"repetitions for all of the `$name`s it contains in lockstep, and (2) each `" -"$name` must be under at least as many `$(...)*`s as it was matched against. " -"If it is under more, it'll be repeated, as appropriate." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:193 -msgid "## Parsing limitations" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:197 -msgid "" -"For technical reasons, there are two limitations to the treatment of syntax " -"fragments by the macro parser:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:210 -#, no-wrap -msgid "" -"1. The parser will always parse as much as possible of a Rust syntactic\n" -"fragment. For example, if the comma were omitted from the syntax of\n" -"`early_return!` above, `input_1 [` would've been interpreted as the beginning\n" -"of an array index. In fact, invoking the macro would have been impossible.\n" -"2. The parser must have eliminated all ambiguity by the time it reaches a\n" -"`$name:fragment_specifier` declaration. This limitation can result in parse\n" -"errors when declarations occur at the beginning of, or immediately after,\n" -"a `$(...)*`. For example, the grammar `$($t:ty)* $e:expr` will always fail to\n" -"parse because the parser would be forced to choose between parsing `t` and\n" -"parsing `e`. Changing the invocation syntax to require a distinctive token in\n" -"front can solve the problem. In the above example, `$(T $t:ty)* E $e:exp`\n" -"solves the problem.\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:212 -msgid "# Macro argument pattern matching" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:214 -msgid "Now consider code like the following:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:216 -msgid "## Motivation" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:236 -#, no-wrap -msgid "" -"~~~~\n" -"# enum t1 { good_1(t2, uint), bad_1 };\n" -"# pub struct t2 { body: t3 }\n" -"# enum t3 { good_2(uint), bad_2};\n" -"# fn f(x: t1) -> uint {\n" -"match x {\n" -" good_1(g1, val) => {\n" -" match g1.body {\n" -" good_2(result) => {\n" -" // complicated stuff goes here\n" -" return result + val;\n" -" },\n" -" _ => fail!(\"Didn't get good_2\")\n" -" }\n" -" }\n" -" _ => return 0 // default value\n" -"}\n" -"# }\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:241 -msgid "" -"All the complicated stuff is deeply indented, and the error-handling code is " -"separated from matches that fail. We'd like to write a macro that performs a " -"match, but with a syntax that suits the problem better. The following macro " -"can solve the problem:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:263 -#, no-wrap -msgid "" -"~~~~\n" -"macro_rules! biased_match (\n" -" // special case: `let (x) = ...` is illegal, so use `let x = ...` instead\n" -" ( ($e:expr) ~ ($p:pat) else $err:stmt ;\n" -" binds $bind_res:ident\n" -" ) => (\n" -" let $bind_res = match $e {\n" -" $p => ( $bind_res ),\n" -" _ => { $err }\n" -" };\n" -" );\n" -" // more than one name; use a tuple\n" -" ( ($e:expr) ~ ($p:pat) else $err:stmt ;\n" -" binds $( $bind_res:ident ),*\n" -" ) => (\n" -" let ( $( $bind_res ),* ) = match $e {\n" -" $p => ( $( $bind_res ),* ),\n" -" _ => { $err }\n" -" };\n" -" )\n" -")\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:277 -#, no-wrap -msgid "" -"# enum t1 { good_1(t2, uint), bad_1 };\n" -"# pub struct t2 { body: t3 }\n" -"# enum t3 { good_2(uint), bad_2};\n" -"# fn f(x: t1) -> uint {\n" -"biased_match!((x) ~ (good_1(g1, val)) else { return 0 };\n" -" binds g1, val )\n" -"biased_match!((g1.body) ~ (good_2(result) )\n" -" else { fail!(\"Didn't get good_2\") };\n" -" binds result )\n" -"// complicated stuff goes here\n" -"return result + val;\n" -"# }\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:288 -#, no-wrap -msgid "" -"This solves the indentation problem. But if we have a lot of chained matches\n" -"like this, we might prefer to write a single macro invocation. The input\n" -"pattern we want is clear:\n" -"~~~~\n" -"# macro_rules! b(\n" -" ( $( ($e:expr) ~ ($p:pat) else $err:stmt ; )*\n" -" binds $( $bind_res:ident ),*\n" -" )\n" -"# => (0))\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:291 -msgid "" -"However, it's not possible to directly expand to nested match statements. " -"But there is a solution." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:293 -msgid "## The recursive approach to macro writing" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:297 -msgid "" -"A macro may accept multiple different input grammars. The first one to " -"successfully match the actual argument to a macro invocation is the one that " -"\"wins\"." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:301 -msgid "" -"In the case of the example above, we want to write a recursive macro to " -"process the semicolon-terminated lines, one-by-one. So, we want the " -"following input patterns:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:308 -#, no-wrap -msgid "" -"~~~~\n" -"# macro_rules! b(\n" -" ( binds $( $bind_res:ident ),* )\n" -"# => (0))\n" -"~~~~\n" -"...and:\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:317 -#, no-wrap -msgid "" -"~~~~\n" -"# macro_rules! b(\n" -" ( ($e :expr) ~ ($p :pat) else $err :stmt ;\n" -" $( ($e_rest:expr) ~ ($p_rest:pat) else $err_rest:stmt ; )*\n" -" binds $( $bind_res:ident ),*\n" -" )\n" -"# => (0))\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:321 -msgid "" -"The resulting macro looks like this. Note that the separation into " -"`biased_match!` and `biased_match_rec!` occurs only because we have an outer " -"piece of syntax (the `let`) which we only want to transcribe once." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:342 -#, no-wrap -msgid "" -"macro_rules! biased_match_rec (\n" -" // Handle the first layer\n" -" ( ($e :expr) ~ ($p :pat) else $err :stmt ;\n" -" $( ($e_rest:expr) ~ ($p_rest:pat) else $err_rest:stmt ; )*\n" -" binds $( $bind_res:ident ),*\n" -" ) => (\n" -" match $e {\n" -" $p => {\n" -" // Recursively handle the next layer\n" -" biased_match_rec!($( ($e_rest) ~ ($p_rest) else $err_rest ; )*\n" -" binds $( $bind_res ),*\n" -" )\n" -" }\n" -" _ => { $err }\n" -" }\n" -" );\n" -" ( binds $( $bind_res:ident ),* ) => ( ($( $bind_res ),*) )\n" -")\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:364 -#, no-wrap -msgid "" -"// Wrap the whole thing in a `let`.\n" -"macro_rules! biased_match (\n" -" // special case: `let (x) = ...` is illegal, so use `let x = ...` instead\n" -" ( $( ($e:expr) ~ ($p:pat) else $err:stmt ; )*\n" -" binds $bind_res:ident\n" -" ) => (\n" -" let ( $( $bind_res ),* ) = biased_match_rec!(\n" -" $( ($e) ~ ($p) else $err ; )*\n" -" binds $bind_res\n" -" );\n" -" );\n" -" // more than one name: use a tuple\n" -" ( $( ($e:expr) ~ ($p:pat) else $err:stmt ; )*\n" -" binds $( $bind_res:ident ),*\n" -" ) => (\n" -" let ( $( $bind_res ),* ) = biased_match_rec!(\n" -" $( ($e) ~ ($p) else $err ; )*\n" -" binds $( $bind_res ),*\n" -" );\n" -" )\n" -")\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:378 -#, no-wrap -msgid "" -"# enum t1 { good_1(t2, uint), bad_1 };\n" -"# pub struct t2 { body: t3 }\n" -"# enum t3 { good_2(uint), bad_2};\n" -"# fn f(x: t1) -> uint {\n" -"biased_match!(\n" -" (x) ~ (good_1(g1, val)) else { return 0 };\n" -" (g1.body) ~ (good_2(result) ) else { fail!(\"Didn't get good_2\") };\n" -" binds val, result )\n" -"// complicated stuff goes here\n" -"return result + val;\n" -"# }\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:382 -msgid "" -"This technique applies to many cases where transcribing a result all at once " -"is not possible. The resulting code resembles ordinary functional " -"programming in some respects, but has some important differences from " -"functional programming." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:390 -msgid "" -"The first difference is important, but also easy to forget: the " -"transcription (right-hand) side of a `macro_rules!` rule is literal syntax, " -"which can only be executed at run-time. If a piece of transcription syntax " -"does not itself appear inside another macro invocation, it will become part " -"of the final program. If it is inside a macro invocation (for example, the " -"recursive invocation of `biased_match_rec!`), it does have the opportunity " -"to affect transcription, but only through the process of attempted pattern " -"matching." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:398 -msgid "" -"The second, related, difference is that the evaluation order of macros feels " -"\"backwards\" compared to ordinary programming. Given an invocation `m1!(m2!" -"())`, the expander first expands `m1!`, giving it as input the literal " -"syntax `m2!()`. If it transcribes its argument unchanged into an appropriate " -"position (in particular, not as an argument to yet another macro " -"invocation), the expander will then proceed to evaluate `m2!()` (along with " -"any other macro invocations `m1!(m2!())` produced)." -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:400 -msgid "# A final note" -msgstr "" - -#. type: Plain text -#: doc/tutorial-macros.md:407 -msgid "" -"Macros, as currently implemented, are not for the faint of heart. Even " -"ordinary syntax errors can be more difficult to debug when they occur inside " -"a macro, and errors caused by parse problems in generated code can be very " -"tricky. Invoking the `log_syntax!` macro can help elucidate intermediate " -"states, invoking `trace_macros!(true)` will automatically print those " -"intermediate states out, and passing the flag `--pretty expanded` as a " -"command-line argument to the compiler will show the result of expansion." -msgstr "" diff --git a/doc/po/ja/tutorial-tasks.md.po b/doc/po/ja/tutorial-tasks.md.po deleted file mode 100644 index 2276d0052a6..00000000000 --- a/doc/po/ja/tutorial-tasks.md.po +++ /dev/null @@ -1,1070 +0,0 @@ -# Japanese translations for Rust package -# Copyright (C) 2013 The Rust Project Developers -# This file is distributed under the same license as the Rust package. -# Automatically generated, 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: Rust 0.8\n" -"POT-Creation-Date: 2013-08-08 22:27+0900\n" -"PO-Revision-Date: 2013-07-28 20:32+0900\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: ja\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#. type: Plain text -#: doc/rust.md:4 doc/rustpkg.md:4 doc/tutorial.md:4 -#: doc/tutorial-borrowed-ptr.md:4 doc/tutorial-ffi.md:4 -#: doc/tutorial-macros.md:4 doc/tutorial-tasks.md:4 -msgid "# Introduction" -msgstr "# イントロダクション" - -#. type: Plain text -#: doc/rust.md:1952 doc/tutorial-tasks.md:648 -msgid "# } ~~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:2 -msgid "% Rust Tasks and Communication Tutorial" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:10 -msgid "" -"Rust provides safe concurrency through a combination of lightweight, memory-" -"isolated tasks and message passing. This tutorial will describe the " -"concurrency model in Rust, how it relates to the Rust type system, and " -"introduce the fundamental library abstractions for constructing concurrent " -"programs." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:19 -msgid "" -"Rust tasks are not the same as traditional threads: rather, they are " -"considered _green threads_, lightweight units of execution that the Rust " -"runtime schedules cooperatively onto a small number of operating system " -"threads. On a multi-core system Rust tasks will be scheduled in parallel by " -"default. Because tasks are significantly cheaper to create than traditional " -"threads, Rust can create hundreds of thousands of concurrent tasks on a " -"typical 32-bit system. In general, all Rust code executes inside a task, " -"including the `main` function." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:26 -msgid "" -"In order to make efficient use of memory Rust tasks have dynamically sized " -"stacks. A task begins its life with a small amount of stack space " -"(currently in the low thousands of bytes, depending on platform), and " -"acquires more stack as needed. Unlike in languages such as C, a Rust task " -"cannot accidentally write to memory beyond the end of the stack, causing " -"crashes or worse." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:32 -msgid "" -"Tasks provide failure isolation and recovery. When a fatal error occurs in " -"Rust code as a result of an explicit call to `fail!()`, an assertion " -"failure, or another invalid operation, the runtime system destroys the " -"entire task. Unlike in languages such as Java and C++, there is no way to " -"`catch` an exception. Instead, tasks may monitor each other for failure." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:37 -msgid "" -"Tasks use Rust's type system to provide strong memory safety guarantees. In " -"particular, the type system guarantees that tasks cannot share mutable state " -"with each other. Tasks communicate with each other by transferring _owned_ " -"data through the global _exchange heap_." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:39 -msgid "## A note about the libraries" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:44 -msgid "" -"While Rust's type system provides the building blocks needed for safe and " -"efficient tasks, all of the task functionality itself is implemented in the " -"standard and extra libraries, which are still under development and do not " -"always present a consistent or complete interface." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:47 -msgid "" -"For your reference, these are the standard modules involved in Rust " -"concurrency at this writing:" -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-tasks.md:56 -msgid "[`std::task`] - All code relating to tasks and task scheduling," -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-tasks.md:56 -msgid "[`std::comm`] - The message passing interface," -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-tasks.md:56 -msgid "[`std::pipes`] - The underlying messaging infrastructure," -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-tasks.md:56 -msgid "[`extra::comm`] - Additional messaging types based on `std::pipes`," -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-tasks.md:56 -msgid "[`extra::sync`] - More exotic synchronization tools, including locks," -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-tasks.md:56 -msgid "" -"[`extra::arc`] - The Arc (atomically reference counted) type, for safely " -"sharing immutable data," -msgstr "" - -#. type: Bullet: '* ' -#: doc/tutorial-tasks.md:56 -msgid "" -"[`extra::future`] - A type representing values that may be computed " -"concurrently and retrieved at a later time." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:64 -msgid "" -"[`std::task`]: std/task.html [`std::comm`]: std/comm.html [`std::pipes`]: " -"std/pipes.html [`extra::comm`]: extra/comm.html [`extra::sync`]: extra/sync." -"html [`extra::arc`]: extra/arc.html [`extra::future`]: extra/future.html" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:66 -msgid "# Basics" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:72 -msgid "" -"The programming interface for creating and managing tasks lives in the " -"`task` module of the `std` library, and is thus available to all Rust code " -"by default. At its simplest, creating a task is a matter of calling the " -"`spawn` function with a closure argument. `spawn` executes the closure in " -"the new task." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:76 -msgid "~~~~ # use std::io::println; # use std::task::spawn;" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:80 -msgid "" -"// Print something profound in a different task using a named function fn " -"print_message() { println(\"I am running in a different task!\"); } " -"spawn(print_message);" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:83 -msgid "" -"// Print something more profound in a different task using a lambda " -"expression spawn( || println(\"I am also running in a different task!\") );" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:89 -#, no-wrap -msgid "" -"// The canonical way to spawn is using `do` notation\n" -"do spawn {\n" -" println(\"I too am running in a different task!\");\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:95 -msgid "" -"In Rust, there is nothing special about creating tasks: a task is not a " -"concept that appears in the language semantics. Instead, Rust's type system " -"provides all the tools necessary to implement safe concurrency: " -"particularly, _owned types_. The language leaves the implementation details " -"to the standard library." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:102 -msgid "" -"The `spawn` function has a very simple type signature: `fn spawn(f: proc())`. " -"Because it accepts only owned closures, and owned closures contain only " -"owned data, `spawn` can safely move the entire closure and all its " -"associated state into an entirely different task for execution. Like any " -"closure, the function passed to `spawn` may capture an environment that it " -"carries across tasks." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:109 -msgid "" -"~~~ # use std::io::println; # use std::task::spawn; # fn " -"generate_task_number() -> int { 0 } // Generate some state locally let " -"child_task_number = generate_task_number();" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:115 -#, no-wrap -msgid "" -"do spawn {\n" -" // Capture it in the remote task\n" -" println(fmt!(\"I am child number %d\", child_task_number));\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:119 -msgid "" -"By default, the scheduler multiplexes tasks across the available cores, " -"running in parallel. Thus, on a multicore machine, running the following " -"code should interleave the output in vaguely random order." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:123 -msgid "~~~ # use std::io::print; # use std::task::spawn;" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:130 -#, no-wrap -msgid "" -"for child_task_number in range(0, 20) {\n" -" do spawn {\n" -" print(fmt!(\"I am child number %d\\n\", child_task_number));\n" -" }\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:132 -msgid "## Communication" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:137 -msgid "" -"Now that we have spawned a new task, it would be nice if we could " -"communicate with it. Recall that Rust does not have shared mutable state, so " -"one task may not manipulate variables owned by another task. Instead we use " -"*pipes*." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:142 -msgid "" -"A pipe is simply a pair of endpoints: one for sending messages and another " -"for receiving messages. Pipes are low-level communication building-blocks " -"and so come in a variety of forms, each one appropriate for a different use " -"case. In what follows, we cover the most commonly used varieties." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:148 -msgid "" -"The simplest way to create a pipe is to use the `pipes::stream` function to " -"create a `(Port, Chan)` pair. In Rust parlance, a *channel* is a sending " -"endpoint of a pipe, and a *port* is the receiving endpoint. Consider the " -"following example of calculating two results concurrently:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:152 -msgid "~~~~ # use std::task::spawn; # use std::comm::{stream, Port, Chan};" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:154 -msgid "let (port, chan): (Port, Chan) = stream();" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:159 -#, no-wrap -msgid "" -"do spawn || {\n" -" let result = some_expensive_computation();\n" -" chan.send(result);\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:165 -msgid "" -"some_other_expensive_computation(); let result = port.recv(); # fn " -"some_expensive_computation() -> int { 42 } # fn " -"some_other_expensive_computation() {} ~~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:170 -msgid "" -"Let's examine this example in detail. First, the `let` statement creates a " -"stream for sending and receiving integers (the left-hand side of the `let`, " -"`(chan, port)`, is an example of a *destructuring let*: the pattern " -"separates a tuple into its component parts)." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:175 -msgid "" -"~~~~ # use std::comm::{stream, Chan, Port}; let (port, chan): (Port, " -"Chan) = stream(); ~~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:179 -msgid "" -"The child task will use the channel to send data to the parent task, which " -"will wait to receive the data on the port. The next statement spawns the " -"child task." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:190 -#, no-wrap -msgid "" -"~~~~\n" -"# use std::task::spawn;\n" -"# use std::comm::stream;\n" -"# fn some_expensive_computation() -> int { 42 }\n" -"# let (port, chan) = stream();\n" -"do spawn || {\n" -" let result = some_expensive_computation();\n" -" chan.send(result);\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:196 -msgid "" -"Notice that the creation of the task closure transfers `chan` to the child " -"task implicitly: the closure captures `chan` in its environment. Both `Chan` " -"and `Port` are sendable types and may be captured into tasks or otherwise " -"transferred between them. In the example, the child task runs an expensive " -"computation, then sends the result over the captured channel." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:200 -msgid "" -"Finally, the parent continues with some other expensive computation, then " -"waits for the child's result to arrive on the port:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:209 -msgid "" -"~~~~ # use std::comm::{stream}; # fn some_other_expensive_computation() {} # " -"let (port, chan) = stream::(); # chan.send(0); " -"some_other_expensive_computation(); let result = port.recv(); ~~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:215 -msgid "" -"The `Port` and `Chan` pair created by `stream` enables efficient " -"communication between a single sender and a single receiver, but multiple " -"senders cannot use a single `Chan`, and multiple receivers cannot use a " -"single `Port`. What if our example needed to compute multiple results " -"across a number of tasks? The following program is ill-typed:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:221 -msgid "" -"~~~ {.xfail-test} # use std::task::{spawn}; # use std::comm::{stream, Port, " -"Chan}; # fn some_expensive_computation() -> int { 42 } let (port, chan) = " -"stream();" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:225 -#, no-wrap -msgid "" -"do spawn {\n" -" chan.send(some_expensive_computation());\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:232 -#, no-wrap -msgid "" -"// ERROR! The previous spawn statement already owns the channel,\n" -"// so the compiler will not allow it to be captured again\n" -"do spawn {\n" -" chan.send(some_expensive_computation());\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:235 -msgid "" -"Instead we can use a `SharedChan`, a type that allows a single `Chan` to be " -"shared by multiple senders." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:239 -msgid "~~~ # use std::task::spawn; # use std::comm::{stream, SharedChan};" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:242 -msgid "let (port, chan) = stream(); let chan = SharedChan::new(chan);" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:250 -#, no-wrap -msgid "" -"for init_val in range(0u, 3) {\n" -" // Create a new channel handle to distribute to the child task\n" -" let child_chan = chan.clone();\n" -" do spawn {\n" -" child_chan.send(some_expensive_computation(init_val));\n" -" }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:254 -msgid "" -"let result = port.recv() + port.recv() + port.recv(); # fn " -"some_expensive_computation(_i: uint) -> int { 42 } ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:263 -msgid "" -"Here we transfer ownership of the channel into a new `SharedChan` value. " -"Like `Chan`, `SharedChan` is a non-copyable, owned type (sometimes also " -"referred to as an *affine* or *linear* type). Unlike with `Chan`, though, " -"the programmer may duplicate a `SharedChan`, with the `clone()` method. A " -"cloned `SharedChan` produces a new handle to the same channel, allowing " -"multiple tasks to send data to a single port. Between `spawn`, `stream` and " -"`SharedChan`, we have enough tools to implement many useful concurrency " -"patterns." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:268 -msgid "" -"Note that the above `SharedChan` example is somewhat contrived since you " -"could also simply use three `stream` pairs, but it serves to illustrate the " -"point. For reference, written with multiple streams, it might look like the " -"example below." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:273 -msgid "~~~ # use std::task::spawn; # use std::comm::stream; # use std::vec;" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:282 -#, no-wrap -msgid "" -"// Create a vector of ports, one for each child task\n" -"let ports = do vec::from_fn(3) |init_val| {\n" -" let (port, chan) = stream();\n" -" do spawn {\n" -" chan.send(some_expensive_computation(init_val));\n" -" }\n" -" port\n" -"};\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:287 -msgid "" -"// Wait on each port, accumulating the results let result = ports.iter()." -"fold(0, |accum, port| accum + port.recv() ); # fn " -"some_expensive_computation(_i: uint) -> int { 42 } ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:291 -msgid "" -"## Backgrounding computations: Futures With `extra::future`, rust has a " -"mechanism for requesting a computation and getting the result later." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:299 -#, no-wrap -msgid "" -"The basic example below illustrates this.\n" -"~~~\n" -"# fn make_a_sandwich() {};\n" -"fn fib(n: u64) -> u64 {\n" -" // lengthy computation returning an uint\n" -" 12586269025\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:304 -msgid "" -"let mut delayed_fib = extra::future::spawn (|| fib(50) ); make_a_sandwich(); " -"println(fmt!(\"fib(50) = %?\", delayed_fib.get())) ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:310 -msgid "" -"The call to `future::spawn` returns immediately a `future` object regardless " -"of how long it takes to run `fib(50)`. You can then make yourself a sandwich " -"while the computation of `fib` is running. The result of the execution of " -"the method is obtained by calling `get` on the future. This call will block " -"until the value is available (*i.e.* the computation is complete). Note that " -"the future needs to be mutable so that it can save the result for next time " -"`get` is called." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:322 -#, no-wrap -msgid "" -"Here is another example showing how futures allow you to background computations. The workload will\n" -"be distributed on the available cores.\n" -"~~~\n" -"# use std::vec;\n" -"fn partial_sum(start: uint) -> f64 {\n" -" let mut local_sum = 0f64;\n" -" for num in range(start*100000, (start+1)*100000) {\n" -" local_sum += (num as f64 + 1.0).pow(&-2.0);\n" -" }\n" -" local_sum\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:325 -#, no-wrap -msgid "" -"fn main() {\n" -" let mut futures = vec::from_fn(1000, |ind| do extra::future::spawn { partial_sum(ind) });\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:333 -#, no-wrap -msgid "" -" let mut final_res = 0f64;\n" -" for ft in futures.mut_iter() {\n" -" final_res += ft.get();\n" -" }\n" -" println(fmt!(\"π^2/6 is not far from : %?\", final_res));\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:335 -msgid "## Sharing immutable data without copy: Arc" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:340 -msgid "" -"To share immutable data between tasks, a first approach would be to only use " -"pipes as we have seen previously. A copy of the data to share would then be " -"made for each task. In some cases, this would add up to a significant amount " -"of wasted memory and would require copying the same data more than necessary." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:344 -msgid "" -"To tackle this issue, one can use an Atomically Reference Counted wrapper " -"(`Arc`) as implemented in the `extra` library of Rust. With an Arc, the data " -"will no longer be copied for each task. The Arc acts as a reference to the " -"shared data and only this reference is shared and cloned." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:351 -msgid "" -"Here is a small example showing how to use Arcs. We wish to run concurrently " -"several computations on a single large vector of floats. Each task needs the " -"full vector to perform its duty. ~~~ # use std::vec; # use std::rand; use " -"extra::arc::Arc;" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:355 -#, no-wrap -msgid "" -"fn pnorm(nums: &~[float], p: uint) -> float {\n" -" nums.iter().fold(0.0, |a,b| a+(*b).pow(&(p as float)) ).pow(&(1f / (p as float)))\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:359 -#, no-wrap -msgid "" -"fn main() {\n" -" let numbers = vec::from_fn(1000000, |_| rand::random::());\n" -" println(fmt!(\"Inf-norm = %?\", *numbers.iter().max().unwrap()));\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:361 -#, no-wrap -msgid " let numbers_arc = Arc::new(numbers);\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:365 -#, no-wrap -msgid "" -" for num in range(1u, 10) {\n" -" let (port, chan) = stream();\n" -" chan.send(numbers_arc.clone());\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:374 -#, no-wrap -msgid "" -" do spawn {\n" -" let local_arc : Arc<~[float]> = port.recv();\n" -" let task_numbers = local_arc.get();\n" -" println(fmt!(\"%u-norm = %?\", num, pnorm(task_numbers, num)));\n" -" }\n" -" }\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:396 -msgid "" -"The function `pnorm` performs a simple computation on the vector (it " -"computes the sum of its items at the power given as argument and takes the " -"inverse power of this value). The Arc on the vector is created by the line " -"~~~ # use extra::arc::Arc; # use std::vec; # use std::rand; # let numbers = " -"vec::from_fn(1000000, |_| rand::random::()); let numbers_arc=Arc::" -"new(numbers); ~~~ and a clone of it is sent to each task ~~~ # use extra::" -"arc::Arc; # use std::vec; # use std::rand; # let numbers=vec::" -"from_fn(1000000, |_| rand::random::()); # let numbers_arc = Arc::" -"new(numbers); # let (port, chan) = stream(); chan.send(numbers_arc." -"clone()); ~~~ copying only the wrapper and not its contents." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:410 -msgid "" -"Each task recovers the underlying data by ~~~ # use extra::arc::Arc; # use " -"std::vec; # use std::rand; # let numbers=vec::from_fn(1000000, |_| rand::" -"random::()); # let numbers_arc=Arc::new(numbers); # let (port, chan) " -"= stream(); # chan.send(numbers_arc.clone()); # let local_arc : " -"Arc<~[float]> = port.recv(); let task_numbers = local_arc.get(); ~~~ and can " -"use it as if it were local." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:412 -msgid "" -"The `arc` module also implements Arcs around mutable data that are not " -"covered here." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:414 -msgid "# Handling task failure" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:423 -msgid "" -"Rust has a built-in mechanism for raising exceptions. The `fail!()` macro " -"(which can also be written with an error string as an argument: `fail!" -"( ~reason)`) and the `assert!` construct (which effectively calls `fail!()` " -"if a boolean expression is false) are both ways to raise exceptions. When a " -"task raises an exception the task unwinds its stack---running destructors " -"and freeing memory along the way---and then exits. Unlike exceptions in C++, " -"exceptions in Rust are unrecoverable within a single task: once a task " -"fails, there is no way to \"catch\" the exception." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:426 -msgid "" -"All tasks are, by default, _linked_ to each other. That means that the fates " -"of all tasks are intertwined: if one fails, so do all the others." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:434 -msgid "" -"~~~{.xfail-test .linked-failure} # use std::task::spawn; # use std::task; # " -"fn do_some_work() { loop { task::yield() } } # do task::try { // Create a " -"child task that fails do spawn { fail!() }" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:439 -msgid "" -"// This will also fail because the task we spawned failed do_some_work(); " -"# }; ~~~" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:449 -msgid "" -"While it isn't possible for a task to recover from failure, tasks may notify " -"each other of failure. The simplest way of handling task failure is with the " -"`try` function, which is similar to `spawn`, but immediately blocks waiting " -"for the child task to finish. `try` returns a value of type `Result`. `Result` is an `enum` type with two variants: `Ok` and `Err`. In this " -"case, because the type arguments to `Result` are `int` and `()`, callers can " -"pattern-match on a result to check whether it's an `Ok` result with an `int` " -"field (representing a successful result) or an `Err` result (representing " -"termination with an error)." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:463 -#, no-wrap -msgid "" -"~~~{.xfail-test .linked-failure}\n" -"# use std::task;\n" -"# fn some_condition() -> bool { false }\n" -"# fn calculate_result() -> int { 0 }\n" -"let result: Result = do task::try {\n" -" if some_condition() {\n" -" calculate_result()\n" -" } else {\n" -" fail!(\"oops!\");\n" -" }\n" -"};\n" -"assert!(result.is_err());\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:469 -msgid "" -"Unlike `spawn`, the function spawned using `try` may return a value, which " -"`try` will dutifully propagate back to the caller in a [`Result`] enum. If " -"the child task terminates successfully, `try` will return an `Ok` result; if " -"the child task fails, `try` will return an `Error` result." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:471 -msgid "[`Result`]: std/result.html" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:476 -msgid "" -"> ***Note:*** A failed task does not currently produce a useful error > " -"value (`try` always returns `Err(())`). In the > future, it may be possible " -"for tasks to intercept the value passed to > `fail!()`." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:479 -msgid "" -"TODO: Need discussion of `future_result` in order to make failure modes " -"useful." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:487 -msgid "" -"But not all failures are created equal. In some cases you might need to " -"abort the entire program (perhaps you're writing an assert which, if it " -"trips, indicates an unrecoverable logic error); in other cases you might " -"want to contain the failure at a certain boundary (perhaps a small piece of " -"input from the outside world, which you happen to be processing in parallel, " -"is malformed and its processing task can't proceed). Hence, you will need " -"different _linked failure modes_." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:489 -msgid "## Failure modes" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:492 -msgid "" -"By default, task failure is _bidirectionally linked_, which means that if " -"either task fails, it kills the other one." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:507 -#, no-wrap -msgid "" -"~~~{.xfail-test .linked-failure}\n" -"# use std::task;\n" -"# use std::comm::oneshot;\n" -"# fn sleep_forever() { loop { let (p, c) = oneshot::<()>(); p.recv(); } }\n" -"# do task::try {\n" -"do spawn {\n" -" do spawn {\n" -" fail!(); // All three tasks will fail.\n" -" }\n" -" sleep_forever(); // Will get woken up by force, then fail\n" -"}\n" -"sleep_forever(); // Will get woken up by force, then fail\n" -"# };\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:514 -msgid "" -"If you want parent tasks to be able to kill their children, but do not want " -"a parent to fail automatically if one of its child task fails, you can call " -"`task::spawn_supervised` for _unidirectionally linked_ failure. The function " -"`task::try`, which we saw previously, uses `spawn_supervised` internally, " -"with additional logic to wait for the child task to finish before returning. " -"Hence:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:536 -#, no-wrap -msgid "" -"~~~{.xfail-test .linked-failure}\n" -"# use std::comm::{stream, Chan, Port};\n" -"# use std::comm::oneshot;\n" -"# use std::task::{spawn, try};\n" -"# use std::task;\n" -"# fn sleep_forever() { loop { let (p, c) = oneshot::<()>(); p.recv(); } }\n" -"# do task::try {\n" -"let (receiver, sender): (Port, Chan) = stream();\n" -"do spawn { // Bidirectionally linked\n" -" // Wait for the supervised child task to exist.\n" -" let message = receiver.recv();\n" -" // Kill both it and the parent task.\n" -" assert!(message != 42);\n" -"}\n" -"do try { // Unidirectionally linked\n" -" sender.send(42);\n" -" sleep_forever(); // Will get woken up by force\n" -"}\n" -"// Flow never reaches here -- parent task was killed too.\n" -"# };\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:542 -msgid "" -"Supervised failure is useful in any situation where one task manages " -"multiple fallible child tasks, and the parent task can recover if any child " -"fails. On the other hand, if the _parent_ (supervisor) fails, then there is " -"nothing the children can do to recover, so they should also fail." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:545 -msgid "" -"Supervised task failure propagates across multiple generations even if an " -"intermediate generation has already exited:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:562 -#, no-wrap -msgid "" -"~~~{.xfail-test .linked-failure}\n" -"# use std::task;\n" -"# use std::comm::oneshot;\n" -"# fn sleep_forever() { loop { let (p, c) = oneshot::<()>(); p.recv(); } }\n" -"# fn wait_for_a_while() { for _ in range(0, 1000u) { task::yield() } }\n" -"# do task::try:: {\n" -"do task::spawn_supervised {\n" -" do task::spawn_supervised {\n" -" sleep_forever(); // Will get woken up by force, then fail\n" -" }\n" -" // Intermediate task immediately exits\n" -"}\n" -"wait_for_a_while();\n" -"fail!(); // Will kill grandchild even if child has already exited\n" -"# };\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:565 -msgid "" -"Finally, tasks can be configured to not propagate failure to each other at " -"all, using `task::spawn_unlinked` for _isolated failure_." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:581 -#, no-wrap -msgid "" -"~~~{.xfail-test .linked-failure}\n" -"# use std::task;\n" -"# fn random() -> uint { 100 }\n" -"# fn sleep_for(i: uint) { for _ in range(0, i) { task::yield() } }\n" -"# do task::try::<()> {\n" -"let (time1, time2) = (random(), random());\n" -"do task::spawn_unlinked {\n" -" sleep_for(time2); // Won't get forced awake\n" -" fail!();\n" -"}\n" -"sleep_for(time1); // Won't get forced awake\n" -"fail!();\n" -"// It will take MAX(time1,time2) for the program to finish.\n" -"# };\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:583 -msgid "## Creating a task with a bi-directional communication path" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:588 -msgid "" -"A very common thing to do is to spawn a child task where the parent and " -"child both need to exchange messages with each other. The function `extra::" -"comm::DuplexStream()` supports this pattern. We'll look briefly at how to " -"use it." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:593 -msgid "" -"To see how `DuplexStream()` works, we will create a child task that " -"repeatedly receives a `uint` message, converts it to a string, and sends the " -"string in response. The child terminates when it receives `0`. Here is the " -"function that implements the child task:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:606 -#, no-wrap -msgid "" -"~~~{.xfail-test .linked-failure}\n" -"# use extra::comm::DuplexStream;\n" -"# use std::uint;\n" -"fn stringifier(channel: &DuplexStream<~str, uint>) {\n" -" let mut value: uint;\n" -" loop {\n" -" value = channel.recv();\n" -" channel.send(uint::to_str(value));\n" -" if value == 0 { break; }\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:614 -msgid "" -"The implementation of `DuplexStream` supports both sending and receiving. " -"The `stringifier` function takes a `DuplexStream` that can send strings (the " -"first type parameter) and receive `uint` messages (the second type " -"parameter). The body itself simply loops, reading from the channel and then " -"sending its response back. The actual response itself is simply the " -"stringified version of the received value, `uint::to_str(value)`." -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:616 -msgid "Here is the code for the parent task:" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:630 -#, no-wrap -msgid "" -"~~~{.xfail-test .linked-failure}\n" -"# use std::task::spawn;\n" -"# use std::uint;\n" -"# use extra::comm::DuplexStream;\n" -"# fn stringifier(channel: &DuplexStream<~str, uint>) {\n" -"# let mut value: uint;\n" -"# loop {\n" -"# value = channel.recv();\n" -"# channel.send(uint::to_str(value));\n" -"# if value == 0u { break; }\n" -"# }\n" -"# }\n" -"# fn main() {\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:632 -msgid "let (from_child, to_child) = DuplexStream();" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:636 -#, no-wrap -msgid "" -"do spawn {\n" -" stringifier(&to_child);\n" -"};\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:639 -msgid "from_child.send(22); assert!(from_child.recv() == ~\"22\");" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:642 -msgid "from_child.send(23); from_child.send(0);" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:645 -msgid "" -"assert!(from_child.recv() == ~\"23\"); assert!(from_child.recv() == ~\"0\");" -msgstr "" - -#. type: Plain text -#: doc/tutorial-tasks.md:652 -msgid "" -"The parent task first calls `DuplexStream` to create a pair of bidirectional " -"endpoints. It then uses `task::spawn` to create the child task, which " -"captures one end of the communication channel. As a result, both parent and " -"child can send and receive data to and from the other." -msgstr "" diff --git a/doc/po/ja/tutorial.md.po b/doc/po/ja/tutorial.md.po index 1d3fc494efa..1c47dba9f04 100644 --- a/doc/po/ja/tutorial.md.po +++ b/doc/po/ja/tutorial.md.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Rust 0.8\n" -"POT-Creation-Date: 2013-08-12 02:06+0900\n" +"POT-Creation-Date: 2014-01-14 21:02+0900\n" "PO-Revision-Date: 2013-08-08 22:27+0900\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -17,47 +17,38 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" #. type: Plain text +#: doc/guide-conditions.md:4 doc/guide-ffi.md:4 doc/guide-lifetimes.md:4 +#: doc/guide-macros.md:4 doc/guide-rustpkg.md:4 doc/guide-tasks.md:4 #: doc/rust.md:4 doc/rustpkg.md:4 doc/tutorial.md:4 -#: doc/tutorial-borrowed-ptr.md:4 doc/tutorial-ffi.md:4 -#: doc/tutorial-macros.md:4 doc/tutorial-tasks.md:4 msgid "# Introduction" msgstr "# イントロダクション" #. type: Plain text -#: doc/rust.md:1277 doc/tutorial.md:2176 -msgid "" -"In type-parameterized functions, methods of the supertrait may be called on " -"values of subtrait-bound type parameters. Refering to the previous example " -"of `trait Circle : Shape`:" -msgstr "" -"型パラメータを持つ関数では、サブトレイトの境界型パラメータの値によりスーパー" -"トレイトのメソッドを呼び出すことになります。前の例の `trait Circle : Shape` " -"を参照してください。" +#: doc/guide-ffi.md:168 doc/tutorial.md:875 +msgid "# Destructors" +msgstr "# デストラクタ" #. type: Plain text -#: doc/rust.md:1286 doc/tutorial.md:2185 -#, no-wrap -msgid "" -"~~~\n" -"# trait Shape { fn area(&self) -> f64; }\n" -"# trait Circle : Shape { fn radius(&self) -> f64; }\n" -"fn radius_times_area(c: T) -> f64 {\n" -" // `c` is both a Circle and a Shape\n" -" c.radius() * c.area()\n" -"}\n" -"~~~\n" +#: doc/guide-lifetimes.md:72 doc/tutorial.md:1394 +msgid "Now we can call `compute_distance()` in various ways:" msgstr "" -"~~~\n" -"# trait Shape { fn area(&self) -> f64; }\n" -"# trait Circle : Shape { fn radius(&self) -> f64; }\n" -"fn radius_times_area(c: T) -> f64 {\n" -" // `c` は Circle でもあり、Shape でもある\n" -" c.radius() * c.area()\n" -"}\n" -"~~~\n" +"上記の `compute_distance()` 関数は、様々な方法で呼び出すことができます。" #. type: Plain text -#: doc/rust.md:1288 doc/tutorial.md:2187 +#: doc/guide-pointers.md:326 doc/tutorial.md:1345 +#, fuzzy +msgid "# References" +msgstr "# ポインタのデリファレンス" + +#. type: Plain text +#: doc/guide-testing.md:127 doc/tutorial.md:776 +#, fuzzy +#| msgid "## A minimal example" +msgid "For example:" +msgstr "## 最小限の例" + +#. type: Plain text +#: doc/rust.md:1388 doc/tutorial.md:2508 msgid "Likewise, supertrait methods may also be called on trait objects." msgstr "" "同様に、スーパートレイトのメソッドは、トレイトオブジェクトについても呼び出す" @@ -220,23 +211,36 @@ msgid "# Getting started" msgstr "# はじめに" #. type: Plain text -#: doc/tutorial.md:63 +#: doc/tutorial.md:67 +#, fuzzy +#| msgid "" +#| "The Rust compiler currently must be built from a [tarball], unless you " +#| "are on Windows, in which case using the [installer][win-exe] is " +#| "recommended." msgid "" -"The Rust compiler currently must be built from a [tarball], unless you are " -"on Windows, in which case using the [installer][win-exe] is recommended." +"The Rust compiler currently must be built from a [tarball] or [git], unless " +"you are on Windows, in which case using the [installer][win-exe] is " +"recommended. There is a list of community-maintained nightly builds and " +"packages [on the wiki][wiki-packages]." msgstr "" "Windows 以外の環境では、今のところ、Rust のコンパイラは [ソースコード]" "[tarball] からビルドする必要があります。Windows をお使いの場合は、 [インス" "トーラー][win-exe] の使用をおすすめします。" #. type: Plain text -#: doc/tutorial.md:69 +#: doc/tutorial.md:72 +#, fuzzy +#| msgid "" +#| "Since the Rust compiler is written in Rust, it must be built by a " +#| "precompiled \"snapshot\" version of itself (made in an earlier state of " +#| "development). As such, source builds require a connection to the " +#| "Internet, to fetch snapshots, and an OS that can execute the available " +#| "snapshot binaries." msgid "" "Since the Rust compiler is written in Rust, it must be built by a " "precompiled \"snapshot\" version of itself (made in an earlier state of " -"development). As such, source builds require a connection to the Internet, " -"to fetch snapshots, and an OS that can execute the available snapshot " -"binaries." +"development). The source build automatically fetches these snapshots from " +"the Internet on our supported platforms." msgstr "" "Rust のコンパイラは Rust で書かれているため、最新版の少し前のソースからコンパ" "イルされた「スナップショット」版コンパイラでビルドする必要があります。スナッ" @@ -245,29 +249,29 @@ msgstr "" "す。" #. type: Plain text -#: doc/tutorial.md:71 +#: doc/tutorial.md:74 msgid "Snapshot binaries are currently built and tested on several platforms:" msgstr "" "スナップショットバイナリは、現時点では以下のプラットフォーム向けのものがあり" "ます。" #. type: Bullet: '* ' -#: doc/tutorial.md:75 +#: doc/tutorial.md:78 msgid "Windows (7, Server 2008 R2), x86 only" msgstr "Windows (7, Server 2008 R2), x86 のみ" #. type: Bullet: '* ' -#: doc/tutorial.md:75 +#: doc/tutorial.md:78 msgid "Linux (various distributions), x86 and x86-64" msgstr "Linux (各種ディストリビューション), x86 または x86-64" #. type: Bullet: '* ' -#: doc/tutorial.md:75 +#: doc/tutorial.md:78 msgid "OSX 10.6 (\"Snow Leopard\") or greater, x86 and x86-64" msgstr "OSX 10.6 (\"Snow Leopard\") 以降, x86 または x86-64" #. type: Plain text -#: doc/tutorial.md:78 +#: doc/tutorial.md:81 msgid "" "You may find that other platforms work, but these are our \"tier 1\" " "supported build environments that are most likely to work." @@ -276,7 +280,7 @@ msgstr "" "1\" プラットフォームとしてサポートされているのは上記のみです。" #. type: Plain text -#: doc/tutorial.md:85 +#: doc/tutorial.md:88 msgid "" "> ***Note:*** Windows users should read the detailed > \"[getting started]" "[wiki-start]\" notes on the wiki. Even when using > the binary installer, " @@ -291,58 +295,68 @@ msgstr "" "ません。このような制限があることはは、本当に残念です。" #. type: Plain text -#: doc/tutorial.md:88 +#: doc/tutorial.md:92 +#, fuzzy +#| msgid "" +#| "[bug-3319]: https://github.com/mozilla/rust/issues/3319 [wiki-start]: " +#| "https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust" msgid "" "[bug-3319]: https://github.com/mozilla/rust/issues/3319 [wiki-start]: " -"https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust" +"https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust " +"[git]: https://github.com/mozilla/rust.git" msgstr "" "[bug-3319]: https://github.com/mozilla/rust/issues/3319\n" "[wiki-start]: https://github.com/mozilla/rust/wiki/Note-getting-started-" "developing-Rust" #. type: Plain text -#: doc/tutorial.md:91 +#: doc/tutorial.md:95 msgid "" "To build from source you will also need the following prerequisite packages:" msgstr "ソースからビルドするためには、以下のパッケージが必要です。" #. type: Bullet: '* ' -#: doc/tutorial.md:97 +#: doc/tutorial.md:101 msgid "g++ 4.4 or clang++ 3.x" msgstr "g++ 4.4 または clang++ 3.x" #. type: Bullet: '* ' -#: doc/tutorial.md:97 +#: doc/tutorial.md:101 msgid "python 2.6 or later (but not 3.x)" msgstr "python 2.6 以降 (ただし、 3.x は除く)" #. type: Bullet: '* ' -#: doc/tutorial.md:97 +#: doc/tutorial.md:101 msgid "perl 5.0 or later" msgstr "perl 5.0 以降" #. type: Bullet: '* ' -#: doc/tutorial.md:97 +#: doc/tutorial.md:101 msgid "gnu make 3.81 or later" msgstr "gnu make 3.81 以降" #. type: Bullet: '* ' -#: doc/tutorial.md:97 +#: doc/tutorial.md:101 msgid "curl" msgstr "curl" #. type: Plain text -#: doc/tutorial.md:100 +#: doc/tutorial.md:104 msgid "" "If you've fulfilled those prerequisites, something along these lines should " "work." msgstr "上記条件を満たしていれば、以下のような手順でビルド可能なはずです。" #. type: Plain text -#: doc/tutorial.md:108 +#: doc/tutorial.md:112 +#, fuzzy +#| msgid "" +#| "~~~~ {.notrust} $ curl -O http://static.rust-lang.org/dist/rust-0.7.tar." +#| "gz $ tar -xzf rust-0.7.tar.gz $ cd rust-0.7 $ ./configure $ make && make " +#| "install ~~~~" msgid "" -"~~~~ {.notrust} $ curl -O http://static.rust-lang.org/dist/rust-0.7.tar.gz $ " -"tar -xzf rust-0.7.tar.gz $ cd rust-0.7 $ ./configure $ make && make install " +"~~~~ {.notrust} $ curl -O http://static.rust-lang.org/dist/rust-0.9.tar.gz $ " +"tar -xzf rust-0.9.tar.gz $ cd rust-0.9 $ ./configure $ make && make install " "~~~~" msgstr "" "~~~~ {.notrust}\n" @@ -352,7 +366,7 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:114 +#: doc/tutorial.md:118 msgid "" "You may need to use `sudo make install` if you do not normally have " "permission to modify the destination directory. The install locations can be " @@ -365,11 +379,11 @@ msgstr "" "ポートしています。詳細については、 `--help` 引数を指定して実行してください。" #. type: Plain text -#: doc/tutorial.md:120 +#: doc/tutorial.md:122 msgid "" "When complete, `make install` will place several programs into `/usr/local/" -"bin`: `rustc`, the Rust compiler; `rustdoc`, the API-documentation tool; " -"and `rustpkg`, the Rust package manager." +"bin`: `rustc`, the Rust compiler; `rustdoc`, the API-documentation tool; and " +"`rustpkg`, the Rust package manager." msgstr "" "ビルド完了後、`make install` を実行すると、以下のプログラムが `/usr/local/" "bin` にインストールされます。\n" @@ -379,21 +393,25 @@ msgstr "" "* `rustpkg`: Rust のパッケージマネージャ\n" #. type: Plain text -#: doc/tutorial.md:123 +#: doc/tutorial.md:125 +#, fuzzy +#| msgid "" +#| "[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz [win-exe]: " +#| "http://static.rust-lang.org/dist/rust-0.7-install.exe" msgid "" -"[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz [win-exe]: " -"http://static.rust-lang.org/dist/rust-0.7-install.exe" +"[tarball]: http://static.rust-lang.org/dist/rust-0.9.tar.gz [win-exe]: " +"http://static.rust-lang.org/dist/rust-0.9-install.exe" msgstr "" "[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz\n" "[win-exe]: http://static.rust-lang.org/dist/rust-0.7-install.exe" #. type: Plain text -#: doc/tutorial.md:125 +#: doc/tutorial.md:127 msgid "## Compiling your first program" msgstr "## 最初のプログラム" #. type: Plain text -#: doc/tutorial.md:128 +#: doc/tutorial.md:130 msgid "" "Rust program files are, by convention, given the extension `.rs`. Say we " "have a file `hello.rs` containing this program:" @@ -402,18 +420,24 @@ msgstr "" "容を持つファイル、`hello.rs` が存在するとします。" #. type: Plain text -#: doc/tutorial.md:134 -#, no-wrap +#: doc/tutorial.md:136 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println(~\"hello \" + world::explore()); } ~~~~" msgid "" "~~~~\n" "fn main() {\n" -" println(\"hello?\");\n" +" println!(\"hello?\");\n" "}\n" "~~~~\n" msgstr "" +"~~~~ {.xfail-test}\n" +"// main.rs\n" +"extern mod world;\n" +"fn main() { println(~\"hello \" + world::explore()); }\n" +"~~~~" #. type: Plain text -#: doc/tutorial.md:138 +#: doc/tutorial.md:140 msgid "" "If the Rust compiler was installed successfully, running `rustc hello.rs` " "will produce an executable called `hello` (or `hello.exe` on Windows) which, " @@ -424,11 +448,17 @@ msgstr "" "が可能です。このファイルを実行すれば、予想通りの出力が得られるでしょう。" #. type: Plain text -#: doc/tutorial.md:143 +#: doc/tutorial.md:145 +#, fuzzy +#| msgid "" +#| "The Rust compiler tries to provide useful information when it encounters " +#| "an error. If you introduce an error into the program (for example, by " +#| "changing `println` to some nonexistent function), and then compile it, " +#| "you'll see an error message like this:" msgid "" "The Rust compiler tries to provide useful information when it encounters an " "error. If you introduce an error into the program (for example, by changing " -"`println` to some nonexistent function), and then compile it, you'll see an " +"`println!` to some nonexistent macro), and then compile it, you'll see an " "error message like this:" msgstr "" "コンパイルエラーが発生した場合、Rust コンパイラはエラー解決のための情報を出力" @@ -437,25 +467,22 @@ msgstr "" "が出力されます。" #. type: Plain text -#: doc/tutorial.md:149 -#, no-wrap -msgid "" -"~~~~ {.notrust}\n" -"hello.rs:2:4: 2:16 error: unresolved name: print_with_unicorns\n" -"hello.rs:2 print_with_unicorns(\"hello?\");\n" -" ^~~~~~~~~~~~~~~~~~~~~~~\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:156 +#: doc/tutorial.md:158 +#, fuzzy +#| msgid "" +#| "In its simplest form, a Rust program is a `.rs` file with some types and " +#| "functions defined in it. If it has a `main` function, it can be compiled " +#| "to an executable. Rust does not allow code that's not a declaration to " +#| "appear at the top level of the file: all statements must live inside a " +#| "function. Rust programs can also be compiled as libraries, and included " +#| "in other programs." msgid "" "In its simplest form, a Rust program is a `.rs` file with some types and " "functions defined in it. If it has a `main` function, it can be compiled to " "an executable. Rust does not allow code that's not a declaration to appear " "at the top level of the file: all statements must live inside a function. " "Rust programs can also be compiled as libraries, and included in other " -"programs." +"programs, even ones not written in Rust." msgstr "" "最も単純な Rust プログラムは、いくつかの型や関数が定義された `.rs` ファイルの" "みからなります。`.rs` ファイルをコンパイルして実行可能ファイルを作成する場" @@ -465,54 +492,12 @@ msgstr "" "プログラムから利用するライブラリとしてコンパイルすることも可能です。" #. type: Plain text -#: doc/tutorial.md:158 -msgid "## Using the rust tool" -msgstr "## `rust` コマンドを利用する" - -#. type: Plain text -#: doc/tutorial.md:163 -msgid "" -"While using `rustc` directly to generate your executables, and then running " -"them manually is a perfectly valid way to test your code, for smaller " -"projects, prototypes, or if you're a beginner, it might be more convenient " -"to use the `rust` tool." -msgstr "" -"作成したプログラムのテストを行うには、`rustc` でコンパイル後、生成されたファ" -"イルを手動で実行する方法だけではなく、 `rust` ツールを利用する方法もありま" -"す。小さなプロジェクトやプロトタイプを作成する場合、もしくはあなたが初心者の" -"場合は、 `rust` ツールによりコンパイルから実行までの一連の流れを簡単に行うこ" -"とができます。" - -#. type: Plain text -#: doc/tutorial.md:169 -msgid "" -"The `rust` tool provides central access to the other Rust tools, as well as " -"handy shortcuts for directly running source files. For example, if you have " -"a file `foo.rs` in your current directory, `rust run foo.rs` would attempt " -"to compile it and, if successful, directly run the resulting binary." -msgstr "" -"`rust` ツールには、Rust ツール群を統一的なインターフェースで呼び出す機能だけ" -"でなく、ソースファイルを直接実行する便利なショートカット機能もあります。例え" -"ば、カレントディレクトリにある `foo.rs` を実行しようとする場合、 `rust run " -"foo.rs` を実行することで、コンパイルから、コンパイル成功後に生成されるバイナ" -"リの実行までを自動的に行なってくれます。" - -#. type: Plain text -#: doc/tutorial.md:172 -msgid "" -"To get a list of all available commands, simply call `rust` without any " -"argument." -msgstr "" -"実行可能なコマンドを調べるためには、引数を与えず `rust` コマンドを実行してく" -"ださい。" - -#. type: Plain text -#: doc/tutorial.md:174 +#: doc/tutorial.md:160 msgid "## Editing Rust code" msgstr "## Rust のコードを編集する" #. type: Plain text -#: doc/tutorial.md:184 +#: doc/tutorial.md:170 msgid "" "There are vim highlighting and indentation scripts in the Rust source " "distribution under `src/etc/vim/`. There is an emacs mode under `src/etc/" @@ -533,7 +518,7 @@ msgstr "" "etc/kate` 以下です。" #. type: Plain text -#: doc/tutorial.md:188 +#: doc/tutorial.md:177 msgid "" "There is ctags support via `src/etc/ctags.rust`, but many other tools and " "editors are not yet supported. If you end up writing a Rust mode for your " @@ -544,7 +529,7 @@ msgstr "" "ディタ向けのRust モードを作成した場合、リンクを貼りたいのでお知らせください。" #. type: Plain text -#: doc/tutorial.md:191 +#: doc/tutorial.md:180 msgid "" "[sublime]: http://github.com/dbp/sublime-rust [sublime-pkg]: http://wbond." "net/sublime_packages/package_control" @@ -553,12 +538,12 @@ msgstr "" "[sublime-pkg]: http://wbond.net/sublime_packages/package_control" #. type: Plain text -#: doc/tutorial.md:193 +#: doc/tutorial.md:182 msgid "# Syntax basics" msgstr "# 基本的な構文" #. type: Plain text -#: doc/tutorial.md:201 +#: doc/tutorial.md:190 msgid "" "Assuming you've programmed in any C-family language (C++, Java, JavaScript, " "C#, or PHP), Rust will feel familiar. Code is arranged in blocks delineated " @@ -576,7 +561,7 @@ msgstr "" "レータは C++ と同様 2つのコロン (`::`) です。" #. type: Plain text -#: doc/tutorial.md:206 +#: doc/tutorial.md:195 msgid "" "The main surface difference to be aware of is that the condition at the head " "of control structures like `if` and `while` does not require parentheses, " @@ -589,7 +574,7 @@ msgstr "" "とはできません。" #. type: Plain text -#: doc/tutorial.md:219 +#: doc/tutorial.md:208 #, no-wrap msgid "" "~~~~\n" @@ -619,7 +604,7 @@ msgstr "" "~~~~\n" #. type: Plain text -#: doc/tutorial.md:223 +#: doc/tutorial.md:212 msgid "" "The `let` keyword introduces a local variable. Variables are immutable by " "default. To introduce a local variable that you can re-assign later, use " @@ -630,7 +615,7 @@ msgstr "" "mut` を用います。" #. type: Plain text -#: doc/tutorial.md:227 +#: doc/tutorial.md:216 msgid "~~~~ let hi = \"hi\"; let mut count = 0;" msgstr "" "~~~~\n" @@ -638,32 +623,27 @@ msgstr "" " let mut count = 0;" #. type: Plain text -#: doc/tutorial.md:233 -#, no-wrap -msgid "" -"while count < 10 {\n" -" println(fmt!(\"count: %?\", count));\n" -" count += 1;\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:237 +#: doc/tutorial.md:226 +#, fuzzy +#| msgid "" +#| "Although Rust can almost always infer the types of local variables, you " +#| "can specify a variable's type by following it with a colon, then the type " +#| "name. Static items, on the other hand, always require a type annotation." msgid "" "Although Rust can almost always infer the types of local variables, you can " -"specify a variable's type by following it with a colon, then the type name. " -"Static items, on the other hand, always require a type annotation." +"specify a variable's type by following it in the `let` with a colon, then " +"the type name. Static items, on the other hand, always require a type " +"annotation." msgstr "" "Rust は、ほぼすべてのローカル変数の型を推論してくれますが、コロンの後に続けて" "型名を書くことで、明示的に変数の型を指定することもできます。一方、静的な項目 " "(static item) には、常に型注釈を指定しなければなりません。" #. type: Plain text -#: doc/tutorial.md:243 +#: doc/tutorial.md:233 msgid "" -"~~~~ static MONSTER_FACTOR: f64 = 57.8; let monster_size = MONSTER_FACTOR " -"* 10.0; let monster_size: int = 50; ~~~~" +"~~~~ static MONSTER_FACTOR: f64 = 57.8; let monster_size = MONSTER_FACTOR * " +"10.0; let monster_size: int = 50; ~~~~" msgstr "" "~~~~\n" "static MONSTER_FACTOR: f64 = 57.8;\n" @@ -672,7 +652,7 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:252 +#: doc/tutorial.md:242 msgid "" "Local variables may shadow earlier declarations, as in the previous example: " "`monster_size` was first declared as a `f64`, and then a second " @@ -684,15 +664,15 @@ msgid "" "the warning, like `let _monster_size = 50;`." msgstr "" "ローカル変数は、先行する宣言を隠すことがあります。先の例では、1つ目の " -"`monster_size` は `f64` として宣言され、2つ目の `monster_size` は `int` と" -"して宣言されています。このプログラムをコンパイルした場合、「1つ目の " +"`monster_size` は `f64` として宣言され、2つ目の `monster_size` は `int` とし" +"て宣言されています。このプログラムをコンパイルした場合、「1つ目の " "`monster_size` は未使用である」という警告メッセージが出力されます (プログラマ" "が何らかの誤りを犯している可能性があるため)。未使用変数の存在が意図的なもので" "あった場合、未使用変数名の先頭にアンダースコアをつけることで、警告を抑制でき" "ます (`let _monster_size = 50;`)。" #. type: Plain text -#: doc/tutorial.md:258 +#: doc/tutorial.md:248 msgid "" "Rust identifiers start with an alphabetic character or an underscore, and " "after that may contain any sequence of alphabetic characters, numbers, or " @@ -707,7 +687,7 @@ msgstr "" "されています。" #. type: Plain text -#: doc/tutorial.md:263 +#: doc/tutorial.md:253 #, no-wrap msgid "" "~~~\n" @@ -721,12 +701,12 @@ msgstr "" "~~~\n" #. type: Plain text -#: doc/tutorial.md:265 +#: doc/tutorial.md:255 msgid "## Expressions and semicolons" msgstr "## 式とセミコロン" #. type: Plain text -#: doc/tutorial.md:271 +#: doc/tutorial.md:261 msgid "" "Though it isn't apparent in all code, there is a fundamental difference " "between Rust's syntax and predecessors like C. Many constructs that are " @@ -740,46 +720,12 @@ msgstr "" "ようにコードを書きますが、" #. type: Plain text -#: doc/tutorial.md:283 -#, no-wrap -msgid "" -"~~~~\n" -"# let item = \"salad\";\n" -"let price;\n" -"if item == \"salad\" {\n" -" price = 3.50;\n" -"} else if item == \"muffin\" {\n" -" price = 2.25;\n" -"} else {\n" -" price = 2.00;\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:285 +#: doc/tutorial.md:275 msgid "But, in Rust, you don't have to repeat the name `price`:" msgstr "Rust では、変数名 `price` を繰り返し書く必要はありません。" #. type: Plain text -#: doc/tutorial.md:297 -#, no-wrap -msgid "" -"~~~~\n" -"# let item = \"salad\";\n" -"let price =\n" -" if item == \"salad\" {\n" -" 3.50\n" -" } else if item == \"muffin\" {\n" -" 2.25\n" -" } else {\n" -" 2.00\n" -" };\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:303 +#: doc/tutorial.md:293 msgid "" "Both pieces of code are exactly equivalent: they assign a value to `price` " "depending on the condition that holds. Note that there are no semicolons in " @@ -794,7 +740,7 @@ msgstr "" "最後の式の値になります**。" #. type: Plain text -#: doc/tutorial.md:309 +#: doc/tutorial.md:299 msgid "" "Put another way, the semicolon in Rust *ignores the value of an " "expression*. Thus, if the branches of the `if` had looked like `{ 4; }`, " @@ -809,7 +755,7 @@ msgstr "" "には節のうち実行されたものの値が代入されます。" #. type: Plain text -#: doc/tutorial.md:314 +#: doc/tutorial.md:304 msgid "" "In short, everything that's not a declaration (declarations are `let` for " "variables; `fn` for functions; and any top-level named items such as [traits]" @@ -821,7 +767,7 @@ msgstr "" "すべてが式となります。関数のボディ部も式です。" #. type: Plain text -#: doc/tutorial.md:322 +#: doc/tutorial.md:312 #, no-wrap msgid "" "~~~~\n" @@ -840,19 +786,19 @@ msgstr "" "~~~~\n" #. type: Plain text -#: doc/tutorial.md:324 +#: doc/tutorial.md:314 msgid "## Primitive types and literals" msgstr "## プリミティブ型とリテラル" #. type: Plain text -#: doc/tutorial.md:331 +#: doc/tutorial.md:321 msgid "" "There are general signed and unsigned integer types, `int` and `uint`, as " "well as 8-, 16-, 32-, and 64-bit variants, `i8`, `u16`, etc. Integers can " -"be written in decimal (`144`), hexadecimal (`0x90`), octal (`0o70`), or binary " -"(`0b10010000`) base. Each integral type has a corresponding literal suffix " -"that can be used to indicate the type of a literal: `i` for `int`, `u` for " -"`uint`, `i8` for the `i8` type." +"be written in decimal (`144`), hexadecimal (`0x90`), octal (`0o70`), or " +"binary (`0b10010000`) base. Each integral type has a corresponding literal " +"suffix that can be used to indicate the type of a literal: `i` for `int`, " +"`u` for `uint`, `i8` for the `i8` type." msgstr "" "Rust には、他の言語と同様、符号付き整数の `int` と、符号なし整数の `uint` が" "あります。同様に、8 または 16, 32, 64 ビット幅の `i8`, `u16` などもあります。" @@ -862,7 +808,7 @@ msgstr "" "応します。" #. type: Plain text -#: doc/tutorial.md:337 +#: doc/tutorial.md:327 msgid "" "In the absence of an integer literal suffix, Rust will infer the integer " "type based on type annotations and function signatures in the surrounding " @@ -874,7 +820,7 @@ msgstr "" "フィックスなしの整数リテラルは `int` 型だとみなされます。" #. type: Plain text -#: doc/tutorial.md:344 +#: doc/tutorial.md:334 #, no-wrap msgid "" "~~~~\n" @@ -892,33 +838,47 @@ msgstr "" "~~~~\n" #. type: Plain text -#: doc/tutorial.md:349 +#: doc/tutorial.md:339 +#, fuzzy +#| msgid "" +#| "There are two floating-point types: `f32`, and `f64`. Floating-point " +#| "numbers are written `0.0`, `1e6`, or `2.1e-4`. Like integers, floating-" +#| "point literals are inferred to the correct type. Suffixes `f32`, and " +#| "`f64` can be used to create literals of a specific type." msgid "" -"There are two floating-point types: `f32`, and `f64`. Floating-" -"point numbers are written `0.0`, `1e6`, or `2.1e-4`. Like integers, " -"floating-point literals are inferred to the correct type. Suffixes " -"`f32`, and `f64` can be used to create literals of a specific type." +"There are two floating-point types: `f32`, and `f64`. Floating-point " +"numbers are written `0.0`, `1e6`, or `2.1e-4`. Like integers, floating-" +"point literals are inferred to the correct type. Suffixes `f32`, and `f64` " +"can be used to create literals of a specific type." msgstr "" -"浮動小数型は、 `f32`, `f64` の2種類があります。浮動小数リテラルは " -"`0.0` や、 `1e6`、 `2.1e-4` といった表記が可能です。整数と同じく、サフィック" -"スが省略された浮動小数リテラルは型推論されます。浮動小数のサフィックスは " -"`f32`、`f64` の3種類で、リテラルの末尾につけることで、対応する型の値を作" -"り出すことができます。" +"浮動小数型は、 `f32`, `f64` の2種類があります。浮動小数リテラルは `0.0` や、 " +"`1e6`、 `2.1e-4` といった表記が可能です。整数と同じく、サフィックスが省略され" +"た浮動小数リテラルは型推論されます。浮動小数のサフィックスは `f32`、`f64` の3" +"種類で、リテラルの末尾につけることで、対応する型の値を作り出すことができま" +"す。" #. type: Plain text -#: doc/tutorial.md:351 +#: doc/tutorial.md:341 msgid "The keywords `true` and `false` produce literals of type `bool`." msgstr "`true` キーワードと `false` キーワードは、`bool` 型のリテラルです。" #. type: Plain text -#: doc/tutorial.md:358 +#: doc/tutorial.md:348 +#, fuzzy +#| msgid "" +#| "Characters, the `char` type, are four-byte Unicode codepoints, whose " +#| "literals are written between single quotes, as in `'x'`. Just like C, " +#| "Rust understands a number of character escapes, using the backslash " +#| "character, such as `\\n`, `\\r`, and `\\t`. String literals, written " +#| "between double quotes, allow the same escape sequences. More on strings " +#| "[later](#vectors-and-strings)." msgid "" "Characters, the `char` type, are four-byte Unicode codepoints, whose " "literals are written between single quotes, as in `'x'`. Just like C, Rust " "understands a number of character escapes, using the backslash character, " "such as `\\n`, `\\r`, and `\\t`. String literals, written between double " -"quotes, allow the same escape sequences. More on strings [later](#vectors-" -"and-strings)." +"quotes, allow the same escape sequences, and do no other processing, unlike " +"languages such as PHP or shell." msgstr "" "文字は `char` 型で表され、4バイトの Unicode コードポイントに対応しています。" "`'x'` のように、文字をシングルクオートで囲んだものが文字リテラルです。C と同" @@ -928,18 +888,18 @@ msgstr "" "タと文字列) の章で述べます。" #. type: Plain text -#: doc/tutorial.md:360 +#: doc/tutorial.md:356 msgid "The nil type, written `()`, has a single value, also written `()`." msgstr "" "nil 型は `()` と表記されます。 nil 型の唯一の値も `()` と表記されます。" #. type: Plain text -#: doc/tutorial.md:362 +#: doc/tutorial.md:358 msgid "## Operators" msgstr "## 演算子" #. type: Plain text -#: doc/tutorial.md:367 +#: doc/tutorial.md:363 msgid "" "Rust's set of operators contains very few surprises. Arithmetic is done with " "`*`, `/`, `%`, `+`, and `-` (multiply, quotient, remainder, add, and " @@ -952,16 +912,20 @@ msgstr "" "ポートされています。" #. type: Plain text -#: doc/tutorial.md:370 +#: doc/tutorial.md:366 +#, fuzzy +#| msgid "" +#| "Note that, if applied to an integer value, `!` flips all the bits (like " +#| "`~` in C)." msgid "" -"Note that, if applied to an integer value, `!` flips all the bits (like `~` " -"in C)." +"Note that, if applied to an integer value, `!` flips all the bits (bitwise " +"NOT, like `~` in C)." msgstr "" "整数型に対して `!` 演算子を適用すると、ビット単位での反転操作 (C の `~` と同" "じ動作) が行われることに注意してください。" #. type: Plain text -#: doc/tutorial.md:374 +#: doc/tutorial.md:370 msgid "" "The comparison operators are the traditional `==`, `!=`, `<`, `>`, `<=`, and " "`>=`. Short-circuiting (lazy) boolean operators are written `&&` (and) and " @@ -972,21 +936,28 @@ msgstr "" "ります。" #. type: Plain text -#: doc/tutorial.md:379 +#: doc/tutorial.md:377 +#, fuzzy +#| msgid "" +#| "For type casting, Rust uses the binary `as` operator. It takes an " +#| "expression on the left side and a type on the right side and will, if a " +#| "meaningful conversion exists, convert the result of the expression to the " +#| "given type." msgid "" -"For type casting, Rust uses the binary `as` operator. It takes an " -"expression on the left side and a type on the right side and will, if a " +"For compile-time type casting, Rust uses the binary `as` operator. It takes " +"an expression on the left side and a type on the right side and will, if a " "meaningful conversion exists, convert the result of the expression to the " -"given type." +"given type. Generally, `as` is only used with the primitive numeric types or " +"pointers, and is not overloadable. [`transmute`][transmute] can be used for " +"unsafe C-like casting of same-sized types." msgstr "" "Rust では、型のキャストには二項演算子 `as` を使います。`as` 演算子は、左辺に" "式、右辺に型を取り、意味のある変換が可能な場合に限り、式の評価結果を指定され" "た型に変換します。" #. type: Plain text -#: doc/tutorial.md:385 -msgid "" -"~~~~ let x: f64 = 4.0; let y: uint = x as uint; assert!(y == 4u); ~~~~" +#: doc/tutorial.md:383 +msgid "~~~~ let x: f64 = 4.0; let y: uint = x as uint; assert!(y == 4u); ~~~~" msgstr "" "~~~~\n" "let x: f64 = 4.0;\n" @@ -994,82 +965,121 @@ msgstr "" "assert!(y == 4u);\n" "~~~~" +#. type: Plain text +#: doc/tutorial.md:385 +#, fuzzy +#| msgid "" +#| "[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz [win-exe]: " +#| "http://static.rust-lang.org/dist/rust-0.7-install.exe" +msgid "" +"[transmute]: http://static.rust-lang.org/doc/master/std/cast/fn.transmute." +"html" +msgstr "" +"[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz\n" +"[win-exe]: http://static.rust-lang.org/dist/rust-0.7-install.exe" + #. type: Plain text #: doc/tutorial.md:387 msgid "## Syntax extensions" msgstr "## 構文拡張" #. type: Plain text -#: doc/tutorial.md:394 -#, no-wrap +#: doc/tutorial.md:395 +#, fuzzy, no-wrap +#| msgid "" +#| "*Syntax extensions* are special forms that are not built into the language,\n" +#| "but are instead provided by the libraries. To make it clear to the reader when\n" +#| "a name refers to a syntax extension, the names of all syntax extensions end\n" +#| "with `!`. The standard library defines a few syntax extensions, the most\n" +#| "useful of which is `fmt!`, a `sprintf`-style text formatter that you will\n" +#| "often see in examples.\n" msgid "" "*Syntax extensions* are special forms that are not built into the language,\n" "but are instead provided by the libraries. To make it clear to the reader when\n" "a name refers to a syntax extension, the names of all syntax extensions end\n" "with `!`. The standard library defines a few syntax extensions, the most\n" -"useful of which is `fmt!`, a `sprintf`-style text formatter that you will\n" -"often see in examples.\n" +"useful of which is [`format!`][fmt], a `sprintf`-like text formatter that you\n" +"will often see in examples, and its related family of macros: `print!`,\n" +"`println!`, and `write!`.\n" msgstr "**構文拡張** *(Syntax extensions)* は言語組み込みではなく、ライブラリにより提供される特殊形式 (スペシャルフォーム) です。プログラム中に構文拡張が登場したことを外見上明確にするため、構文拡張の名前には末尾に `!` をつけますなければなりません。標準ライブラリではいくつかの構文拡張が定義されていますが、その中でも最も有用なのは `fmt!` です。`fmt!` は `sprintf`スタイルの書式整形を行うもので、後のコード例の中でも何度か見かけることになるでしょう。\n" #. type: Plain text -#: doc/tutorial.md:398 +#: doc/tutorial.md:399 +#, fuzzy +#| msgid "" +#| "`fmt!` supports most of the directives that [printf][pf] supports, but " +#| "unlike printf, will give you a compile-time error when the types of the " +#| "directives don't match the types of the arguments." msgid "" -"`fmt!` supports most of the directives that [printf][pf] supports, but " -"unlike printf, will give you a compile-time error when the types of the " -"directives don't match the types of the arguments." +"`format!` draws syntax from Python, but contains many of the same principles " +"that [printf][pf] has. Unlike printf, `format!` will give you a compile-time " +"error when the types of the directives don't match the types of the " +"arguments." msgstr "" "`fmt!` は、[`printf`][pf] がサポートするほとんどのディレクティブ (フォーマッ" "ト指定子) をサポートしますが、`printf` とは異なり、ディレクティブと引数の型が" "一致しない場合はコンパイルエラーとなります。" #. type: Plain text -#: doc/tutorial.md:401 +#: doc/tutorial.md:402 msgid "~~~~ # let mystery_object = ();" msgstr "" "~~~~\n" "# let mystery_object = ();" #. type: Plain text -#: doc/tutorial.md:403 -msgid "println(fmt!(\"%s is %d\", \"the answer\", 43));" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:407 +#: doc/tutorial.md:409 +#, fuzzy +#| msgid "" +#| "// %? will conveniently print any type println(fmt!(\"what is this thing: " +#| "%?\", mystery_object)); ~~~~" msgid "" -"// %? will conveniently print any type println(fmt!(\"what is this thing: %?" -"\", mystery_object)); ~~~~" +"// {:?} will conveniently print any type println!(\"what is this thing: " +"{:?}\", mystery_object); ~~~~" msgstr "" "// %? は任意の型を表示できる便利なディレクティブです\n" "println(fmt!(\"what is this thing: %?\", mystery_object));\n" "~~~~" #. type: Plain text -#: doc/tutorial.md:409 -msgid "[pf]: http://en.cppreference.com/w/cpp/io/c/fprintf" +#: doc/tutorial.md:412 +#, fuzzy +#| msgid "" +#| "[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz [win-exe]: " +#| "http://static.rust-lang.org/dist/rust-0.7-install.exe" +msgid "" +"[pf]: http://en.cppreference.com/w/cpp/io/c/fprintf [fmt]: http://static." +"rust-lang.org/doc/master/std/fmt/index.html" msgstr "" +"[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz\n" +"[win-exe]: http://static.rust-lang.org/dist/rust-0.7-install.exe" #. type: Plain text -#: doc/tutorial.md:411 +#: doc/tutorial.md:416 +#, fuzzy +#| msgid "" +#| "You can define your own syntax extensions with the macro system. For " +#| "details, see the [macro tutorial][macros]." msgid "" "You can define your own syntax extensions with the macro system. For " -"details, see the [macro tutorial][macros]." +"details, see the [macro tutorial][macros]. Note that macro definition is " +"currently considered an unstable feature." msgstr "" "マクロシステムを利用すれば、独自に構文拡張を定義することも可能です。詳細は " "[マクロチュートリアル][macros] を参照してください。" #. type: Plain text -#: doc/tutorial.md:413 +#: doc/tutorial.md:418 msgid "# Control structures" msgstr "# 制御構造" #. type: Plain text -#: doc/tutorial.md:415 +#: doc/tutorial.md:420 msgid "## Conditionals" msgstr "## 条件式" #. type: Plain text -#: doc/tutorial.md:419 +#: doc/tutorial.md:424 msgid "" "We've seen `if` expressions a few times already. To recap, braces are " "compulsory, an `if` can have an optional `else` clause, and multiple `if`/" @@ -1080,22 +1090,7 @@ msgstr "" "構文は互いに連鎖できる、ということでした。" #. type: Plain text -#: doc/tutorial.md:429 -#, no-wrap -msgid "" -"~~~~\n" -"if false {\n" -" println(\"that's odd\");\n" -"} else if true {\n" -" println(\"right\");\n" -"} else {\n" -" println(\"neither true nor false\");\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:434 +#: doc/tutorial.md:439 msgid "" "The condition given to an `if` construct *must* be of type `bool` (no " "implicit conversion happens). If the arms are blocks that have a value, this " @@ -1107,25 +1102,12 @@ msgstr "" "るものは、すべて同じ型の値でなければなりません。" #. type: Plain text -#: doc/tutorial.md:442 -#, no-wrap -msgid "" -"~~~~\n" -"fn signum(x: int) -> int {\n" -" if x < 0 { -1 }\n" -" else if x > 0 { 1 }\n" -" else { return 0 }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:444 +#: doc/tutorial.md:449 msgid "## Pattern matching" msgstr "## パターンマッチ" #. type: Plain text -#: doc/tutorial.md:450 +#: doc/tutorial.md:455 msgid "" "Rust's `match` construct is a generalized, cleaned-up version of C's " "`switch` construct. You provide it with a value and a number of *arms*, each " @@ -1142,22 +1124,7 @@ msgstr "" "ターンとの比較は行われません。" #. type: Plain text -#: doc/tutorial.md:460 -#, no-wrap -msgid "" -"~~~~\n" -"# let my_number = 1;\n" -"match my_number {\n" -" 0 => println(\"zero\"),\n" -" 1 | 2 => println(\"one or two\"),\n" -" 3..10 => println(\"three to ten\"),\n" -" _ => println(\"something else\")\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:464 +#: doc/tutorial.md:469 msgid "" "Unlike in C, there is no \"falling through\" between arms: only one arm " "executes, and it doesn't have to explicitly `break` out of the construct " @@ -1168,7 +1135,17 @@ msgstr "" "する必要はありません。" #. type: Plain text -#: doc/tutorial.md:474 +#: doc/tutorial.md:478 +#, fuzzy +#| msgid "" +#| "A `match` arm consists of a *pattern*, then an arrow `=>`, followed by an " +#| "*action* (expression). Literals are valid patterns and match only their " +#| "own value. A single arm may match multiple different patterns by " +#| "combining them with the pipe operator (`|`), so long as every pattern " +#| "binds the same set of variables. Ranges of numeric literal patterns can " +#| "be expressed with two dots, as in `M..N`. The underscore (`_`) is a " +#| "wildcard pattern that matches any single value. The asterisk (`*`) is a " +#| "different wildcard that can match one or more fields in an `enum` variant." msgid "" "A `match` arm consists of a *pattern*, then an arrow `=>`, followed by an " "*action* (expression). Literals are valid patterns and match only their own " @@ -1176,8 +1153,8 @@ msgid "" "with the pipe operator (`|`), so long as every pattern binds the same set of " "variables. Ranges of numeric literal patterns can be expressed with two " "dots, as in `M..N`. The underscore (`_`) is a wildcard pattern that matches " -"any single value. The asterisk (`*`) is a different wildcard that can match " -"one or more fields in an `enum` variant." +"any single value. (`..`) is a different wildcard that can match one or more " +"fields in an `enum` variant." msgstr "" "`match` の arm は、 **パターン** および矢印 `=>` と、それらに続く **アクショ" "ン** (式) から構成されます。リテラルはパターンとして利用可能で、リテラル自身" @@ -1193,7 +1170,7 @@ msgstr "" "す)。" #. type: Plain text -#: doc/tutorial.md:479 +#: doc/tutorial.md:483 msgid "" "The patterns in a match arm are followed by a fat arrow, `=>`, then an " "expression to evaluate. Each case is separated by commas. It's often " @@ -1204,20 +1181,7 @@ msgstr "" "を記述することも可能で、その場合は arm 末尾のカンマを省略することが可能です。" #. type: Plain text -#: doc/tutorial.md:487 -#, no-wrap -msgid "" -"~~~\n" -"# let my_number = 1;\n" -"match my_number {\n" -" 0 => { println(\"zero\") }\n" -" _ => { println(\"something else\") }\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:492 +#: doc/tutorial.md:496 msgid "" "`match` constructs must be *exhaustive*: they must have an arm covering " "every possible case. For example, the typechecker would reject the previous " @@ -1229,7 +1193,7 @@ msgstr "" "ンの arm を削除した場合、型検査によりコンパイルエラーとされます。" #. type: Plain text -#: doc/tutorial.md:496 +#: doc/tutorial.md:500 msgid "" "A powerful application of pattern matching is *destructuring*: matching in " "order to bind names to the contents of data types." @@ -1238,39 +1202,28 @@ msgstr "" "造化代入とは、データ型内部の値を名前に束縛 (bind) することです。" #. type: Plain text -#: doc/tutorial.md:500 +#: doc/tutorial.md:504 msgid "" -"> ***Note:*** The following code makes use of tuples (`(f64, f64)`) " -"which > are explained in section 5.3. For now you can think of tuples as a " -"list of > items." +"> ***Note:*** The following code makes use of tuples (`(f64, f64)`) which > " +"are explained in section 5.3. For now you can think of tuples as a list of > " +"items." msgstr "" -"> ***注意:*** 以下のコード例では5.3 節で説明されるタプル (`(f64, f64)`) " -"を使っています。現時点では、タプルは項目のリストのようなものだとみなしてくだ" -"さい。" +"> ***注意:*** 以下のコード例では5.3 節で説明されるタプル (`(f64, f64)`) を" +"使っています。現時点では、タプルは項目のリストのようなものだとみなしてくださ" +"い。" #. type: Plain text -#: doc/tutorial.md:513 -#, no-wrap -msgid "" -"~~~~\n" -"use std::f64;\n" -"use std::num::atan;\n" -"fn angle(vector: (f64, f64)) -> f64 {\n" -" let pi = f64::consts::pi;\n" -" match vector {\n" -" (0f, y) if y < 0f => 1.5 * pi,\n" -" (0f, y) => 0.5 * pi,\n" -" (x, y) => atan(y / x)\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:519 +#: doc/tutorial.md:523 +#, fuzzy +#| msgid "" +#| "A variable name in a pattern matches any value, *and* binds that name to " +#| "the value of the matched value inside of the arm's action. Thus, `(0f, " +#| "y)` matches any tuple whose first element is zero, and binds `y` to the " +#| "second element. `(x, y)` matches any two-element tuple, and binds both " +#| "elements to variables." msgid "" "A variable name in a pattern matches any value, *and* binds that name to the " -"value of the matched value inside of the arm's action. Thus, `(0f, y)` " +"value of the matched value inside of the arm's action. Thus, `(0.0, y)` " "matches any tuple whose first element is zero, and binds `y` to the second " "element. `(x, y)` matches any two-element tuple, and binds both elements to " "variables." @@ -1282,7 +1235,7 @@ msgstr "" "数に束縛されます。" #. type: Plain text -#: doc/tutorial.md:526 +#: doc/tutorial.md:530 msgid "" "Any `match` arm can have a guard clause (written `if EXPR`), called a " "*pattern guard*, which is an expression of type `bool` that determines, " @@ -1298,7 +1251,7 @@ msgstr "" "用例が示されています。" #. type: Plain text -#: doc/tutorial.md:531 +#: doc/tutorial.md:535 msgid "" "You've already seen simple `let` bindings, but `let` is a little fancier " "than you've been led to believe. It, too, supports destructuring patterns. " @@ -1310,7 +1263,7 @@ msgstr "" "定義することが可能です。" #. type: Plain text -#: doc/tutorial.md:536 +#: doc/tutorial.md:540 msgid "" "~~~~ # fn get_tuple_of_two_ints() -> (int, int) { (1, 1) } let (a, b) = " "get_tuple_of_two_ints(); ~~~~" @@ -1321,7 +1274,7 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:540 +#: doc/tutorial.md:544 msgid "" "Let bindings only work with _irrefutable_ patterns: that is, patterns that " "can never fail to match. This excludes `let` from matching literals and most " @@ -1333,16 +1286,22 @@ msgstr "" "ん。" #. type: Plain text -#: doc/tutorial.md:542 +#: doc/tutorial.md:546 msgid "## Loops" msgstr "## ループ" #. type: Plain text -#: doc/tutorial.md:547 +#: doc/tutorial.md:551 +#, fuzzy +#| msgid "" +#| "`while` denotes a loop that iterates as long as its given condition " +#| "(which must have type `bool`) evaluates to `true`. Inside a loop, the " +#| "keyword `break` aborts the loop, and `loop` aborts the current iteration " +#| "and continues with the next." msgid "" "`while` denotes a loop that iterates as long as its given condition (which " "must have type `bool`) evaluates to `true`. Inside a loop, the keyword " -"`break` aborts the loop, and `loop` aborts the current iteration and " +"`break` aborts the loop, and `continue` aborts the current iteration and " "continues with the next." msgstr "" "`while` は、与えられた条件 (`bool` 型の値でなければならない) が `true` と評価" @@ -1351,19 +1310,7 @@ msgstr "" "ション) を中断し、次の繰り返しを実行します。" #. type: Plain text -#: doc/tutorial.md:554 -#, no-wrap -msgid "" -"~~~~\n" -"let mut cake_amount = 8;\n" -"while cake_amount > 0 {\n" -" cake_amount -= 1;\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:556 +#: doc/tutorial.md:560 msgid "" "`loop` denotes an infinite loop, and is the preferred way of writing `while " "true`:" @@ -1372,39 +1319,24 @@ msgstr "" "が推奨されています。" #. type: Plain text -#: doc/tutorial.md:566 -#, no-wrap -msgid "" -"~~~~\n" -"use std::int;\n" -"let mut x = 5;\n" -"loop {\n" -" x += x - 3;\n" -" if x % 5 == 0 { break; }\n" -" println(int::to_str(x));\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:569 +#: doc/tutorial.md:572 msgid "" "This code prints out a weird sequence of numbers and stops as soon as it " "finds one that can be divided by five." msgstr "このコードは 5 で割り切れる数値が現れるまで、数値を出力し続けます。" #. type: Plain text -#: doc/tutorial.md:571 +#: doc/tutorial.md:574 msgid "# Data structures" msgstr "# データ構造" #. type: Plain text -#: doc/tutorial.md:573 +#: doc/tutorial.md:576 msgid "## Structs" msgstr "## 構造体" #. type: Plain text -#: doc/tutorial.md:578 +#: doc/tutorial.md:581 msgid "" "Rust struct types must be declared before they are used using the `struct` " "syntax: `struct Name { field1: T1, field2: T2 [, ...] }`, where `T1`, " @@ -1417,7 +1349,7 @@ msgstr "" "うに、構造体宣言から `struct` を取り除いたものと同じ構文で作成します。" #. type: Plain text -#: doc/tutorial.md:582 +#: doc/tutorial.md:585 msgid "" "Structs are quite similar to C structs and are even laid out the same way in " "memory (so you can read from a Rust struct in C, and vice-versa). Use the " @@ -1428,23 +1360,15 @@ msgstr "" "フィールドにアクセスするには、 `mypoint.x` のように、ドット演算子を用います。" #. type: Plain text -#: doc/tutorial.md:589 -#, no-wrap +#: doc/tutorial.md:595 +#, fuzzy +#| msgid "" +#| "Inherited mutability means that any field of a struct may be mutable, if " +#| "the struct is in a mutable slot (or a field of a struct in a mutable " +#| "slot, and so forth)." msgid "" -"~~~~\n" -"struct Point {\n" -" x: f64,\n" -" y: f64\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:593 -msgid "" -"Inherited mutability means that any field of a struct may be mutable, if the " -"struct is in a mutable slot (or a field of a struct in a mutable slot, and " -"so forth)." +"Structs have \"inherited mutability\", which means that any field of a " +"struct may be mutable, if the struct is in a mutable slot." msgstr "" "継承ミュータビリティ (inherited mutability) とは、構造体自体がミュータブルな" "スロットに配置されている場合、構造体のすべてのフィールドもミュータブルになる" @@ -1452,7 +1376,7 @@ msgstr "" "フィールドに配置された構造体のフィールドもまた、ミュータブルになります) 。" #. type: Plain text -#: doc/tutorial.md:597 +#: doc/tutorial.md:599 msgid "" "With a value (say, `mypoint`) of such a type in a mutable location, you can " "do `mypoint.y += 1.0`. But in an immutable location, such an assignment to a " @@ -1464,10 +1388,10 @@ msgstr "" "このような代入操作は型エラーとなります。" #. type: Plain text -#: doc/tutorial.md:602 +#: doc/tutorial.md:604 msgid "" -"~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = " -"Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" +"~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point " +"{ x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" msgstr "" "~~~~ {.xfail-test}\n" "# struct Point { x: f64, y: f64 }\n" @@ -1475,7 +1399,7 @@ msgstr "" "let origin = Point { x: 0.0, y: 0.0 };" #. type: Plain text -#: doc/tutorial.md:606 +#: doc/tutorial.md:608 msgid "" "mypoint.y += 1.0; // mypoint is mutable, and its fields as well origin.y += " "1.0; // ERROR: assigning to immutable field ~~~~" @@ -1486,7 +1410,7 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:609 +#: doc/tutorial.md:611 msgid "" "`match` patterns destructure structs. The basic syntax is `Name { fieldname: " "pattern, ... }`:" @@ -1495,25 +1419,39 @@ msgstr "" "は、 `Name { fieldname: pattern, ... }` という構文を持ちます。" #. type: Plain text -#: doc/tutorial.md:618 -#, no-wrap +#: doc/tutorial.md:620 +#, fuzzy, no-wrap +#| msgid "~~~ # struct Point { x: f64, y: f64 } let point = &@~Point { x: 10f, y: 20f }; println(fmt!(\"%f\", point.x)); ~~~" msgid "" "~~~~\n" "# struct Point { x: f64, y: f64 }\n" "# let mypoint = Point { x: 0.0, y: 0.0 };\n" "match mypoint {\n" -" Point { x: 0.0, y: yy } => { println(yy.to_str()); }\n" -" Point { x: xx, y: yy } => { println(xx.to_str() + \" \" + yy.to_str()); }\n" +" Point { x: 0.0, y: yy } => println!(\"{}\", yy),\n" +" Point { x: xx, y: yy } => println!(\"{} {}\", xx, yy),\n" "}\n" "~~~~\n" msgstr "" +"~~~\n" +"# struct Point { x: f64, y: f64 }\n" +"let point = &@~Point { x: 10f, y: 20f };\n" +"println(fmt!(\"%f\", point.x));\n" +"~~~" #. type: Plain text -#: doc/tutorial.md:625 +#: doc/tutorial.md:627 +#, fuzzy +#| msgid "" +#| "In general, the field names of a struct do not have to appear in the same " +#| "order they appear in the type. When you are not interested in all the " +#| "fields of a struct, a struct pattern may end with `, _` (as in `Name " +#| "{ field1, _ }`) to indicate that you're ignoring all other fields. " +#| "Additionally, struct fields have a shorthand matching form that simply " +#| "reuses the field name as the binding name." msgid "" "In general, the field names of a struct do not have to appear in the same " "order they appear in the type. When you are not interested in all the fields " -"of a struct, a struct pattern may end with `, _` (as in `Name { field1, _ }" +"of a struct, a struct pattern may end with `, ..` (as in `Name { field1, .. }" "`) to indicate that you're ignoring all other fields. Additionally, struct " "fields have a shorthand matching form that simply reuses the field name as " "the binding name." @@ -1524,25 +1462,31 @@ msgstr "" "フィールドを無視することができます。" #. type: Plain text -#: doc/tutorial.md:633 -#, no-wrap +#: doc/tutorial.md:635 +#, fuzzy, no-wrap +#| msgid "~~~ # struct Point { x: f64, y: f64 } let point = &@~Point { x: 10f, y: 20f }; println(fmt!(\"%f\", point.x)); ~~~" msgid "" "~~~\n" "# struct Point { x: f64, y: f64 }\n" "# let mypoint = Point { x: 0.0, y: 0.0 };\n" "match mypoint {\n" -" Point { x, _ } => { println(x.to_str()) }\n" +" Point { x, .. } => println!(\"{}\", x),\n" "}\n" "~~~\n" msgstr "" +"~~~\n" +"# struct Point { x: f64, y: f64 }\n" +"let point = &@~Point { x: 10f, y: 20f };\n" +"println(fmt!(\"%f\", point.x));\n" +"~~~" #. type: Plain text -#: doc/tutorial.md:635 +#: doc/tutorial.md:637 msgid "## Enums" msgstr "## 列挙型" #. type: Plain text -#: doc/tutorial.md:638 +#: doc/tutorial.md:640 msgid "" "Enums are datatypes that have several alternate representations. For " "example, consider the type shown earlier:" @@ -1551,40 +1495,41 @@ msgstr "" "いて考えます。" #. type: Plain text -#: doc/tutorial.md:646 -#, no-wrap -msgid "" -"~~~~\n" -"# struct Point { x: f64, y: f64 }\n" -"enum Shape {\n" -" Circle(Point, f64),\n" -" Rectangle(Point, Point)\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:652 +#: doc/tutorial.md:654 +#, fuzzy +#| msgid "" +#| "A value of this type is either a `Circle`, in which case it contains a " +#| "`Point` struct and a `f64`, or a `Rectangle`, in which case it contains " +#| "two `Point` structs. The run-time representation of such a value includes " +#| "an identifier of the actual form that it holds, much like the \"tagged " +#| "union\" pattern in C, but with better static guarantees." msgid "" "A value of this type is either a `Circle`, in which case it contains a " -"`Point` struct and a `f64`, or a `Rectangle`, in which case it contains two " +"`Point` struct and a f64, or a `Rectangle`, in which case it contains two " "`Point` structs. The run-time representation of such a value includes an " "identifier of the actual form that it holds, much like the \"tagged union\" " "pattern in C, but with better static guarantees." msgstr "" -"この型の値は、`Point` 構造体と `f64` を含む `Circle` か、2つの `Point` 構造" -"体を含む `Rectangle` のどちらかになります。列挙型の値の実行時表現には、値がど" -"の形式をとっているのか示す識別子が含まれます。この表現方法は C の \"タグ付き" -"共用体\" と非常によく似ていますが、Rust の列挙型はコンパイラにより値の正当性" -"が静的に保証されるという点でより良いものとなっています。" +"この型の値は、`Point` 構造体と `f64` を含む `Circle` か、2つの `Point` 構造体" +"を含む `Rectangle` のどちらかになります。列挙型の値の実行時表現には、値がどの" +"形式をとっているのか示す識別子が含まれます。この表現方法は C の \"タグ付き共" +"用体\" と非常によく似ていますが、Rust の列挙型はコンパイラにより値の正当性が" +"静的に保証されるという点でより良いものとなっています。" #. type: Plain text -#: doc/tutorial.md:658 +#: doc/tutorial.md:660 +#, fuzzy +#| msgid "" +#| "The above declaration will define a type `Shape` that can refer to such " +#| "shapes, and two functions, `Circle` and `Rectangle`, which can be used to " +#| "construct values of the type (taking arguments of the specified types). " +#| "So `Circle(Point { x: 0f, y: 0f }, 10f)` is the way to create a new " +#| "circle." msgid "" "The above declaration will define a type `Shape` that can refer to such " "shapes, and two functions, `Circle` and `Rectangle`, which can be used to " "construct values of the type (taking arguments of the specified types). So " -"`Circle(Point { x: 0f, y: 0f }, 10f)` is the way to create a new circle." +"`Circle(Point { x: 0.0, y: 0.0 }, 10.0)` is the way to create a new circle." msgstr "" "上記の宣言は `Shape` 型と `Circle` と `Rectangle` という2つの関数も同時に定義" "します。これらの関数により、関数名に対応した `Shape` 型の値を構築することがで" @@ -1593,7 +1538,7 @@ msgstr "" "ことができます。" #. type: Plain text -#: doc/tutorial.md:661 +#: doc/tutorial.md:663 msgid "" "Enum variants need not have parameters. This `enum` declaration, for " "example, is equivalent to a C enum:" @@ -1602,21 +1547,7 @@ msgstr "" "言は C の列挙型と等価です。" #. type: Plain text -#: doc/tutorial.md:670 -#, no-wrap -msgid "" -"~~~~\n" -"enum Direction {\n" -" North,\n" -" East,\n" -" South,\n" -" West\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:673 +#: doc/tutorial.md:675 msgid "" "This declaration defines `North`, `East`, `South`, and `West` as constants, " "all of which have type `Direction`." @@ -1625,7 +1556,7 @@ msgstr "" "す。" #. type: Plain text -#: doc/tutorial.md:677 +#: doc/tutorial.md:679 msgid "" "When an enum is C-like (that is, when none of the variants have parameters), " "it is possible to explicitly set the discriminator values to a constant " @@ -1635,20 +1566,7 @@ msgstr "" "識別値 (discriminator value) を明示的に指定することも可能です。" #. type: Plain text -#: doc/tutorial.md:685 -#, no-wrap -msgid "" -"~~~~\n" -"enum Color {\n" -" Red = 0xff0000,\n" -" Green = 0x00ff00,\n" -" Blue = 0x0000ff\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:690 +#: doc/tutorial.md:692 msgid "" "If an explicit discriminator is not specified for a variant, the value " "defaults to the value of the previous variant plus one. If the first variant " @@ -1660,7 +1578,7 @@ msgstr "" "で言うと、 `North` は 0、 `East` は 1、 `South` は 2、`West` は3となります。" #. type: Plain text -#: doc/tutorial.md:693 +#: doc/tutorial.md:695 msgid "" "When an enum is C-like, you can apply the `as` cast operator to convert it " "to its discriminator value as an `int`." @@ -1669,7 +1587,7 @@ msgstr "" "値へ変換することができます。" #. type: Plain text -#: doc/tutorial.md:697 +#: doc/tutorial.md:699 msgid "" "For enum types with multiple variants, destructuring is the only way to get " "at their contents. All variant constructors can be used as patterns, as in " @@ -1680,27 +1598,15 @@ msgstr "" "トのコンストラクタは、パターンとして用いることもできます。" #. type: Plain text -#: doc/tutorial.md:709 -#, no-wrap -msgid "" -"~~~~\n" -"use std::f64;\n" -"# struct Point {x: f64, y: f64}\n" -"# enum Shape { Circle(Point, f64), Rectangle(Point, Point) }\n" -"fn area(sh: Shape) -> f64 {\n" -" match sh {\n" -" Circle(_, size) => f64::consts::pi * size * size,\n" -" Rectangle(Point { x, y }, Point { x: x2, y: y2 }) => (x2 - x) * (y2 - y)\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:714 +#: doc/tutorial.md:716 +#, fuzzy +#| msgid "" +#| "You can write a lone `_` to ignore an individual field, and can ignore " +#| "all fields of a variant like: `Circle(*)`. As in their introduction form, " +#| "nullary enum patterns are written without parentheses." msgid "" "You can write a lone `_` to ignore an individual field, and can ignore all " -"fields of a variant like: `Circle(*)`. As in their introduction form, " +"fields of a variant like: `Circle(..)`. As in their introduction form, " "nullary enum patterns are written without parentheses." msgstr "" "パターンマッチの際に、特定のフィールドに対するマッチングが不要な場合、無視し" @@ -1710,63 +1616,28 @@ msgstr "" "い形式で記述します。" #. type: Plain text -#: doc/tutorial.md:727 -#, no-wrap -msgid "" -"~~~~\n" -"# struct Point { x: f64, y: f64 }\n" -"# enum Direction { North, East, South, West }\n" -"fn point_from_direction(dir: Direction) -> Point {\n" -" match dir {\n" -" North => Point { x: 0f, y: 1f },\n" -" East => Point { x: 1f, y: 0f },\n" -" South => Point { x: 0f, y: -1f },\n" -" West => Point { x: -1f, y: 0f }\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:729 +#: doc/tutorial.md:731 msgid "Enum variants may also be structs. For example:" msgstr "以下の例のように、列挙型バリアントを構造体にすることも可能です。" #. type: Plain text -#: doc/tutorial.md:747 -#, no-wrap -msgid "" -"~~~~\n" -"use std::f64;\n" -"# struct Point { x: f64, y: f64 }\n" -"# fn square(x: f64) -> f64 { x * x }\n" -"enum Shape {\n" -" Circle { center: Point, radius: f64 },\n" -" Rectangle { top_left: Point, bottom_right: Point }\n" -"}\n" -"fn area(sh: Shape) -> f64 {\n" -" match sh {\n" -" Circle { radius: radius, _ } => f64::consts::pi * square(radius),\n" -" Rectangle { top_left: top_left, bottom_right: bottom_right } => {\n" -" (bottom_right.x - top_left.x) * (bottom_right.y - top_left.y)\n" -" }\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:749 +#: doc/tutorial.md:755 msgid "## Tuples" msgstr "## タプル" #. type: Plain text -#: doc/tutorial.md:754 +#: doc/tutorial.md:760 +#, fuzzy +#| msgid "" +#| "Tuples in Rust behave exactly like structs, except that their fields do " +#| "not have names. Thus, you cannot access their fields with dot notation. " +#| "Tuples can have any arity except for 0 (though you may consider unit, " +#| "`()`, as the empty tuple if you like)." msgid "" "Tuples in Rust behave exactly like structs, except that their fields do not " "have names. Thus, you cannot access their fields with dot notation. Tuples " -"can have any arity except for 0 (though you may consider unit, `()`, as the " -"empty tuple if you like)." +"can have any arity (number of elements) except for 0 (though you may " +"consider unit, `()`, as the empty tuple if you like)." msgstr "" "Rust のタプルは、フィールドが名前を持たないという点以外は、構造体と同じように" "振る舞います。フィールド名が存在しないため、ドット記法を使ってタプルのフィー" @@ -1774,24 +1645,40 @@ msgstr "" "す (必要ならば、ユニット型 `()` を 0 要素のタプルと見なすことはできます。)" #. type: Plain text -#: doc/tutorial.md:761 -#, no-wrap +#: doc/tutorial.md:767 +#, fuzzy, no-wrap +#| msgid "" +#| "For example:\n" +#| "~~~~\n" +#| "struct MyTup(int, int, f64);\n" +#| "let mytup: MyTup = MyTup(10, 20, 30.0);\n" +#| "match mytup {\n" +#| " MyTup(a, b, c) => info!(a + b + (c as int))\n" +#| "}\n" +#| "~~~~\n" msgid "" "~~~~\n" "let mytup: (int, int, f64) = (10, 20, 30.0);\n" "match mytup {\n" -" (a, b, c) => info!(a + b + (c as int))\n" +" (a, b, c) => info!(\"{}\", a + b + (c as int))\n" "}\n" "~~~~\n" msgstr "" +"~~~~\n" +"struct MyTup(int, int, f64);\n" +"let mytup: MyTup = MyTup(10, 20, 30.0);\n" +"match mytup {\n" +" MyTup(a, b, c) => info!(a + b + (c as int))\n" +"}\n" +"~~~~\n" #. type: Plain text -#: doc/tutorial.md:763 +#: doc/tutorial.md:769 msgid "## Tuple structs" msgstr "## タプル構造体" #. type: Plain text -#: doc/tutorial.md:768 +#: doc/tutorial.md:774 msgid "" "Rust also has _tuple structs_, which behave like both structs and tuples, " "except that, unlike tuples, tuple structs have names (so `Foo(1, 2)` has a " @@ -1803,34 +1690,37 @@ msgstr "" "`Foo(1, 2)` と `Bar(1, 2)` は異なる型になります。) しかし、タプル構造体の __" "フィールド__ は名前を持ちません。" -#. type: Plain text -#: doc/tutorial.md:777 -#, no-wrap -msgid "" -"For example:\n" -"~~~~\n" -"struct MyTup(int, int, f64);\n" -"let mytup: MyTup = MyTup(10, 20, 30.0);\n" -"match mytup {\n" -" MyTup(a, b, c) => info!(a + b + (c as int))\n" -"}\n" -"~~~~\n" -msgstr "" -"~~~~\n" -"struct MyTup(int, int, f64);\n" -"let mytup: MyTup = MyTup(10, 20, 30.0);\n" -"match mytup {\n" -" MyTup(a, b, c) => info!(a + b + (c as int))\n" -"}\n" -"~~~~\n" - -#. type: Plain text -#: doc/tutorial.md:779 -msgid "" -msgstr "" - #. type: Plain text #: doc/tutorial.md:784 +#, fuzzy, no-wrap +#| msgid "" +#| "For example:\n" +#| "~~~~\n" +#| "struct MyTup(int, int, f64);\n" +#| "let mytup: MyTup = MyTup(10, 20, 30.0);\n" +#| "match mytup {\n" +#| " MyTup(a, b, c) => info!(a + b + (c as int))\n" +#| "}\n" +#| "~~~~\n" +msgid "" +"~~~~\n" +"struct MyTup(int, int, f64);\n" +"let mytup: MyTup = MyTup(10, 20, 30.0);\n" +"match mytup {\n" +" MyTup(a, b, c) => info!(\"{}\", a + b + (c as int))\n" +"}\n" +"~~~~\n" +msgstr "" +"~~~~\n" +"struct MyTup(int, int, f64);\n" +"let mytup: MyTup = MyTup(10, 20, 30.0);\n" +"match mytup {\n" +" MyTup(a, b, c) => info!(a + b + (c as int))\n" +"}\n" +"~~~~\n" + +#. type: Plain text +#: doc/tutorial.md:791 msgid "" "There is a special case for tuple structs with a single field, which are " "sometimes called \"newtypes\" (after Haskell's \"newtype\" feature). These " @@ -1843,7 +1733,7 @@ msgstr "" "きます。この新しい型は、元にした型とは異なった型として扱われます。" #. type: Plain text -#: doc/tutorial.md:788 +#: doc/tutorial.md:795 msgid "~~~~ struct GizmoId(int); ~~~~" msgstr "" "~~~~\n" @@ -1851,37 +1741,20 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:791 -msgid "" -"For convenience, you can extract the contents of such a struct with the " -"dereference (`*`) unary operator:" -msgstr "" -"便宜上、デリファレンス単項演算子 (`*`) により、タプル構造体の内容を展開するこ" -"とが可能です。" - -#. type: Plain text -#: doc/tutorial.md:797 -msgid "" -"~~~~ # struct GizmoId(int); let my_gizmo_id: GizmoId = GizmoId(10); let " -"id_int: int = *my_gizmo_id; ~~~~" -msgstr "" -"~~~~\n" -"# struct GizmoId(int);\n" -"let my_gizmo_id: GizmoId = GizmoId(10);\n" -"let id_int: int = *my_gizmo_id;\n" -"~~~~" - -#. type: Plain text -#: doc/tutorial.md:800 +#: doc/tutorial.md:798 +#, fuzzy +#| msgid "" +#| "Types like this can be useful to differentiate between data that have the " +#| "same type but must be used in different ways." msgid "" "Types like this can be useful to differentiate between data that have the " -"same type but must be used in different ways." +"same underlying type but must be used in different ways." msgstr "" "このような型は、型は同一でも、それぞれ全く異なる扱い方をしなければならない" "データを扱う場合に用いると便利です。" #. type: Plain text -#: doc/tutorial.md:805 +#: doc/tutorial.md:803 msgid "~~~~ struct Inches(int); struct Centimeters(int); ~~~~" msgstr "" "~~~~\n" @@ -1890,37 +1763,62 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:808 +#: doc/tutorial.md:807 +#, fuzzy +#| msgid "" +#| "The above definitions allow for a simple way for programs to avoid " +#| "confusing numbers that correspond to different units." msgid "" "The above definitions allow for a simple way for programs to avoid confusing " -"numbers that correspond to different units." +"numbers that correspond to different units. Their integer values can be " +"extracted with pattern matching:" msgstr "" "上記のような単純な定義により、異なる単位を持つ数値を混同することなく扱うこと" "が可能になります。" #. type: Plain text #: doc/tutorial.md:810 +#, fuzzy +#| msgid "~~~~ struct GizmoId(int); ~~~~" +msgid "~~~ # struct Inches(int);" +msgstr "" +"~~~~\n" +"struct GizmoId(int);\n" +"~~~~" + +#. type: Plain text +#: doc/tutorial.md:817 msgid "# Functions" msgstr "# 関数" #. type: Plain text -#: doc/tutorial.md:818 +#: doc/tutorial.md:825 +#, fuzzy +#| msgid "" +#| "We've already seen several function definitions. Like all other static " +#| "declarations, such as `type`, functions can be declared both at the top " +#| "level and inside other functions (or in modules, which we'll come back to " +#| "[later](#modules-and-crates)). The `fn` keyword introduces a function. A " +#| "function has an argument list, which is a parenthesized list of `expr: " +#| "type` pairs separated by commas. An arrow `->` separates the argument " +#| "list and the function's return type." msgid "" "We've already seen several function definitions. Like all other static " "declarations, such as `type`, functions can be declared both at the top " "level and inside other functions (or in modules, which we'll come back to " -"[later](#modules-and-crates)). The `fn` keyword introduces a function. A " -"function has an argument list, which is a parenthesized list of `expr: type` " -"pairs separated by commas. An arrow `->` separates the argument list and the " -"function's return type." +"[later](#crates-and-the-module-system)). The `fn` keyword introduces a " +"function. A function has an argument list, which is a parenthesized list of " +"`name: type` pairs separated by commas. An arrow `->` separates the argument " +"list and the function's return type." msgstr "" "関数定義はこれまでに何度か登場しています。他の静的な宣言 (`type` など)と同様" "に、関数はトップレベルまたは、他の関数の内部、モジュールの内部で定義すること" "ができます (モジュールについては、[後述](#モジュールとクレート)します) 。" #. type: Plain text -#: doc/tutorial.md:824 -#, no-wrap +#: doc/tutorial.md:831 +#, fuzzy, no-wrap +#| msgid "~~~~ fn line(a: int, b: int, x: int) -> int { a * x + b } fn oops(a: int, b: int, x: int) -> () { a * x + b; }" msgid "" "~~~~\n" "fn line(a: int, b: int, x: int) -> int {\n" @@ -1928,9 +1826,12 @@ msgid "" "}\n" "~~~~\n" msgstr "" +"~~~~\n" +"fn line(a: int, b: int, x: int) -> int { a * x + b }\n" +"fn oops(a: int, b: int, x: int) -> () { a * x + b; }" #. type: Plain text -#: doc/tutorial.md:829 +#: doc/tutorial.md:836 msgid "" "The `return` keyword immediately returns from the body of a function. It is " "optionally followed by an expression to return. A function can also return a " @@ -1942,8 +1843,9 @@ msgstr "" "値) も関数の戻り値になります。" #. type: Plain text -#: doc/tutorial.md:835 -#, no-wrap +#: doc/tutorial.md:842 +#, fuzzy, no-wrap +#| msgid "~~~~ fn line(a: int, b: int, x: int) -> int { a * x + b } fn oops(a: int, b: int, x: int) -> () { a * x + b; }" msgid "" "~~~~\n" "fn line(a: int, b: int, x: int) -> int {\n" @@ -1951,9 +1853,12 @@ msgid "" "}\n" "~~~~\n" msgstr "" +"~~~~\n" +"fn line(a: int, b: int, x: int) -> int { a * x + b }\n" +"fn oops(a: int, b: int, x: int) -> () { a * x + b; }" #. type: Plain text -#: doc/tutorial.md:842 +#: doc/tutorial.md:849 msgid "" "It's better Rust style to write a return value this way instead of writing " "an explicit `return`. The utility of `return` comes in when returning early " @@ -1967,27 +1872,27 @@ msgstr "" "の型や、戻り値を返す処理を省略することが可能です。以下の2つの関数は等価です。" #. type: Plain text -#: doc/tutorial.md:845 +#: doc/tutorial.md:852 msgid "~~~~ fn do_nothing_the_hard_way() -> () { return (); }" msgstr "" "~~~~\n" "fn do_nothing_the_hard_way() -> () { return (); }" #. type: Plain text -#: doc/tutorial.md:848 +#: doc/tutorial.md:855 msgid "fn do_nothing_the_easy_way() { } ~~~~" msgstr "" "fn do_nothing_the_easy_way() { }\n" "~~~~" #. type: Plain text -#: doc/tutorial.md:850 +#: doc/tutorial.md:857 msgid "" "Ending the function with a semicolon like so is equivalent to returning `()`." msgstr "以下のように、セミコロンで終わる関数は `()` を返す関数と等価です。" #. type: Plain text -#: doc/tutorial.md:854 +#: doc/tutorial.md:861 msgid "" "~~~~ fn line(a: int, b: int, x: int) -> int { a * x + b } fn oops(a: int, b: " "int, x: int) -> () { a * x + b; }" @@ -1997,7 +1902,7 @@ msgstr "" "fn oops(a: int, b: int, x: int) -> () { a * x + b; }" #. type: Plain text -#: doc/tutorial.md:858 +#: doc/tutorial.md:865 msgid "assert!(8 == line(5, 3, 1)); assert!(() == oops(5, 3, 1)); ~~~~" msgstr "" "assert!(8 == line(5, 3, 1));\n" @@ -2005,7 +1910,7 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:862 +#: doc/tutorial.md:869 msgid "" "As with `match` expressions and `let` bindings, function arguments support " "pattern destructuring. Like `let`, argument patterns must be irrefutable, as " @@ -2017,7 +1922,7 @@ msgstr "" "し、呼び出し元へ返します。" #. type: Plain text -#: doc/tutorial.md:866 +#: doc/tutorial.md:873 msgid "~~~ fn first((value, _): (int, f64)) -> int { value } ~~~" msgstr "" "~~~\n" @@ -2025,12 +1930,7 @@ msgstr "" "~~~" #. type: Plain text -#: doc/tutorial.md:868 doc/tutorial-ffi.md:143 -msgid "# Destructors" -msgstr "# デストラクタ" - -#. type: Plain text -#: doc/tutorial.md:872 +#: doc/tutorial.md:879 msgid "" "A *destructor* is a function responsible for cleaning up the resources used " "by an object when it is no longer accessible. Destructors can be defined to " @@ -2041,11 +1941,16 @@ msgstr "" "リのようなリソースの解放を処理するために定義することができます。" #. type: Plain text -#: doc/tutorial.md:876 +#: doc/tutorial.md:883 +#, fuzzy +#| msgid "" +#| "Objects are never accessible after their destructor has been called, so " +#| "there are no dynamic failures from accessing freed resources. When a task " +#| "fails, the destructors of all objects in the task are called." msgid "" -"Objects are never accessible after their destructor has been called, so " -"there are no dynamic failures from accessing freed resources. When a task " -"fails, the destructors of all objects in the task are called." +"Objects are never accessible after their destructor has been called, so no " +"dynamic failures are possible from accessing freed resources. When a task " +"fails, destructors of all objects in the task are called." msgstr "" "オブジェクトは、デストラクタが呼び出された後にアクセス不能になります。そのた" "め、解放済みリソースへアクセスしたことによる動的なエラーは発生しません。タス" @@ -2053,7 +1958,7 @@ msgstr "" "び出されます。" #. type: Plain text -#: doc/tutorial.md:878 +#: doc/tutorial.md:885 msgid "" "The `~` sigil represents a unique handle for a memory allocation on the heap:" msgstr "" @@ -2061,20 +1966,7 @@ msgstr "" "す。" #. type: Plain text -#: doc/tutorial.md:886 -#, no-wrap -msgid "" -"~~~~\n" -"{\n" -" // an integer allocated on the heap\n" -" let y = ~10;\n" -"}\n" -"// the destructor frees the heap memory as soon as `y` goes out of scope\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:890 +#: doc/tutorial.md:897 msgid "" "Rust includes syntax for heap memory allocation in the language since it's " "commonly used, but the same semantics can be implemented by a type with a " @@ -2085,12 +1977,12 @@ msgstr "" "り実装することが可能です。" #. type: Plain text -#: doc/tutorial.md:892 +#: doc/tutorial.md:899 msgid "# Ownership" msgstr "# 所有権" #. type: Plain text -#: doc/tutorial.md:897 +#: doc/tutorial.md:904 msgid "" "Rust formalizes the concept of object ownership to delegate management of an " "object's lifetime to either a variable or a task-local garbage collector. An " @@ -2105,13 +1997,18 @@ msgstr "" "断します。" #. type: Plain text -#: doc/tutorial.md:903 +#: doc/tutorial.md:908 +#, fuzzy +#| msgid "" +#| "Ownership is recursive, so mutability is inherited recursively and a " +#| "destructor destroys the contained tree of owned objects. Variables are " +#| "top-level owners and destroy the contained object when they go out of " +#| "scope. A box managed by the garbage collector starts a new ownership " +#| "tree, and the destructor is called when it is collected." msgid "" "Ownership is recursive, so mutability is inherited recursively and a " "destructor destroys the contained tree of owned objects. Variables are top-" -"level owners and destroy the contained object when they go out of scope. A " -"box managed by the garbage collector starts a new ownership tree, and the " -"destructor is called when it is collected." +"level owners and destroy the contained object when they go out of scope." msgstr "" "所有権は再帰的であるため、ミュータビリティは再帰的に継承され、デストラクタは" "所有しているオブジェクトの含まれているツリーを破壊します。変数はトップレベル" @@ -2121,7 +2018,7 @@ msgstr "" "きにデストラクタが呼び出されます。" #. type: Plain text -#: doc/tutorial.md:907 +#: doc/tutorial.md:912 msgid "" "~~~~ // the struct owns the objects contained in the `x` and `y` fields " "struct Foo { x: int, y: ~int }" @@ -2131,7 +2028,7 @@ msgstr "" "struct Foo { x: int, y: ~int }" #. type: Plain text -#: doc/tutorial.md:914 +#: doc/tutorial.md:919 #, no-wrap msgid "" "{\n" @@ -2148,7 +2045,7 @@ msgstr "" "// `a` の含まれているスコープから抜けるとき、 構造体のフィールドの `~int` のデストラクタが呼ばれる\n" #. type: Plain text -#: doc/tutorial.md:919 +#: doc/tutorial.md:924 msgid "" "// `b` is mutable, and the mutability is inherited by the objects it owns " "let mut b = Foo { x: 5, y: ~10 }; b.x = 10; ~~~~" @@ -2160,13 +2057,21 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:925 +#: doc/tutorial.md:931 +#, fuzzy +#| msgid "" +#| "If an object doesn't contain garbage-collected boxes, it consists of a " +#| "single ownership tree and is given the `Owned` trait which allows it to " +#| "be sent between tasks. Custom destructors can only be implemented " +#| "directly on types that are `Owned`, but garbage-collected boxes can still " +#| "*contain* types with custom destructors." msgid "" -"If an object doesn't contain garbage-collected boxes, it consists of a " -"single ownership tree and is given the `Owned` trait which allows it to be " +"If an object doesn't contain any non-Send types, it consists of a single " +"ownership tree and is itself given the `Send` trait which allows it to be " "sent between tasks. Custom destructors can only be implemented directly on " -"types that are `Owned`, but garbage-collected boxes can still *contain* " -"types with custom destructors." +"types that are `Send`, but non-`Send` types can still *contain* types with " +"custom destructors. Example of types which are not `Send` are [`Gc`][gc] " +"and [`Rc`][rc], the shared-ownership types." msgstr "" "オブジェクトにガベージコレクトされるボックスが含まれていない場合、オブジェク" "トは単一の継承ツリーからの構成され、`Owned` トレイトが付与されます。`Owned` " @@ -2176,281 +2081,34 @@ msgstr "" "** ことは依然可能です。" #. type: Plain text -#: doc/tutorial.md:927 -msgid "# Boxes" +#: doc/tutorial.md:934 +#, fuzzy +#| msgid "" +#| "[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz [win-exe]: " +#| "http://static.rust-lang.org/dist/rust-0.7-install.exe" +msgid "" +"[gc]: http://static.rust-lang.org/doc/master/std/gc/struct.Gc.html [rc]: " +"http://static.rust-lang.org/doc/master/std/rc/struct.Rc.html" +msgstr "" +"[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz\n" +"[win-exe]: http://static.rust-lang.org/dist/rust-0.7-install.exe" + +#. type: Plain text +#: doc/tutorial.md:963 +#, fuzzy +#| msgid "# Boxes" +msgid "## Boxes" msgstr "# ボックス" #. type: Plain text -#: doc/tutorial.md:934 -msgid "" -"Many modern languages represent values as pointers to heap memory by " -"default. In contrast, Rust, like C and C++, represents such types directly. " -"Another way to say this is that aggregate data in Rust are *unboxed*. This " -"means that if you `let x = Point { x: 1f, y: 1f };`, you are creating a " -"struct on the stack. If you then copy it into a data structure, you copy the " -"entire struct, not just a pointer." -msgstr "" -"多くのモダンな言語では、デフォルトで、値はヒープメモリへのポインタとして表さ" -"れます。一方、Rust は C や C++ のように、これらの型を直接取り扱うことができま" -"す。言い換えると、集積データは **ボックス化されていない** ということです。つ" -"まり、`let x = Point { x: 1f, y: 1f };` というコードは、スタック上に構造体を" -"作成することを意味します。この構造体を別のデータ構造の中へコピーする場合、ポ" -"インタのコピーではなく構造体全体をコピーすることになります。" - -#. type: Plain text -#: doc/tutorial.md:939 -msgid "" -"For small structs like `Point`, this is usually more efficient than " -"allocating memory and indirecting through a pointer. But for big structs, or " -"mutable state, it can be useful to have a single copy on the stack or on the " -"heap, and refer to that through a pointer." -msgstr "" -"`Point` のような小さな構造体の場合、このような動作は、メモリを獲得しポインタ" -"経由でアクセスするよりも一般的には効率的です。しかし、大きな構造体の場合や" -"ミュータブルな状態を持つようなものの場合、スタックまたはヒープ上に単一ののコ" -"ピーをもち、ポインタ経由で参照する方が便利な場合もあります。" - -#. type: Plain text -#: doc/tutorial.md:941 -msgid "## Owned boxes" -msgstr "## 所有ボックス" - -#. type: Plain text -#: doc/tutorial.md:944 -msgid "" -"An owned box (`~`) is a uniquely owned allocation on the heap. It inherits " -"the mutability and lifetime of the owner as it would if there was no box:" -msgstr "" -"所有ボックス (Owned box, `~`) は、単一の所有者のみを持つ、ヒープ上に獲得され" -"た領域です。所有ボックスは、ボックスが存在しない場合と同じように、所有者の" -"ミュータビリティと寿命を継承します。" - -#. type: Plain text -#: doc/tutorial.md:949 -msgid "~~~~ let x = 5; // immutable let mut y = 5; // mutable y += 2;" -msgstr "" -"~~~~\n" -"let x = 5; // イミュータブル\n" -"let mut y = 5; // ミュータブル\n" -"y += 2;" - -#. type: Plain text -#: doc/tutorial.md:954 -msgid "" -"let x = ~5; // immutable let mut y = ~5; // mutable *y += 2; // the * " -"operator is needed to access the contained value ~~~~" -msgstr "" -"let x = ~5; // イミュータブル\n" -"let mut y = ~5; // ミュータブル\n" -"*y += 2; // ボックスの中身にアクセスするには、 * 演算子が必要\n" -"~~~~" - -#. type: Plain text -#: doc/tutorial.md:959 -msgid "" -"The purpose of an owned box is to add a layer of indirection in order to " -"create recursive data structures or cheaply pass around an object larger " -"than a pointer. Since an owned box has a unique owner, it can only be used " -"to represent a tree data structure." -msgstr "" -"所有ボックスの目的は、再帰的なデータ型の作成や、ポインターのサイズより大きい" -"オブジェクトを安価な方法で渡したりするための、関節参照のレイヤを追加すること" -"です。所有ボックスは複数の所有者を持てないため、ツリー構造を持ったデータのみ" -"を表すことが可能です。" - -#. type: Plain text -#: doc/tutorial.md:962 -msgid "" -"The following struct won't compile, because the lack of indirection would " -"mean it has an infinite size:" -msgstr "" -"以下の構造体はコンパイルできません。構造体が自身を関節参照でない方法で参照し" -"た場合、無限に大きなサイズを持つことになってしまうからです。" - -#. type: Plain text -#: doc/tutorial.md:968 -#, no-wrap -msgid "" -"~~~~ {.xfail-test}\n" -"struct Foo {\n" -" child: Option\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:972 -msgid "" -"> ***Note:*** The `Option` type is an enum that represents an *optional* " -"value. > It's comparable to a nullable pointer in many other languages, but " -"stores the > contained value unboxed." -msgstr "" -"> ***注意*** `Option` 型は **オプショナルな** (値の有無を選択可能な) 値を表す" -"列挙型です。`Option` 型は他の言語の null 値をとりうるポインタ型に相当します" -"が、格納される値はボックス化されていません。" - -#. type: Plain text -#: doc/tutorial.md:976 -msgid "" -"Adding indirection with an owned pointer allocates the child outside of the " -"struct on the heap, which makes it a finite size and won't result in a " -"compile-time error:" -msgstr "" -"所有ポインタによる関節参照を導入することで、`child` を構造体の外のヒープ上に" -"獲得することができ、構造体のデータサイズは有限となるため、コンパイルエラーと" -"はなりません。" - -#. type: Plain text -#: doc/tutorial.md:982 -#, no-wrap -msgid "" -"~~~~\n" -"struct Foo {\n" -" child: Option<~Foo>\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:984 -msgid "## Managed boxes" -msgstr "## マネージドボックス" - -#. type: Plain text -#: doc/tutorial.md:992 -msgid "" -"A managed box (`@`) is a heap allocation with the lifetime managed by a task-" -"local garbage collector. It will be destroyed at some point after there are " -"no references left to the box, no later than the end of the task. Managed " -"boxes lack an owner, so they start a new ownership tree and don't inherit " -"mutability. They do own the contained object, and mutability is defined by " -"the type of the managed box (`@` or `@mut`). An object containing a managed " -"box is not `Owned`, and can't be sent between tasks." -msgstr "" -"マネージドボックス (`@`) は、タスクローカルなガベージコレクタにより寿命管理さ" -"れる、ヒープ上に獲得された領域です。マネージドボックスは、ボックスへの参照が" -"無くなった後、いずれかの時点で破棄されます。破棄のタイミングがタスク終了後に" -"なることはありません。マネージドボックスは所有者を持たないので、新たな所有権" -"ツリーを開始し、ミュータビリティを継承しません。マネージドボックスは、ボック" -"スに含まれているオブジェクトを所有し、ミュータビリティはマネージドボックスの" -"種別 (`@` または `@mut`) によって決定されます。マネージドボックスに含まれるオ" -"ブジェクトは `Owned` を付与されず、タスク間で受け渡すことはできません。" - -#. type: Plain text -#: doc/tutorial.md:995 -msgid "~~~~ let a = @5; // immutable" -msgstr "" -"~~~~\n" -"let a = @5; // イミュータブル" - -#. type: Plain text -#: doc/tutorial.md:998 -msgid "let mut b = @5; // mutable variable, immutable box b = @10;" -msgstr "" -"let mut b = @5; // ミュータブルな変数、イミュータブルなボックス\n" -"b = @10;" - -#. type: Plain text -#: doc/tutorial.md:1001 -msgid "let c = @mut 5; // immutable variable, mutable box *c = 10;" -msgstr "" -"let c = @mut 5; // イミュータブルな変数、ミュータブルなボックス\n" -"*c = 10;" - -#. type: Plain text -#: doc/tutorial.md:1006 -msgid "" -"let mut d = @mut 5; // mutable variable, mutable box *d += 5; d = @mut 15; " -"~~~~" -msgstr "" -"let mut d = @mut 5; // ミュータブルな変数、ミュータブルなボックス\n" -"*d += 5;\n" -"d = @mut 15;\n" -"~~~~" - -#. type: Plain text -#: doc/tutorial.md:1011 -msgid "" -"A mutable variable and an immutable variable can refer to the same box, " -"given that their types are compatible. Mutability of a box is a property of " -"its type, however, so for example a mutable handle to an immutable box " -"cannot be assigned a reference to a mutable box." -msgstr "" -"ミュータブルな変数とイミュータブルな変数は、それぞれの変数の型が同じであれ" -"ば、同じボックスを参照することが可能です。ただし、ボックスのミュータビリティ" -"は、型自体が持つ属性なので、ミュータブルなボックスの参照を、イミュータブルな" -"ボックスを参照するミュータブルな変数 (handle) へ代入することはできません。" - -#. type: Plain text -#: doc/tutorial.md:1015 -#, no-wrap -msgid "" -"~~~~\n" -"let a = @1; // immutable box\n" -"let b = @mut 2; // mutable box\n" -msgstr "" -"~~~~\n" -"let a = @1; // イミュータブルなボックス\n" -"let b = @mut 2; // ミュータブルなボックス\n" - -#. type: Plain text -#: doc/tutorial.md:1018 -#, no-wrap -msgid "" -"let mut c : @int; // declare a variable with type managed immutable int\n" -"let mut d : @mut int; // and one of type managed mutable int\n" -msgstr "" -"let mut c : @int; // イミュータブルなマネージド int 型の変数と、\n" -"let mut d : @mut int; // ミュータブルなマネージド int 型の変数の宣言\n" - -#. type: Plain text -#: doc/tutorial.md:1022 -#, no-wrap -msgid "" -"c = a; // box type is the same, okay\n" -"d = b; // box type is the same, okay\n" -"~~~~\n" -msgstr "" -"c = a; // ボックスの型は変数の型と同じなので、OK\n" -"d = b; // ボックスの型は変数の型と同じなので、OK\n" -"~~~~\n" - -#. type: Plain text -#: doc/tutorial.md:1027 -#, no-wrap -msgid "" -"~~~~ {.xfail-test}\n" -"// but b cannot be assigned to c, or a to d\n" -"c = b; // error\n" -"~~~~\n" -msgstr "" -"~~~~ {.xfail-test}\n" -"// しかし、 b は c に代入できないし、a は d に代入できない\n" -"c = b; // エラー\n" -"~~~~\n" - -#. type: Plain text -#: doc/tutorial.md:1029 -msgid "# Move semantics" +#: doc/tutorial.md:1032 +#, fuzzy +#| msgid "# Move semantics" +msgid "## Move semantics" msgstr "# ムーブセマンティクス" #. type: Plain text -#: doc/tutorial.md:1035 -msgid "" -"Rust uses a shallow copy for parameter passing, assignment and returning " -"values from functions. A shallow copy is considered a move of ownership if " -"the ownership tree of the copied value includes an owned box or a type with " -"a custom destructor. After a value has been moved, it can no longer be used " -"from the source location and will not be destroyed there." -msgstr "" -"Rust は関数パラメータの受け渡しや、変数への代入、関数からの戻り値を設定する際" -"に、シャローコピーを使用しています。コピーされる値の所有権ツリーが所有ボック" -"スや独自のデストラクタを持つ型を含んでいる場合、シャローコピーは所有権の移動" -"とみなされます。値の移動が行われた後、元々その値を参照していた箇所からは値を" -"利用することはできなくなり、もとの所有者から値が破壊されることもありません。" - -#. type: Plain text -#: doc/tutorial.md:1041 +#: doc/tutorial.md:1076 msgid "" "~~~~ let x = ~5; let y = x.clone(); // y is a newly allocated box let z = " "x; // no new memory allocated, x can no longer be used ~~~~" @@ -2463,17 +2121,7 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:1044 -msgid "" -"Since in owned boxes mutability is a property of the owner, not the box, " -"mutable boxes may become immutable when they are moved, and vice-versa." -msgstr "" -"所有ボックスのミュータビリティは、ボックスではなく所有者のミュータビリティを" -"引き継ぐため、同一のボックスが移動によりミュータブルになったりイミュータブル" -"になったりすることがありえます。" - -#. type: Plain text -#: doc/tutorial.md:1051 +#: doc/tutorial.md:1105 msgid "" "~~~~ let r = ~13; let mut s = r; // box becomes mutable *s += 1; let t = " "s; // box becomes immutable ~~~~" @@ -2486,18 +2134,59 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:1053 -msgid "# Borrowed pointers" -msgstr "# 借用ポインタ" +#: doc/tutorial.md:1129 +#, fuzzy +msgid "## References" +msgstr "# ポインタのデリファレンス" #. type: Plain text -#: doc/tutorial.md:1059 +#: doc/tutorial.md:1175 +#, fuzzy +#| msgid "## Using other crates" +msgid "## Lists of other types" +msgstr "## 他のクレートの利用" + +#. type: Plain text +#: doc/tutorial.md:1307 +#, fuzzy +#| msgid "## Managed boxes" +msgid "# More on boxes" +msgstr "## マネージドボックス" + +#. type: Plain text +#: doc/tutorial.md:1338 +msgid "~~~~ let x = 5; // immutable let mut y = 5; // mutable y += 2;" +msgstr "" +"~~~~\n" +"let x = 5; // イミュータブル\n" +"let mut y = 5; // ミュータブル\n" +"y += 2;" + +#. type: Plain text +#: doc/tutorial.md:1343 msgid "" -"Rust's borrowed pointers are a general purpose reference type. In contrast " -"with owned boxes, where the holder of an owned box is the owner of the " -"pointed-to memory, borrowed pointers never imply ownership. A pointer can be " -"borrowed to any object, and the compiler verifies that it cannot outlive the " -"lifetime of the object." +"let x = ~5; // immutable let mut y = ~5; // mutable *y += 2; // the * " +"operator is needed to access the contained value ~~~~" +msgstr "" +"let x = ~5; // イミュータブル\n" +"let mut y = ~5; // ミュータブル\n" +"*y += 2; // ボックスの中身にアクセスするには、 * 演算子が必要\n" +"~~~~" + +#. type: Plain text +#: doc/tutorial.md:1352 +#, fuzzy +#| msgid "" +#| "Rust's borrowed pointers are a general purpose reference type. In " +#| "contrast with owned boxes, where the holder of an owned box is the owner " +#| "of the pointed-to memory, borrowed pointers never imply ownership. A " +#| "pointer can be borrowed to any object, and the compiler verifies that it " +#| "cannot outlive the lifetime of the object." +msgid "" +"In contrast with owned boxes, where the holder of an owned box is the owner " +"of the pointed-to memory, references never imply ownership - they are " +"\"borrowed\". A reference can be borrowed to any object, and the compiler " +"verifies that it cannot outlive the lifetime of the object." msgstr "" "Rust の借用ポインタ (borrowed pointer) は汎用的な参照型です。所有ボックスの場" "合、ボックスの所有者が参照されているメモリの所有者となるのに対して、借用ポイ" @@ -2506,24 +2195,12 @@ msgstr "" "生きしないことがコンパイラにより保証されます。" #. type: Plain text -#: doc/tutorial.md:1061 +#: doc/tutorial.md:1354 msgid "As an example, consider a simple struct type, `Point`:" msgstr "例として、シンプルな構造体型の `Point` について考えます。" #. type: Plain text -#: doc/tutorial.md:1068 -#, no-wrap -msgid "" -"~~~\n" -"struct Point {\n" -" x: f64,\n" -" y: f64\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1072 +#: doc/tutorial.md:1365 msgid "" "We can use this simple definition to allocate points in many different ways. " "For example, in this code, each of these three local variables contains a " @@ -2534,8 +2211,9 @@ msgstr "" "なった場所に `Point` 型のオブジェクトを割り当てています。" #. type: Plain text -#: doc/tutorial.md:1079 -#, no-wrap +#: doc/tutorial.md:1372 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" msgid "" "~~~\n" "# struct Point { x: f64, y: f64 }\n" @@ -2544,9 +2222,24 @@ msgid "" "let owned_box : ~Point = ~Point { x: 7.0, y: 9.0 };\n" "~~~\n" msgstr "" +"~~~~ {.xfail-test}\n" +"# struct Point { x: f64, y: f64 }\n" +"let mut mypoint = Point { x: 1.0, y: 1.0 };\n" +"let origin = Point { x: 0.0, y: 0.0 };" #. type: Plain text -#: doc/tutorial.md:1089 +#: doc/tutorial.md:1382 +#, fuzzy +#| msgid "" +#| "Suppose we want to write a procedure that computes the distance between " +#| "any two points, no matter where they are stored. For example, we might " +#| "like to compute the distance between `on_the_stack` and `managed_box`, or " +#| "between `managed_box` and `owned_box`. One option is to define a function " +#| "that takes two arguments of type point—that is, it takes the points by " +#| "value. But this will cause the points to be copied when we call the " +#| "function. For points, this is probably not so bad, but often copies are " +#| "expensive. So we’d like to define a function that takes the points by " +#| "pointer. We can use borrowed pointers to do this:" msgid "" "Suppose we want to write a procedure that computes the distance between any " "two points, no matter where they are stored. For example, we might like to " @@ -2555,8 +2248,8 @@ msgid "" "two arguments of type point—that is, it takes the points by value. But this " "will cause the points to be copied when we call the function. For points, " "this is probably not so bad, but often copies are expensive. So we’d like to " -"define a function that takes the points by pointer. We can use borrowed " -"pointers to do this:" +"define a function that takes the points by pointer. We can use references to " +"do this:" msgstr "" "`Point` 型のオブジェクトの割り当て先がどこであったとしても利用可能な、任意の " "2 点間の距離を計算する処理を書きたいとします。例えば、 `on_the_stack`, " @@ -2570,48 +2263,39 @@ msgstr "" "です。" #. type: Plain text -#: doc/tutorial.md:1099 -#, no-wrap -msgid "" -"~~~\n" -"# struct Point { x: f64, y: f64 }\n" -"# fn sqrt(f: f64) -> f64 { 0f }\n" -"fn compute_distance(p1: &Point, p2: &Point) -> f64 {\n" -" let x_d = p1.x - p2.x;\n" -" let y_d = p1.y - p2.y;\n" -" sqrt(x_d * x_d + y_d * y_d)\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1101 doc/tutorial-borrowed-ptr.md:72 -msgid "Now we can call `compute_distance()` in various ways:" -msgstr "" -"上記の `compute_distance()` 関数は、様々な方法で呼び出すことができます。" - -#. type: Plain text -#: doc/tutorial.md:1111 -#, no-wrap +#: doc/tutorial.md:1404 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} # struct Point { x: f64, y: f64 } let mut mypoint = Point { x: 1.0, y: 1.0 }; let origin = Point { x: 0.0, y: 0.0 };" msgid "" "~~~\n" "# struct Point{ x: f64, y: f64 };\n" "# let on_the_stack : Point = Point { x: 3.0, y: 4.0 };\n" "# let managed_box : @Point = @Point { x: 5.0, y: 1.0 };\n" "# let owned_box : ~Point = ~Point { x: 7.0, y: 9.0 };\n" -"# fn compute_distance(p1: &Point, p2: &Point) -> f64 { 0f }\n" +"# fn compute_distance(p1: &Point, p2: &Point) -> f64 { 0.0 }\n" "compute_distance(&on_the_stack, managed_box);\n" "compute_distance(managed_box, owned_box);\n" "~~~\n" msgstr "" +"~~~~ {.xfail-test}\n" +"# struct Point { x: f64, y: f64 }\n" +"let mut mypoint = Point { x: 1.0, y: 1.0 };\n" +"let origin = Point { x: 0.0, y: 0.0 };" #. type: Plain text -#: doc/tutorial.md:1118 +#: doc/tutorial.md:1411 +#, fuzzy +#| msgid "" +#| "Here the `&` operator is used to take the address of the variable " +#| "`on_the_stack`; this is because `on_the_stack` has the type `Point` (that " +#| "is, a struct value) and we have to take its address to get a value. We " +#| "also call this _borrowing_ the local variable `on_the_stack`, because we " +#| "are creating an alias: that is, another route to the same data." msgid "" "Here the `&` operator is used to take the address of the variable " "`on_the_stack`; this is because `on_the_stack` has the type `Point` (that " -"is, a struct value) and we have to take its address to get a value. We also " -"call this _borrowing_ the local variable `on_the_stack`, because we are " +"is, a struct value) and we have to take its address to get a reference. We " +"also call this _borrowing_ the local variable `on_the_stack`, because we are " "creating an alias: that is, another route to the same data." msgstr "" "ここで `&` 演算子は `on_the_stack` 変数のアドレスを取得するために使われていま" @@ -2622,13 +2306,20 @@ msgstr "" "(_borrowing_) と呼びます。" #. type: Plain text -#: doc/tutorial.md:1124 +#: doc/tutorial.md:1417 +#, fuzzy +#| msgid "" +#| "In the case of the boxes `managed_box` and `owned_box`, however, no " +#| "explicit action is necessary. The compiler will automatically convert a " +#| "box like `@point` or `~point` to a borrowed pointer like `&point`. This " +#| "is another form of borrowing; in this case, the contents of the managed/" +#| "owned box are being lent out." msgid "" "In the case of the boxes `managed_box` and `owned_box`, however, no explicit " "action is necessary. The compiler will automatically convert a box like " -"`@point` or `~point` to a borrowed pointer like `&point`. This is another " -"form of borrowing; in this case, the contents of the managed/owned box are " -"being lent out." +"`@point` or `~point` to a reference like `&point`. This is another form of " +"borrowing; in this case, the contents of the managed/owned box are being " +"lent out." msgstr "" "ボックスである `managed_box` と `owned_box` の場合は、特に明示的な操作を行う" "必要はありません。コンパイラは `@point` や `~point` のようなボックスを自動的" @@ -2637,15 +2328,25 @@ msgstr "" "す。" #. type: Plain text -#: doc/tutorial.md:1133 +#: doc/tutorial.md:1426 +#, fuzzy +#| msgid "" +#| "Whenever a value is borrowed, there are some limitations on what you can " +#| "do with the original. For example, if the contents of a variable have " +#| "been lent out, you cannot send that variable to another task, nor will " +#| "you be permitted to take actions that might cause the borrowed value to " +#| "be freed or to change its type. This rule should make intuitive sense: " +#| "you must wait for a borrowed value to be returned (that is, for the " +#| "borrowed pointer to go out of scope) before you can make full use of it " +#| "again." msgid "" "Whenever a value is borrowed, there are some limitations on what you can do " "with the original. For example, if the contents of a variable have been lent " "out, you cannot send that variable to another task, nor will you be " "permitted to take actions that might cause the borrowed value to be freed or " "to change its type. This rule should make intuitive sense: you must wait for " -"a borrowed value to be returned (that is, for the borrowed pointer to go out " -"of scope) before you can make full use of it again." +"a borrowed value to be returned (that is, for the reference to go out of " +"scope) before you can make full use of it again." msgstr "" "値が借用されている間、借用元の値に対して行える操作がいくらか制限されます。例" "えば、変数の内容が貸し出された場合、その変数を他のタスクに送信することはでき" @@ -2655,29 +2356,34 @@ msgstr "" "コープを抜ける) を待たなければなりません。" #. type: Plain text -#: doc/tutorial.md:1136 +#: doc/tutorial.md:1429 +#, fuzzy +#| msgid "" +#| "For a more in-depth explanation of borrowed pointers, read the [borrowed " +#| "pointer tutorial][borrowtut]." msgid "" -"For a more in-depth explanation of borrowed pointers, read the [borrowed " -"pointer tutorial][borrowtut]." +"For a more in-depth explanation of references and lifetimes, read the " +"[references and lifetimes guide][lifetimes]." msgstr "" "借用ポインタの詳細については、[借用ポインタのチュートリアル][borrowtut]を参照" "してください。" #. type: Plain text -#: doc/tutorial.md:1138 -msgid "[borrowtut]: tutorial-borrowed-ptr.html" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1140 +#: doc/tutorial.md:1431 msgid "## Freezing" msgstr "## 凍結" #. type: Plain text -#: doc/tutorial.md:1143 +#: doc/tutorial.md:1435 +#, fuzzy +#| msgid "" +#| "Borrowing an immutable pointer to an object freezes it and prevents " +#| "mutation. `Owned` objects have freezing enforced statically at compile-" +#| "time." msgid "" -"Borrowing an immutable pointer to an object freezes it and prevents " -"mutation. `Owned` objects have freezing enforced statically at compile-time." +"Lending an immutable pointer to an object freezes it and prevents mutation. " +"`Freeze` objects have freezing enforced statically at compile-time. An " +"example of a non-`Freeze` type is [`RefCell`][refcell]." msgstr "" "オブジェクトへのイミュータブルな (借用) ポインタを借用した場合、借用されたオ" "ブジェクトは凍結 (freezing) され、変更することができなくなります。`Owned` ト" @@ -2685,7 +2391,7 @@ msgstr "" "されます (凍結された値を変更しようとすると、コンパイルエラーとなります)。" #. type: Plain text -#: doc/tutorial.md:1152 +#: doc/tutorial.md:1444 #, no-wrap msgid "" "~~~~\n" @@ -2707,46 +2413,25 @@ msgstr "" "~~~~\n" #. type: Plain text -#: doc/tutorial.md:1156 +#: doc/tutorial.md:1446 +#, fuzzy +#| msgid "" +#| "[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz [win-exe]: " +#| "http://static.rust-lang.org/dist/rust-0.7-install.exe" msgid "" -"Mutable managed boxes handle freezing dynamically when any of their contents " -"are borrowed, and the task will fail if an attempt to modify them is made " -"while they are frozen:" +"[refcell]: http://static.rust-lang.org/doc/master/std/cell/struct.RefCell." +"html" msgstr "" -"ミュータブルなマネージドボックスは、その内容のいずれかが借用される際に動的に" -"凍結され、凍結状態の間に内容を変更しようとすると、タスクが失敗します。" +"[tarball]: http://static.rust-lang.org/dist/rust-0.7.tar.gz\n" +"[win-exe]: http://static.rust-lang.org/dist/rust-0.7-install.exe" #. type: Plain text -#: doc/tutorial.md:1166 -#, no-wrap -msgid "" -"~~~~\n" -"let x = @mut 5;\n" -"let y = x;\n" -"{\n" -" let z = &*y; // the managed box is now frozen\n" -" // modifying it through x or y will cause a task failure\n" -"}\n" -"// the box is now unfrozen again\n" -"~~~~\n" -msgstr "" -"~~~~\n" -"let x = @mut 5;\n" -"let y = x;\n" -"{\n" -" let z = &*y; // マネージドボックスが凍結される\n" -" // x か y を経由して内容を変更すると、タスクが異常終了する\n" -"}\n" -"// ボックスの凍結状態は解除される\n" -"~~~~\n" - -#. type: Plain text -#: doc/tutorial.md:1168 +#: doc/tutorial.md:1448 msgid "# Dereferencing pointers" msgstr "# ポインタのデリファレンス" #. type: Plain text -#: doc/tutorial.md:1171 +#: doc/tutorial.md:1451 msgid "" "Rust uses the unary star operator (`*`) to access the contents of a box or " "pointer, similarly to C." @@ -2755,7 +2440,7 @@ msgstr "" "項スター演算子 (`*`) を使います。" #. type: Plain text -#: doc/tutorial.md:1176 +#: doc/tutorial.md:1456 msgid "~~~ let managed = @10; let owned = ~20; let borrowed = &30;" msgstr "" "~~~\n" @@ -2764,14 +2449,14 @@ msgstr "" "let borrowed = &30;" #. type: Plain text -#: doc/tutorial.md:1179 +#: doc/tutorial.md:1459 msgid "let sum = *managed + *owned + *borrowed; ~~~" msgstr "" "let sum = *managed + *owned + *borrowed;\n" "~~~" #. type: Plain text -#: doc/tutorial.md:1183 +#: doc/tutorial.md:1463 msgid "" "Dereferenced mutable pointers may appear on the left hand side of " "assignments. Such an assignment modifies the value that the pointer points " @@ -2781,32 +2466,24 @@ msgstr "" "きます。このような代入文は、ポインタが指す値を変更します。" #. type: Plain text -#: doc/tutorial.md:1187 -msgid "~~~ let managed = @mut 10; let mut owned = ~20;" +#: doc/tutorial.md:1467 +#, fuzzy +#| msgid "~~~ let managed = @mut 10; let mut owned = ~20;" +msgid "~~~ let managed = @10; let mut owned = ~20;" msgstr "" "~~~\n" "let managed = @mut 10;\n" "let mut owned = ~20;" #. type: Plain text -#: doc/tutorial.md:1190 +#: doc/tutorial.md:1470 msgid "let mut value = 30; let borrowed = &mut value;" msgstr "" "let mut value = 30;\n" "let borrowed = &mut value;" #. type: Plain text -#: doc/tutorial.md:1195 -#, no-wrap -msgid "" -"*managed = *owned + 10;\n" -"*owned = *borrowed + 100;\n" -"*borrowed = *managed + 1000;\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1199 +#: doc/tutorial.md:1478 msgid "" "Pointers have high operator precedence, but lower precedence than the dot " "operator used for field and method access. This precedence order can " @@ -2817,12 +2494,20 @@ msgstr "" "弧だらけなものになることがあります。" #. type: Plain text -#: doc/tutorial.md:1209 +#: doc/tutorial.md:1488 +#, fuzzy +#| msgid "" +#| "~~~ # struct Point { x: f64, y: f64 } # enum Shape { Rectangle(Point, " +#| "Point) } # impl Shape { fn area(&self) -> int { 0 } } let start = @Point " +#| "{ x: 10f, y: 20f }; let end = ~Point { x: (*start).x + 100f, y: (*start)." +#| "y + 100f }; let rect = &Rectangle(*start, *end); let area = (*rect)." +#| "area(); ~~~" msgid "" "~~~ # struct Point { x: f64, y: f64 } # enum Shape { Rectangle(Point, " "Point) } # impl Shape { fn area(&self) -> int { 0 } } let start = @Point " -"{ x: 10f, y: 20f }; let end = ~Point { x: (*start).x + 100f, y: (*start).y + " -"100f }; let rect = &Rectangle(*start, *end); let area = (*rect).area(); ~~~" +"{ x: 10.0, y: 20.0 }; let end = ~Point { x: (*start).x + 100.0, y: (*start)." +"y + 100.0 }; let rect = &Rectangle(*start, *end); let area = (*rect).area(); " +"~~~" msgstr "" "~~~\n" "# struct Point { x: f64, y: f64 }\n" @@ -2835,7 +2520,7 @@ msgstr "" "~~~" #. type: Plain text -#: doc/tutorial.md:1213 +#: doc/tutorial.md:1492 msgid "" "To combat this ugliness the dot operator applies _automatic pointer " "dereferencing_ to the receiver (the value on the left-hand side of the dot), " @@ -2846,12 +2531,18 @@ msgstr "" "レシーバを明示的にデリファレンスする必要がなくなります。" #. type: Plain text -#: doc/tutorial.md:1223 +#: doc/tutorial.md:1502 +#, fuzzy +#| msgid "" +#| "~~~ # struct Point { x: f64, y: f64 } # enum Shape { Rectangle(Point, " +#| "Point) } # impl Shape { fn area(&self) -> int { 0 } } let start = @Point " +#| "{ x: 10f, y: 20f }; let end = ~Point { x: start.x + 100f, y: start.y + " +#| "100f }; let rect = &Rectangle(*start, *end); let area = rect.area(); ~~~" msgid "" "~~~ # struct Point { x: f64, y: f64 } # enum Shape { Rectangle(Point, " "Point) } # impl Shape { fn area(&self) -> int { 0 } } let start = @Point " -"{ x: 10f, y: 20f }; let end = ~Point { x: start.x + 100f, y: start.y + " -"100f }; let rect = &Rectangle(*start, *end); let area = rect.area(); ~~~" +"{ x: 10.0, y: 20.0 }; let end = ~Point { x: start.x + 100.0, y: start.y + " +"100.0 }; let rect = &Rectangle(*start, *end); let area = rect.area(); ~~~" msgstr "" "~~~\n" "# struct Point { x: f64, y: f64 }\n" @@ -2864,7 +2555,7 @@ msgstr "" "~~~" #. type: Plain text -#: doc/tutorial.md:1227 +#: doc/tutorial.md:1506 msgid "" "You can write an expression that dereferences any number of pointers " "automatically. For example, if you feel inclined, you could write something " @@ -2874,10 +2565,14 @@ msgstr "" "うと思えば以下のような馬鹿げたものを書くこともできます。" #. type: Plain text -#: doc/tutorial.md:1233 +#: doc/tutorial.md:1512 +#, fuzzy +#| msgid "" +#| "~~~ # struct Point { x: f64, y: f64 } let point = &@~Point { x: 10f, y: " +#| "20f }; println(fmt!(\"%f\", point.x)); ~~~" msgid "" -"~~~ # struct Point { x: f64, y: f64 } let point = &@~Point { x: 10f, y: " -"20f }; println(fmt!(\"%f\", point.x)); ~~~" +"~~~ # struct Point { x: f64, y: f64 } let point = &@~Point { x: 10.0, y: " +"20.0 }; println!(\"{:f}\", point.x); ~~~" msgstr "" "~~~\n" "# struct Point { x: f64, y: f64 }\n" @@ -2886,22 +2581,28 @@ msgstr "" "~~~" #. type: Plain text -#: doc/tutorial.md:1235 +#: doc/tutorial.md:1514 msgid "The indexing operator (`[]`) also auto-dereferences." msgstr "添字演算子 (`[]`) も自動でリファレンスを行います。" #. type: Plain text -#: doc/tutorial.md:1237 +#: doc/tutorial.md:1516 msgid "# Vectors and strings" msgstr "# ベクタと文字列" #. type: Plain text -#: doc/tutorial.md:1242 +#: doc/tutorial.md:1520 +#, fuzzy +#| msgid "" +#| "A vector is a contiguous section of memory containing zero or more values " +#| "of the same type. Like other types in Rust, vectors can be stored on the " +#| "stack, the local heap, or the exchange heap. Borrowed pointers to vectors " +#| "are also called 'slices'." msgid "" -"A vector is a contiguous section of memory containing zero or more values of " -"the same type. Like other types in Rust, vectors can be stored on the stack, " -"the local heap, or the exchange heap. Borrowed pointers to vectors are also " -"called 'slices'." +"A vector is a contiguous block of memory containing zero or more values of " +"the same type. Rust also supports vector reference types, called slices, " +"which are a view into a block of memory represented as a pointer and a " +"length." msgstr "" "ベクタは同じ型の値が0個以上含まれる、メモリ上の連続した部分のことです。Rust " "の他の型と同様、ベクタもスタック、ローカルヒープ、交換ヒープ (exchange heap) " @@ -2909,394 +2610,62 @@ msgstr "" "場合もあります。" #. type: Plain text -#: doc/tutorial.md:1252 -#, no-wrap -msgid "" -"~~~\n" -"# enum Crayon {\n" -"# Almond, AntiqueBrass, Apricot,\n" -"# Aquamarine, Asparagus, AtomicTangerine,\n" -"# BananaMania, Beaver, Bittersweet,\n" -"# Black, BlizzardBlue, Blue\n" -"# }\n" -"// A fixed-size stack vector\n" -"let stack_crayons: [Crayon, ..3] = [Almond, AntiqueBrass, Apricot];\n" -msgstr "" -"~~~\n" -"# enum Crayon {\n" -"# Almond, AntiqueBrass, Apricot,\n" -"# Aquamarine, Asparagus, AtomicTangerine,\n" -"# BananaMania, Beaver, Bittersweet,\n" -"# Black, BlizzardBlue, Blue\n" -"# }\n" -"// スタック上の固定長ベクタ\n" -"let stack_crayons: [Crayon, ..3] = [Almond, AntiqueBrass, Apricot];\n" - -#. type: Plain text -#: doc/tutorial.md:1255 -msgid "" -"// A borrowed pointer to stack-allocated vector let stack_crayons: &[Crayon] " -"= &[Aquamarine, Asparagus, AtomicTangerine];" -msgstr "" -"// スタックに獲得されたベクタへの借用ポインタ\n" -"let stack_crayons: &[Crayon] = &[Aquamarine, Asparagus, AtomicTangerine];" - -#. type: Plain text -#: doc/tutorial.md:1258 -msgid "" -"// A local heap (managed) vector of crayons let local_crayons: @[Crayon] = " -"@[BananaMania, Beaver, Bittersweet];" -msgstr "" -"// ローカルヒープ上に獲得された、クレヨンの (マネージド) ベクタ\n" -"let local_crayons: @[Crayon] = @[BananaMania, Beaver, Bittersweet];" - -#. type: Plain text -#: doc/tutorial.md:1262 -msgid "" -"// An exchange heap (owned) vector of crayons let exchange_crayons: " -"~[Crayon] = ~[Black, BlizzardBlue, Blue]; ~~~" -msgstr "" -"// 交換ヒープに獲得された、クレヨンの (所有) ベクタ\n" -"let exchange_crayons: ~[Crayon] = ~[Black, BlizzardBlue, Blue];\n" -"~~~" - -#. type: Plain text -#: doc/tutorial.md:1264 -msgid "The `+` operator means concatenation when applied to vector types." -msgstr "`+` 演算子がベクタ型に適用された場合、ベクタの結合を意味します。" - -#. type: Plain text -#: doc/tutorial.md:1274 -#, no-wrap -msgid "" -"~~~~\n" -"# enum Crayon { Almond, AntiqueBrass, Apricot,\n" -"# Aquamarine, Asparagus, AtomicTangerine,\n" -"# BananaMania, Beaver, Bittersweet };\n" -"# impl Clone for Crayon {\n" -"# fn clone(&self) -> Crayon {\n" -"# *self\n" -"# }\n" -"# }\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1277 -msgid "" -"let my_crayons = ~[Almond, AntiqueBrass, Apricot]; let your_crayons = " -"~[BananaMania, Beaver, Bittersweet];" -msgstr "" -"let my_crayons = ~[Almond, AntiqueBrass, Apricot];\n" -"let your_crayons = ~[BananaMania, Beaver, Bittersweet];" - -#. type: Plain text -#: doc/tutorial.md:1280 -msgid "" -"// Add two vectors to create a new one let our_crayons = my_crayons + " -"your_crayons;" -msgstr "" -"// 2 つのベクタを結合して、新しいベクタを作る\n" -"let our_crayons = my_crayons + your_crayons;" - -#. type: Plain text -#: doc/tutorial.md:1285 -msgid "" -"// .push_all() will append to a vector, provided it lives in a mutable slot " -"let mut my_crayons = my_crayons; my_crayons.push_all(your_crayons); ~~~~" -msgstr "" -"// .push_all() はベクタに要素を追加します。ミュータブルなスロットのベクタに対" -"してのみ有効です\n" -"let mut my_crayons = my_crayons;\n" -"my_crayons.push_all(your_crayons);\n" -"~~~~" - -#. type: Plain text -#: doc/tutorial.md:1290 -msgid "" -"> ***Note:*** The above examples of vector addition use owned > vectors. " -"Some operations on slices and stack vectors are > not yet well-supported. " -"Owned vectors are often the most > usable." -msgstr "" -"> ***注意:*** 上記のベクタに要素を追加する例では、所有ベクタを利用していま" -"す。いくつかの操作はスライスやスタックベクタを十分にサポートしていません。所" -"有ベクタが最も便利な場合がしばしばあります。" - -#. type: Plain text -#: doc/tutorial.md:1292 +#: doc/tutorial.md:1593 msgid "Square brackets denote indexing into a vector:" msgstr "角括弧はベクタの添字を表します。" #. type: Plain text -#: doc/tutorial.md:1304 -#, no-wrap -msgid "" -"~~~~\n" -"# enum Crayon { Almond, AntiqueBrass, Apricot,\n" -"# Aquamarine, Asparagus, AtomicTangerine,\n" -"# BananaMania, Beaver, Bittersweet };\n" -"# fn draw_scene(c: Crayon) { }\n" -"let crayons: [Crayon, ..3] = [BananaMania, Beaver, Bittersweet];\n" -"match crayons[0] {\n" -" Bittersweet => draw_scene(crayons[0]),\n" -" _ => ()\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1306 +#: doc/tutorial.md:1607 msgid "A vector can be destructured using pattern matching:" msgstr "ベクタはパターンマッチにより destructuring することができます。" #. type: Plain text -#: doc/tutorial.md:1316 -#, no-wrap -msgid "" -"~~~~\n" -"let numbers: &[int] = &[1, 2, 3];\n" -"let score = match numbers {\n" -" [] => 0,\n" -" [a] => a * 10,\n" -" [a, b] => a * 6 + b * 4,\n" -" [a, b, c, ..rest] => a * 5 + b * 3 + c * 2 + rest.len() as int\n" -"};\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1320 -msgid "" -"The elements of a vector _inherit the mutability of the vector_, and as " -"such, individual elements may not be reassigned when the vector lives in an " -"immutable slot." -msgstr "" -"ベクタの要素は、 __ベクタのミュータビリティを継承するので__、ベクタがイミュー" -"タブルなスロットに格納されている場合は個々の要素を変更する (再代入する) こと" -"はできません。" - -#. type: Plain text -#: doc/tutorial.md:1326 -#, no-wrap -msgid "" -"~~~ {.xfail-test}\n" -"# enum Crayon { Almond, AntiqueBrass, Apricot,\n" -"# Aquamarine, Asparagus, AtomicTangerine,\n" -"# BananaMania, Beaver, Bittersweet };\n" -"let crayons: ~[Crayon] = ~[BananaMania, Beaver, Bittersweet];\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1329 -msgid "crayons[0] = Apricot; // ERROR: Can't assign to immutable vector ~~~" -msgstr "" -"crayons[0] = Apricot; // ERROR: Can't assign to immutable vector\n" -"~~~" - -#. type: Plain text -#: doc/tutorial.md:1331 -msgid "Moving it into a mutable slot makes the elements assignable." -msgstr "" -"ベクタをミュータブルなスロットに移動することで、要素への代入が可能になりま" -"す。" - -#. type: Plain text -#: doc/tutorial.md:1337 -#, no-wrap -msgid "" -"~~~\n" -"# enum Crayon { Almond, AntiqueBrass, Apricot,\n" -"# Aquamarine, Asparagus, AtomicTangerine,\n" -"# BananaMania, Beaver, Bittersweet };\n" -"let crayons: ~[Crayon] = ~[BananaMania, Beaver, Bittersweet];\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1340 -msgid "" -"// Put the vector into a mutable slot let mut mutable_crayons = crayons;" -msgstr "" -"// ベクタをミュータブルなスロットに配置する\n" -"let mut mutable_crayons = crayons;" - -#. type: Plain text -#: doc/tutorial.md:1344 -msgid "// Now it's mutable to the bone mutable_crayons[0] = Apricot; ~~~" -msgstr "" -"// 完全にミュータブルになった\n" -"mutable_crayons[0] = Apricot;\n" -"~~~" - -#. type: Plain text -#: doc/tutorial.md:1347 -msgid "" -"This is a simple example of Rust's _dual-mode data structures_, also " -"referred to as _freezing and thawing_." -msgstr "" -"これは、__凍結および解凍__ (_freezing and thawing_) と呼ばれる、Rust の __" -"デュアルモードのデータ構造__ についての簡単な例です。" - -#. type: Plain text -#: doc/tutorial.md:1355 -msgid "" -"Strings are implemented with vectors of `u8`, though they have a distinct " -"type. They support most of the same allocation options as vectors, though " -"the string literal without a storage sigil (for example, `\"foo\"`) is " -"treated differently than a comparable vector (`[foo]`). Whereas plain " -"vectors are stack-allocated fixed-length vectors, plain strings are borrowed " -"pointers to read-only (static) memory. All strings are immutable." -msgstr "" -"文字列は `u8` 型のベクタとして実装されていますが、ベクタとは異なる独自の型を" -"持ちます。文字列はベクタと同じくメモリを獲得先を選択できますが、ストレージを" -"表すシジルが付与されていない文字列リテラル (`\"foo\"` など) は対応するベクタ " -"(`[foo]`) と異なった扱いをされます。シジルなしのベクタはスタックに獲得される" -"固定長のベクタですが、シジルなしの文字列は読み込み専用の (静的な) メモリ領域" -"への借用ポインタとなります。すべての文字列はイミュータブルです。" - -#. type: Plain text -#: doc/tutorial.md:1359 -msgid "" -"~~~ // A plain string is a slice to read-only (static) memory let " -"stack_crayons: &str = \"Almond, AntiqueBrass, Apricot\";" -msgstr "" -"~~~\n" -"// シジルなしの文字列は、読み込み専用な (静的) メモリへのスライス\n" -"let stack_crayons: &str = \"Almond, AntiqueBrass, Apricot\";" - -#. type: Plain text -#: doc/tutorial.md:1362 -msgid "" -"// The same thing, but with the `&` let stack_crayons: &str = &\"Aquamarine, " -"Asparagus, AtomicTangerine\";" -msgstr "" -"// `&` を付与した場合も、シジルなしと同じ意味\n" -"let stack_crayons: &str = &\"Aquamarine, Asparagus, AtomicTangerine\";" - -#. type: Plain text -#: doc/tutorial.md:1365 -msgid "" -"// A local heap (managed) string let local_crayons: @str = @\"BananaMania, " -"Beaver, Bittersweet\";" -msgstr "" -"// ローカルヒープ上の (マネージドな) 文字列\n" -"let local_crayons: @str = @\"BananaMania, Beaver, Bittersweet\";" - -#. type: Plain text -#: doc/tutorial.md:1369 -msgid "" -"// An exchange heap (owned) string let exchange_crayons: ~str = ~\"Black, " -"BlizzardBlue, Blue\"; ~~~" -msgstr "" -"// 交換ヒープ上の (所有) 文字列\n" -"let exchange_crayons: ~str = ~\"Black, BlizzardBlue, Blue\";\n" -"~~~" - -#. type: Plain text -#: doc/tutorial.md:1373 +#: doc/tutorial.md:1620 +#, fuzzy +#| msgid "" +#| "Both vectors and strings support a number of useful [methods](#methods), " +#| "defined in [`std::vec`] and [`std::str`]. Here are some examples." msgid "" "Both vectors and strings support a number of useful [methods](#methods), " -"defined in [`std::vec`] and [`std::str`]. Here are some examples." +"defined in [`std::vec`] and [`std::str`]." msgstr "" "ベクタと文字列は、[`std::vec`] と [`std::str`] で定義された、多くの有用な [メ" "ソッド](#methods) を持ちます。以下にいくつか例を挙げます。" #. type: Plain text -#: doc/tutorial.md:1376 -msgid "[`std::vec`]: std/vec.html [`std::str`]: std/str.html" +#: doc/tutorial.md:1623 +#, fuzzy +#| msgid "[`std::vec`]: std/vec.html [`std::str`]: std/str.html" +msgid "[`std::vec`]: std/vec/index.html [`std::str`]: std/str/index.html" msgstr "" "[`std::vec`]: std/vec.html\n" "[`std::str`]: std/str.html" #. type: Plain text -#: doc/tutorial.md:1387 -#, no-wrap -msgid "" -"~~~\n" -"# enum Crayon {\n" -"# Almond, AntiqueBrass, Apricot,\n" -"# Aquamarine, Asparagus, AtomicTangerine,\n" -"# BananaMania, Beaver, Bittersweet\n" -"# }\n" -"# fn unwrap_crayon(c: Crayon) -> int { 0 }\n" -"# fn eat_crayon_wax(i: int) { }\n" -"# fn store_crayon_in_nasal_cavity(i: uint, c: Crayon) { }\n" -"# fn crayon_to_str(c: Crayon) -> &str { \"\" }\n" +#: doc/tutorial.md:1635 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~ use std::rc::Rc;" msgstr "" +"~~~~\n" +"use std::task::spawn;" #. type: Plain text -#: doc/tutorial.md:1389 -msgid "let crayons = [Almond, AntiqueBrass, Apricot];" +#: doc/tutorial.md:1654 +#, fuzzy +#| msgid "~~~~ use std::task::spawn;" +msgid "~~~ use std::gc::Gc;" msgstr "" +"~~~~\n" +"use std::task::spawn;" #. type: Plain text -#: doc/tutorial.md:1393 -msgid "" -"// Check the length of the vector assert!(crayons.len() == 3); assert!(!" -"crayons.is_empty());" -msgstr "" -"// ベクタの長さをチェックする\n" -"assert!(crayons.len() == 3);\n" -"assert!(!crayons.is_empty());" - -#. type: Plain text -#: doc/tutorial.md:1400 -#, no-wrap -msgid "" -"// Iterate over a vector, obtaining a pointer to each element\n" -"// (`for` is explained in the container/iterator tutorial)\n" -"for crayon in crayons.iter() {\n" -" let delicious_crayon_wax = unwrap_crayon(*crayon);\n" -" eat_crayon_wax(delicious_crayon_wax);\n" -"}\n" -msgstr "" -"// ベクタの要素をイテレートし、各要素へのポインタを取得する\n" -"// (`for` については、は次の章で説明します)\n" -"for crayon in crayons.iter() {\n" -" let delicious_crayon_wax = unwrap_crayon(*crayon);\n" -" eat_crayon_wax(delicious_crayon_wax);\n" -"}\n" - -#. type: Plain text -#: doc/tutorial.md:1404 -msgid "" -"// Map vector elements let crayon_names = crayons.map(|v| " -"crayon_to_str(*v)); let favorite_crayon_name = crayon_names[0];" -msgstr "" -"// ベクタの要素をマッピング (変換) する\n" -"let crayon_names = crayons.map(|v| crayon_to_str(*v));\n" -"let favorite_crayon_name = crayon_names[0];" - -#. type: Plain text -#: doc/tutorial.md:1407 -msgid "" -"// Remove whitespace from before and after the string let " -"new_favorite_crayon_name = favorite_crayon_name.trim();" -msgstr "" -"// 文字列の先頭と末尾の空白を除去する\n" -"let new_favorite_crayon_name = favorite_crayon_name.trim();" - -#. type: Plain text -#: doc/tutorial.md:1413 -#, no-wrap -msgid "" -"if favorite_crayon_name.len() > 5 {\n" -" // Create a substring\n" -" println(favorite_crayon_name.slice_chars(0, 5));\n" -"}\n" -"~~~\n" -msgstr "" -"if favorite_crayon_name.len() > 5 {\n" -" // 部分文字列を作る\n" -" println(favorite_crayon_name.slice_chars(0, 5));\n" -"}\n" -"~~~\n" - -#. type: Plain text -#: doc/tutorial.md:1415 +#: doc/tutorial.md:1671 msgid "# Closures" msgstr "# クロージャ" #. type: Plain text -#: doc/tutorial.md:1420 +#: doc/tutorial.md:1676 msgid "" "Named functions, like those we've seen so far, may not refer to local " "variables declared outside the function: they do not close over their " @@ -3309,14 +2678,14 @@ msgstr "" "コードを書くことはできません。" #. type: Plain text -#: doc/tutorial.md:1423 +#: doc/tutorial.md:1679 msgid "~~~~ {.ignore} let foo = 10;" msgstr "" "~~~~ {.ignore}\n" "let foo = 10;" #. type: Plain text -#: doc/tutorial.md:1428 +#: doc/tutorial.md:1684 #, no-wrap msgid "" "fn bar() -> int {\n" @@ -3330,7 +2699,7 @@ msgstr "" "~~~~\n" #. type: Plain text -#: doc/tutorial.md:1431 +#: doc/tutorial.md:1687 msgid "" "Rust also supports _closures_, functions that can access variables in the " "enclosing scope." @@ -3339,31 +2708,35 @@ msgstr "" "ポートしています。" #. type: Plain text -#: doc/tutorial.md:1434 +#: doc/tutorial.md:1690 msgid "~~~~ fn call_closure_with_ten(b: |int|) { b(10); }" msgstr "" "~~~~\n" "fn call_closure_with_ten(b: |int|) { b(10); }" #. type: Plain text -#: doc/tutorial.md:1437 +#: doc/tutorial.md:1693 +#, fuzzy +#| msgid "" +#| "let captured_var = 20; let closure = |arg| println(fmt!(\"captured_var=" +#| "%d, arg=%d\", captured_var, arg));" msgid "" -"let captured_var = 20; let closure = |arg| println(fmt!(\"captured_var=%d, " -"arg=%d\", captured_var, arg));" +"let captured_var = 20; let closure = |arg| println!(\"captured_var={}, " +"arg={}\", captured_var, arg);" msgstr "" "let captured_var = 20;\n" "let closure = |arg| println(fmt!(\"captured_var=%d, arg=%d\", captured_var, " "arg));" #. type: Plain text -#: doc/tutorial.md:1440 +#: doc/tutorial.md:1696 msgid "call_closure_with_ten(closure); ~~~~" msgstr "" "call_closure_with_ten(closure);\n" "~~~~" #. type: Plain text -#: doc/tutorial.md:1446 +#: doc/tutorial.md:1702 msgid "" "Closures begin with the argument list between vertical bars and are followed " "by a single expression. Remember that a block, `{ ; ; ... }`, " @@ -3377,7 +2750,7 @@ msgstr "" "場合、ブロックの値は最後の式の値となり、そうでなければ `()` となります。" #. type: Plain text -#: doc/tutorial.md:1451 +#: doc/tutorial.md:1707 msgid "" "The types of the arguments are generally omitted, as is the return type, " "because the compiler can almost always infer them. In the rare case where " @@ -3389,7 +2762,7 @@ msgstr "" "場合は、引数と戻り値の型注釈を付けることがあります。" #. type: Plain text -#: doc/tutorial.md:1455 +#: doc/tutorial.md:1711 msgid "~~~~ let square = |x: int| -> uint { (x * x) as uint }; ~~~~" msgstr "" "~~~~\n" @@ -3397,7 +2770,7 @@ msgstr "" "~~~~~~~~\n" #. type: Plain text -#: doc/tutorial.md:1459 +#: doc/tutorial.md:1715 msgid "" "There are several forms of closure, each with its own role. The most common, " "called a _stack closure_, has type `||` and can directly access local " @@ -3408,7 +2781,7 @@ msgstr "" "カル変数に直接アクセスすることができます。" #. type: Plain text -#: doc/tutorial.md:1464 +#: doc/tutorial.md:1720 msgid "~~~~ let mut max = 0; [1, 2, 3].map(|x| if *x > max { max = *x }); ~~~~" msgstr "" "~~~~\n" @@ -3417,7 +2790,7 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:1473 +#: doc/tutorial.md:1729 msgid "" "Stack closures are very efficient because their environment is allocated on " "the call stack and refers by pointer to captured locals. To ensure that " @@ -3435,120 +2808,53 @@ msgstr "" "ず、スタッククロージャは Rust のコードのあちこちに登場します。" #. type: Plain text -#: doc/tutorial.md:1475 -msgid "## Managed closures" -msgstr "## マネージドクロージャ" - -#. type: Plain text -#: doc/tutorial.md:1481 -msgid "" -"When you need to store a closure in a data structure, a stack closure will " -"not do, since the compiler will refuse to let you store it. For this " -"purpose, Rust provides a type of closure that has an arbitrary lifetime, " -"written `@fn` (boxed closure, analogous to the `@` pointer type described " -"earlier). This type of closure *is* first-class." -msgstr "" -"クロージャをデータ構造に格納する必要がある場合、スタッククロージャを利用する" -"ことは言語仕様上、許可されていませんRust は、このような目的のために任意の寿命" -"を持つクロージャ型、`@fn` (ボックスクロージャ、 前述の `@` ポインタ型と似たよ" -"うなもの) を提供しています。この種のクロージャ **は** 第一級の値です。" - -#. type: Plain text -#: doc/tutorial.md:1486 -msgid "" -"A managed closure does not directly access its environment, but merely " -"copies out the values that it closes over into a private data structure. " -"This means that it can not assign to these variables, and cannot observe " -"updates to them." -msgstr "" -"マネージドクロージャは環境に直接アクセスすることはできませんが、単に値をコ" -"ピーしてプライベートなデータ構造に閉じ込めます。これは、クロージャは変数に値" -"を代入することや、値の変更を監視することもできません。" - -#. type: Plain text -#: doc/tutorial.md:1489 -msgid "" -"This code creates a closure that adds a given string to its argument, " -"returns it from a function, and then calls it:" -msgstr "" -"このコードは、与えられた文字列を引数に追加するクロージャを返却する関数と、そ" -"の呼び出しです。" - -#. type: Plain text -#: doc/tutorial.md:1495 -#, no-wrap -msgid "" -"~~~~\n" -"fn mk_appender(suffix: ~str) -> @fn(~str) -> ~str {\n" -" // The compiler knows that we intend this closure to be of type @fn\n" -" return |s| s + suffix;\n" -"}\n" -msgstr "" -"~~~~\n" -"fn mk_appender(suffix: ~str) -> @fn(~str) -> ~str {\n" -" // コンパイラはこのクロージャが @fn 型であることを推論します\n" -" return |s| s + suffix;\n" -"}\n" - -#. type: Plain text -#: doc/tutorial.md:1501 -#, no-wrap -msgid "" -"fn main() {\n" -" let shout = mk_appender(~\"!\");\n" -" println(shout(~\"hey ho, let's go\"));\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1503 +#: doc/tutorial.md:1731 msgid "## Owned closures" msgstr "## 所有クロージャ" #. type: Plain text -#: doc/tutorial.md:1510 +#: doc/tutorial.md:1738 msgid "" -"Owned closures, written `proc`, hold on to " -"things that can safely be sent between processes. They copy the values they " -"close over, much like managed closures, but they also own them: that is, no " -"other code can access them. Owned closures are used in concurrent code, " -"particularly for spawning [tasks][tasks]." +"Owned closures, written `proc`, hold on to things that can safely be sent " +"between processes. They copy the values they close over, much like managed " +"closures, but they also own them: that is, no other code can access them. " +"Owned closures are used in concurrent code, particularly for spawning [tasks]" +"[tasks]." msgstr "" -"`~` `proc` で書き表される所有クロージャは安全にプロセス" -"間で送信することができます。所有クローじゃはマネージドクロージャと全く同じよ" -"うに閉じ込める値をコピーしますが、値を所有します。つまり、他のコードは閉じ込" -"められた値にアクセスできなくなります。所有クロージャは並列プログラム、特に " -"[タスク][tasks] 生成で利用されます。" +"`~` `proc` で書き表される所有クロージャは安全にプロセス間で送信することができ" +"ます。所有クローじゃはマネージドクロージャと全く同じように閉じ込める値をコ" +"ピーしますが、値を所有します。つまり、他のコードは閉じ込められた値にアクセス" +"できなくなります。所有クロージャは並列プログラム、特に [タスク][tasks] 生成で" +"利用されます。" #. type: Plain text -#: doc/tutorial.md:1512 +#: doc/tutorial.md:1740 msgid "## Closure compatibility" msgstr "## クロージャの互換性" #. type: Plain text -#: doc/tutorial.md:1519 +#: doc/tutorial.md:1747 msgid "" "Rust closures have a convenient subtyping property: you can pass any kind of " "closure (as long as the arguments and return types match) to functions that " "expect a `||`. Thus, when writing a higher-order function that only calls " "its function argument, and does nothing else with it, you should almost " -"always declare the type of that argument as `||`. That way, callers may " -"pass any kind of closure." +"always declare the type of that argument as `||`. That way, callers may pass " +"any kind of closure." msgstr "" "Rust のクロージャは型の派生 (subtyping) という便利な性質を持っています。この" -"性質により、`||` 型を期待する関数には (引数と戻り値の型が一致する限り) 任" -"意の種類のクロージャを渡すことができます。したがって、引数で渡された関数につ" -"いては呼び出すだけで他に何もしない高階関数を書くときには、ほぼすべてのケース" -"で引数の型を `||` と宣言するべきです。そうすることで、呼び出し元は任意の種類" -"のクロージャを渡すことができるよになります。" +"性質により、`||` 型を期待する関数には (引数と戻り値の型が一致する限り) 任意の" +"種類のクロージャを渡すことができます。したがって、引数で渡された関数について" +"は呼び出すだけで他に何もしない高階関数を書くときには、ほぼすべてのケースで引" +"数の型を `||` と宣言するべきです。そうすることで、呼び出し元は任意の種類のク" +"ロージャを渡すことができるよになります。" #. type: Plain text -#: doc/tutorial.md:1527 +#: doc/tutorial.md:1755 msgid "" -"~~~~ fn call_twice(f: ||) { f(); f(); } let closure = || { \"I'm a " -"closure, and it doesn't matter what type I am\"; }; fn function() { \"I'm a " -"normal function\"; } call_twice(closure); call_twice(function); ~~~~" +"~~~~ fn call_twice(f: ||) { f(); f(); } let closure = || { \"I'm a closure, " +"and it doesn't matter what type I am\"; }; fn function() { \"I'm a normal " +"function\"; } call_twice(closure); call_twice(function); ~~~~" msgstr "" "~~~~\n" "fn call_twice(f: ||) { f(); f(); }\n" @@ -3560,7 +2866,7 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:1531 +#: doc/tutorial.md:1759 msgid "" "> ***Note:*** Both the syntax and the semantics will be changing > in small " "ways. At the moment they can be unsound in some > scenarios, particularly " @@ -3571,45 +2877,25 @@ msgstr "" "舞いが起こされる場合があります。" #. type: Plain text -#: doc/tutorial.md:1533 +#: doc/tutorial.md:1761 msgid "## Do syntax" msgstr "## do 構文" #. type: Plain text -#: doc/tutorial.md:1536 +#: doc/tutorial.md:1764 +#, fuzzy +#| msgid "" +#| "The `do` expression provides a way to treat higher-order functions " +#| "(functions that take closures as arguments) as control structures." msgid "" -"The `do` expression provides a way to treat higher-order functions " -"(functions that take closures as arguments) as control structures." +"The `do` expression makes it easier to call functions that take procedures " +"as arguments." msgstr "" "`do` 式は高階関数 (クロージャを引数にとる関数) を制御構造のように取り扱う方法" "を提供します。" #. type: Plain text -#: doc/tutorial.md:1539 -msgid "" -"Consider this function that iterates over a vector of integers, passing in a " -"pointer to each integer in the vector:" -msgstr "" -"要素が整数のベクトルをイテレートし、各整数へのポインタをクロージャへと渡す、" -"以下の関数について考えます。" - -#. type: Plain text -#: doc/tutorial.md:1549 -#, no-wrap -msgid "" -"~~~~\n" -"fn each(v: &[int], op: |v: &int|) {\n" -" let mut n = 0;\n" -" while n < v.len() {\n" -" op(&v[n]);\n" -" n += 1;\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1553 +#: doc/tutorial.md:1776 msgid "" "As a caller, if we use a closure to provide the final operator argument, we " "can write it in a way that has a pleasant, block-like structure." @@ -3618,52 +2904,35 @@ msgstr "" "コードを書くことが可能です。" #. type: Plain text -#: doc/tutorial.md:1561 -#, no-wrap -msgid "" -"~~~~\n" -"# fn each(v: &[int], op: |v: &int|) { }\n" -"# fn do_some_work(i: &int) { }\n" -"each([1, 2, 3], |n| {\n" -" do_some_work(n);\n" -"});\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1564 +#: doc/tutorial.md:1786 +#, fuzzy +#| msgid "" +#| "This is such a useful pattern that Rust has a special form of function " +#| "call that can be written more like a built-in control structure:" msgid "" "This is such a useful pattern that Rust has a special form of function call " -"that can be written more like a built-in control structure:" +"for these functions." msgstr "" "このような便利なパターンに対応するため、Rust には、言語組み込みの制御構造のよ" "うな記述が可能な、特別な関数呼び出し形式があります。" #. type: Plain text -#: doc/tutorial.md:1572 -#, no-wrap -msgid "" -"~~~~\n" -"# fn each(v: &[int], op: |v: &int|) { }\n" -"# fn do_some_work(i: &int) { }\n" -"do each([1, 2, 3]) |n| {\n" -" do_some_work(n);\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1577 +#: doc/tutorial.md:1798 +#, fuzzy +#| msgid "" +#| "The call is prefixed with the keyword `do` and, instead of writing the " +#| "final closure inside the argument list, it appears outside of the " +#| "parentheses, where it looks more like a typical block of code." msgid "" "The call is prefixed with the keyword `do` and, instead of writing the final " -"closure inside the argument list, it appears outside of the parentheses, " +"procedure inside the argument list, it appears outside of the parentheses, " "where it looks more like a typical block of code." msgstr "" "関数呼び出しの前には `do` キーワードをつけ、引数リストの中に最後のクロージャ" "引数を書くのではなく、普通のコードブロックのように、丸括弧の外に記述します。" #. type: Plain text -#: doc/tutorial.md:1582 +#: doc/tutorial.md:1803 msgid "" "`do` is a convenient way to create tasks with the `task::spawn` function. " "`spawn` has the signature `spawn(fn: proc())`. In other words, it is a " @@ -3675,24 +2944,14 @@ msgstr "" "す。" #. type: Plain text -#: doc/tutorial.md:1585 doc/tutorial.md:1597 +#: doc/tutorial.md:1806 doc/tutorial.md:1818 msgid "~~~~ use std::task::spawn;" msgstr "" "~~~~\n" "use std::task::spawn;" #. type: Plain text -#: doc/tutorial.md:1590 -#, no-wrap -msgid "" -"do spawn() || {\n" -" debug!(\"I'm a task, whatever\");\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1594 +#: doc/tutorial.md:1815 msgid "" "Look at all those bars and parentheses -- that's two empty argument lists " "back to back. Since that is so unsightly, empty argument lists may be " @@ -3703,17 +2962,7 @@ msgstr "" "が可能です。" #. type: Plain text -#: doc/tutorial.md:1602 -#, no-wrap -msgid "" -"do spawn {\n" -" debug!(\"Kablam!\");\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1605 +#: doc/tutorial.md:1826 msgid "" "If you want to see the output of `debug!` statements, you will need to turn " "on `debug!` logging. To enable `debug!` logging, set the RUST_LOG " @@ -3727,12 +2976,12 @@ msgstr "" "は `foo` になります。" #. type: Plain text -#: doc/tutorial.md:1607 +#: doc/tutorial.md:1828 msgid "# Methods" msgstr "# メソッド" #. type: Plain text -#: doc/tutorial.md:1613 +#: doc/tutorial.md:1834 msgid "" "Methods are like functions except that they always begin with a special " "argument, called `self`, which has the type of the method's receiver. The " @@ -3744,7 +2993,7 @@ msgstr "" "のです。メソッドはドット記法を浸かって `my_vec.len()` のように呼び出します。" #. type: Plain text -#: doc/tutorial.md:1617 +#: doc/tutorial.md:1838 msgid "" "_Implementations_, written with the `impl` keyword, can define methods on " "most Rust types, including structs and enums. As an example, let's define a " @@ -3755,52 +3004,17 @@ msgstr "" "す。例のように、 `draw` メソッドを `Shape` 列挙型に定義してみましょう。" #. type: Plain text -#: doc/tutorial.md:1625 -#, no-wrap -msgid "" -"~~~\n" -"# fn draw_circle(p: Point, f: f64) { }\n" -"# fn draw_rectangle(p: Point, p: Point) { }\n" -"struct Point {\n" -" x: f64,\n" -" y: f64\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1630 -#, no-wrap -msgid "" -"enum Shape {\n" -" Circle(Point, f64),\n" -" Rectangle(Point, Point)\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1639 -#, no-wrap -msgid "" -"impl Shape {\n" -" fn draw(&self) {\n" -" match *self {\n" -" Circle(p, f) => draw_circle(p, f),\n" -" Rectangle(p1, p2) => draw_rectangle(p1, p2)\n" -" }\n" -" }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1643 -msgid "let s = Circle(Point { x: 1f, y: 2f }, 3f); s.draw(); ~~~" +#: doc/tutorial.md:1864 +#, fuzzy +#| msgid "let s = Circle(Point { x: 1f, y: 2f }, 3f); s.draw(); ~~~" +msgid "let s = Circle(Point { x: 1.0, y: 2.0 }, 3.0); s.draw(); ~~~" msgstr "" "let s = Circle(Point { x: 1f, y: 2f }, 3f);\n" "s.draw();\n" "~~~" #. type: Plain text -#: doc/tutorial.md:1647 +#: doc/tutorial.md:1868 msgid "" "This defines an _implementation_ for `Shape` containing a single method, " "`draw`. In most respects the `draw` method is defined like any other " @@ -3811,7 +3025,7 @@ msgstr "" "うに定義されます。" #. type: Plain text -#: doc/tutorial.md:1652 +#: doc/tutorial.md:1873 msgid "" "The type of `self` is the type on which the method is implemented, or a " "pointer thereof. As an argument it is written either `self`, `&self`, " @@ -3823,8 +3037,26 @@ msgstr "" "様、メソッドを呼び出すための互換性のあるポインタ型をもつ必要があります。" #. type: Plain text -#: doc/tutorial.md:1667 -#, no-wrap +#: doc/tutorial.md:1888 +#, fuzzy, no-wrap +#| msgid "" +#| "~~~\n" +#| "# fn draw_circle(p: Point, f: f64) { }\n" +#| "# fn draw_rectangle(p: Point, p: Point) { }\n" +#| "# struct Point { x: f64, y: f64 }\n" +#| "# enum Shape {\n" +#| "# Circle(Point, f64),\n" +#| "# Rectangle(Point, Point)\n" +#| "# }\n" +#| "# impl Shape {\n" +#| "# fn draw_borrowed(&self) { ... }\n" +#| "# fn draw_managed(@self) { ... }\n" +#| "# fn draw_owned(~self) { ... }\n" +#| "# fn draw_value(self) { ... }\n" +#| "# }\n" +#| "# let s = Circle(Point { x: 1f, y: 2f }, 3f);\n" +#| "// As with typical function arguments, managed and owned pointers\n" +#| "// are automatically converted to borrowed pointers\n" msgid "" "~~~\n" "# fn draw_circle(p: Point, f: f64) { }\n" @@ -3835,61 +3067,12 @@ msgid "" "# Rectangle(Point, Point)\n" "# }\n" "impl Shape {\n" -" fn draw_borrowed(&self) { ... }\n" +" fn draw_reference(&self) { ... }\n" " fn draw_managed(@self) { ... }\n" " fn draw_owned(~self) { ... }\n" " fn draw_value(self) { ... }\n" "}\n" msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1669 -msgid "let s = Circle(Point { x: 1f, y: 2f }, 3f);" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1675 -msgid "" -"(@s).draw_managed(); (~s).draw_owned(); (&s).draw_borrowed(); s." -"draw_value(); ~~~" -msgstr "" -"(@s).draw_managed();\n" -"(~s).draw_owned();\n" -"(&s).draw_borrowed();\n" -"s.draw_value();\n" -"~~~" - -#. type: Plain text -#: doc/tutorial.md:1679 -msgid "" -"Methods typically take a borrowed pointer self type, so the compiler will go " -"to great lengths to convert a callee to a borrowed pointer." -msgstr "" -"多くのメソッドは、借用ポインタの self 型を持つので、コンパイラは呼び出し先を" -"借用ポインタに変換するためあらゆる手段を講じます。" - -#. type: Plain text -#: doc/tutorial.md:1697 -#, no-wrap -msgid "" -"~~~\n" -"# fn draw_circle(p: Point, f: f64) { }\n" -"# fn draw_rectangle(p: Point, p: Point) { }\n" -"# struct Point { x: f64, y: f64 }\n" -"# enum Shape {\n" -"# Circle(Point, f64),\n" -"# Rectangle(Point, Point)\n" -"# }\n" -"# impl Shape {\n" -"# fn draw_borrowed(&self) { ... }\n" -"# fn draw_managed(@self) { ... }\n" -"# fn draw_owned(~self) { ... }\n" -"# fn draw_value(self) { ... }\n" -"# }\n" -"# let s = Circle(Point { x: 1f, y: 2f }, 3f);\n" -"// As with typical function arguments, managed and owned pointers\n" -"// are automatically converted to borrowed pointers\n" -msgstr "" "~~~\n" "# fn draw_circle(p: Point, f: f64) { }\n" "# fn draw_rectangle(p: Point, p: Point) { }\n" @@ -3909,38 +3092,145 @@ msgstr "" "// 自動的に借用ポインタに変換される\n" #. type: Plain text -#: doc/tutorial.md:1700 -msgid "(@s).draw_borrowed(); (~s).draw_borrowed();" +#: doc/tutorial.md:1890 +#, fuzzy +#| msgid "let s = Circle(Point { x: 1f, y: 2f }, 3f); s.draw(); ~~~" +msgid "let s = Circle(Point { x: 1.0, y: 2.0 }, 3.0);" +msgstr "" +"let s = Circle(Point { x: 1f, y: 2f }, 3f);\n" +"s.draw();\n" +"~~~" + +#. type: Plain text +#: doc/tutorial.md:1896 +#, fuzzy +#| msgid "" +#| "(@s).draw_managed(); (~s).draw_owned(); (&s).draw_borrowed(); s." +#| "draw_value(); ~~~" +msgid "" +"(@s).draw_managed(); (~s).draw_owned(); (&s).draw_reference(); s." +"draw_value(); ~~~" +msgstr "" +"(@s).draw_managed();\n" +"(~s).draw_owned();\n" +"(&s).draw_borrowed();\n" +"s.draw_value();\n" +"~~~" + +#. type: Plain text +#: doc/tutorial.md:1900 +#, fuzzy +#| msgid "" +#| "Methods typically take a borrowed pointer self type, so the compiler will " +#| "go to great lengths to convert a callee to a borrowed pointer." +msgid "" +"Methods typically take a reference self type, so the compiler will go to " +"great lengths to convert a callee to a reference." +msgstr "" +"多くのメソッドは、借用ポインタの self 型を持つので、コンパイラは呼び出し先を" +"借用ポインタに変換するためあらゆる手段を講じます。" + +#. type: Plain text +#: doc/tutorial.md:1918 +#, fuzzy, no-wrap +#| msgid "" +#| "~~~\n" +#| "# fn draw_circle(p: Point, f: f64) { }\n" +#| "# fn draw_rectangle(p: Point, p: Point) { }\n" +#| "# struct Point { x: f64, y: f64 }\n" +#| "# enum Shape {\n" +#| "# Circle(Point, f64),\n" +#| "# Rectangle(Point, Point)\n" +#| "# }\n" +#| "# impl Shape {\n" +#| "# fn draw_borrowed(&self) { ... }\n" +#| "# fn draw_managed(@self) { ... }\n" +#| "# fn draw_owned(~self) { ... }\n" +#| "# fn draw_value(self) { ... }\n" +#| "# }\n" +#| "# let s = Circle(Point { x: 1f, y: 2f }, 3f);\n" +#| "// As with typical function arguments, managed and owned pointers\n" +#| "// are automatically converted to borrowed pointers\n" +msgid "" +"~~~\n" +"# fn draw_circle(p: Point, f: f64) { }\n" +"# fn draw_rectangle(p: Point, p: Point) { }\n" +"# struct Point { x: f64, y: f64 }\n" +"# enum Shape {\n" +"# Circle(Point, f64),\n" +"# Rectangle(Point, Point)\n" +"# }\n" +"# impl Shape {\n" +"# fn draw_reference(&self) { ... }\n" +"# fn draw_managed(@self) { ... }\n" +"# fn draw_owned(~self) { ... }\n" +"# fn draw_value(self) { ... }\n" +"# }\n" +"# let s = Circle(Point { x: 1.0, y: 2.0 }, 3.0);\n" +"// As with typical function arguments, managed and owned pointers\n" +"// are automatically converted to references\n" +msgstr "" +"~~~\n" +"# fn draw_circle(p: Point, f: f64) { }\n" +"# fn draw_rectangle(p: Point, p: Point) { }\n" +"# struct Point { x: f64, y: f64 }\n" +"# enum Shape {\n" +"# Circle(Point, f64),\n" +"# Rectangle(Point, Point)\n" +"# }\n" +"# impl Shape {\n" +"# fn draw_borrowed(&self) { ... }\n" +"# fn draw_managed(@self) { ... }\n" +"# fn draw_owned(~self) { ... }\n" +"# fn draw_value(self) { ... }\n" +"# }\n" +"# let s = Circle(Point { x: 1f, y: 2f }, 3f);\n" +"// 関数の引数と同様、マネージドポインタと所有ポインタは、\n" +"// 自動的に借用ポインタに変換される\n" + +#. type: Plain text +#: doc/tutorial.md:1921 +#, fuzzy +#| msgid "(@s).draw_borrowed(); (~s).draw_borrowed();" +msgid "(@s).draw_reference(); (~s).draw_reference();" msgstr "" "(@s).draw_borrowed();\n" "(~s).draw_borrowed();" #. type: Plain text -#: doc/tutorial.md:1704 +#: doc/tutorial.md:1925 +#, fuzzy +#| msgid "" +#| "// Unlike typical function arguments, the self value will // " +#| "automatically be referenced ... s.draw_borrowed();" msgid "" "// Unlike typical function arguments, the self value will // automatically " -"be referenced ... s.draw_borrowed();" +"be referenced ... s.draw_reference();" msgstr "" "// 関数の引数とは異なり、 self の値は自動的にリファレンスされたり、 ...\n" "s.draw_borrowed();" #. type: Plain text -#: doc/tutorial.md:1707 -msgid "// ... and dereferenced (& &s).draw_borrowed();" +#: doc/tutorial.md:1928 +#, fuzzy +#| msgid "// ... and dereferenced (& &s).draw_borrowed();" +msgid "// ... and dereferenced (& &s).draw_reference();" msgstr "" "// ... デリファレンスされたり、\n" "(& &s).draw_borrowed();" #. type: Plain text -#: doc/tutorial.md:1711 -msgid "// ... and dereferenced and borrowed (&@~s).draw_borrowed(); ~~~" +#: doc/tutorial.md:1932 +#, fuzzy +#| msgid "// ... and dereferenced and borrowed (&@~s).draw_borrowed(); ~~~" +msgid "// ... and dereferenced and borrowed (&@~s).draw_reference(); ~~~" msgstr "" "// ... デリファレンス後借用されたりします\n" "(&@~s).draw_borrowed();\n" "~~~" #. type: Plain text -#: doc/tutorial.md:1715 +#: doc/tutorial.md:1936 msgid "" "Implementations may also define standalone (sometimes called \"static\") " "methods. The absence of a `self` parameter distinguishes such methods. " @@ -3952,19 +3242,7 @@ msgstr "" "定義することが推奨されています。" #. type: Plain text -#: doc/tutorial.md:1722 -#, no-wrap -msgid "" -"~~~~ {.xfail-test}\n" -"impl Circle {\n" -" fn area(&self) -> f64 { ... }\n" -" fn new(area: f64) -> Circle { ... }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1724 +#: doc/tutorial.md:1945 msgid "" "To call such a method, just prefix it with the type name and a double colon:" msgstr "" @@ -3972,26 +3250,12 @@ msgstr "" "出せます。" #. type: Plain text -#: doc/tutorial.md:1733 -#, no-wrap -msgid "" -"~~~~\n" -"use std::f64::consts::pi;\n" -"struct Circle { radius: f64 }\n" -"impl Circle {\n" -" fn new(area: f64) -> Circle { Circle { radius: (area / pi).sqrt() } }\n" -"}\n" -"let c = Circle::new(42.5);\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1735 +#: doc/tutorial.md:1956 msgid "# Generics" msgstr "# ジェネリクス" #. type: Plain text -#: doc/tutorial.md:1743 +#: doc/tutorial.md:1964 msgid "" "Throughout this tutorial, we've been defining functions that act only on " "specific data types. With type parameters we can also define functions whose " @@ -4007,22 +3271,7 @@ msgstr "" "`map` というジェネリック関数について考えます。" #. type: Plain text -#: doc/tutorial.md:1753 -#, no-wrap -msgid "" -"~~~~\n" -"fn map(vector: &[T], function: |v: &T| -> U) -> ~[U] {\n" -" let mut accumulator = ~[];\n" -" for element in vector.iter() {\n" -" accumulator.push(function(element));\n" -" }\n" -" return accumulator;\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1758 +#: doc/tutorial.md:1979 msgid "" "When defined with type parameters, as denoted by ``, this function can " "be applied to any type of vector, as long as the type of `function`'s " @@ -4033,7 +3282,7 @@ msgstr "" "任意の型のベクタを引数として渡すことが可能になります。" #. type: Plain text -#: doc/tutorial.md:1768 +#: doc/tutorial.md:1989 msgid "" "Inside a generic function, the names of the type parameters (capitalized by " "convention) stand for opaque types. All you can do with instances of these " @@ -4054,14 +3303,14 @@ msgstr "" "することで、関数の引数としてとることのできる型の範囲が広がります。" #. type: Plain text -#: doc/tutorial.md:1770 +#: doc/tutorial.md:1991 msgid "" "Generic `type`, `struct`, and `enum` declarations follow the same pattern:" msgstr "" "ジェネリックな型、構造体、および列挙型の宣言は、同じパターンに従います。" #. type: Plain text -#: doc/tutorial.md:1774 +#: doc/tutorial.md:1995 msgid "~~~~ use std::hashmap::HashMap; type Set = HashMap;" msgstr "" "~~~~\n" @@ -4069,27 +3318,7 @@ msgstr "" "type Set = HashMap;" #. type: Plain text -#: doc/tutorial.md:1778 -#, no-wrap -msgid "" -"struct Stack {\n" -" elements: ~[T]\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1784 -#, no-wrap -msgid "" -"enum Option {\n" -" Some(T),\n" -" None\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1787 +#: doc/tutorial.md:2008 msgid "" "These declarations can be instantiated to valid types like `Set`, " "`Stack`, and `Option`." @@ -4098,7 +3327,7 @@ msgstr "" "な型を生成することができます。" #. type: Plain text -#: doc/tutorial.md:1793 +#: doc/tutorial.md:2014 msgid "" "The last type in that example, `Option`, appears frequently in Rust code. " "Because Rust does not have null pointers (except in unsafe code), we need " @@ -4113,23 +3342,7 @@ msgstr "" "ることが一般的です。" #. type: Plain text -#: doc/tutorial.md:1804 -#, no-wrap -msgid "" -"~~~~\n" -"# struct Point { x: f64, y: f64 }\n" -"# enum Shape { Circle(Point, f64), Rectangle(Point, Point) }\n" -"fn radius(shape: Shape) -> Option {\n" -" match shape {\n" -" Circle(_, radius) => Some(radius),\n" -" Rectangle(*) => None\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1812 +#: doc/tutorial.md:2033 msgid "" "The Rust compiler compiles generic functions very efficiently by " "*monomorphizing* them. *Monomorphization* is a fancy name for a simple idea: " @@ -4146,21 +3359,34 @@ msgstr "" "の特性を持ちます。" #. type: Plain text -#: doc/tutorial.md:1814 +#: doc/tutorial.md:2035 msgid "## Traits" msgstr "## トレイト" #. type: Plain text -#: doc/tutorial.md:1824 +#: doc/tutorial.md:2047 +#, fuzzy +#| msgid "" +#| "Within a generic function the operations available on generic types are " +#| "very limited. After all, since the function doesn't know what types it is " +#| "operating on, it can't safely modify or query their values. This is where " +#| "_traits_ come into play. Traits are Rust's most powerful tool for writing " +#| "polymorphic code. Java developers will see them as similar to Java " +#| "interfaces, and Haskellers will notice their similarities to type " +#| "classes. Rust's traits are a form of *bounded polymorphism*: a trait is a " +#| "way of limiting the set of possible types that a type parameter could " +#| "refer to." msgid "" -"Within a generic function the operations available on generic types are very " -"limited. After all, since the function doesn't know what types it is " -"operating on, it can't safely modify or query their values. This is where " -"_traits_ come into play. Traits are Rust's most powerful tool for writing " -"polymorphic code. Java developers will see them as similar to Java " +"Within a generic function -- that is, a function parameterized by a type " +"parameter, say, `T` -- the operations we can do on arguments of type `T` are " +"quite limited. After all, since we don't know what type `T` will be " +"instantiated with, we can't safely modify or query values of type `T`. This " +"is where _traits_ come into play. Traits are Rust's most powerful tool for " +"writing polymorphic code. Java developers will see them as similar to Java " "interfaces, and Haskellers will notice their similarities to type classes. " -"Rust's traits are a form of *bounded polymorphism*: a trait is a way of " -"limiting the set of possible types that a type parameter could refer to." +"Rust's traits give us a way to express *bounded polymorphism*: by limiting " +"the set of possible types that a type parameter could refer to, they expand " +"the number of operations we can safely perform on arguments of that type." msgstr "" "ジェネリック関数の内部では、ジェネリック型に対して非常に限られた操作しか行え" "ません。つまるところ、ジェネリック関数は操作の対象とする型が何なのか知らない" @@ -4172,13 +3398,20 @@ msgstr "" "より、型パラメータが示す得る型の集合を限定することができます。" #. type: Plain text -#: doc/tutorial.md:1832 +#: doc/tutorial.md:2054 +#, fuzzy +#| msgid "" +#| "As motivation, let us consider copying in Rust. The `clone` method is " +#| "not defined for all Rust types. One reason is user-defined destructors: " +#| "copying a type that has a destructor could result in the destructor " +#| "running multiple times. Therefore, types with destructors cannot be " +#| "copied unless you explicitly implement `Clone` for them." msgid "" -"As motivation, let us consider copying in Rust. The `clone` method is not " -"defined for all Rust types. One reason is user-defined destructors: copying " -"a type that has a destructor could result in the destructor running multiple " -"times. Therefore, types with destructors cannot be copied unless you " -"explicitly implement `Clone` for them." +"As motivation, let us consider copying of values in Rust. The `clone` " +"method is not defined for values of every type. One reason is user-defined " +"destructors: copying a value of a type that has a destructor could result in " +"the destructor running multiple times. Therefore, values of types that have " +"destructors cannot be copied unless we explicitly implement `clone` for them." msgstr "" "トレイト導入の動機となる例として、Rust でのコピーについて考えます。`clone` メ" "ソッドはすべての Rust の型に対して定義されていません。定義されていない理由の" @@ -4188,11 +3421,17 @@ msgstr "" "クタをもつ型をコピーすることはできません。" #. type: Plain text -#: doc/tutorial.md:1837 +#: doc/tutorial.md:2060 +#, fuzzy +#| msgid "" +#| "This complicates handling of generic functions. If you have a type " +#| "parameter `T`, can you copy values of that type? In Rust, you can't, and " +#| "if you try to run the following code the compiler will complain." msgid "" -"This complicates handling of generic functions. If you have a type " -"parameter `T`, can you copy values of that type? In Rust, you can't, and if " -"you try to run the following code the compiler will complain." +"This complicates handling of generic functions. If we have a function with " +"a type parameter `T`, can we copy values of type `T` inside that function? " +"In Rust, we can't, and if we try to run the following code the compiler will " +"complain." msgstr "" "このことはジェネリック関数の扱い方を複雑にします。型パラメータ `T` が存在した" "として、この型の値をコピーすることができるでしょうか?Rust では、コピーするこ" @@ -4200,7 +3439,7 @@ msgstr "" "う。" #. type: Plain text -#: doc/tutorial.md:1844 +#: doc/tutorial.md:2067 #, no-wrap msgid "" "~~~~ {.xfail-test}\n" @@ -4218,19 +3457,25 @@ msgstr "" "~~~~\n" #. type: Plain text -#: doc/tutorial.md:1851 +#: doc/tutorial.md:2073 +#, fuzzy +#| msgid "" +#| "However, we can tell the compiler that the `head` function is only for " +#| "copyable types: that is, those that implement the `Clone` trait. In that " +#| "case, we can explicitly create a second copy of the value we are " +#| "returning using the `clone` keyword:" msgid "" "However, we can tell the compiler that the `head` function is only for " -"copyable types: that is, those that implement the `Clone` trait. In that " -"case, we can explicitly create a second copy of the value we are returning " -"using the `clone` keyword:" +"copyable types. In Rust, copyable types are those that _implement the " +"`Clone` trait_. We can then explicitly create a second copy of the value we " +"are returning by calling the `clone` method:" msgstr "" "`head` 関数はコピー可能な型、つまり `Clone` トレイトを実装している型だけを対" "象にしていることをコンパイラに教えることはできます。この場合、`clone` メソッ" "ドを使うことで、値のコピーを明示的に作成し、戻り値として返すことができます。" #. type: Plain text -#: doc/tutorial.md:1858 +#: doc/tutorial.md:2080 #, no-wrap msgid "" "~~~~\n" @@ -4248,12 +3493,20 @@ msgstr "" "~~~~\n" #. type: Plain text -#: doc/tutorial.md:1866 +#: doc/tutorial.md:2090 +#, fuzzy +#| msgid "" +#| "This says that we can call `head` on any type `T` as long as that type " +#| "implements the `Clone` trait. When instantiating a generic function, you " +#| "can only instantiate it with types that implement the correct trait, so " +#| "you could not apply `head` to a type that does not implement `Clone`." msgid "" -"This says that we can call `head` on any type `T` as long as that type " -"implements the `Clone` trait. When instantiating a generic function, you " -"can only instantiate it with types that implement the correct trait, so you " -"could not apply `head` to a type that does not implement `Clone`." +"The bounded type parameter `T: Clone` says that `head` can be called on an " +"argument of type `&[T]` for any `T`, so long as there is an implementation " +"of the `Clone` trait for `T`. When instantiating a generic function, we can " +"only instantiate it with types that implement the correct trait, so we could " +"not apply `head` to a vector whose elements are of some type that does not " +"implement `Clone`." msgstr "" "このことは、`Clone` トレイトを実装している任意の型 `T` について、 `head` 関数" "を呼び出すことができることを示しています。ジェネリック関数を実体化する場合、" @@ -4261,9 +3514,14 @@ msgstr "" "レイトを実装していない型に対して `head` を呼び出すことはできません。" #. type: Plain text -#: doc/tutorial.md:1871 +#: doc/tutorial.md:2095 +#, fuzzy +#| msgid "" +#| "While most traits can be defined and implemented by user code, two traits " +#| "are automatically derived and implemented for all applicable types by the " +#| "compiler, and may not be overridden:" msgid "" -"While most traits can be defined and implemented by user code, two traits " +"While most traits can be defined and implemented by user code, three traits " "are automatically derived and implemented for all applicable types by the " "compiler, and may not be overridden:" msgstr "" @@ -4272,30 +3530,38 @@ msgstr "" "上書きすることはできません。" #. type: Plain text -#: doc/tutorial.md:1875 -#, no-wrap +#: doc/tutorial.md:2099 +#, fuzzy, no-wrap +#| msgid "" +#| "* `Send` - Sendable types.\n" +#| "Types are sendable\n" +#| "unless they contain managed boxes, managed closures, or borrowed pointers.\n" msgid "" "* `Send` - Sendable types.\n" "Types are sendable\n" -"unless they contain managed boxes, managed closures, or borrowed pointers.\n" +"unless they contain managed boxes, managed closures, or references.\n" msgstr "" "* `Send` - 送信可能な型。\n" "マネージドボックスやマネージドクロージャ、借用ポインタを含まない場合、型は送信可能である。" #. type: Plain text -#: doc/tutorial.md:1880 -#, no-wrap +#: doc/tutorial.md:2103 +#, fuzzy, no-wrap +#| msgid "" +#| "* `Freeze` - Constant (immutable) types.\n" +#| "These are types that do not contain anything intrinsically mutable.\n" +#| "Intrinsically mutable values include `@mut`\n" +#| "and `Cell` in the standard library.\n" msgid "" "* `Freeze` - Constant (immutable) types.\n" "These are types that do not contain anything intrinsically mutable.\n" -"Intrinsically mutable values include `@mut`\n" -"and `Cell` in the standard library.\n" +"Intrinsically mutable values include `Cell` in the standard library.\n" msgstr "" "* `Freeze` - 定数 (イミュータブル) 型。\n" "本質的に変更可能な値を含まない型のことです。本質的に変更可能な値には、`@mut` や標準ライブラリで定義されている `Cell` が含まれます。\n" #. type: Plain text -#: doc/tutorial.md:1883 +#: doc/tutorial.md:2112 msgid "" "> ***Note:*** These two traits were referred to as 'kinds' in earlier > " "iterations of the language, and often still are." @@ -4304,12 +3570,18 @@ msgstr "" "でもそう呼ばれる場合があります。" #. type: Plain text -#: doc/tutorial.md:1889 +#: doc/tutorial.md:2118 +#, fuzzy +#| msgid "" +#| "Additionally, the `Drop` trait is used to define destructors. This trait " +#| "defines one method called `drop`, which is automatically called when a " +#| "value of the type that implements this trait is destroyed, either because " +#| "the value went out of scope or because the garbage collector reclaimed it." msgid "" "Additionally, the `Drop` trait is used to define destructors. This trait " -"defines one method called `drop`, which is automatically called when a value " -"of the type that implements this trait is destroyed, either because the " -"value went out of scope or because the garbage collector reclaimed it." +"provides one method called `drop`, which is automatically called when a " +"value of the type that implements this trait is destroyed, either because " +"the value went out of scope or because the garbage collector reclaimed it." msgstr "" "上記に加え、 `Drop` トレイトはデストラクタを定義するために使われます。このト" "レイトは `drop` というこのトレイトを実装した型が破壊されるタイミング(値がス" @@ -4317,31 +3589,7 @@ msgstr "" "されるメソッドを1つ定義しています。" #. type: Plain text -#: doc/tutorial.md:1894 -#, no-wrap -msgid "" -"~~~\n" -"struct TimeBomb {\n" -" explosivity: uint\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1903 -#, no-wrap -msgid "" -"impl Drop for TimeBomb {\n" -" fn drop(&self) {\n" -" for _ in range(0, self.explosivity) {\n" -" println(\"blam!\");\n" -" }\n" -" }\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1906 +#: doc/tutorial.md:2135 msgid "" "It is illegal to call `drop` directly. Only code inserted by the compiler " "may call it." @@ -4350,25 +3598,31 @@ msgstr "" "が `drop` を呼び出すことができます。" #. type: Plain text -#: doc/tutorial.md:1908 +#: doc/tutorial.md:2137 msgid "## Declaring and implementing traits" msgstr "## トレイトの宣言と実装" #. type: Plain text -#: doc/tutorial.md:1914 +#: doc/tutorial.md:2142 +#, fuzzy +#| msgid "" +#| "A trait consists of a set of methods without bodies, or may be empty, as " +#| "is the case with `Send` and `Freeze`. For example, we could declare the " +#| "trait `Printable` for things that can be printed to the console, with a " +#| "single method:" msgid "" -"A trait consists of a set of methods without bodies, or may be empty, as is " -"the case with `Send` and `Freeze`. For example, we could declare the trait " -"`Printable` for things that can be printed to the console, with a single " -"method:" +"At its simplest, a trait is a set of zero or more _method signatures_. For " +"example, we could declare the trait `Printable` for things that can be " +"printed to the console, with a single method signature:" msgstr "" "トレイトはボディを持たないメソッドの集合から構成されるか、 `Send` や " "`Freeze` トレイトのように空の場合があります。例えば、コンソールに出力可能なも" "のを表しメソッドを1つもつ `Printable` トレイトは以下のように宣言できます。" #. type: Plain text -#: doc/tutorial.md:1920 -#, no-wrap +#: doc/tutorial.md:2148 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println(~\"hello \" + world::explore()); } ~~~~" msgid "" "~~~~\n" "trait Printable {\n" @@ -4376,45 +3630,36 @@ msgid "" "}\n" "~~~~\n" msgstr "" +"~~~~ {.xfail-test}\n" +"// main.rs\n" +"extern mod world;\n" +"fn main() { println(~\"hello \" + world::explore()); }\n" +"~~~~" #. type: Plain text -#: doc/tutorial.md:1925 +#: doc/tutorial.md:2161 +#, fuzzy +#| msgid "" +#| "Traits may be implemented for specific types with [impls]. An impl that " +#| "implements a trait includes the name of the trait at the start of the " +#| "definition, as in the following impls of `Printable` for `int` and `~str`." msgid "" -"Traits may be implemented for specific types with [impls]. An impl that " -"implements a trait includes the name of the trait at the start of the " -"definition, as in the following impls of `Printable` for `int` and `~str`." +"Traits may be implemented for specific types with [impls]. An impl for a " +"particular trait gives an implementation of the methods that trait " +"provides. For instance, the following impls of `Printable` for `int` and " +"`~str` give implementations of the `print` method." msgstr "" "[impl][impls] により特定の型にトレイトを実装することができます。トレイトを実" "装する impl は、以下の `Printable` の `int` と `~str` に対する実装のように、" "定義の先頭にトレイトの名前を含みます。" #. type: Plain text -#: doc/tutorial.md:1927 +#: doc/tutorial.md:2163 msgid "[impls]: #methods" msgstr "[impls]: #メソッド" #. type: Plain text -#: doc/tutorial.md:1933 -#, no-wrap -msgid "" -"~~~~\n" -"# trait Printable { fn print(&self); }\n" -"impl Printable for int {\n" -" fn print(&self) { println(fmt!(\"%d\", *self)) }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1937 -#, no-wrap -msgid "" -"impl Printable for ~str {\n" -" fn print(&self) { println(*self) }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:1941 +#: doc/tutorial.md:2177 msgid "# 1.print(); # (~\"foo\").print(); ~~~~" msgstr "" "# 1.print();\n" @@ -4422,12 +3667,16 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:1946 +#: doc/tutorial.md:2180 +#, fuzzy +#| msgid "" +#| "Methods defined in an implementation of a trait may be called just like " +#| "any other method, using dot notation, as in `1.print()`. Traits may " +#| "themselves contain type parameters. A trait for generalized sequence " +#| "types might look like the following:" msgid "" -"Methods defined in an implementation of a trait may be called just like any " -"other method, using dot notation, as in `1.print()`. Traits may themselves " -"contain type parameters. A trait for generalized sequence types might look " -"like the following:" +"Methods defined in an impl for a trait may be called just like any other " +"method, using dot notation, as in `1.print()`." msgstr "" "トレイトの実装により定義されたメソッドは他のメソッドと全く同じように、ドット" "記法を用いて `1.print()` のように呼び出せます。トレイト自体に型パラメータを持" @@ -4435,27 +3684,35 @@ msgstr "" "されるでしょう。" #. type: Plain text -#: doc/tutorial.md:1951 -#, no-wrap -msgid "" -"~~~~\n" -"trait Seq {\n" -" fn length(&self) -> uint;\n" -"}\n" -msgstr "" +#: doc/tutorial.md:2182 +#, fuzzy +#| msgid "## Deriving implementations for traits" +msgid "## Default method implementations in trait definitions" +msgstr "## トレイトの実装の導出" #. type: Plain text -#: doc/tutorial.md:1956 -#, no-wrap -msgid "" -"impl Seq for ~[T] {\n" -" fn length(&self) -> uint { self.len() }\n" -"}\n" -"~~~~\n" +#: doc/tutorial.md:2202 +#, fuzzy +#| msgid "# 1.print(); # (~\"foo\").print(); ~~~~" +msgid "# true.print(); # 3.14159.print(); ~~~~" msgstr "" +"# 1.print();\n" +"# (~\"foo\").print();\n" +"~~~~" #. type: Plain text -#: doc/tutorial.md:1963 +#: doc/tutorial.md:2229 +#, fuzzy +#| msgid "# 1.print(); # (~\"foo\").print(); ~~~~" +msgid "" +"# 1.print(); # (~\"foo\").print(); # true.print(); # 3.14159.print(); ~~~~" +msgstr "" +"# 1.print();\n" +"# (~\"foo\").print();\n" +"~~~~" + +#. type: Plain text +#: doc/tutorial.md:2260 msgid "" "The implementation has to explicitly declare the type parameter that it " "binds, `T`, before using it to specify its trait type. Rust requires this " @@ -4469,7 +3726,7 @@ msgstr "" "れるもの) は、型を定義するのではなく、型を **参照** します。" #. type: Plain text -#: doc/tutorial.md:1968 +#: doc/tutorial.md:2265 msgid "" "The type parameters bound by a trait are in scope in each of the method " "declarations. So, re-declaring the type parameter `T` as an explicit type " @@ -4481,7 +3738,7 @@ msgstr "" "る明示的な型パラメータとして再宣言すると、コンパイル時エラーとなります。" #. type: Plain text -#: doc/tutorial.md:1973 +#: doc/tutorial.md:2270 msgid "" "Within a trait definition, `Self` is a special type that you can think of as " "a type parameter. An implementation of the trait for any given type `T` " @@ -4493,7 +3750,7 @@ msgstr "" "えられます。以下のトレイトは等価性演算をサポートする型を意味します。" #. type: Plain text -#: doc/tutorial.md:1980 +#: doc/tutorial.md:2277 #, no-wrap msgid "" "~~~~\n" @@ -4511,7 +3768,7 @@ msgstr "" "}\n" #. type: Plain text -#: doc/tutorial.md:1986 +#: doc/tutorial.md:2283 #, no-wrap msgid "" "// In an impl, `self` refers just to the value of the receiver\n" @@ -4527,7 +3784,7 @@ msgstr "" "~~~~\n" #. type: Plain text -#: doc/tutorial.md:1991 +#: doc/tutorial.md:2288 msgid "" "Notice that in the trait definition, `equals` takes a second parameter of " "type `Self`. In contrast, in the `impl`, `equals` takes a second parameter " @@ -4538,7 +3795,7 @@ msgstr "" "シーバの名前としてのみ使用されます。" #. type: Plain text -#: doc/tutorial.md:1996 +#: doc/tutorial.md:2293 msgid "" "Just as in type implementations, traits can define standalone (static) " "methods. These methods are called by prefixing the method name with the " @@ -4551,10 +3808,14 @@ msgstr "" "め、型推論を行います。" #. type: Plain text -#: doc/tutorial.md:2002 +#: doc/tutorial.md:2299 +#, fuzzy +#| msgid "" +#| "~~~~ use std::f64::consts::pi; trait Shape { fn new(area: f64) -> Self; } " +#| "struct Circle { radius: f64 } struct Square { length: f64 }" msgid "" -"~~~~ use std::f64::consts::pi; trait Shape { fn new(area: f64) -> " -"Self; } struct Circle { radius: f64 } struct Square { length: f64 }" +"~~~~ use std::f64::consts::PI; trait Shape { fn new(area: f64) -> Self; } " +"struct Circle { radius: f64 } struct Square { length: f64 }" msgstr "" "~~~~\n" "use std::f64::consts::pi;\n" @@ -4563,19 +3824,7 @@ msgstr "" "struct Square { length: f64 }" #. type: Plain text -#: doc/tutorial.md:2009 -#, no-wrap -msgid "" -"impl Shape for Circle {\n" -" fn new(area: f64) -> Circle { Circle { radius: (area / pi).sqrt() } }\n" -"}\n" -"impl Shape for Square {\n" -" fn new(area: f64) -> Square { Square { length: (area).sqrt() } }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:2014 +#: doc/tutorial.md:2311 msgid "" "let area = 42.5; let c: Circle = Shape::new(area); let s: Square = Shape::" "new(area); ~~~~" @@ -4586,12 +3835,12 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:2016 +#: doc/tutorial.md:2313 msgid "## Bounded type parameters and static method dispatch" msgstr "## 境界型パラメータと静的メソッドディスパッチ" #. type: Plain text -#: doc/tutorial.md:2021 +#: doc/tutorial.md:2318 msgid "" "Traits give us a language for defining predicates on types, or abstract " "properties that types can have. We can use this language to define _bounds_ " @@ -4603,21 +3852,7 @@ msgstr "" "なります。" #. type: Plain text -#: doc/tutorial.md:2030 -#, no-wrap -msgid "" -"~~~~\n" -"# trait Printable { fn print(&self); }\n" -"fn print_all(printable_things: ~[T]) {\n" -" for thing in printable_things.iter() {\n" -" thing.print();\n" -" }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:2036 +#: doc/tutorial.md:2333 msgid "" "Declaring `T` as conforming to the `Printable` trait (as we earlier did with " "`Clone`) makes it possible to call methods from that trait on values of type " @@ -4632,7 +3867,7 @@ msgstr "" "ル時エラーとなります。" #. type: Plain text -#: doc/tutorial.md:2039 +#: doc/tutorial.md:2336 msgid "" "Type parameters can have multiple bounds by separating them with `+`, as in " "this version of `print_all` that copies elements." @@ -4641,24 +3876,7 @@ msgstr "" "`print_all` は、ベクタの要素をコピーするバージョンです。" #. type: Plain text -#: doc/tutorial.md:2051 -#, no-wrap -msgid "" -"~~~\n" -"# trait Printable { fn print(&self); }\n" -"fn print_all(printable_things: ~[T]) {\n" -" let mut i = 0;\n" -" while i < printable_things.len() {\n" -" let copy_of_thing = printable_things[i].clone();\n" -" copy_of_thing.print();\n" -" i += 1;\n" -" }\n" -"}\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:2055 +#: doc/tutorial.md:2352 msgid "" "Method calls to bounded type parameters are _statically dispatched_, " "imposing no more overhead than normal function invocation, so are the " @@ -4670,17 +3888,17 @@ msgstr "" "型パラメータが推奨されます。 " #. type: Plain text -#: doc/tutorial.md:2057 +#: doc/tutorial.md:2354 msgid "This usage of traits is similar to Haskell type classes." msgstr "トレイトのこのような使い方は、Haskell の型クラスと似ています。" #. type: Plain text -#: doc/tutorial.md:2059 +#: doc/tutorial.md:2356 msgid "## Trait objects and dynamic method dispatch" msgstr "## トレイトオブジェクトと動的メソッドディスパッチ" #. type: Plain text -#: doc/tutorial.md:2063 +#: doc/tutorial.md:2360 msgid "" "The above allows us to define functions that polymorphically act on values " "of a single unknown type that conforms to a given trait. However, consider " @@ -4690,7 +3908,7 @@ msgstr "" "フィックにふるまう関数を定義しました。ここでは、以下の関数について考えます。" #. type: Plain text -#: doc/tutorial.md:2069 +#: doc/tutorial.md:2366 msgid "" "~~~~ # type Circle = int; type Rectangle = int; # impl Drawable for int { fn " "draw(&self) {} } # fn new_circle() -> int { 1 } trait Drawable { fn " @@ -4703,19 +3921,7 @@ msgstr "" "trait Drawable { fn draw(&self); }" #. type: Plain text -#: doc/tutorial.md:2076 -#, no-wrap -msgid "" -"fn draw_all(shapes: ~[T]) {\n" -" for shape in shapes.iter() { shape.draw(); }\n" -"}\n" -"# let c: Circle = new_circle();\n" -"# draw_all(~[c]);\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:2082 +#: doc/tutorial.md:2379 msgid "" "You can call that on an array of circles, or an array of rectangles " "(assuming those have suitable `Drawable` traits defined), but not on an " @@ -4729,19 +3935,7 @@ msgstr "" "す。" #. type: Plain text -#: doc/tutorial.md:2089 -#, no-wrap -msgid "" -"~~~~\n" -"# trait Drawable { fn draw(&self); }\n" -"fn draw_all(shapes: &[@Drawable]) {\n" -" for shape in shapes.iter() { shape.draw(); }\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:2094 +#: doc/tutorial.md:2391 msgid "" "In this example, there is no type parameter. Instead, the `@Drawable` type " "denotes any managed box value that implements the `Drawable` trait. To " @@ -4753,7 +3947,7 @@ msgstr "" "うな値を作成するには、 `as` 演算子を使って値をオブジェクトへキャストします。" #. type: Plain text -#: doc/tutorial.md:2101 +#: doc/tutorial.md:2398 msgid "" "~~~~ # type Circle = int; type Rectangle = bool; # trait Drawable { fn " "draw(&self); } # fn new_circle() -> Circle { 1 } # fn new_rectangle() -> " @@ -4767,7 +3961,7 @@ msgstr "" "# fn draw_all(shapes: &[@Drawable]) {}" #. type: Plain text -#: doc/tutorial.md:2104 +#: doc/tutorial.md:2401 msgid "" "impl Drawable for Circle { fn draw(&self) { ... } } impl Drawable for " "Rectangle { fn draw(&self) { ... } }" @@ -4776,7 +3970,7 @@ msgstr "" "impl Drawable for Rectangle { fn draw(&self) { ... } }" #. type: Plain text -#: doc/tutorial.md:2109 +#: doc/tutorial.md:2406 msgid "" "let c: @Circle = @new_circle(); let r: @Rectangle = @new_rectangle(); " "draw_all([c as @Drawable, r as @Drawable]); ~~~~" @@ -4787,7 +3981,7 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:2117 +#: doc/tutorial.md:2414 msgid "" "We omit the code for `new_circle` and `new_rectangle`; imagine that these " "just return `Circle`s and `Rectangle`s with a default size. Note that, like " @@ -4804,7 +3998,7 @@ msgstr "" "`@Cicle` を `~Drawable` にキャストすることはできません。" #. type: Plain text -#: doc/tutorial.md:2131 +#: doc/tutorial.md:2428 msgid "" "~~~ # type Circle = int; type Rectangle = int; # trait Drawable { fn " "draw(&self); } # impl Drawable for int { fn draw(&self) {} } # fn " @@ -4828,7 +4022,7 @@ msgstr "" "~~~" #. type: Plain text -#: doc/tutorial.md:2136 +#: doc/tutorial.md:2433 msgid "" "Method calls to trait types are _dynamically dispatched_. Since the compiler " "doesn't know specifically which functions to call at compile time, it uses a " @@ -4841,17 +4035,17 @@ msgstr "" "て、呼び出すメソッドの選択を実行時に行います。" #. type: Plain text -#: doc/tutorial.md:2138 +#: doc/tutorial.md:2435 msgid "This usage of traits is similar to Java interfaces." msgstr "トレイトのこのような使い方は、Java のインターフェースと似ています。" #. type: Plain text -#: doc/tutorial.md:2140 +#: doc/tutorial.md:2461 msgid "## Trait inheritance" msgstr "## トレイトの継承" #. type: Plain text -#: doc/tutorial.md:2145 +#: doc/tutorial.md:2466 msgid "" "We can write a trait declaration that _inherits_ from other traits, called " "_supertraits_. Types that implement a trait must also implement its " @@ -4864,7 +4058,7 @@ msgstr "" "のとして定義できます。" #. type: Plain text -#: doc/tutorial.md:2150 +#: doc/tutorial.md:2471 msgid "" "~~~~ trait Shape { fn area(&self) -> f64; } trait Circle : Shape { fn " "radius(&self) -> f64; } ~~~~" @@ -4875,33 +4069,42 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:2152 +#: doc/tutorial.md:2473 msgid "" "Now, we can implement `Circle` on a type only if we also implement `Shape`." msgstr "`Circle` トレイトの実装は、 `Shape` を実装した型についてのみ行えます。" #. type: Plain text -#: doc/tutorial.md:2167 -#, no-wrap +#: doc/tutorial.md:2488 +#, fuzzy, no-wrap +#| msgid "~~~ {.xfail-test} use std::f64::consts::pi; # trait Shape { fn area(&self) -> f64; } # trait Circle : Shape { fn radius(&self) -> f64; } # struct Point { x: f64, y: f64 } # struct CircleStruct { center: Point, radius: f64 } # impl Circle for CircleStruct { fn radius(&self) -> f64 { (self.area() / pi).sqrt() } } # impl Shape for CircleStruct { fn area(&self) -> f64 { pi * square(self.radius) } }" msgid "" "~~~~\n" -"use std::f64::consts::pi;\n" +"use std::f64::consts::PI;\n" "# trait Shape { fn area(&self) -> f64; }\n" "# trait Circle : Shape { fn radius(&self) -> f64; }\n" "# struct Point { x: f64, y: f64 }\n" "# fn square(x: f64) -> f64 { x * x }\n" "struct CircleStruct { center: Point, radius: f64 }\n" "impl Circle for CircleStruct {\n" -" fn radius(&self) -> f64 { (self.area() / pi).sqrt() }\n" +" fn radius(&self) -> f64 { (self.area() / PI).sqrt() }\n" "}\n" "impl Shape for CircleStruct {\n" -" fn area(&self) -> f64 { pi * square(self.radius) }\n" +" fn area(&self) -> f64 { PI * square(self.radius) }\n" "}\n" "~~~~\n" msgstr "" +"~~~ {.xfail-test}\n" +"use std::f64::consts::pi;\n" +"# trait Shape { fn area(&self) -> f64; }\n" +"# trait Circle : Shape { fn radius(&self) -> f64; }\n" +"# struct Point { x: f64, y: f64 }\n" +"# struct CircleStruct { center: Point, radius: f64 }\n" +"# impl Circle for CircleStruct { fn radius(&self) -> f64 { (self.area() / pi).sqrt() } }\n" +"# impl Shape for CircleStruct { fn area(&self) -> f64 { pi * square(self.radius) } }" #. type: Plain text -#: doc/tutorial.md:2172 +#: doc/tutorial.md:2493 msgid "" "Notice that methods of `Circle` can call methods on `Shape`, as our `radius` " "implementation calls the `area` method. This is a silly way to compute the " @@ -4914,14 +4117,55 @@ msgstr "" "ていますが、メソッド呼び出しの考え方は分かったでしょう。" #. type: Plain text -#: doc/tutorial.md:2196 +#: doc/tutorial.md:2497 msgid "" -"~~~ {.xfail-test} use std::f64::consts::pi; # trait Shape { fn area(&self) " -"-> f64; } # trait Circle : Shape { fn radius(&self) -> f64; } # struct " -"Point { x: f64, y: f64 } # struct CircleStruct { center: Point, radius: " -"f64 } # impl Circle for CircleStruct { fn radius(&self) -> f64 { (self." -"area() / pi).sqrt() } } # impl Shape for CircleStruct { fn area(&self) -> " -"f64 { pi * square(self.radius) } }" +"In type-parameterized functions, methods of the supertrait may be called on " +"values of subtrait-bound type parameters. Refering to the previous example " +"of `trait Circle : Shape`:" +msgstr "" +"型パラメータを持つ関数では、サブトレイトの境界型パラメータの値によりスーパー" +"トレイトのメソッドを呼び出すことになります。前の例の `trait Circle : Shape` " +"を参照してください。" + +#. type: Plain text +#: doc/tutorial.md:2506 +#, no-wrap +msgid "" +"~~~\n" +"# trait Shape { fn area(&self) -> f64; }\n" +"# trait Circle : Shape { fn radius(&self) -> f64; }\n" +"fn radius_times_area(c: T) -> f64 {\n" +" // `c` is both a Circle and a Shape\n" +" c.radius() * c.area()\n" +"}\n" +"~~~\n" +msgstr "" +"~~~\n" +"# trait Shape { fn area(&self) -> f64; }\n" +"# trait Circle : Shape { fn radius(&self) -> f64; }\n" +"fn radius_times_area(c: T) -> f64 {\n" +" // `c` は Circle でもあり、Shape でもある\n" +" c.radius() * c.area()\n" +"}\n" +"~~~\n" + +#. type: Plain text +#: doc/tutorial.md:2517 +#, fuzzy +#| msgid "" +#| "~~~ {.xfail-test} use std::f64::consts::pi; # trait Shape { fn " +#| "area(&self) -> f64; } # trait Circle : Shape { fn radius(&self) -> f64; } " +#| "# struct Point { x: f64, y: f64 } # struct CircleStruct { center: Point, " +#| "radius: f64 } # impl Circle for CircleStruct { fn radius(&self) -> f64 " +#| "{ (self.area() / pi).sqrt() } } # impl Shape for CircleStruct { fn " +#| "area(&self) -> f64 { pi * square(self.radius) } }" +msgid "" +"~~~ {.xfail-test} use std::f64::consts::PI; # trait Shape { fn area(&self) -" +"> f64; } # trait Circle : Shape { fn radius(&self) -> f64; } # struct Point " +"{ x: f64, y: f64 } # struct CircleStruct { center: Point, radius: f64 } # " +"impl Circle for CircleStruct { fn radius(&self) -> f64 { (self.area() / PI)." +"sqrt() } } # impl Shape for CircleStruct { fn area(&self) -> f64 { PI * " +"square(self.radius) } }" msgstr "" "~~~ {.xfail-test}\n" "use std::f64::consts::pi;\n" @@ -4935,7 +4179,7 @@ msgstr "" "radius) } }" #. type: Plain text -#: doc/tutorial.md:2201 +#: doc/tutorial.md:2522 msgid "" "let concrete = @CircleStruct{center:Point{x:3f,y:4f},radius:5f}; let " "mycircle: @Circle = concrete as @Circle; let nonsense = mycircle.radius() * " @@ -4947,19 +4191,19 @@ msgstr "" "~~~" #. type: Plain text -#: doc/tutorial.md:2203 +#: doc/tutorial.md:2524 msgid "> ***Note:*** Trait inheritance does not actually work with objects yet" msgstr "" "> ***注意*** トレイトの継承は、実際にはまだオブジェクトに対しては動作しませ" "ん。" #. type: Plain text -#: doc/tutorial.md:2205 +#: doc/tutorial.md:2526 msgid "## Deriving implementations for traits" msgstr "## トレイトの実装の導出" #. type: Plain text -#: doc/tutorial.md:2212 +#: doc/tutorial.md:2533 msgid "" "A small number of traits in `std` and `extra` can have implementations that " "can be automatically derived. These instances are specified by placing the " @@ -4975,7 +4219,7 @@ msgstr "" "に変換することが可能です。" #. type: Plain text -#: doc/tutorial.md:2216 +#: doc/tutorial.md:2537 msgid "~~~ #[deriving(Eq)] struct Circle { radius: f64 }" msgstr "" "~~~\n" @@ -4983,7 +4227,7 @@ msgstr "" "struct Circle { radius: f64 }" #. type: Plain text -#: doc/tutorial.md:2220 +#: doc/tutorial.md:2541 msgid "#[deriving(Rand, ToStr)] enum ABC { A, B, C } ~~~" msgstr "" "#[deriving(Rand, ToStr)]\n" @@ -4991,123 +4235,126 @@ msgstr "" "~~~" #. type: Plain text -#: doc/tutorial.md:2224 +#: doc/tutorial.md:2545 +#, fuzzy +#| msgid "" +#| "The full list of derivable traits is `Eq`, `TotalEq`, `Ord`, `TotalOrd`, " +#| "`Encodable` `Decodable`, `Clone`, `DeepClone`, `IterBytes`, `Rand`, " +#| "`Zero`, and `ToStr`." msgid "" "The full list of derivable traits is `Eq`, `TotalEq`, `Ord`, `TotalOrd`, " -"`Encodable` `Decodable`, `Clone`, `DeepClone`, `IterBytes`, `Rand`, `Zero`, " -"and `ToStr`." +"`Encodable` `Decodable`, `Clone`, `DeepClone`, `IterBytes`, `Rand`, " +"`Default`, `Zero`, and `ToStr`." msgstr "" "実装を自動的に導出可能なトレイトは、 `Eq`, `TotalEq`, `Ord`, `TotalOrd`, " "`Encodable` `Decodable`, `Clone`, `DeepClone`, `IterBytes`, `Rand`, `Zero`, " "および `ToStr` です。." #. type: Plain text -#: doc/tutorial.md:2226 -msgid "# Modules and crates" +#: doc/tutorial.md:2547 +#, fuzzy +#| msgid "# Modules and crates" +msgid "# Crates and the module system" msgstr "# モジュールとクレート" #. type: Plain text -#: doc/tutorial.md:2230 -msgid "" -"The Rust namespace is arranged in a hierarchy of modules. Each source (.rs) " -"file represents a single module and may in turn contain additional modules." -msgstr "" -"Rust の名前空間はモジュールの階層に配置されている。それぞれのソース (.rs) " -"ファイルは単一のモジュールを表し、追加のモジュールを含んでいる場合もある。" +#: doc/tutorial.md:2552 +msgid "## Crates" +msgstr "## クレート" #. type: Plain text -#: doc/tutorial.md:2236 -#, no-wrap +#: doc/tutorial.md:2567 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println(~\"hello \" + world::explore()); } ~~~~" msgid "" "~~~~\n" -"mod farm {\n" -" pub fn chicken() -> &str { \"cluck cluck\" }\n" -" pub fn cow() -> &str { \"mooo\" }\n" +"// main.rs\n" +"fn main() {\n" +" println!(\"Hello world!\");\n" "}\n" +"~~~~\n" msgstr "" +"~~~~ {.xfail-test}\n" +"// main.rs\n" +"extern mod world;\n" +"fn main() { println(~\"hello \" + world::explore()); }\n" +"~~~~" #. type: Plain text -#: doc/tutorial.md:2241 -#, no-wrap +#: doc/tutorial.md:2570 +#, fuzzy +#| msgid "" +#| "The unit of independent compilation in Rust is the crate: rustc compiles " +#| "a single crate at a time, from which it produces either a library or an " +#| "executable." +msgid "" +"A crate is also the unit of independent compilation in Rust: `rustc` always " +"compiles a single crate at a time, from which it produces either a library " +"or an executable." +msgstr "" +"Rust の独立コンパイルの単位はクレートです。rustc は1度に1つのクレートをコンパ" +"イルし、ライブラリか実行可能ファイルを生成します。" + +#. type: Plain text +#: doc/tutorial.md:2574 +#, fuzzy +#| msgid "## The standard library" +msgid "## The module hierarchy" +msgstr "## 標準ライブラリ" + +#. type: Plain text +#: doc/tutorial.md:2600 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println(~\"hello \" + world::explore()); } ~~~~" msgid "" "fn main() {\n" -" println(farm::chicken());\n" +" println!(\"Hello farm!\");\n" "}\n" "~~~~\n" msgstr "" +"~~~~ {.xfail-test}\n" +"// main.rs\n" +"extern mod world;\n" +"fn main() { println(~\"hello \" + world::explore()); }\n" +"~~~~" #. type: Plain text -#: doc/tutorial.md:2246 +#: doc/tutorial.md:2608 +#, fuzzy +#| msgid "## Managed closures" +msgid "## Paths and visibility" +msgstr "## マネージドクロージャ" + +#. type: Plain text +#: doc/tutorial.md:2620 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println(~\"hello \" + world::explore()); } ~~~~" msgid "" -"The contents of modules can be imported into the current scope with the " -"`use` keyword, optionally giving it an alias. `use` may appear at the " -"beginning of crates, `mod`s, `fn`s, and other blocks." +"fn main() {\n" +" println!(\"Hello chicken!\");\n" msgstr "" -"でモジュールの内容は`use` キーワードにより現在のスコープにインポートすること" -"ができます。必要に応じて別名を付けることもできます。`use` はクレートの先頭や " -"`mod`, `fn` などのブロックの先頭に記述することができます。" +"~~~~ {.xfail-test}\n" +"// main.rs\n" +"extern mod world;\n" +"fn main() { println(~\"hello \" + world::explore()); }\n" +"~~~~" #. type: Plain text -#: doc/tutorial.md:2252 -msgid "" -"~~~ # mod farm { pub fn chicken() { } } # fn main() { // Bring `chicken` " -"into scope use farm::chicken;" -msgstr "" -"~~~\n" -"# mod farm { pub fn chicken() { } }\n" -"# fn main() {\n" -"// `chicken` を現在のスコープに持ち込む\n" -"use farm::chicken;" - -#. type: Plain text -#: doc/tutorial.md:2262 -#, no-wrap -msgid "" -"fn chicken_farmer() {\n" -" // The same, but name it `my_chicken`\n" -" use my_chicken = farm::chicken;\n" -" ...\n" -"# my_chicken();\n" -"}\n" -"# chicken();\n" -"# }\n" -"~~~\n" -msgstr "" -"fn chicken_farmer() {\n" -" // 同じことをするが、名前を `my_chicken` とする\n" -" use my_chicken = farm::chicken;\n" -" ...\n" -"# my_chicken();\n" -"}\n" -"# chicken();\n" -"# }\n" -"~~~\n" - -#. type: Plain text -#: doc/tutorial.md:2269 -msgid "" -"These farm animal functions have a new keyword, `pub`, attached to them. The " -"`pub` keyword modifies an item's visibility, making it visible outside its " -"containing module. An expression with `::`, like `farm::chicken`, can name " -"an item outside of its containing module. Items, such as those declared with " -"`fn`, `struct`, `enum`, `type`, or `static`, are module-private by default." -msgstr "" -"farm モジュールの動物の関数定義には、 `pub` という新しいキーワードが付けられ" -"ています。`pub` キーワードは項目の可視性を変更し、項目を含んでいるモジュール" -"の外側から見えるようにします。`farm::chicken` のような、 `::` を含む式は、式" -"を含むモジュールの外側の項目を指定することができます。`fn` や `struct`, " -"`enum`, `type`, `static` により宣言される項目の可視性は、デフォルトではモ" -"ジュールプライベート (同一モジュール内からのみ参照可能)です。" - -#. type: Plain text -#: doc/tutorial.md:2276 +#: doc/tutorial.md:2659 +#, fuzzy +#| msgid "" +#| "Visibility restrictions in Rust exist only at module boundaries. This is " +#| "quite different from most object-oriented languages that also enforce " +#| "restrictions on objects themselves. That's not to say that Rust doesn't " +#| "support encapsulation: both struct fields and methods can be private. But " +#| "this encapsulation is at the module level, not the struct level. Note " +#| "that fields and methods are _public_ by default." msgid "" "Visibility restrictions in Rust exist only at module boundaries. This is " "quite different from most object-oriented languages that also enforce " "restrictions on objects themselves. That's not to say that Rust doesn't " "support encapsulation: both struct fields and methods can be private. But " -"this encapsulation is at the module level, not the struct level. Note that " -"fields and methods are _public_ by default." +"this encapsulation is at the module level, not the struct level." msgstr "" "Rust での可視性の制約はモジュールの境界にのみ存在します。これは、オブジェクト" "自体にも可視性の制約を課すほとんどのオブジェクト指向言語とは全く異なっていま" @@ -5118,350 +4365,23 @@ msgstr "" "してください。" #. type: Plain text -#: doc/tutorial.md:2289 -#, no-wrap -msgid "" -"~~~\n" -"pub mod farm {\n" -"# pub type Chicken = int;\n" -"# type Cow = int;\n" -"# struct Human(int);\n" -"# impl Human { fn rest(&self) { } }\n" -"# pub fn make_me_a_farm() -> Farm { Farm { chickens: ~[], cows: ~[], farmer: Human(0) } }\n" -" pub struct Farm {\n" -" priv chickens: ~[Chicken],\n" -" priv cows: ~[Cow],\n" -" farmer: Human\n" -" }\n" -msgstr "" +#: doc/tutorial.md:2702 +#, fuzzy +#| msgid "# Modules and crates" +msgid "## Files and modules" +msgstr "# モジュールとクレート" #. type: Plain text -#: doc/tutorial.md:2295 -#, no-wrap -msgid "" -" impl Farm {\n" -" fn feed_chickens(&self) { ... }\n" -" fn feed_cows(&self) { ... }\n" -" pub fn add_chicken(&self, c: Chicken) { ... }\n" -" }\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:2301 -#, no-wrap -msgid "" -" pub fn feed_animals(farm: &Farm) {\n" -" farm.feed_chickens();\n" -" farm.feed_cows();\n" -" }\n" -"}\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:2311 -#, no-wrap +#: doc/tutorial.md:2732 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println(~\"hello \" + world::explore()); } ~~~~" msgid "" "fn main() {\n" -" let f = make_me_a_farm();\n" -" f.add_chicken(make_me_a_chicken());\n" -" farm::feed_animals(&f);\n" -" f.farmer.rest();\n" -"}\n" -"# fn make_me_a_farm() -> farm::Farm { farm::make_me_a_farm() }\n" -"# fn make_me_a_chicken() -> farm::Chicken { 0 }\n" -"~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:2313 -msgid "## Crates" -msgstr "## クレート" - -#. type: Plain text -#: doc/tutorial.md:2317 -msgid "" -"The unit of independent compilation in Rust is the crate: rustc compiles a " -"single crate at a time, from which it produces either a library or an " -"executable." -msgstr "" -"Rust の独立コンパイルの単位はクレートです。rustc は1度に1つのクレートをコンパ" -"イルし、ライブラリか実行可能ファイルを生成します。" - -#. type: Plain text -#: doc/tutorial.md:2322 -msgid "" -"When compiling a single `.rs` source file, the file acts as the whole " -"crate. You can compile it with the `--lib` compiler switch to create a " -"shared library, or without, provided that your file contains a `fn main` " -"somewhere, to create an executable." -msgstr "" -"単一の `.rs` ファイルをコンパイルする場合、1つのファイルがクレート全体として" -"振る舞います。`--lib` コンパイラスイッチを与えてコンパイルすることで、共有ラ" -"イブラリを生成することができます。コンパイラスイッチを与えず、 `fn main` が" -"ファイルのどこかに含まれていれば、実行可能ファイルを生成することができます。" - -#. type: Plain text -#: doc/tutorial.md:2327 -msgid "" -"Larger crates typically span multiple files and are, by convention, compiled " -"from a source file with the `.rc` extension, called a *crate file*. The " -"crate file extension distinguishes source files that represent crates from " -"those that do not, but otherwise source files and crate files are identical." -msgstr "" -"大きなクレートは普通複数のファイルから構成され、慣習的に、 `.rc` という拡張子" -"をもつ、 **クレートファイル** と呼ばれるファイルからコンパイルされます。ク" -"レートファイルの拡張子はクレートを表すソースファイルを他のものと区別するため" -"だけのもので、それ以外の店でクレートファイルとソースファイルに違いはありませ" -"ん。" - -#. type: Plain text -#: doc/tutorial.md:2336 -msgid "" -"A typical crate file declares attributes associated with the crate that may " -"affect how the compiler processes the source. Crate attributes specify " -"metadata used for locating and linking crates, the type of crate (library or " -"executable), and control warning and error behavior, among other things. " -"Crate files additionally declare the external crates they depend on as well " -"as any modules loaded from other files." -msgstr "" -"典型的なクレートファイルでは、コンパイラのソースコード処理法に影響を与える、" -"クレートに紐付けられた属性を宣言します。クレートの属性は、クレートの配置やリ" -"ンクに使われたり、クレートの種類 (ライブラリか実行ファイルか) を指定したり、" -"警告やエラーの挙動を制御したりするためのメタデータを指定します。クレートファ" -"イルは、クレートが依存する外部のクレートや、他のファイルから読み込むモジュー" -"ルについても宣言します。" - -#. type: Plain text -#: doc/tutorial.md:2340 -msgid "" -"~~~~ { .xfail-test } // Crate linkage metadata #[link(name = \"farm\", vers " -"= \"2.5\", author = \"mjh\")];" -msgstr "" -"~~~~ { .xfail-test }\n" -"// クレートのリンケージに関するメタデータ\n" -"#[link(name = \"farm\", vers = \"2.5\", author = \"mjh\")];" - -#. type: Plain text -#: doc/tutorial.md:2343 -msgid "// Make a library (\"bin\" is the default) #[crate_type = \"lib\"];" -msgstr "" -"// ライブラリを作成する (\"bin\" がデフォルト値)\n" -"#[crate_type = \"lib\"];" - -#. type: Plain text -#: doc/tutorial.md:2346 -msgid "// Turn on a warning #[warn(non_camel_case_types)]" -msgstr "" -"// 警告を有効にする\n" -"#[warn(non_camel_case_types)]" - -#. type: Plain text -#: doc/tutorial.md:2349 -msgid "// Link to the standard library extern mod std;" -msgstr "" -"// 標準ライブラリをリンクする\n" -"extern mod std;" - -#. type: Plain text -#: doc/tutorial.md:2354 -msgid "// Load some modules from other files mod cow; mod chicken; mod horse;" -msgstr "" -"// 他のファイルからいくつかのモジュールを読み込む\n" -"mod cow;\n" -"mod chicken;\n" -"mod horse;" - -#. type: Plain text -#: doc/tutorial.md:2359 -#, no-wrap -msgid "" -"fn main() {\n" -" ...\n" +" println!(\"Hello farm!\");\n" +" ::farm::cow();\n" "}\n" "~~~~\n" msgstr "" - -#. type: Plain text -#: doc/tutorial.md:2366 -msgid "" -"Compiling this file will cause `rustc` to look for files named `cow.rs`, " -"`chicken.rs`, and `horse.rs` in the same directory as the `.rc` file, " -"compile them all together, and, based on the presence of the `crate_type = " -"\"lib\"` attribute, output a shared library or an executable. (If the line " -"`#[crate_type = \"lib\"];` was omitted, `rustc` would create an executable.)" -msgstr "" -"このファイルをコンパイルすると、 `rustc` は `.rc` ファイルと同じディレクトリ" -"の `cow.rs` と `chicken.rs`、 `horse.rs` を探し、すべてのファイルを同時にコン" -"パイルし、`craete_type = \"lib\"` という属性の有無に応じて、共有ライブラリか" -"実行可能ファイルを出力します。(`#[crate_type = \"lib\"];` の行が取り除かれば" -"場合、 `rustc` は実行可能ファイルを生成します。)" - -#. type: Plain text -#: doc/tutorial.md:2370 -msgid "" -"The `#[link(...)]` attribute provides meta information about the module, " -"which other crates can use to load the right module. More about that later." -msgstr "" -"`#[link(...)]` 属性は、モジュールに関するメタ情報を提供し、この情報により他の" -"クレートは正しいモジュールをロードすることができます。あとで詳しく述べます。" - -#. type: Plain text -#: doc/tutorial.md:2373 -msgid "" -"To have a nested directory structure for your source files, you can nest " -"mods:" -msgstr "" -"ソースファイルをネストしたディレクトリに配置する場合、`mod` をネストさせま" -"す。" - -#. type: Plain text -#: doc/tutorial.md:2380 -#, no-wrap -msgid "" -"~~~~ {.ignore}\n" -"mod poultry {\n" -" mod chicken;\n" -" mod turkey;\n" -"}\n" -"~~~~\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:2385 -msgid "" -"The compiler will now look for `poultry/chicken.rs` and `poultry/turkey.rs`, " -"and export their content in `poultry::chicken` and `poultry::turkey`. You " -"can also provide a `poultry.rs` to add content to the `poultry` module " -"itself." -msgstr "" -"コンパイラは `poultry/chicken.rs` と `poultry/turkey.rs` を読み込み、ファイル" -"の内容を `poultry::chicken` と `poultry::turkey` としてエクスポートします。" -"`poultry.rs` を作成することで、`poultry` モジュールの内容を追加することも可能" -"です。" - -#. type: Plain text -#: doc/tutorial.md:2387 -msgid "## Using other crates" -msgstr "## 他のクレートの利用" - -#. type: Plain text -#: doc/tutorial.md:2395 -msgid "" -"The `extern mod` directive lets you use a crate (once it's been compiled " -"into a library) from inside another crate. `extern mod` can appear at the " -"top of a crate file or at the top of modules. It will cause the compiler to " -"look in the library search path (which you can extend with the `-L` switch) " -"for a compiled Rust library with the right name, then add a module with that " -"crate's name into the local scope." -msgstr "" -"`extern mod` ディレクティブを使うと、あるクレートの中から、(ライブラリにコン" -"パイルされている) 別のクレートを使用することができます。`extern mod` はク" -"レートファイルの先頭かモジュールの先頭に記述することができます。コンパイラ" -"は、対応する名前の Rust ライブラリをライブラリの検索パス (`-L` スイッチにより" -"追加可能) から検索し、クレートと同じ名前のモジュールをローカルスコープに追加" -"します。" - -#. type: Plain text -#: doc/tutorial.md:2397 -msgid "For example, `extern mod std` links the [standard library]." -msgstr "" -"例えば、 `extern mod std` は [標準ライブラリ][standard library] をリンクしま" -"す。" - -#. type: Plain text -#: doc/tutorial.md:2399 -msgid "[standard library]: std/index.html" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:2406 -msgid "" -"When a comma-separated list of name/value pairs appears after `extern mod`, " -"the compiler front-end matches these pairs against the attributes provided " -"in the `link` attribute of the crate file. The front-end will only select " -"this crate for use if the actual pairs match the declared attributes. You " -"can provide a `name` value to override the name used to search for the crate." -msgstr "" -"`extern mod` の後にカンマで区切られた名前と値のペアが記述された場合、コンパイ" -"ラのフロントエンドはクレートファイルの `link` 属性によって指定された属性と比" -"較します。フロントエンドは宣言された属性とペアが一致するクレートだけを選択" -"し、利用します。`name` の値を設定することで、クレートの検索に使う名前を上書き" -"することができます。" - -#. type: Plain text -#: doc/tutorial.md:2408 -msgid "Our example crate declared this set of `link` attributes:" -msgstr "" -"先ほどのクレートの例では、 `link` 属性は以下のように宣言されていました。" - -#. type: Plain text -#: doc/tutorial.md:2412 -msgid "~~~~ #[link(name = \"farm\", vers = \"2.5\", author = \"mjh\")]; ~~~~" -msgstr "" -"~~~~\n" -"#[link(name = \"farm\", vers = \"2.5\", author = \"mjh\")];\n" -"~~~~" - -#. type: Plain text -#: doc/tutorial.md:2414 -msgid "Which you can then link with any (or all) of the following:" -msgstr "" -"以下のいずれか (またはすべて) の方法でクレートをリンクすることができます。" - -#. type: Plain text -#: doc/tutorial.md:2420 -msgid "" -"~~~~ {.xfail-test} extern mod farm; extern mod my_farm (name = \"farm\", " -"vers = \"2.5\"); extern mod my_auxiliary_farm (name = \"farm\", author = " -"\"mjh\"); ~~~~" -msgstr "" -"~~~~ {.xfail-test}\n" -"extern mod farm;\n" -"extern mod my_farm (name = \"farm\", vers = \"2.5\");\n" -"extern mod my_auxiliary_farm (name = \"farm\", author = \"mjh\");\n" -"~~~~" - -#. type: Plain text -#: doc/tutorial.md:2423 -msgid "" -"If any of the requested metadata do not match, then the crate will not be " -"compiled successfully." -msgstr "" -"指定されたメタデータに一致するものが存在しない場合、クレートのコンパイルは失" -"敗します。" - -#. type: Plain text -#: doc/tutorial.md:2425 -msgid "## A minimal example" -msgstr "## 最小限の例" - -#. type: Plain text -#: doc/tutorial.md:2428 -msgid "" -"Now for something that you can actually compile yourself, we have these two " -"files:" -msgstr "" -"あなた自身で実際にコンパイルが行える例として、以下の2つのファイルを例示しま" -"す。" - -#. type: Plain text -#: doc/tutorial.md:2434 -msgid "" -"~~~~ // world.rs #[link(name = \"world\", vers = \"1.0\")]; pub fn explore() " -"-> &str { \"world\" } ~~~~" -msgstr "" -"~~~~\n" -"// world.rs\n" -"#[link(name = \"world\", vers = \"1.0\")];\n" -"pub fn explore() -> &str { \"world\" }\n" -"~~~~" - -#. type: Plain text -#: doc/tutorial.md:2440 -msgid "" -"~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println(~\"hello " -"\" + world::explore()); } ~~~~" -msgstr "" "~~~~ {.xfail-test}\n" "// main.rs\n" "extern mod world;\n" @@ -5469,18 +4389,156 @@ msgstr "" "~~~~" #. type: Plain text -#: doc/tutorial.md:2442 +#: doc/tutorial.md:2791 +#, fuzzy +#| msgid "~~~~ {.ignore} let foo = 10;" +msgid "~~~ {.ignore} // src/main.rs mod plants; mod animals; ~~~" +msgstr "" +"~~~~ {.ignore}\n" +"let foo = 10;" + +#. type: Plain text +#: doc/tutorial.md:2929 +#, fuzzy, no-wrap +#| msgid "~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println(~\"hello \" + world::explore()); } ~~~~" +msgid "" +"fn main() {\n" +" println!(\"Hello farm!\");\n" +msgstr "" +"~~~~ {.xfail-test}\n" +"// main.rs\n" +"extern mod world;\n" +"fn main() { println(~\"hello \" + world::explore()); }\n" +"~~~~" + +#. type: Plain text +#: doc/tutorial.md:3004 +#, fuzzy +#| msgid "# Dereferencing pointers" +msgid "## Reexporting names" +msgstr "# ポインタのデリファレンス" + +#. type: Plain text +#: doc/tutorial.md:3039 +#, fuzzy +#| msgid "## Using other crates" +msgid "## Using libraries" +msgstr "## 他のクレートの利用" + +#. type: Plain text +#: doc/tutorial.md:3080 +#, fuzzy +#| msgid "~~~~ {.ignore} let foo = 10;" +msgid "~~~ extern mod extra;" +msgstr "" +"~~~~ {.ignore}\n" +"let foo = 10;" + +#. type: Plain text +#: doc/tutorial.md:3144 +#, fuzzy +#| msgid "" +#| "~~~~ {.xfail-test} extern mod farm; extern mod my_farm (name = \"farm\", " +#| "vers = \"2.5\"); extern mod my_auxiliary_farm (name = \"farm\", author = " +#| "\"mjh\"); ~~~~" +msgid "" +"~~~~ {.xfail-test} extern mod farm; extern mod farm = \"farm#2.5\"; extern " +"mod my_farm = \"farm\"; ~~~~" +msgstr "" +"~~~~ {.xfail-test}\n" +"extern mod farm;\n" +"extern mod my_farm (name = \"farm\", vers = \"2.5\");\n" +"extern mod my_auxiliary_farm (name = \"farm\", author = \"mjh\");\n" +"~~~~" + +#. type: Plain text +#: doc/tutorial.md:3155 +#, fuzzy +#| msgid "// Make a library (\"bin\" is the default) #[crate_type = \"lib\"];" +msgid "" +"// This crate is a library (\"bin\" is the default) #[crate_id = " +"\"farm#2.5\"]; #[crate_type = \"lib\"];" +msgstr "" +"// ライブラリを作成する (\"bin\" がデフォルト値)\n" +"#[crate_type = \"lib\"];" + +#. type: Plain text +#: doc/tutorial.md:3160 +#, fuzzy +#| msgid "// Turn on a warning #[warn(non_camel_case_types)]" +msgid "// Turn on a warning #[warn(non_camel_case_types)] # fn farm() {} ~~~~" +msgstr "" +"// 警告を有効にする\n" +"#[warn(non_camel_case_types)]" + +#. type: Plain text +#: doc/tutorial.md:3167 +msgid "## A minimal example" +msgstr "## 最小限の例" + +#. type: Plain text +#: doc/tutorial.md:3169 +#, fuzzy +#| msgid "" +#| "Now for something that you can actually compile yourself, we have these " +#| "two files:" +msgid "Now for something that you can actually compile yourself." +msgstr "" +"あなた自身で実際にコンパイルが行える例として、以下の2つのファイルを例示しま" +"す。" + +#. type: Plain text +#: doc/tutorial.md:3179 +#, fuzzy +#| msgid "" +#| "~~~~ // world.rs #[link(name = \"world\", vers = \"1.0\")]; pub fn " +#| "explore() -> &str { \"world\" } ~~~~" +msgid "" +"~~~~ // world.rs #[crate_id = \"world#0.42\"]; # extern mod extra; pub fn " +"explore() -> &'static str { \"world\" } # fn main() {} ~~~~" +msgstr "" +"~~~~\n" +"// world.rs\n" +"#[link(name = \"world\", vers = \"1.0\")];\n" +"pub fn explore() -> &str { \"world\" }\n" +"~~~~" + +#. type: Plain text +#: doc/tutorial.md:3185 +#, fuzzy +#| msgid "" +#| "~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println(~" +#| "\"hello \" + world::explore()); } ~~~~" +msgid "" +"~~~~ {.xfail-test} // main.rs extern mod world; fn main() { println!(\"hello " +"{}\", world::explore()); } ~~~~" +msgstr "" +"~~~~ {.xfail-test}\n" +"// main.rs\n" +"extern mod world;\n" +"fn main() { println(~\"hello \" + world::explore()); }\n" +"~~~~" + +#. type: Plain text +#: doc/tutorial.md:3187 msgid "Now compile and run like this (adjust to your platform if necessary):" msgstr "" "以下のようにコンパイルし、実行します (必要であれば、お使いのプラットフォーム" "に合わせて修正してください。)" #. type: Plain text -#: doc/tutorial.md:2449 -#, no-wrap +#: doc/tutorial.md:3194 +#, fuzzy, no-wrap +#| msgid "" +#| "~~~~ {.notrust}\n" +#| "> rustc --lib world.rs # compiles libworld-94839cbfe144198-1.0.so\n" +#| "> rustc main.rs -L . # compiles main\n" +#| "> ./main\n" +#| "\"hello world\"\n" +#| "~~~~\n" msgid "" "~~~~ {.notrust}\n" -"> rustc --lib world.rs # compiles libworld-94839cbfe144198-1.0.so\n" +"> rustc --lib world.rs # compiles libworld--0.42.so\n" "> rustc main.rs -L . # compiles main\n" "> ./main\n" "\"hello world\"\n" @@ -5494,204 +4552,98 @@ msgstr "" "~~~~\n" #. type: Plain text -#: doc/tutorial.md:2454 +#: doc/tutorial.md:3199 +#, fuzzy +#| msgid "" +#| "Notice that the library produced contains the version in the filename as " +#| "well as an inscrutable string of alphanumerics. These are both part of " +#| "Rust's library versioning scheme. The alphanumerics are a hash " +#| "representing the crate metadata." msgid "" -"Notice that the library produced contains the version in the filename as " -"well as an inscrutable string of alphanumerics. These are both part of " -"Rust's library versioning scheme. The alphanumerics are a hash representing " -"the crate metadata." +"Notice that the library produced contains the version in the file name as " +"well as an inscrutable string of alphanumerics. As explained in the previous " +"paragraph, these are both part of Rust's library versioning scheme. The " +"alphanumerics are a hash representing the crates package ID." msgstr "" "生成されたライブラリのファイル名には、バージョン番号だけでなく謎めいた英数字" "が含まれていることに注意してください。これらは両方共 Rust のバージョン管理ス" "キームの一員です。英数字は、クレートのメタデータを表すハッシュ値です。" #. type: Plain text -#: doc/tutorial.md:2456 -msgid "## The standard library" +#: doc/tutorial.md:3201 +#, fuzzy +#| msgid "## The standard library" +msgid "## The standard library and the prelude" msgstr "## 標準ライブラリ" #. type: Plain text -#: doc/tutorial.md:2461 -msgid "" -"The Rust standard library provides runtime features required by the " -"language, including the task scheduler and memory allocators, as well as " -"library support for Rust built-in types, platform abstractions, and other " -"commonly used features." +#: doc/tutorial.md:3213 +#, fuzzy +#| msgid "~~~~ {.ignore} let foo = 10;" +msgid "~~~ {.ignore} extern mod std; ~~~" msgstr "" -"Rust の標準ライブラリは、タスクスケジューラやメモリアロケータを含む、言語自体" -"が必要とするランタイム機能を提供するだけでなく、Rust の組み込み型や、プラット" -"フォームの抽象化、その他一般的によく利用される機能ををサポートするライブラリ" -"を含んでいます。" +"~~~~ {.ignore}\n" +"let foo = 10;" #. type: Plain text -#: doc/tutorial.md:2472 -msgid "" -"[`std`] includes modules corresponding to each of the integer types, each of " -"the floating point types, the [`bool`] type, [tuples], [characters], " -"[strings], [vectors], [managed boxes], [owned boxes], and unsafe and " -"borrowed [pointers]. Additionally, `std` provides some pervasive types " -"([`option`] and [`result`]), [task] creation and [communication] primitives, " -"platform abstractions ([`os`] and [`path`]), basic I/O abstractions " -"([`io`]), [containers] like [`hashmap`], common traits ([`kinds`], [`ops`], " -"[`cmp`], [`num`], [`to_str`], [`clone`]), and complete bindings to the C " -"standard library ([`libc`])." +#: doc/tutorial.md:3219 +#, fuzzy +#| msgid "~~~~ {.ignore} let foo = 10;" +msgid "~~~ {.ignore} use std::prelude::*; ~~~" msgstr "" -"[`std`] は整数型や浮動小数点型、[`bool`] 型、[タプル][tuples]、[文字]" -"[characters]、[文字列][strings]、[ベクタ][vectors]、[マネージドボックス]" -"[managed boxes]、[所有ボックス][owned boxes]、unsafe または借用 [ポインタ]" -"[pointers] に対応するモジュールを含んでいます。さらに、 `std` は、いくつかの" -"よく使われる型 ([`option`] と [`result`])や、 [タスク][task] 生成と[通信]" -"[communication] のためのプリミティブ、プラットフォームの抽象化 ([`os`] と " -"[`path`])、基本的な I/O の抽象化 ([`io`]), [`hashmap`] などの [コンテナ]" -"[containers]、共通的に使われるトレイト ([`kinds`], [`ops`], [`cmp`], " -"[`num`], [`to_str`], [`clone`])、C 標準ライブラリ ([`libc`]) への完全なバイン" -"ディングを提供します。" +"~~~~ {.ignore}\n" +"let foo = 10;" #. type: Plain text -#: doc/tutorial.md:2474 -msgid "### Standard Library injection and the Rust prelude" -msgstr "### 標準ライブラリの注入と Rust の prelude" +#: doc/tutorial.md:3260 +#, fuzzy +#| msgid "## The standard library" +msgid "## The extra library" +msgstr "## 標準ライブラリ" #. type: Plain text -#: doc/tutorial.md:2477 -msgid "" -"`std` is imported at the topmost level of every crate by default, as if the " -"first line of each crate was" -msgstr "" -"`std` は、すべてのクレートの先頭以下の行か書かれているかのように、デフォルト" -"でクレートの最上位のレベルにインポートされます。" - -#. type: Plain text -#: doc/tutorial.md:2479 -#, no-wrap -msgid " extern mod std;\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:2483 -msgid "" -"This means that the contents of std can be accessed from from any context " -"with the `std::` path prefix, as in `use std::vec`, `use std::task::spawn`, " -"etc." -msgstr "" -"これは、 std の内容には `std::` というパスプレフィックスを付けることで、任意" -"のコンテキストから `use std::vec`. `use std::task::spawn` のようにアクセスで" -"きることを意味します。" - -#. type: Plain text -#: doc/tutorial.md:2488 -msgid "" -"Additionally, `std` contains a `prelude` module that reexports many of the " -"most common standard modules, types and traits. The contents of the prelude " -"are imported into every *module* by default. Implicitly, all modules behave " -"as if they contained the following prologue:" -msgstr "" -"さらに、 `std` は `prelude` という、最も共通的なモジュールや型、トレイトを再" -"エクスポートするモジュールを含んでいます。prelude の内容は、デフォルトですべ" -"ての **モジュール** にインポートされます。すべてのモジュールは、以下の文言を" -"モジュール先頭に暗黙的に含んでいるように動作します。" - -#. type: Plain text -#: doc/tutorial.md:2490 -#, no-wrap -msgid " use std::prelude::*;\n" -msgstr "" - -#. type: Plain text -#: doc/tutorial.md:2516 -msgid "" -"[`std`]: std/index.html [`bool`]: std/bool.html [tuples]: std/tuple.html " -"[characters]: std/char.html [strings]: std/str.html [vectors]: std/vec.html " -"[managed boxes]: std/managed.html [owned boxes]: std/owned.html [pointers]: " -"std/ptr.html [`option`]: std/option.html [`result`]: std/result.html [task]: " -"std/task.html [communication]: std/comm.html [`os`]: std/os.html [`path`]: " -"std/path.html [`io`]: std/io.html [containers]: std/container.html " -"[`hashmap`]: std/hashmap.html [`kinds`]: std/kinds.html [`ops`]: std/ops." -"html [`cmp`]: std/cmp.html [`num`]: std/num.html [`to_str`]: std/to_str.html " -"[`clone`]: std/clone.html [`libc`]: std/libc.html" -msgstr "" -"[`std`]: std/index.html\n" -"[`bool`]: std/bool.html\n" -"[tuples]: std/tuple.html\n" -"[characters]: std/char.html\n" -"[strings]: std/str.html\n" -"[vectors]: std/vec.html\n" -"[managed boxes]: std/managed.html\n" -"[owned boxes]: std/owned.html\n" -"[pointers]: std/ptr.html\n" -"[`option`]: std/option.html\n" -"[`result`]: std/result.html\n" -"[task]: std/task.html\n" -"[communication]: std/comm.html\n" -"[`os`]: std/os.html\n" -"[`path`]: std/path.html\n" -"[`io`]: std/io.html\n" -"[containers]: std/container.html\n" -"[`hashmap`]: std/hashmap.html\n" -"[`kinds`]: std/kinds.html\n" -"[`ops`]: std/ops.html\n" -"[`cmp`]: std/cmp.html\n" -"[`num`]: std/num.html\n" -"[`to_str`]: std/to_str.html\n" -"[`clone`]: std/clone.html\n" -"[`libc`]: std/libc.html" - -#. type: Plain text -#: doc/tutorial.md:2518 +#: doc/tutorial.md:3271 msgid "# What next?" msgstr "# 次のステップは?" #. type: Plain text -#: doc/tutorial.md:2521 +#: doc/tutorial.md:3274 +#, fuzzy +#| msgid "" +#| "Now that you know the essentials, check out any of the additional " +#| "tutorials on individual topics." msgid "" -"Now that you know the essentials, check out any of the additional tutorials " -"on individual topics." +"Now that you know the essentials, check out any of the additional guides on " +"individual topics." msgstr "" "Rust の本質的な部分に関する説明は以上です。個々のトピックにおける追加のチュー" "トリアルもチェックしてみてください。" #. type: Bullet: '* ' -#: doc/tutorial.md:2527 -msgid "[Borrowed pointers][borrow]" -msgstr "[借用ポインタ][borrow]" - -#. type: Bullet: '* ' -#: doc/tutorial.md:2527 +#: doc/tutorial.md:3286 msgid "[Tasks and communication][tasks]" msgstr "[タスクと通信][tasks]" #. type: Bullet: '* ' -#: doc/tutorial.md:2527 +#: doc/tutorial.md:3286 msgid "[Macros][macros]" msgstr "[マクロ][macros]" #. type: Bullet: '* ' -#: doc/tutorial.md:2527 +#: doc/tutorial.md:3286 msgid "[The foreign function interface][ffi]" msgstr "[他言語間インターフェース (foreign function inferface)][ffi]" #. type: Bullet: '* ' -#: doc/tutorial.md:2527 -msgid "[Containers and iterators](tutorial-container.html)" +#: doc/tutorial.md:3286 +#, fuzzy +#| msgid "[Containers and iterators](tutorial-container.html)" +msgid "[Containers and iterators][container]" msgstr "[コンテナとイテレータ](tutorial-container.html)" -#. type: Plain text -#: doc/tutorial.md:2529 -msgid "There is further documentation on the [wiki]." -msgstr "[wiki] にもドキュメントがあります。" - -#. type: Plain text -#: doc/tutorial.md:2534 -msgid "" -"[borrow]: tutorial-borrowed-ptr.html [tasks]: tutorial-tasks.html [macros]: " -"tutorial-macros.html [ffi]: tutorial-ffi.html" -msgstr "" -"[borrow]: tutorial-borrowed-ptr.html\n" -"[tasks]: tutorial-tasks.html\n" -"[macros]: tutorial-macros.html\n" -"[ffi]: tutorial-ffi.html" - -#. type: Plain text -#: doc/tutorial.md:2536 -msgid "[wiki]: https://github.com/mozilla/rust/wiki/Docs" -msgstr "" +#. type: Bullet: '* ' +#: doc/tutorial.md:3286 +#, fuzzy +#| msgid "% The Rust Language Tutorial" +msgid "[The Rust Runtime][runtime]" +msgstr "% Rust 言語チュートリアル"