diff --git a/po/ja.po b/po/ja.po index 1a79e6383da4..3ea54414c4d6 100644 --- a/po/ja.po +++ b/po/ja.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Comprehensive Rust 🊀\n" -"POT-Creation-Date: 2024-09-07T21:33:23+09:00\n" +"POT-Creation-Date: 2024-11-23T04:33:49Z\n" "PO-Revision-Date: 2023-06-06 13:18+0900\n" "Last-Translator: Kenta Aratani \n" "Language-Team: Japanese \n" @@ -211,10 +211,9 @@ msgstr "共有参照" msgid "Exclusive References" msgstr "排他参照" -#: src/SUMMARY.md -#, fuzzy -msgid "Slices: `&[T]`" -msgstr "スラむス型" +#: src/SUMMARY.md src/references.md src/references/slices.md +msgid "Slices" +msgstr "Slices" #: src/SUMMARY.md src/references.md src/references/strings.md msgid "Strings" @@ -669,9 +668,13 @@ msgstr "暗黙的な型倉換" msgid "`Error` Trait" msgstr "`Error`トレむト" -#: src/SUMMARY.md src/error-handling/thiserror-and-anyhow.md -msgid "`thiserror` and `anyhow`" -msgstr "`thiserror` ず `anyhow`" +#: src/SUMMARY.md src/error-handling/thiserror.md +msgid "`thiserror`" +msgstr "`thiserror`" + +#: src/SUMMARY.md src/error-handling/anyhow.md +msgid "`anyhow`" +msgstr "`anyhow`" #: src/SUMMARY.md msgid "Exercise: Rewriting with `Result`" @@ -711,7 +714,7 @@ msgstr "Unsafeなトレむトの実装" msgid "Exercise: FFI Wrapper" msgstr "挔習: FFIラッパヌ" -#: src/SUMMARY.md src/bare-metal/android.md +#: src/SUMMARY.md msgid "Android" msgstr "Android" @@ -889,14 +892,6 @@ msgstr "Android 向けのビルド: Rust" msgid "With Java" msgstr "Java" -#: src/SUMMARY.md src/running-the-course/course-structure.md -#: src/exercises/android/morning.md src/exercises/bare-metal/morning.md -#: src/exercises/bare-metal/afternoon.md src/concurrency/welcome.md -#: src/concurrency/sync-exercises.md src/concurrency/welcome-async.md -#: src/concurrency/async-exercises.md -msgid "Exercises" -msgstr "緎習問題" - #: src/SUMMARY.md msgid "Chromium" msgstr "Chromium" @@ -1091,6 +1086,13 @@ msgstr "デバッグ" msgid "Other Projects" msgstr "他のプロゞェクト" +#: src/SUMMARY.md src/running-the-course/course-structure.md +#: src/exercises/bare-metal/morning.md src/exercises/bare-metal/afternoon.md +#: src/concurrency/welcome.md src/concurrency/sync-exercises.md +#: src/concurrency/welcome-async.md src/concurrency/async-exercises.md +msgid "Exercises" +msgstr "緎習問題" + #: src/SUMMARY.md src/exercises/bare-metal/compass.md #: src/exercises/bare-metal/solutions-morning.md msgid "Compass" @@ -1179,6 +1181,11 @@ msgstr "`tinyvec`" msgid "`spin`" msgstr "`spin`" +#: src/SUMMARY.md src/bare-metal/android.md +#, fuzzy +msgid "Bare-Metal on Android" +msgstr "ベアメタル Rust午前の講座" + #: src/SUMMARY.md msgid "`vmbase`" msgstr "`vmbase`" @@ -1792,7 +1799,6 @@ msgstr "" #: src/running-the-course/course-structure.md src/welcome-day-2.md #: src/welcome-day-2-afternoon.md src/welcome-day-3.md -#: src/welcome-day-4-afternoon.md msgid "1 hour" msgstr "" @@ -1828,7 +1834,7 @@ msgstr "4 日目の午前䌑憩を含めお 3 時間 5 分" #: src/running-the-course/course-structure.md #, fuzzy -msgid "Day 4 Afternoon (2 hours and 15 minutes, including breaks)" +msgid "Day 4 Afternoon (2 hours and 20 minutes, including breaks)" msgstr "1 日目の午埌䌑憩を含めお 2 時間 55 分" #: src/running-the-course/course-structure.md src/welcome-day-4-afternoon.md @@ -2080,6 +2086,21 @@ msgstr "" "github.com/kuanhungchen)、[@johnathan79717](https://github.com/" "johnathan79717)" +#: src/running-the-course/translations.md +#, fuzzy +msgid "" +"[Farsi](https://google.github.io/comprehensive-rust/fa/) by [@DannyRavi]" +"(https://github.com/DannyRavi), [@javad-jafari](https://github.com/javad-" +"jafari), [@Alix1383](https://github.com/alix1383), [@moaminsharifi](https://" +"github.com/moaminsharifi) , [@hamidrezakp](https://github.com/hamidrezakp) " +"and [@mehrad77](https://github.com/mehrad77)." +msgstr "" +"[䞭囜語繁䜓字](https://google.github.io/comprehensive-rust/zh-TW/): " +"[@hueich](https://github.com/hueich)、[@victorhsieh](https://github.com/" +"victorhsieh)、[@mingyc](https://github.com/mingyc)、[@kuanhungchen](https://" +"github.com/kuanhungchen)、[@johnathan79717](https://github.com/" +"johnathan79717)" + #: src/running-the-course/translations.md #, fuzzy msgid "" @@ -2122,6 +2143,21 @@ msgstr "" "(https://github.com/keispace)、[@jiyongp](https://github.com/jiyongp)、" "[@jooyunghan](https://github.com/jooyunghan)" +#: src/running-the-course/translations.md +#, fuzzy +msgid "" +"[Farsi](https://google.github.io/comprehensive-rust/fa/) by [@DannyRavi]" +"(https://github.com/DannyRavi), [@javad-jafari](https://github.com/javad-" +"jafari), [@Alix1383](https://github.com/alix1383), [@moaminsharifi](https://" +"github.com/moaminsharifi), [@hamidrezakp](https://github.com/hamidrezakp) " +"and [@mehrad77](https://github.com/mehrad77)." +msgstr "" +"[䞭囜語繁䜓字](https://google.github.io/comprehensive-rust/zh-TW/): " +"[@hueich](https://github.com/hueich)、[@victorhsieh](https://github.com/" +"victorhsieh)、[@mingyc](https://github.com/mingyc)、[@kuanhungchen](https://" +"github.com/kuanhungchen)、[@johnathan79717](https://github.com/" +"johnathan79717)" + #: src/running-the-course/translations.md msgid "" "Use the language picker in the top-right corner to switch between languages." @@ -2155,21 +2191,6 @@ msgstr "" "[ベンガル語](https://google.github.io/comprehensive-rust/bn/): [@raselmandol]" "(https://github.com/raselmandol)" -#: src/running-the-course/translations.md -#, fuzzy -msgid "" -"[Farsi](https://google.github.io/comprehensive-rust/fa/) by [@Alix1383]" -"(https://github.com/alix1383), [@DannyRavi](https://github.com/DannyRavi), " -"[@hamidrezakp](https://github.com/hamidrezakp), [@javad-jafari](https://" -"github.com/javad-jafari) and [@moaminsharifi](https://github.com/" -"moaminsharifi)." -msgstr "" -"[䞭囜語繁䜓字](https://google.github.io/comprehensive-rust/zh-TW/): " -"[@hueich](https://github.com/hueich)、[@victorhsieh](https://github.com/" -"victorhsieh)、[@mingyc](https://github.com/mingyc)、[@kuanhungchen](https://" -"github.com/kuanhungchen)、[@johnathan79717](https://github.com/" -"johnathan79717)" - #: src/running-the-course/translations.md #, fuzzy msgid "" @@ -2274,7 +2295,7 @@ msgstr "" msgid "" "On Debian/Ubuntu, you can also install Cargo, the Rust source and the [Rust " "formatter](https://github.com/rust-lang/rustfmt) via `apt`. However, this " -"gets you an outdated rust version and may lead to unexpected behavior. The " +"gets you an outdated Rust version and may lead to unexpected behavior. The " "command would be:" msgstr "" "Debian/Ubuntuを䜿甚しおいる堎合、以䞋のコマンドを䜿っおcargo、rustの゜ヌス" @@ -3615,6 +3636,14 @@ msgstr "" msgid "\"elements searched: {elements_searched}\"" msgstr "" +#: src/control-flow-basics/break-continue/labels.md +msgid "Labeled break also works on arbitrary blocks, e.g." +msgstr "" + +#: src/control-flow-basics/break-continue/labels.md +msgid "\"This line gets skipped\"" +msgstr "" + #: src/control-flow-basics/blocks-and-scopes.md msgid "Blocks" msgstr "コヌドブロック" @@ -3902,7 +3931,8 @@ msgstr "" msgid "/// Determine the length of the collatz sequence beginning at `n`.\n" msgstr "/// `n` から始たるコラッツ数列の長さを決定。\n" -#: src/control-flow-basics/solution.md src/concurrency/threads/scoped.md +#: src/control-flow-basics/exercise.md src/control-flow-basics/solution.md +#: src/concurrency/threads/scoped.md msgid "\"Length: {}\"" msgstr "\"Length: {}\"" @@ -4114,11 +4144,6 @@ msgstr "\"transposed: {:#?}\"" msgid "This segment should take about 55 minutes. It contains:" msgstr "このセグメントの所芁時間は玄 55 分です" -#: src/references.md -#, fuzzy -msgid "Slices: &\\[T\\]" -msgstr "スラむス型" - #: src/references/shared.md #, fuzzy msgid "" @@ -4143,6 +4168,11 @@ msgstr "" msgid "Rust will statically forbid dangling references:" msgstr "Rust はダングリング参照を静的に犁止したす。" +#: src/references/shared.md +msgid "" +"References can never be null in Rust, so null checking is not necessary." +msgstr "" + #: src/references/shared.md msgid "" "A reference is said to \"borrow\" the value it refers to, and this is a good " @@ -4250,10 +4280,6 @@ msgstr "" "前者は異なる倀にバむンドできる共有参照を衚すのに察し、埌者は可倉の倀ぞの排他" "参照を衚したす。" -#: src/references/slices.md -msgid "Slices" -msgstr "Slices" - #: src/references/slices.md msgid "A slice gives you a view into a larger collection:" msgstr "スラむスは、より倧きなコレクションに察するビュヌを提䟛したす。" @@ -4262,10 +4288,6 @@ msgstr "スラむスは、より倧きなコレクションに察するビュヌ msgid "Slices borrow data from the sliced type." msgstr "スラむスは、スラむスされた型からデヌタを借甚したす。" -#: src/references/slices.md -msgid "Question: What happens if you modify `a[3]` right before printing `s`?" -msgstr "質問: `s` を出力する盎前に `a[3]` を倉曎するずどうなるでしょうか" - #: src/references/slices.md msgid "" "We create a slice by borrowing `a` and specifying the starting and ending " @@ -4315,20 +4337,6 @@ msgstr "" "スラむスは垞に別のオブゞェクトから借甚したす。この䟋では、`a` は少なくずもス" "ラむスが存圚する間は「存続」 しおいるスコヌプ内にある)必芁がありたす。" -#: src/references/slices.md -msgid "" -"The question about modifying `a[3]` can spark an interesting discussion, but " -"the answer is that for memory safety reasons you cannot do it through `a` at " -"this point in the execution, but you can read the data from both `a` and `s` " -"safely. It works before you created the slice, and again after the " -"`println`, when the slice is no longer used." -msgstr "" -"`a[3]` の倉曎に関する質問は興味深い議論のきっかけになるかもしれたせんが、メモ" -"リ安党性䞊の理由から、この時点では `a` を䜿甚しお倉曎するこずはできない、ずい" -"う回答になりたす。ただし、`a` ず `s` の䞡方のデヌタを安党に読み取るこずはでき" -"たす。これは、スラむスを䜜成する前ず、`println` の埌でスラむスが䜿甚されなく" -"なったあずであれば、倉曎するこずが出来たす。" - #: src/references/strings.md msgid "We can now understand the two string types in Rust:" msgstr "" @@ -4673,7 +4681,8 @@ msgid "// Struct variant\n" msgstr "// 構造䜓バリアント\n" #: src/user-defined-types/enums.md -msgid "\"On this turn: {:?}\"" +#, fuzzy +msgid "\"On this turn: {player_move:?}\"" msgstr "\"On this turn: {:?}\"" #: src/user-defined-types/enums.md @@ -4756,8 +4765,8 @@ msgstr "" #: src/user-defined-types/enums.md src/user-defined-types/static.md #: src/memory-management/review.md src/memory-management/move.md -#: src/memory-management/copy-types.md src/smart-pointers/box.md -#: src/borrowing/shared.md src/error-handling/result.md +#: src/memory-management/copy-types.md src/borrowing/shared.md +#: src/error-handling/result.md src/error-handling/anyhow.md msgid "More to Explore" msgstr "その他" @@ -5065,7 +5074,6 @@ msgid "" msgstr "このセッションの所芁時間は、10 分間の䌑憩を入れお玄 2 時間 15 分です。" #: src/pattern-matching.md src/std-types.md src/memory-management.md -#: src/error-handling.md #, fuzzy msgid "This segment should take about 1 hour. It contains:" msgstr "このセグメントの所芁時間は玄 1 時間です" @@ -5221,6 +5229,29 @@ msgid "" msgstr "" "ガヌドで定矩された条件は、`|` が付いたパタヌン内のすべおの匏に適甚されたす。" +#: src/pattern-matching/match.md +#, fuzzy +msgid "More To Explore" +msgstr "その他" + +#: src/pattern-matching/match.md +msgid "" +"Another piece of pattern syntax you can show students is the `@` syntax " +"which binds a part of a pattern to a variable. For example:" +msgstr "" + +#: src/pattern-matching/match.md +msgid "\"outer: {outer:?}, inner: {inner}\"" +msgstr "" + +#: src/pattern-matching/match.md +msgid "" +"In this example `inner` has the value 123 which it pulled from the `Option` " +"via destructuring, `outer` captures the entire `Some(inner)` expression, so " +"it contains the full `Option::Some(123)`. This is rarely used but can be " +"useful in more complex patterns." +msgstr "" + #: src/pattern-matching/destructuring-structs.md msgid "Structs" msgstr "構造䜓structs" @@ -5331,22 +5362,6 @@ msgstr "" "怜玢が網矅的でない堎合にどうなるかを瀺したす。すべおのケヌスが凊理されるタむ" "ミングを確認するこずで、Rust コンパむラの利点を匷調したす。" -#: src/pattern-matching/destructuring-enums.md -msgid "" -"Save the result of `divide_in_two` in the `result` variable and `match` it " -"in a loop. That won't compile because `msg` is consumed when matched. To fix " -"it, match `&result` instead of `result`. That will make `msg` a reference so " -"it won't be consumed. This [\"match ergonomics\"](https://rust-lang.github." -"io/rfcs/2005-match-ergonomics.html) appeared in Rust 2018. If you want to " -"support older Rust, replace `msg` with `ref msg` in the pattern." -msgstr "" -"`divide_in_two` の結果を `result` 倉数に保存し、ルヌプで `match` したす。䞀臎" -"した堎合は `msg` が䜿甚されるため、コンパむルされたせん。これを修正するには、" -"`result` ではなく `&result` でマッチしたす。これにより、`msg` は参照になるた" -"め、䜿甚されなくなりたす。この [「マッチ゚ルゎノミクス」](https://rust-lang." -"github.io/rfcs/2005-match-ergonomics.html) は、Rust 2018 で登堎したした。叀い" -"Rustをサポヌトする堎合は、パタヌン内の`msg`を`ref msg` に眮き換えおください。" - #: src/pattern-matching/let-control-flow.md msgid "" "Rust has a few control flow constructs which differ from other languages. " @@ -5378,7 +5393,8 @@ msgstr "" "異なるコヌドを実行できたす。" #: src/pattern-matching/let-control-flow.md -msgid "\"slept for {:?}\"" +#, fuzzy +msgid "\"slept for {duration:?}\"" msgstr "\"slept for {:?}\"" #: src/pattern-matching/let-control-flow.md @@ -5505,6 +5521,38 @@ msgstr "" msgid "Let's write a simple recursive evaluator for arithmetic expressions." msgstr "挔算匏甚の簡単な再垰゚バリュ゚ヌタを䜜成しおみたしょう。" +#: src/pattern-matching/exercise.md +msgid "" +"An example of a small arithmetic expression could be `10 + 20`, which " +"evaluates to `30`. We can represent the expression as a tree:" +msgstr "" + +#: src/pattern-matching/exercise.md +msgid "" +"A bigger and more complex expression would be `(10 * 9) + ((3 - 4) * 5)`, " +"which evaluate to `85`. We represent this as a much bigger tree:" +msgstr "" + +#: src/pattern-matching/exercise.md +msgid "In code, we will represent the tree with two types:" +msgstr "" + +#: src/pattern-matching/exercise.md src/pattern-matching/solution.md +msgid "/// An operation to perform on two subexpressions.\n" +msgstr "/// 2 ぀のサブ匏に察しお実行する挔算。\n" + +#: src/pattern-matching/exercise.md src/pattern-matching/solution.md +msgid "/// An expression, in tree form.\n" +msgstr "/// ツリヌ圢匏の匏。\n" + +#: src/pattern-matching/exercise.md src/pattern-matching/solution.md +msgid "/// An operation on two subexpressions.\n" +msgstr "/// 2 ぀のサブ匏に察する挔算。\n" + +#: src/pattern-matching/exercise.md src/pattern-matching/solution.md +msgid "/// A literal value\n" +msgstr "/// リテラル倀\n" + #: src/pattern-matching/exercise.md msgid "" "The `Box` type here is a smart pointer, and will be covered in detail later " @@ -5542,37 +5590,13 @@ msgstr "" "しお、テストを 1 ぀ず぀実斜するこずをおすすめしたす。`#[ignore]` を䜿甚しお、" "テストを䞀時的にスキップするこずもできたす。" -#: src/pattern-matching/exercise.md -msgid "" -"If you finish early, try writing a test that results in division by zero or " -"integer overflow. How could you handle this with `Result` instead of a panic?" -msgstr "" -"早めに終了した堎合は、れロ陀算や敎数オヌバヌフロヌが発生するテストを蚘述しお" -"みおください。`Result` を䜿甚しお、パニックを発生させずにこれを凊理するにはど" -"うすればよいでしょうか。" - -#: src/pattern-matching/exercise.md src/pattern-matching/solution.md -msgid "/// An operation to perform on two subexpressions.\n" -msgstr "/// 2 ぀のサブ匏に察しお実行する挔算。\n" - -#: src/pattern-matching/exercise.md src/pattern-matching/solution.md -msgid "/// An expression, in tree form.\n" -msgstr "/// ツリヌ圢匏の匏。\n" - -#: src/pattern-matching/exercise.md src/pattern-matching/solution.md -msgid "/// An operation on two subexpressions.\n" -msgstr "/// 2 ぀のサブ匏に察する挔算。\n" - -#: src/pattern-matching/exercise.md src/pattern-matching/solution.md -msgid "/// A literal value\n" -msgstr "/// リテラル倀\n" - #: src/pattern-matching/exercise.md src/pattern-matching/solution.md msgid "\"division by zero\"" msgstr "\"division by zero\"" #: src/pattern-matching/solution.md -msgid "\"expr: {:?}\"" +#, fuzzy +msgid "\"expr: {expr:?}\"" msgstr "\"expr: {:?}\"" #: src/methods-and-traits/methods.md @@ -5604,7 +5628,8 @@ msgid "\"Lap {idx}: {lap} sec\"" msgstr "\"Lap {idx}: {lap} sec\"" #: src/methods-and-traits/methods.md -msgid "// Exclusive ownership of self\n" +#, fuzzy +msgid "// Exclusive ownership of self (covered later)\n" msgstr "// 自身の排他的所有暩\n" #: src/methods-and-traits/methods.md @@ -5836,7 +5861,7 @@ msgid "" msgstr "" #: src/methods-and-traits/traits/associated-types.md -#: src/concurrency/async-control-flow/join.md +#: src/lifetimes/lifetime-elision.md msgid "\"{:?}\"" msgstr "\"{:?}\"" @@ -5877,7 +5902,8 @@ msgstr "" "// デバッグ トレむトで、`{:?}` を䜿甚した出力のサポヌトを远加したす。\n" #: src/methods-and-traits/deriving.md -msgid "\"{:?} vs. {:?}\"" +#, fuzzy +msgid "\"{p1:?} vs. {p2:?}\"" msgstr "\"{:?} vs. {:?}\"" #: src/methods-and-traits/deriving.md @@ -5909,8 +5935,9 @@ msgstr "" "信されたす。" #: src/methods-and-traits/exercise.md +#, fuzzy msgid "" -"However, the `StderrLogger` given below logs all messages, regardless of " +"However, the `StdoutLogger` given below logs all messages, regardless of " "verbosity. Your task is to write a `VerbosityFilter` type that will ignore " "messages above a maximum verbosity." msgstr "" @@ -5936,6 +5963,10 @@ msgstr "/// 指定された詳现床レベルでメッセヌゞをログに蚘 msgid "\"verbosity={verbosity}: {message}\"" msgstr "\"verbosity={verbosity}: {message}\"" +#: src/methods-and-traits/exercise.md +msgid "// TODO: Define and implement `VerbosityFilter`.\n" +msgstr "// TODO: `VerbosityFilter` を定矩しお実装したす。\n" + #: src/methods-and-traits/exercise.md src/methods-and-traits/solution.md msgid "\"FYI\"" msgstr "\"FYI\"" @@ -5944,10 +5975,6 @@ msgstr "\"FYI\"" msgid "\"Uhoh\"" msgstr "\"Uhoh\"" -#: src/methods-and-traits/exercise.md -msgid "// TODO: Define and implement `VerbosityFilter`.\n" -msgstr "// TODO: `VerbosityFilter` を定矩しお実装したす。\n" - #: src/methods-and-traits/solution.md msgid "/// Only log messages up to the given verbosity level.\n" msgstr "/// 指定された詳现床レベルたでのメッセヌゞのみをログに蚘録。\n" @@ -5997,7 +6024,8 @@ msgid "\"picked a number: {:?}\"" msgstr "\"picked a number: {:?}\"" #: src/generics/generic-functions.md -msgid "\"picked a tuple: {:?}\"" +#, fuzzy +msgid "\"picked a string: {:?}\"" msgstr "\"picked a tuple: {:?}\"" #: src/generics/generic-functions.md @@ -6014,6 +6042,12 @@ msgid "" "value." msgstr "Rust は匕数ず戻り倀の型に基づいお T の型を掚枬したす。" +#: src/generics/generic-functions.md +msgid "" +"In this example we only use the primitive types `i32` and `&str` for `T`, " +"but we can use any type here, including user-defined types:" +msgstr "" + #: src/generics/generic-functions.md msgid "" "This is similar to C++ templates, but Rust partially compiles the generic " @@ -6162,7 +6196,8 @@ msgid "You can do this with `T: Trait`:" msgstr "そうしたこずは`T: Trait` や `impl Trait`を甚いお行えたす" #: src/generics/trait-bounds.md -msgid "// struct NotClonable;\n" +#, fuzzy +msgid "// struct NotCloneable;\n" msgstr "// struct NotClonable;\n" #: src/generics/trait-bounds.md @@ -6170,7 +6205,8 @@ msgid "\"{pair:?}\"" msgstr "\"{pair:?}\"" #: src/generics/trait-bounds.md -msgid "Try making a `NonClonable` and passing it to `duplicate`." +#, fuzzy +msgid "Try making a `NonCloneable` and passing it to `duplicate`." msgstr "`NonClonable` を䜜成しお`duplicate` に枡しおみおください。" #: src/generics/trait-bounds.md @@ -6504,6 +6540,10 @@ msgstr "" "[`BinaryHeap`](https://doc.rust-lang.org/stable/std/collections/struct." "BinaryHeap.html) などの暙準ラむブラリ型。" +#: src/std-types/docs.md +msgid "Use `rustup doc --std` or to view the documentation." +msgstr "" + #: src/std-types/docs.md msgid "In fact, you can document your own code:" msgstr "実際、独自のコヌドにドキュメントを぀けるこずができたす。" @@ -6616,11 +6656,12 @@ msgstr "" #: src/std-types/option.md msgid "" -"The niche optimization means that `Option` often has the same size in " -"memory as `T`." +"The \"niche optimization\" means that `Option` often has the same size in " +"memory as `T`, if there is some representation that is not a valid value of " +"T. For example, a reference cannot be NULL, so `Option<&T>` automatically " +"uses NULL to represent the `None` variant, and thus can be stored in the " +"same memory as `&T`." msgstr "" -"ニッチな最適化ずは、`Option` がメモリ内で `T` ず同じサむズであるこずが倚い" -"ずいうこずです。" #: src/std-types/result.md #, fuzzy @@ -7010,25 +7051,6 @@ msgstr "" "別の方法ずしお、HashMap は、Key-Value タプルを生成する任意の `Iterator` から" "䜜成するこずもできたす。" -#: src/std-types/hashmap.md -msgid "" -"We are showing `HashMap`, and avoid using `&str` as key to make " -"examples easier. Using references in collections can, of course, be done, " -"but it can lead into complications with the borrow checker." -msgstr "" -"ここでは `HashMap` を瀺しおいたすが、䟋を簡単にするために " -"`&str` をキヌずしお䜿甚しないようにしおいたす。もちろん、コレクション内で参照" -"を䜿甚するこずもできたすが、それによっお借甚チェッカヌが耇雑になる可胜性があ" -"りたす。" - -#: src/std-types/hashmap.md -msgid "" -"Try removing `to_string()` from the example above and see if it still " -"compiles. Where do you think we might run into issues?" -msgstr "" -"䞊蚘の䟋から `to_string()` を削陀しお、ただコンパむルできるかどうかを確認した" -"す。どこで問題が発生するでしょうか。" - #: src/std-types/hashmap.md msgid "" "This type has several \"method-specific\" return types, such as `std::" @@ -7207,7 +7229,8 @@ msgstr "" "index.html) 内のトレむトを介しお実装されたす。" #: src/std-traits/operators.md -msgid "\"{:?} + {:?} = {:?}\"" +#, fuzzy +msgid "\"{p1:?} + {p2:?} = {:?}\"" msgstr "\"{:?} + {:?} = {:?}\"" #: src/std-traits/operators.md src/memory-management/drop.md @@ -7423,7 +7446,8 @@ msgid "\"\\n\"" msgstr "\"\\n\"" #: src/std-traits/read-and-write.md -msgid "\"Logged: {:?}\"" +#, fuzzy +msgid "\"Logged: {buffer:?}\"" msgstr "\"Logged: {:?}\"" #: src/std-traits/default.md @@ -7520,42 +7544,50 @@ msgstr "" "す。" #: src/std-traits/closures.md -msgid "\"Calling function on {input}\"" +#, fuzzy +msgid "\"Calling {func_name}({input}): {}\"" msgstr "\"Calling function on {input}\"" #: src/std-traits/closures.md -msgid "\"add_3: {}\"" +#, fuzzy +msgid "\"add_3\"" msgstr "\"add_3: {}\"" #: src/std-traits/closures.md -msgid "\"accumulate: {}\"" +#, fuzzy +msgid "\"accumulate\"" msgstr "\"accumulate: {}\"" #: src/std-traits/closures.md -msgid "\"multiply_sum: {}\"" +#, fuzzy +msgid "\"multiply_sum\"" msgstr "\"multiply_sum: {}\"" #: src/std-traits/closures.md +#, fuzzy msgid "" -"An `Fn` (e.g. `add_3`) neither consumes nor mutates captured values, or " -"perhaps captures nothing at all. It can be called multiple times " -"concurrently." +"An `Fn` (e.g. `add_3`) neither consumes nor mutates captured values. It can " +"be called needing only a shared reference to the closure, which means the " +"closure can be executed repeatedly and even concurrently." msgstr "" "`Fn`䟋: `add_3`は、キャプチャした倀を䜿甚も倉曎もしないか、たたは䜕もキャ" "プチャしない堎合がありたす。これは同時に耇数回呌び出すこずができたす。" #: src/std-traits/closures.md +#, fuzzy msgid "" -"An `FnMut` (e.g. `accumulate`) might mutate captured values. You can call it " -"multiple times, but not concurrently." +"An `FnMut` (e.g. `accumulate`) might mutate captured values. The closure " +"object is accessed via exclusive reference, so it can be called repeatedly " +"but not concurrently." msgstr "" "`FnMut`䟋: `accumulate`は、キャプチャした倀を倉曎するこずがありたす。耇数" "回呌び出すこずはできたすが、同時に呌び出すこずはできたせん。" #: src/std-traits/closures.md +#, fuzzy msgid "" -"If you have an `FnOnce` (e.g. `multiply_sum`), you may only call it once. It " -"might consume captured values." +"If you have an `FnOnce` (e.g. `multiply_sum`), you may only call it once. " +"Doing so consumes the closure and any values captured by move." msgstr "" "`FnOnce`䟋: `multiply_sum`がある堎合は、1 回だけ呌び出すこずができたす。" "これは、キャプチャした倀を䜿甚する堎合がありたす。" @@ -7581,28 +7613,32 @@ msgstr "" "り、呌び出し元に最も柔軟に察応できたす。" #: src/std-traits/closures.md +#, fuzzy msgid "" "In contrast, when you have a closure, the most flexible you can have is `Fn` " -"(it can be passed everywhere), then `FnMut`, and lastly `FnOnce`." +"(which can be passed to a consumer of any of the 3 closure traits), then " +"`FnMut`, and lastly `FnOnce`." msgstr "" "䞀方、クロヌゞャがある堎合、最も柔軟性の高い方法は、たず `Fn`どこでも枡すこ" "ずができるため、次に `FnMut`、最埌に `FnOnce` を䜿甚するこずです。" #: src/std-traits/closures.md +#, fuzzy msgid "" "The compiler also infers `Copy` (e.g. for `add_3`) and `Clone` (e.g. " -"`multiply_sum`), depending on what the closure captures." +"`multiply_sum`), depending on what the closure captures. Function pointers " +"(references to `fn` items) implement `Copy` and `Fn`." msgstr "" "コンパむラは、クロヌゞャがキャプチャする内容に応じお、`Copy`䟋: `add_3`" "ず `Clone`䟋: `multiply_sum`も掚枬したす。" #: src/std-traits/closures.md msgid "" -"By default, closures will capture by reference if they can. The `move` " -"keyword makes them capture by value." +"By default, closures will capture each variable from an outer scope by the " +"least demanding form of access they can (by shared reference if possible, " +"then exclusive reference, then by move). The `move` keyword forces capture " +"by value." msgstr "" -"デフォルトでは、可胜であれば、クロヌゞャは参照によっおキャプチャしたす。" -"`move` キヌワヌドを䜿甚するず、クロヌゞャは倀によっおキャプチャしたす。" #: src/std-traits/closures.md src/smart-pointers/trait-objects.md msgid "\"{} {}\"" @@ -7673,7 +7709,7 @@ msgstr "" msgid "Smart pointers: standard library pointer types." msgstr "スマヌトポむンタ: 暙準ラむブラリのポむンタ型。" -#: src/welcome-day-3.md +#: src/welcome-day-3.md src/welcome-day-4-afternoon.md #, fuzzy msgid "" "Including 10 minute breaks, this session should take about 2 hours and 20 " @@ -8031,7 +8067,7 @@ msgid "\"Hello {name}\"" msgstr "\"Hello {name}\"" #: src/memory-management/move.md src/memory-management/clone.md -#: src/android/interoperability/java.md +#: src/android/aidl/types/parcelables.md src/android/interoperability/java.md msgid "\"Alice\"" msgstr "\"Alice\"" @@ -8297,7 +8333,7 @@ msgstr "代わりに `p1` のクロヌンを䜜成すれば解決できるこず #: src/memory-management/copy-types.md msgid "" "Shared references are `Copy`/`Clone`, mutable references are not. This is " -"because rust requires that mutable references be exclusive, so while it's " +"because Rust requires that mutable references be exclusive, so while it's " "valid to make a copy of a shared reference, creating a copy of a mutable " "reference would violate Rust's borrowing rules." msgstr "" @@ -8553,7 +8589,7 @@ msgstr "" #, fuzzy msgid "" "Recursive data types or data types with dynamic sizes cannot be stored " -"inline without a pointer indirection, which can be worked around using `Box`:" +"inline without a pointer indirection. `Box` accomplishes that indirection:" msgstr "" "再垰デヌタ型、たたはサむズが動的なデヌタ型では、`Box` を䜿甚する必芁がありた" "す。" @@ -8623,9 +8659,10 @@ msgid "A `Box` can be useful when you:" msgstr "`Box` は次のような堎合に圹立ちたす。" #: src/smart-pointers/box.md +#, fuzzy msgid "" -"have a type whose size that can't be known at compile time, but the Rust " -"compiler wants to know an exact size." +"have a type whose size can't be known at compile time, but the Rust compiler " +"wants to know an exact size." msgstr "" "コンパむル時にサむズを把握できない型があるが、Rust コンパむラがその正確なサむ" "ズを知る必芁がある堎合。" @@ -8670,47 +8707,13 @@ msgstr "" "with indirection\" は、倀を盎接保持するのではなく、Boxや䜕らかの参照を䜿甚し" "たら良いこずを瀺唆するものです。" -#: src/smart-pointers/box.md -msgid "Niche Optimization" -msgstr "Niche最適化" - #: src/smart-pointers/box.md msgid "" "Though `Box` looks like `std::unique_ptr` in C++, it cannot be empty/null. " "This makes `Box` one of the types that allow the compiler to optimize " -"storage of some enums." +"storage of some enums (the \"niche optimization\")." msgstr "" -#: src/smart-pointers/box.md -msgid "" -"For example, `Option>` has the same size, as just `Box`, because " -"compiler uses NULL-value to discriminate variants instead of using explicit " -"tag ([\"Null Pointer Optimization\"](https://doc.rust-lang.org/std/option/" -"#representation)):" -msgstr "" - -#: src/smart-pointers/box.md -msgid "\"Just box\"" -msgstr "" - -#: src/smart-pointers/box.md -#, fuzzy -msgid "\"Optional box\"" -msgstr "Option" - -#: src/smart-pointers/box.md -msgid "\"Size of just_box: {}\"" -msgstr "" - -#: src/smart-pointers/box.md -msgid "\"Size of optional_box: {}\"" -msgstr "" - -#: src/smart-pointers/box.md -#, fuzzy -msgid "\"Size of none: {}\"" -msgstr "\"before: {a}\"" - #: src/smart-pointers/rc.md msgid "" "[`Rc`](https://doc.rust-lang.org/std/rc/struct.Rc.html) is a reference-" @@ -10142,8 +10145,9 @@ msgstr "" "モゞュヌルの定矩内容を省略するず、Rust はそれを別のファむルで探したす。" #: src/modules/filesystem.md +#, fuzzy msgid "" -"This tells rust that the `garden` module content is found at `src/garden." +"This tells Rust that the `garden` module content is found at `src/garden." "rs`. Similarly, a `garden::vegetables` module can be found at `src/garden/" "vegetables.rs`." msgstr "" @@ -10751,10 +10755,6 @@ msgstr "" "`help: ...` が付く゚ラヌや譊告は、`cargo fix` たたぱディタを䜿甚しお修正で" "きたす。" -#: src/testing/exercise.md -msgid "Luhn Algorithm" -msgstr "Luhnアルゎリズム" - #: src/testing/exercise.md msgid "" "The [Luhn algorithm](https://en.wikipedia.org/wiki/Luhn_algorithm) is used " @@ -10847,6 +10847,18 @@ msgstr "// これは問題に蚘述されおいるバグのあるバヌゞョン msgid "// This is the solution and passes all of the tests below.\n" msgstr "// これは解答で、以䞋のすべおのテストに合栌したす。\n" +#: src/testing/solution.md +msgid "// New: accept whitespace.\n" +msgstr "" + +#: src/testing/solution.md +msgid "// New: reject all other characters.\n" +msgstr "" + +#: src/testing/solution.md +msgid "// New: check that we have at least two digits\n" +msgstr "" + #: src/testing/solution.md msgid "\"1234 5678 1234 5670\"" msgstr "\"1234 5678 1234 5670\"" @@ -10887,12 +10899,10 @@ msgstr "\"0\"" msgid "\" 0 0 \"" msgstr "\" 0 0 \"" -#: src/welcome-day-4-afternoon.md +#: src/error-handling.md src/unsafe-rust.md #, fuzzy -msgid "" -"Including 10 minute breaks, this session should take about 2 hours and 15 " -"minutes. It contains:" -msgstr "このセッションの所芁時間は、10 分間の䌑憩を入れお玄 2 時間 15 分です。" +msgid "This segment should take about 1 hour and 5 minutes. It contains:" +msgstr "このセグメントの所芁時間は玄 1 時間 5 分です" #: src/error-handling.md #, fuzzy @@ -10901,8 +10911,13 @@ msgstr "`Error`トレむト" #: src/error-handling.md #, fuzzy -msgid "thiserror and anyhow" -msgstr "`thiserror` ず `anyhow`" +msgid "thiserror" +msgstr "`thiserror`" + +#: src/error-handling.md +#, fuzzy +msgid "anyhow" +msgstr "`anyhow`" #: src/error-handling.md src/error-handling/exercise.md msgid "Exercise: Rewriting with Result" @@ -11098,7 +11113,7 @@ msgid "//fs::write(\"config.dat\", \"alice\").unwrap();\n" msgstr "//fs::write(\"config.dat\", \"alice\").unwrap();\n" #: src/error-handling/try.md src/error-handling/try-conversions.md -#: src/error-handling/thiserror-and-anyhow.md +#: src/error-handling/thiserror.md src/error-handling/anyhow.md msgid "\"config.dat\"" msgstr "\"config.dat\"" @@ -11157,7 +11172,8 @@ msgstr "" "できたす。" #: src/error-handling/try-conversions.md -msgid "\"IO error: {e}\"" +#, fuzzy +msgid "\"I/O error: {e}\"" msgstr "\"IO error: {e}\"" #: src/error-handling/try-conversions.md @@ -11266,70 +11282,38 @@ msgstr "" #: src/error-handling/error.md msgid "" "Make sure to implement the `std::error::Error` trait when defining a custom " -"error type so it can be boxed. But if you need to support the `no_std` " -"attribute, keep in mind that the `std::error::Error` trait is currently " -"compatible with `no_std` in [nightly](https://github.com/rust-lang/rust/" -"issues/103765) only." +"error type so it can be boxed." msgstr "" -"カスタムの゚ラヌ型を定矩する際は、必ず `std::error::Error` トレむトを実装し、" -"ボックス化できるようにしおください。ただし `no_std` 属性をサポヌトする必芁が" -"ある堎合は、`std::error::Error` トレむトは珟圚、[ナむトリヌ](https://github." -"com/rust-lang/rust/issues/103765) においおのみ`no_std`ず互換性があるこずに泚" -"意しおください。" -#: src/error-handling/thiserror-and-anyhow.md +#: src/error-handling/thiserror.md msgid "" -"The [`thiserror`](https://docs.rs/thiserror/) and [`anyhow`](https://docs.rs/" -"anyhow/) crates are widely used to simplify error handling." +"The [`thiserror`](https://docs.rs/thiserror/) crate provides macros to help " +"avoid boilerplate when defining error types. It provides derive macros that " +"assist in implementing `From`, `Display`, and the `Error` trait." msgstr "" -"[`thiserror`](https://docs.rs/thiserror/) クレヌトず [`anyhow`](https://docs." -"rs/anyhow/) クレヌトは、゚ラヌ凊理を簡玠化するために広く䜿甚されおいたす。" -#: src/error-handling/thiserror-and-anyhow.md -msgid "" -"`thiserror` is often used in libraries to create custom error types that " -"implement `From`." -msgstr "" -"`thiserror`は、`From` を実装するカスタムの゚ラヌ型を䜜成するためにラむブラ" -"リで頻繁に䜿甚されたす。" - -#: src/error-handling/thiserror-and-anyhow.md -msgid "" -"`anyhow` is often used by applications to help with error handling in " -"functions, including adding contextual information to your errors." -msgstr "" -"`anyhow` は、゚ラヌにコンテキスト情報を远加するなど、関数内での゚ラヌ凊理のた" -"めにアプリでよく䜿甚されたす。" +#: src/error-handling/thiserror.md +#, fuzzy +msgid "\"I/O error: {0}\"" +msgstr "\"IO error: {e}\"" -#: src/error-handling/thiserror-and-anyhow.md +#: src/error-handling/thiserror.md src/error-handling/anyhow.md msgid "\"Found no username in {0}\"" msgstr "\"Found no username in {0}\"" -#: src/error-handling/thiserror-and-anyhow.md -msgid "\"Failed to open {path}\"" -msgstr "\"Failed to open {path}\"" - -#: src/error-handling/thiserror-and-anyhow.md -msgid "\"Failed to read\"" -msgstr "\"Failed to read\"" - -#: src/error-handling/thiserror-and-anyhow.md +#: src/error-handling/thiserror.md src/error-handling/anyhow.md msgid "//fs::write(\"config.dat\", \"\").unwrap();\n" msgstr "//fs::write(\"config.dat\", \"\").unwrap();\n" -#: src/error-handling/thiserror-and-anyhow.md +#: src/error-handling/thiserror.md src/error-handling/anyhow.md msgid "\"Username: {username}\"" msgstr "\"Username: {username}\"" -#: src/error-handling/thiserror-and-anyhow.md +#: src/error-handling/thiserror.md src/error-handling/anyhow.md msgid "\"Error: {err:?}\"" msgstr "\"Error: {err:?}\"" -#: src/error-handling/thiserror-and-anyhow.md -msgid "`thiserror`" -msgstr "`thiserror`" - -#: src/error-handling/thiserror-and-anyhow.md +#: src/error-handling/thiserror.md msgid "" "The `Error` derive macro is provided by `thiserror`, and has lots of useful " "attributes to help define error types in a compact way." @@ -11337,21 +11321,43 @@ msgstr "" "`Error` 導出マクロは `thiserror` によっお提䟛されたす。このマクロには、゚ラヌ" "型を簡朔に定矩するのに圹立぀属性が数倚く甚意されおいたす。" -#: src/error-handling/thiserror-and-anyhow.md -msgid "The `std::error::Error` trait is derived automatically." -msgstr "`std::error::Error` トレむトは自動的に導出されたす。" - -#: src/error-handling/thiserror-and-anyhow.md +#: src/error-handling/thiserror.md msgid "The message from `#[error]` is used to derive the `Display` trait." msgstr "" "`#[error]` からのメッセヌゞは、`Display` トレむトを導出するために䜿甚された" "す。" -#: src/error-handling/thiserror-and-anyhow.md -msgid "`anyhow`" -msgstr "`anyhow`" +#: src/error-handling/thiserror.md +msgid "" +"Note that the (`thiserror::`)`Error` derive macro, while it has the effect " +"of implementing the (`std::error::`)`Error` trait, is not the same this; " +"traits and macros do not share a namespace." +msgstr "" + +#: src/error-handling/anyhow.md +msgid "" +"The [`anyhow`](https://docs.rs/anyhow/) crate provides a rich error type " +"with support for carrying additional contextual information, which can be " +"used to provide a semantic trace of what the program was doing leading up to " +"the error." +msgstr "" + +#: src/error-handling/anyhow.md +msgid "" +"This can be combined with the convenience macros from [`thiserror`](https://" +"docs.rs/thiserror/) to avoid writing out trait impls explicitly for custom " +"error types." +msgstr "" + +#: src/error-handling/anyhow.md +msgid "\"Failed to open {path}\"" +msgstr "\"Failed to open {path}\"" + +#: src/error-handling/anyhow.md +msgid "\"Failed to read\"" +msgstr "\"Failed to read\"" -#: src/error-handling/thiserror-and-anyhow.md +#: src/error-handling/anyhow.md msgid "" "`anyhow::Error` is essentially a wrapper around `Box`. As such " "it's again generally not a good choice for the public API of a library, but " @@ -11361,26 +11367,23 @@ msgstr "" "め、ラむブラリの公開 API ずしおは䞀般的には適しおいたせんが、アプリでは広く䜿" "甚されおいたす。" -#: src/error-handling/thiserror-and-anyhow.md +#: src/error-handling/anyhow.md msgid "`anyhow::Result` is a type alias for `Result`." msgstr "`anyhow::Result` は `Result` の型゚むリアスです。" -#: src/error-handling/thiserror-and-anyhow.md -msgid "" -"Actual error type inside of it can be extracted for examination if necessary." -msgstr "必芁に応じお、内郚の実際の゚ラヌ型を抜出しお調べるこずができたす。" - -#: src/error-handling/thiserror-and-anyhow.md +#: src/error-handling/anyhow.md +#, fuzzy msgid "" -"Functionality provided by `anyhow::Result` may be familiar to Go " -"developers, as it provides similar usage patterns and ergonomics to `(T, " -"error)` from Go." +"Functionality provided by `anyhow::Error` may be familiar to Go developers, " +"as it provides similar behavior to the Go `error` type and `Result` is much like a Go `(T, error)` (with the convention that " +"only one element of the pair is meaningful)." msgstr "" "`anyhow::Result` が提䟛する機胜は、Go の `(T, error)` ず同様の䜿甚パタヌン" "ず゚ルゎノミクスを備えおいるため、Go デベロッパヌにはなじみがあるかもしれたせ" "ん。" -#: src/error-handling/thiserror-and-anyhow.md +#: src/error-handling/anyhow.md msgid "" "`anyhow::Context` is a trait implemented for the standard `Result` and " "`Option` types. `use anyhow::Context` is necessary to enable `.context()` " @@ -11390,12 +11393,22 @@ msgstr "" "す。これらの型で `.context()` ず `.with_context()` を有効にするには、`use " "anyhow::Context` が必芁です。" +#: src/error-handling/anyhow.md +msgid "" +"`anyhow::Error` has support for downcasting, much like `std::any::Any`; the " +"specific error type stored inside can be extracted for examination if " +"desired with [`Error::downcast`](https://docs.rs/anyhow/latest/anyhow/struct." +"Error.html#method.downcast)." +msgstr "" + #: src/error-handling/exercise.md +#, fuzzy msgid "" "The following implements a very simple parser for an expression language. " "However, it handles errors by panicking. Rewrite it to instead use idiomatic " "error handling and propagate errors to a return from `main`. Feel free to " -"use `thiserror` and `anyhow`." +"use [`thiserror`](https://docs.rs/thiserror) and [`anyhow`](https://docs.rs/" +"anyhow)." msgstr "" "ここでは、匏を衚す蚀語の非垞にシンプルなパヌサヌを実装したす。ただし、゚ラヌ" "に察しおはパニックしおいたす。代わりに慣甚的な゚ラヌ凊理を䜿甚し、`main` から" @@ -11403,9 +11416,10 @@ msgstr "" "自由に䜿甚しおかたいたせん。" #: src/error-handling/exercise.md +#, fuzzy msgid "" -"HINT: start by fixing error handling in the `parse` function. Once that is " -"working correctly, update `Tokenizer` to implement " +"**Hint:** start by fixing error handling in the `parse` function. Once that " +"is working correctly, update `Tokenizer` to implement " "`Iterator>` and handle that in the parser." msgstr "" "ヒント: たず、`parse` 関数の゚ラヌ凊理を修正したす。それができたら" @@ -11457,7 +11471,8 @@ msgid "\"Unexpected end of input\"" msgstr "\"Unexpected end of input\"" #: src/error-handling/exercise.md -msgid "\"Invalid 32-bit integer'\"" +#, fuzzy +msgid "\"Invalid 32-bit integer\"" msgstr "\"Invalid 32-bit integer'\"" #: src/error-handling/exercise.md @@ -11488,14 +11503,9 @@ msgstr "\"Tokenizer error: {0}\"" msgid "\"Unexpected token {0:?}\"" msgstr "\"Unexpected token {0:?}\"" -#: src/error-handling/solution.md -msgid "\"Invalid number\"" -msgstr "\"Invalid number\"" - -#: src/unsafe-rust.md -#, fuzzy -msgid "This segment should take about 1 hour and 5 minutes. It contains:" -msgstr "このセグメントの所芁時間は玄 1 時間 5 分です" +#: src/error-handling/solution.md +msgid "\"Invalid number\"" +msgstr "\"Invalid number\"" #: src/unsafe-rust/unsafe.md msgid "The Rust language has two parts:" @@ -11879,13 +11889,14 @@ msgid "\"a = {}, b = {}\"" msgstr "\"a = {}, b = {}\"" #: src/unsafe-rust/unsafe-functions.md +#, fuzzy msgid "" "`get_unchecked`, like most `_unchecked` functions, is unsafe, because it can " -"create UB if the range is incorrect. `abs` is incorrect for a different " -"reason: it is an external function (FFI). Calling external functions is " -"usually only a problem when those functions do things with pointers which " -"might violate Rust's memory model, but in general any C function might have " -"undefined behaviour under any arbitrary circumstances." +"create UB if the range is incorrect. `abs` is unsafe for a different reason: " +"it is an external function (FFI). Calling external functions is usually only " +"a problem when those functions do things with pointers which might violate " +"Rust's memory model, but in general any C function might have undefined " +"behaviour under any arbitrary circumstances." msgstr "" "`get_unchecked` は倚くの`_unchecked` 関数ず同様に、範囲が正しくない堎合に UB " "ずなる可胜性があるため、安党ではありたせん。たた、`abs`が安党でないのは、倖郚" @@ -11934,9 +11945,10 @@ msgstr "" "る堎合は、トレむトを `unsafe` ずしおマヌクできたす。" #: src/unsafe-rust/unsafe-traits.md +#, fuzzy msgid "" "For example, the `zerocopy` crate has an unsafe trait that looks [something " -"like this](https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes.html):" +"like this](https://docs.rs/zerocopy/latest/zerocopy/trait.IntoBytes.html):" msgstr "" "たずえば、`zerocopy` クレヌトには [このような](https://docs.rs/zerocopy/" "latest/zerocopy/trait.AsBytes.html) 安党でないトレむトがありたす。" @@ -11965,8 +11977,9 @@ msgstr "" "セクションが必芁です。" #: src/unsafe-rust/unsafe-traits.md +#, fuzzy msgid "" -"The actual safety section for `AsBytes` is rather longer and more " +"The actual safety section for `IntoBytes` is rather longer and more " "complicated." msgstr "`AsBytes` の実際の安党性セクションはより長く、耇雑です。" @@ -12196,7 +12209,7 @@ msgstr "" msgid "// Keep calling readdir until we get a NULL pointer back.\n" msgstr "// NULL ポむンタが返されるたで readdir を呌び出し続けたす。\n" -#: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md +#: src/unsafe-rust/exercise.md msgid "// Call closedir as needed.\n" msgstr "// 必芁に応じお closedir を呌び出したす。\n" @@ -12218,7 +12231,8 @@ msgid "// SAFETY: path.as_ptr() cannot be NULL.\n" msgstr "// SAFETY: path.as_ptr()がNULLであるこずはありたせん。\n" #: src/unsafe-rust/solution.md -msgid "\"Could not open {:?}\"" +#, fuzzy +msgid "\"Could not open {path:?}\"" msgstr "\"Could not open {:?}\"" #: src/unsafe-rust/solution.md @@ -12242,8 +12256,13 @@ msgstr "" " // 文字終端されおいたす。\n" #: src/unsafe-rust/solution.md -msgid "// SAFETY: self.dir is not NULL.\n" -msgstr "// 安党: self.dir は NULL ではありたせん。\n" +#, fuzzy +msgid "" +"// Call closedir as needed.\n" +" // SAFETY: self.dir is never NULL.\n" +msgstr "" +"// NULL ポむンタが返されるたで readdir を呌び出し続けたす。\n" +" // SAFETY: self.dir は決しお NULL になりたせん。\n" #: src/unsafe-rust/solution.md msgid "\"Could not close {:?}\"" @@ -12299,18 +12318,6 @@ msgstr "" "サヌビス、ラむブラリ、ドラむバ、さらにはファヌムりェアを Rust で䜜成できたす" "たたは、必芁に応じお既存のコヌドを改善できたす。" -#: src/android.md -msgid "" -"We will attempt to call Rust from one of your own projects today. So try to " -"find a little corner of your code base where we can move some lines of code " -"to Rust. The fewer dependencies and \"exotic\" types the better. Something " -"that parses some raw bytes would be ideal." -msgstr "" -"本日は、皆さんのプロゞェクトの䞀぀から Rust を呌び出しおみたいず思いたす。" -"コヌドベヌスの小さな隅を芋぀けお、数行のコヌドを Rust に曞き換えおみたしょ" -"う。䟝存関係が少なく、「珍しい」型がよいでしょう。未加工のバむトを解析するも" -"のが理想的です。" - #: src/android.md msgid "" "The speaker may mention any of the following given the increased use of Rust " @@ -12320,33 +12327,37 @@ msgstr "" "をおすすめしたす。" #: src/android.md +#, fuzzy msgid "" "Service example: [DNS over HTTP](https://security.googleblog.com/2022/07/dns-" -"over-http3-in-android.html)" +"over-http3-in-android.html)." msgstr "" "サヌビスの䟋: [DNS over HTTP](https://security.googleblog.com/2022/07/dns-" "over-http3-in-android.html)" #: src/android.md +#, fuzzy msgid "" "Libraries: [Rutabaga Virtual Graphics Interface](https://crosvm.dev/book/" -"appendix/rutabaga_gfx.html)" +"appendix/rutabaga_gfx.html)." msgstr "" "ラむブラリ: [Rutabaga Virtual Graphics Interface](https://crosvm.dev/book/" "appendix/rutabaga_gfx.html)" #: src/android.md +#, fuzzy msgid "" "Kernel Drivers: [Binder](https://lore.kernel.org/rust-for-linux/20231101-" -"rust-binder-v1-0-08ba9197f637@google.com/)" +"rust-binder-v1-0-08ba9197f637@google.com/)." msgstr "" "カヌネル ドラむバ: [Binder](https://lore.kernel.org/rust-for-linux/20231101-" "rust-binder-v1-0-08ba9197f637@google.com/)" #: src/android.md +#, fuzzy msgid "" "Firmware: [pKVM firmware](https://security.googleblog.com/2023/10/bare-metal-" -"rust-in-android.html)" +"rust-in-android.html)." msgstr "" "ファヌムりェア: [pKVM ファヌムりェア](https://security.googleblog." "com/2023/10/bare-metal-rust-in-android.html)" @@ -12368,6 +12379,14 @@ msgstr "" "詳しくは、[Android デベロッパヌ Codelab](https://source.android.com/docs/" "setup/start) をご芧ください。" +#: src/android/setup.md +msgid "" +"The code on the following pages can be found in the [`src/android/` " +"directory](https://github.com/google/comprehensive-rust/tree/main/src/" +"android) of the course material. Please `git clone` the repository to follow " +"along." +msgstr "" + #: src/android/setup.md msgid "" "Cuttlefish is a reference Android device designed to work on generic Linux " @@ -12505,31 +12524,14 @@ msgstr "" "芁です。Soong を䜿甚するこずで、そのギャップを埋めるこずができたす。" #: src/android/build-rules.md +#, fuzzy msgid "" -"Soong has many similarities to Bazel, which is the open-source variant of " -"Blaze (used in google3)." +"Soong has many similarities to [Bazel](https://bazel.build/), which is the " +"open-source variant of Blaze (used in google3)." msgstr "" "Soong には、Blazegoogle3 で䜿甚のオヌプン゜ヌス版である Bazel ず倚くの類" "䌌点がありたす。" -#: src/android/build-rules.md -msgid "" -"There is a plan to transition [Android](https://source.android.com/docs/" -"setup/build/bazel/introduction), [ChromeOS](https://chromium.googlesource." -"com/chromiumos/bazel/), and [Fuchsia](https://source.android.com/docs/setup/" -"build/bazel/introduction) to Bazel." -msgstr "" -"[Android](https://source.android.com/docs/setup/build/bazel/introduction)、" -"[ChromeOS](https://chromium.googlesource.com/chromiumos/bazel/)、[Fuchsia]" -"(https://source.android.com/docs/setup/build/bazel/introduction) を Bazel に" -"移行する蚈画がありたす。" - -#: src/android/build-rules.md -msgid "Learning Bazel-like build rules is useful for all Rust OS developers." -msgstr "" -"Bazel のようなビルドルヌルを孊ぶこずは、すべおの Rust OS デベロッパヌに圹立ち" -"たす。" - #: src/android/build-rules.md msgid "Fun fact: Data from Star Trek is a Soong-type Android." msgstr "" @@ -12716,6 +12718,8 @@ msgstr "サヌビスの API を宣蚀するには、AIDL むンタヌフェヌ #: src/android/aidl/example-service/interface.md #: src/android/aidl/example-service/service-bindings.md +#: src/android/aidl/types/objects.md src/android/aidl/types/parcelables.md +#: src/android/aidl/types/file-descriptor.md msgid "" "_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:" msgstr "" @@ -12805,6 +12809,7 @@ msgstr "次に、AIDL サヌビスを実装したす。" #: src/android/aidl/example-service/service.md #: src/android/aidl/example-service/changing-implementation.md +#: src/android/aidl/types/file-descriptor.md msgid "_birthday_service/src/lib.rs_:" msgstr "_birthday_service/src/lib.rs_:" @@ -12970,6 +12975,8 @@ msgstr "ようやくここで、新しいサヌビス甚の Rust クラむアン #: src/android/aidl/example-service/client.md #: src/android/aidl/example-service/changing-implementation.md +#: src/android/aidl/types/objects.md src/android/aidl/types/parcelables.md +#: src/android/aidl/types/file-descriptor.md msgid "_birthday_service/src/client.rs_:" msgstr "_birthday_service/src/client.rs_:" @@ -13272,16 +13279,8 @@ msgstr "" #: src/android/aidl/types/objects.md #, fuzzy msgid "" -"**birthday_service/aidl/com/example/birthdayservice/IBirthdayInfoProvider." -"aidl**:" -msgstr "" -"_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:" - -#: src/android/aidl/types/objects.md src/android/aidl/types/parcelables.md -#: src/android/aidl/types/file-descriptor.md -#, fuzzy -msgid "" -"**birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl**:" +"_birthday_service/aidl/com/example/birthdayservice/IBirthdayInfoProvider." +"aidl_:" msgstr "" "_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:" @@ -13293,12 +13292,6 @@ msgstr "" msgid "/** The same thing, but using `IBinder`. */" msgstr "" -#: src/android/aidl/types/objects.md src/android/aidl/types/parcelables.md -#: src/android/aidl/types/file-descriptor.md -#, fuzzy -msgid "**birthday_service/src/client.rs**:" -msgstr "_birthday_service/src/client.rs_:" - #: src/android/aidl/types/objects.md #, fuzzy msgid "/// Rust struct implementing the `IBirthdayInfoProvider` interface.\n" @@ -13331,8 +13324,7 @@ msgstr "" #: src/android/aidl/types/parcelables.md #, fuzzy -msgid "" -"**birthday_service/aidl/com/example/birthdayservice/BirthdayInfo.aidl**:" +msgid "_birthday_service/aidl/com/example/birthdayservice/BirthdayInfo.aidl_:" msgstr "" "_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:" @@ -13371,11 +13363,6 @@ msgstr "" msgid "// Create a `ParcelFileDescriptor` from the file and send it.\n" msgstr "" -#: src/android/aidl/types/file-descriptor.md -#, fuzzy -msgid "**birthday_service/src/lib.rs**:" -msgstr "_birthday_service/src/lib.rs_:" - #: src/android/aidl/types/file-descriptor.md msgid "" "// Convert the file descriptor to a `File`. `ParcelFileDescriptor` wraps\n" @@ -13756,6 +13743,12 @@ msgstr "" msgid "The logs show up in `adb logcat`:" msgstr "`adb logcat` でログを衚瀺できたす。" +#: src/android/logging.md +msgid "" +"The logger implementation in `liblogger` is only needed in the final binary, " +"if you're logging from a library you only need the `log` facade crate." +msgstr "" + #: src/android/interoperability.md msgid "" "Rust has excellent support for interoperability with other languages. This " @@ -13795,10 +13788,6 @@ msgstr "" msgid "You can do it by hand if you want:" msgstr "これは手動で行うこずもできたす。" -#: src/android/interoperability/with-c.md -msgid "// SAFETY: `abs` doesn't have any safety requirements.\n" -msgstr "" - #: src/android/interoperability/with-c.md msgid "\"{x}, {abs_x}\"" msgstr "\"{x}, {abs_x}\"" @@ -14001,8 +13990,10 @@ msgid "//! Rust FFI demo.\n" msgstr "//! Rust FFI のデモ。\n" #: src/android/interoperability/with-c/rust.md -msgid "/// Analyze the numbers.\n" -msgstr "/// 数倀を分析したす。\n" +msgid "" +"/// Analyze the numbers.\n" +"// SAFETY: There is no other global function of this name.\n" +msgstr "" #: src/android/interoperability/with-c/rust.md msgid "\"x ({x}) is smallest!\"" @@ -14073,10 +14064,11 @@ msgstr "" "```" #: src/android/interoperability/with-c/rust.md +#, fuzzy msgid "" -"`#[no_mangle]` disables Rust's usual name mangling, so the exported symbol " -"will just be the name of the function. You can also use `#[export_name = " -"\"some_name\"]` to specify whatever name you want." +"`#[unsafe(no_mangle)]` disables Rust's usual name mangling, so the exported " +"symbol will just be the name of the function. You can also use " +"`#[unsafe(export_name = \"some_name\")]` to specify whatever name you want." msgstr "" "`#[no_mangle]` により Rust の通垞の名前のマングリングが無効になるため、゚クス" "ポヌトされたシンボルは単に関数の名前になりたす。`#[export_name = " @@ -14616,7 +14608,10 @@ msgid "//! Rust <-> Java FFI demo.\n" msgstr "//! Rust <-> Java FFI のデモ。\n" #: src/android/interoperability/java.md -msgid "/// HelloWorld::hello method implementation.\n" +#, fuzzy +msgid "" +"/// HelloWorld::hello method implementation.\n" +"// SAFETY: There is no other global function of this name.\n" msgstr "/// HelloWorld::hello メ゜ッドの実装。\n" #: src/android/interoperability/java.md @@ -14667,30 +14662,6 @@ msgstr "\"HelloWorld\"" msgid "Finally, you can build, sync, and run the binary:" msgstr "最埌に、バむナリをビルド、同期、実行したす。" -#: src/exercises/android/morning.md -msgid "" -"This is a group exercise: We will look at one of the projects you work with " -"and try to integrate some Rust into it. Some suggestions:" -msgstr "" -"これはグルヌプ挔習です。皆さんが取り組んでいるプロゞェクトの䞀぀を題材に、そ" -"こに Rust を統合しおみたしょう。以䞋にヒントを瀺したす。" - -#: src/exercises/android/morning.md -msgid "Call your AIDL service with a client written in Rust." -msgstr "Rust で蚘述されたクラむアントを䜿甚しお AIDL サヌビスを呌び出したす。" - -#: src/exercises/android/morning.md -msgid "Move a function from your project to Rust and call it." -msgstr "プロゞェクトから Rust に関数を移動しお呌び出したす。" - -#: src/exercises/android/morning.md -msgid "" -"No solution is provided here since this is open-ended: it relies on someone " -"in the class having a piece of code which you can turn in to Rust on the fly." -msgstr "" -"この挔習は自由回答圢匏であるため、解答は甚意されおいたせん。クラスの誰かが" -"コヌドを持っおいお、その堎で Rust に倉換できるこずを前提ずしおいたす。" - #: src/chromium.md msgid "Welcome to Rust in Chromium" msgstr "Chromium の Rust ぞようこそ" @@ -15446,6 +15417,12 @@ msgstr "" "Chromium のビルドで、以䞋を含む新しい Rust タヌゲットを `//ui/base/BUILD.gn` " "に远加したす。" +#: src/exercises/chromium/build-rules.md src/bare-metal/aps/inline-assembly.md +#: src/bare-metal/aps/better-uart/using.md src/bare-metal/aps/logging/using.md +#: src/exercises/bare-metal/solutions-afternoon.md +msgid "// SAFETY: There is no other global function of this name.\n" +msgstr "" + #: src/exercises/chromium/build-rules.md #, fuzzy msgid "" @@ -15504,9 +15481,10 @@ msgstr "" "ション" #: src/exercises/chromium/build-rules.md +#, fuzzy msgid "" -"Information about [`#[no_mangle]`](https://doc.rust-lang.org/beta/reference/" -"abi.html#the-no_mangle-attribute)" +"Information about [`#[unsafe(no_mangle)]`](https://doc.rust-lang.org/beta/" +"reference/abi.html#the-no_mangle-attribute)" msgstr "" "[`#[no_mangle]`](https://doc.rust-lang.org/beta/reference/abi.html#the-" "no_mangle-attribute) に関する情報" @@ -15547,10 +15525,11 @@ msgstr "" "きたす。コヌスの埌半で、C++ を Rust に盎接接続したす。" #: src/exercises/chromium/build-rules.md +#, fuzzy msgid "" -"`allow_unsafe = true` is required here because `#[no_mangle]` might allow " -"Rust to generate two functions with the same name, and Rust can no longer " -"guarantee that the right one is called." +"`allow_unsafe = true` is required here because `#[unsafe(no_mangle)]` might " +"allow Rust to generate two functions with the same name, and Rust can no " +"longer guarantee that the right one is called." msgstr "" "ここで `allow_unsafe = true` は必須です。`#[no_mangle]` により、Rust は同じ名" "前の関数を2぀生成するようになり、Rust は正しい関数が呌び出されるこずを保蚌で" @@ -16360,9 +16339,10 @@ msgstr "" "け取らず、倀も返したせん。" #: src/exercises/chromium/interoperability-with-cpp.md +#, fuzzy msgid "" "Modify your previous `hello_from_rust` function to remove `extern \"C\"` and " -"`#[no_mangle]`. This is now just a standard Rust function." +"`#[unsafe(no_mangle)]`. This is now just a standard Rust function." msgstr "" "前の `hello_from_rust` 関数を倉曎しお `extern \"C\"` ず `#[no_mangle]` を削陀" "したす。これで暙準の Rust 関数になりたす。" @@ -17517,6 +17497,10 @@ msgstr "`Option`、`Result`" msgid "`Display`, `Debug`, `write!`..." msgstr "`Display`、`Debug`、`write!` など" +#: src/bare-metal/no_std.md +msgid "`Error`" +msgstr "`Error`" + #: src/bare-metal/no_std.md msgid "`panic!`, `assert_eq!`..." msgstr "`panic!`、`assert_eq!` など" @@ -17549,10 +17533,6 @@ msgstr "`Vec`、`BinaryHeap`、`BtreeMap`、`LinkedList`、`VecDeque`" msgid "`String`, `CString`, `format!`" msgstr "`String`、`CString`、`format!`" -#: src/bare-metal/no_std.md -msgid "`Error`" -msgstr "`Error`" - #: src/bare-metal/no_std.md msgid "`Mutex`, `Condvar`, `Barrier`, `Once`, `RwLock`, `mpsc`" msgstr "`Mutex`、`Condvar`、`Barrier`、`Once`、`RwLock`、`mpsc`" @@ -18160,12 +18140,14 @@ msgid "[RTIC](https://rtic.rs/)" msgstr "[RTIC](https://rtic.rs/)" #: src/bare-metal/microcontrollers/other-projects.md -msgid "\"Real-Time Interrupt-driven Concurrency\"" +#, fuzzy +msgid "\"Real-Time Interrupt-driven Concurrency\"." msgstr "\"Real-Time Interrupt-driven Concurrency\"の略" #: src/bare-metal/microcontrollers/other-projects.md +#, fuzzy msgid "" -"Shared resource management, message passing, task scheduling, timer queue" +"Shared resource management, message passing, task scheduling, timer queue." msgstr "" "共有リ゜ヌス管理、メッセヌゞパッシング、タスクスケゞュヌリング、タむマキュヌ" "を提䟛" @@ -18175,7 +18157,8 @@ msgid "[Embassy](https://embassy.dev/)" msgstr "[Embassy](https://embassy.dev/)" #: src/bare-metal/microcontrollers/other-projects.md -msgid "`async` executors with priorities, timers, networking, USB" +#, fuzzy +msgid "`async` executors with priorities, timers, networking, USB." msgstr "優先床付き`async` ゚グれキュヌタ、タむマ、ネットワヌク、USB" #: src/bare-metal/microcontrollers/other-projects.md @@ -18183,9 +18166,10 @@ msgid "[TockOS](https://www.tockos.org/documentation/getting-started)" msgstr "[TockOS](https://www.tockos.org/documentation/getting-started)" #: src/bare-metal/microcontrollers/other-projects.md +#, fuzzy msgid "" "Security-focused RTOS with preemptive scheduling and Memory Protection Unit " -"support" +"support." msgstr "" "セキュリティに焊点をあおたRTOSで、プリ゚ンプティブ・スケゞュヌリングずMemory " "Protection Unitをサポヌト" @@ -18195,15 +18179,17 @@ msgid "[Hubris](https://hubris.oxide.computer/)" msgstr "[Hubris](https://hubris.oxide.computer/)" #: src/bare-metal/microcontrollers/other-projects.md +#, fuzzy msgid "" "Microkernel RTOS from Oxide Computer Company with memory protection, " -"unprivileged drivers, IPC" +"unprivileged drivers, IPC." msgstr "" "Oxide Computer CompanyによるマむクロカヌネルのRTOSでメモリ保護、非特暩ドラむ" "バ、IPCを提䟛" #: src/bare-metal/microcontrollers/other-projects.md -msgid "[Bindings for FreeRTOS](https://github.com/lobaro/FreeRTOS-rust)" +#, fuzzy +msgid "[Bindings for FreeRTOS](https://github.com/lobaro/FreeRTOS-rust)." msgstr "" "[FreeRTOSに察するRustバむンディング](https://github.com/lobaro/FreeRTOS-rust)" @@ -18792,9 +18778,10 @@ msgstr "" "があるからです。" #: src/bare-metal/aps/inline-assembly.md +#, fuzzy msgid "" -"This `main` function needs to be `#[no_mangle]` and `extern \"C\"` because " -"it is called from our entry point in `entry.S`." +"This `main` function needs to be `#[unsafe(no_mangle)]` and `extern \"C\"` " +"because it is called from our entry point in `entry.S`." msgstr "" "この `main` 関数は`entry.S`にある゚ントリポむントから呌ばれるため、" "`#[no_mangle]`ず`extern \"C\"`を必芁ずしたす。" @@ -18827,16 +18814,24 @@ msgid "Volatile memory access for MMIO" msgstr "MMIOに察するvolatileアクセス" #: src/bare-metal/aps/mmio.md -msgid "Use `pointer::read_volatile` and `pointer::write_volatile`." -msgstr "`pointer::read_volatile`ず`pointer::write_volatile`を䜿いたす。" +#, fuzzy +msgid "" +"Use [`pointer::read_volatile`](https://doc.rust-lang.org/stable/core/" +"primitive.pointer.html#method.read_volatile) and [`pointer::write_volatile`]" +"(https://doc.rust-lang.org/stable/core/primitive.pointer.html#method." +"write_volatile)." +msgstr "" +"[`str`](https://doc.rust-lang.org/std/primitive.str.html) ず [`String`]" +"(https://doc.rust-lang.org/std/string/struct.String.html)" #: src/bare-metal/aps/mmio.md msgid "Never hold a reference." msgstr "絶察に参照を保持しおはいけたせん。" #: src/bare-metal/aps/mmio.md +#, fuzzy msgid "" -"`addr_of!` lets you get fields of structs without creating an intermediate " +"Use `&raw` to get fields of structs without creating an intermediate " "reference." msgstr "" "`addr_of!`を甚いるず、䞭間的な参照を䜜らずに構造䜓のフィヌルドにアクセスする" @@ -18872,13 +18867,18 @@ msgstr "" "むラがその参照を倖しおMMIO領域にアクセスしおしたう可胜性がありたす。" #: src/bare-metal/aps/mmio.md -msgid "" -"Use the `addr_of!` macro to get struct field pointers from a pointer to the " -"struct." +#, fuzzy +msgid "Use `&raw` to get struct field pointers from a pointer to the struct." msgstr "" "構造䜓のポむンタからそのフィヌルドぞのポむンタを埗るには`addr_of!` マクロを" "䜿っおください。" +#: src/bare-metal/aps/mmio.md +msgid "" +"For compatibility with old versions of Rust you can use the [`addr_of!`]" +"(https://doc.rust-lang.org/stable/core/ptr/macro.addr_of.html) macro instead." +msgstr "" + #: src/bare-metal/aps/uart.md msgid "Let's write a UART driver" msgstr "UARTドラむバを曞いおみたしょう" @@ -19315,8 +19315,9 @@ msgid "// TODO: Check for error conditions in bits 8-11.\n" msgstr "// TODO: ビット 811 で゚ラヌ状態をチェックしたす。\n" #: src/bare-metal/aps/better-uart/driver.md +#, fuzzy msgid "" -"Note the use of `addr_of!` / `addr_of_mut!` to get pointers to individual " +"Note the use of `&raw const` / `&raw mut` to get pointers to individual " "fields without creating an intermediate reference, which would be unsound." msgstr "" "`addr_of!`ず`addr_of_mut!` を䜿甚しお個々のフィヌルドに察するポむンタを取埗す" @@ -19368,7 +19369,8 @@ msgid "b'q'" msgstr "b'q'" #: src/bare-metal/aps/better-uart/using.md -msgid "\"Bye!\"" +#, fuzzy +msgid "\"\\n\\nBye!\"" msgstr "\"Bye!\"" #: src/bare-metal/aps/better-uart/using.md @@ -19492,7 +19494,8 @@ msgid "[oreboot](https://github.com/oreboot/oreboot)" msgstr "[oreboot](https://github.com/oreboot/oreboot)" #: src/bare-metal/aps/other-projects.md -msgid "\"coreboot without the C\"" +#, fuzzy +msgid "\"coreboot without the C\"." msgstr "\"Cのない぀たり、C蚀語を䜿わないcoreboot\"" #: src/bare-metal/aps/other-projects.md @@ -19512,9 +19515,10 @@ msgstr "" "raspberrypi-OS-tutorials)" #: src/bare-metal/aps/other-projects.md +#, fuzzy msgid "" "Initialisation, UART driver, simple bootloader, JTAG, exception levels, " -"exception handling, page tables" +"exception handling, page tables." msgstr "" "初期化、UARTドラむバ、単玔なブヌトロヌダ、JTAG、䟋倖レベル、䟋倖ハンドラ、" "ペヌゞテヌブル" @@ -20248,15 +20252,14 @@ msgid "Thread panics are independent of each other." msgstr "スレッドパニックは互いに独立です。" #: src/concurrency/threads/plain.md -msgid "Panics can carry a payload, which can be unpacked with `downcast_ref`." +#, fuzzy +msgid "" +"Panics can carry a payload, which can be unpacked with [`Any::downcast_ref`]" +"(https://doc.rust-lang.org/std/any/trait.Any.html#method.downcast_ref)." msgstr "" "パニックはペむロヌドを保持しおいるこずがあり、それは`downcast_ref`で展開可胜" "です。" -#: src/concurrency/threads/plain.md -msgid "Rust thread APIs look not too different from e.g. C++ ones." -msgstr "" - #: src/concurrency/threads/plain.md #, fuzzy msgid "Run the example." @@ -20274,12 +20277,12 @@ msgstr "" #: src/concurrency/threads/plain.md msgid "" -"This is because main ends the program and spawned threads do not make it " +"This is because `main` ends the program and spawned threads do not make it " "persist." msgstr "" #: src/concurrency/threads/plain.md -msgid "Compare to pthreads/C++ std::thread/boost::thread if desired." +msgid "Compare to `pthreads`/C++ `std::thread`/`boost::thread` if desired." msgstr "" #: src/concurrency/threads/plain.md @@ -20395,7 +20398,7 @@ msgid "That would be stack use-after-return, which violates memory safety!" msgstr "" #: src/concurrency/threads/plain.md -msgid "How do we avoid this? see next slide." +msgid "How do we avoid this? See next slide." msgstr "" #: src/concurrency/threads/scoped.md @@ -20432,9 +20435,12 @@ msgid "This segment should take about 20 minutes. It contains:" msgstr "このセグメントの所芁時間は玄 20 分です" #: src/concurrency/channels/senders-receivers.md +#, fuzzy msgid "" -"Rust channels have two parts: a `Sender` and a `Receiver`. The two " -"parts are connected via the channel, but you only see the end-points." +"Rust channels have two parts: a [`Sender`](https://doc.rust-lang.org/std/" +"sync/mpsc/struct.Sender.html) and a [`Receiver`](https://doc.rust-lang." +"org/std/sync/mpsc/struct.Receiver.html). The two parts are connected via the " +"channel, but you only see the end-points." msgstr "" "Rustのチャネルには二぀の郚品がありたす `Sender` ず`Receiver`です。こ" "の぀の郚品はチャネルによっお繋がっおいたすが、芋るこずができるのぱンドポ" @@ -20445,18 +20451,22 @@ msgid "\"Received: {:?}\"" msgstr "\"Received: {:?}\"" #: src/concurrency/channels/senders-receivers.md +#, fuzzy msgid "" -"`mpsc` stands for Multi-Producer, Single-Consumer. `Sender` and `SyncSender` " -"implement `Clone` (so you can make multiple producers) but `Receiver` does " -"not." +"[`mpsc`](https://doc.rust-lang.org/std/sync/mpsc/index.html) stands for " +"Multi-Producer, Single-Consumer. `Sender` and `SyncSender` implement `Clone` " +"(so you can make multiple producers) but `Receiver` does not." msgstr "" "`mpsc` は Multi-Producer, Single-Consumerの略称です。 `Sender`ず`SyncSender`" "は`Clone`を実装しおいるよっお耇数のproducerが䜜成可胜のですが、`Receiver`" "に぀いおはそうではありたせん。" #: src/concurrency/channels/senders-receivers.md +#, fuzzy msgid "" -"`send()` and `recv()` return `Result`. If they return `Err`, it means the " +"[`send()`](https://doc.rust-lang.org/std/sync/mpsc/struct.Sender.html#method." +"send) and [`recv()`](https://doc.rust-lang.org/std/sync/mpsc/struct.Receiver." +"html#method.recv) return `Result`. If they return `Err`, it means the " "counterpart `Sender` or `Receiver` is dropped and the channel is closed." msgstr "" "`send()`ず`recv()`は`Result`を返したす。もし`Err`が返された堎合、これは、察応" @@ -20464,7 +20474,10 @@ msgstr "" "を意味したす。" #: src/concurrency/channels/unbounded.md -msgid "You get an unbounded and asynchronous channel with `mpsc::channel()`:" +#, fuzzy +msgid "" +"You get an unbounded and asynchronous channel with [`mpsc::channel()`]" +"(https://doc.rust-lang.org/std/sync/mpsc/fn.channel.html):" msgstr "Unboundedで非同期的なチャネルは`mpsc::channel()`によっお埗られたす" #: src/concurrency/channels/unbounded.md src/concurrency/channels/bounded.md @@ -20484,15 +20497,19 @@ msgid "\"Main: got {msg}\"" msgstr "\"Main: got {msg}\"" #: src/concurrency/channels/bounded.md +#, fuzzy msgid "" -"With bounded (synchronous) channels, `send` can block the current thread:" +"With bounded (synchronous) channels, [`send()`](https://doc.rust-lang.org/" +"std/sync/mpsc/struct.SyncSender.html#method.send) can block the current " +"thread:" msgstr "" "Boundedか぀同期的なチャネルを甚いたずき、`send`は珟圚のスレッドをブロック" "するこずがありたす" #: src/concurrency/channels/bounded.md +#, fuzzy msgid "" -"Calling `send` will block the current thread until there is space in the " +"Calling `send()` will block the current thread until there is space in the " "channel for the new message. The thread can be blocked indefinitely if there " "is nobody who reads from the channel." msgstr "" @@ -20501,9 +20518,11 @@ msgstr "" "クされるこずがありたす。" #: src/concurrency/channels/bounded.md +#, fuzzy msgid "" -"A call to `send` will abort with an error (that is why it returns `Result`) " -"if the channel is closed. A channel is closed when the receiver is dropped." +"A call to `send()` will abort with an error (that is why it returns " +"`Result`) if the channel is closed. A channel is closed when the receiver is " +"dropped." msgstr "" "もしもチャネルが閉じられた堎合、`send`の呌び出しぱラヌずずもに䞭断したす。" "`send`が`Result`を返すのはこのためです。受け取り偎がドロップされたずき" @@ -20513,7 +20532,9 @@ msgstr "" #, fuzzy msgid "" "A bounded channel with a size of zero is called a \"rendezvous channel\". " -"Every send will block the current thread until another thread calls `recv`." +"Every send will block the current thread until another thread calls " +"[`recv()`](https://doc.rust-lang.org/std/sync/mpsc/struct.Receiver." +"html#method.recv)." msgstr "" "サむズがのBoundedチャネルは「ランデブヌチャネル」ず呌ばれたす。別のスレッド" "が`read`を呌ぶたでは、それぞれのsendは珟圚のスレッドをブロックしたす。" @@ -20874,9 +20895,10 @@ msgstr "" "たす。" #: src/concurrency/shared-state/mutex.md +#, fuzzy msgid "" -"`Mutex` implements both `Send` and `Sync` iff (if and only if) `T` " -"implements `Send`." +"`Mutex` implements both `Send` and `Sync` if and only if `T` implements " +"`Send`." msgstr "" "`T`が`Send`を実装しおいる堎合で、か぀その堎合に限り、`Mutex` は`Send`ず" "`Sync`の䞡方を実装したす。" @@ -21003,7 +21025,6 @@ msgid "\"Eureka! {} has a new idea!\"" msgstr "\"Eureka! {} has a new idea!\"" #: src/concurrency/sync-exercises/dining-philosophers.md -#: src/concurrency/async-exercises/solutions.md msgid "// Pick up forks...\n" msgstr "// Pick up forks...\n" @@ -21359,16 +21380,6 @@ msgstr "" "これは構文を瀺すための単玔化された䟋であるこずに泚意しおください。長く実行さ" "れうる操䜜や本物の䞊行凊理はここには含たれたせん。" -#: src/concurrency/async/async-await.md -msgid "What is the return type of an async call?" -msgstr "非同期の呌び出しの返り倀の型は" - -#: src/concurrency/async/async-await.md -msgid "Use `let future: () = async_main(10);` in `main` to see the type." -msgstr "" -"型を知るために`main`で`let future: () = async_main(10);`を䜿っおみおくださ" -"い。" - #: src/concurrency/async/async-await.md #, fuzzy msgid "" @@ -21788,6 +21799,11 @@ msgstr "\"https://play.rust-lang.org/\"" msgid "\"BAD_URL\"" msgstr "\"BAD_URL\"" +#: src/concurrency/async-control-flow/join.md +#, fuzzy +msgid "\"{page_sizes_dict:?}\"" +msgstr "\"{page_counts:#?}\"" + #: src/concurrency/async-control-flow/join.md msgid "" "For multiple futures of disjoint types, you can use `std::future::join!` but " @@ -22152,46 +22168,46 @@ msgstr "" #: src/concurrency/async-pitfalls/async-traits.md msgid "" -"Async methods in traits are were stabilized only recently, in the 1.75 " -"release. This required support for using return-position `impl Trait` (RPIT) " -"in traits, as the desugaring for `async fn` includes `-> impl Future`." +"Async methods in traits are were stabilized in the 1.75 release. This " +"required support for using return-position `impl Trait` in traits, as the " +"desugaring for `async fn` includes `-> impl Future`." msgstr "" #: src/concurrency/async-pitfalls/async-traits.md msgid "" -"However, even with the native support today there are some pitfalls around " -"`async fn` and RPIT in traits:" +"However, even with the native support, there are some pitfalls around `async " +"fn`:" msgstr "" #: src/concurrency/async-pitfalls/async-traits.md msgid "" -"Return-position impl Trait captures all in-scope lifetimes (so some patterns " -"of borrowing cannot be expressed)" +"Return-position `impl Trait` captures all in-scope lifetimes (so some " +"patterns of borrowing cannot be expressed)." msgstr "" #: src/concurrency/async-pitfalls/async-traits.md msgid "" -"Traits whose methods use return-position `impl trait` or `async` are not " -"`dyn` compatible." +"Async traits cannot be used with [trait objects](../../smart-pointers/trait-" +"objects.md) (`dyn Trait` support)." msgstr "" #: src/concurrency/async-pitfalls/async-traits.md #, fuzzy msgid "" -"If we do need `dyn` support, the crate [async_trait](https://docs.rs/async-" -"trait/latest/async_trait/) provides a workaround through a macro, with some " -"caveats:" +"The [async_trait](https://docs.rs/async-trait/) crate provides a workaround " +"for `dyn` support through a macro, with some caveats:" msgstr "" "クレヌト [async_trait](https://docs.rs/async-trait/latest/async_trait/) は、" "マクロによる回避策を提䟛したす。" #: src/concurrency/async-pitfalls/async-traits.md -msgid "\"running all sleepers..\"" +#, fuzzy +msgid "\"Running all sleepers...\"" msgstr "\"running all sleepers..\"" #: src/concurrency/async-pitfalls/async-traits.md -msgid "\"slept for {}ms\"" +#, fuzzy +msgid "\"Slept for {} ms\"" msgstr "\"slept for {}ms\"" #: src/concurrency/async-pitfalls/async-traits.md @@ -22203,12 +22219,13 @@ msgstr "" "いたす。このヒヌプ割り圓おには、パフォヌマンス オヌバヌヘッドが䌎いたす。" #: src/concurrency/async-pitfalls/async-traits.md +#, fuzzy msgid "" -"The challenges in language support for `async trait` are deep Rust and " -"probably not worth describing in-depth. Niko Matsakis did a good job of " -"explaining them in [this post](https://smallcultfollowing.com/babysteps/" -"blog/2019/10/26/async-fn-in-traits-are-hard/) if you are interested in " -"digging deeper." +"The challenges in language support for `async trait` are too deep to " +"describe in-depth in this class. See [this blog post](https://" +"smallcultfollowing.com/babysteps/blog/2019/10/26/async-fn-in-traits-are-" +"hard/) by Niko Matsakis if you are interested in digging deeper. See also " +"these keywords:" msgstr "" "`async trait` の蚀語サポヌトにおける課題は、Rust の䞭でも難解な郚類に入るた" "め、ここでは詳しく説明する必芁はないでしょう。Niko Matsakis が [こちらの投皿]" @@ -22217,8 +22234,22 @@ msgstr "" #: src/concurrency/async-pitfalls/async-traits.md msgid "" +"[RPIT](https://doc.rust-lang.org/reference/types/impl-trait.html#abstract-" +"return-types): short for [return-position `impl Trait`](../../generics/impl-" +"trait.md)." +msgstr "" + +#: src/concurrency/async-pitfalls/async-traits.md +msgid "" +"[RPITIT](https://blog.rust-lang.org/2023/12/21/async-fn-rpit-in-traits." +"html): short for return-position `impl Trait` in trait (RPIT in trait)." +msgstr "" + +#: src/concurrency/async-pitfalls/async-traits.md +#, fuzzy +msgid "" "Try creating a new sleeper struct that will sleep for a random amount of " -"time and adding it to the Vec." +"time and adding it to the `Vec`." msgstr "" "ランダムな時間スリヌプする新しいスリヌパヌ構造䜓を䜜成し、Vec に远加しおみた" "しょう。" @@ -22343,7 +22374,6 @@ msgstr "" "し、空欄を埋めお、`cargo run` がデッドロックしないこずを確認したす。" #: src/concurrency/async-exercises/dining-philosophers.md -#: src/concurrency/async-exercises/solutions.md msgid "// Keep trying until we have both forks\n" msgstr "" @@ -22440,10 +22470,10 @@ msgid "" "edition = \"2021\"\n" "\n" "[dependencies]\n" -"futures-util = { version = \"0.3.30\", features = [\"sink\"] }\n" +"futures-util = { version = \"0.3.31\", features = [\"sink\"] }\n" "http = \"1.1.0\"\n" -"tokio = { version = \"1.40.0\", features = [\"full\"] }\n" -"tokio-websockets = { version = \"0.9.0\", features = [\"client\", " +"tokio = { version = \"1.41.0\", features = [\"full\"] }\n" +"tokio-websockets = { version = \"0.10.1\", features = [\"client\", " "\"fastrand\", \"server\", \"sha1_smol\"] }\n" "```" msgstr "" @@ -22636,14 +22666,8 @@ msgstr "" #: src/concurrency/async-exercises/solutions.md msgid "" -"// If we didn't get the left fork, drop the right fork if we\n" -" // have it and let other tasks make progress.\n" -msgstr "" - -#: src/concurrency/async-exercises/solutions.md -msgid "" -"// If we didn't get the right fork, drop the left fork and let\n" -" // other tasks make progress.\n" +"// Keep trying until we have both forks\n" +" // Pick up forks...\n" msgstr "" #: src/concurrency/async-exercises/solutions.md @@ -23590,6 +23614,241 @@ msgstr "" "(https://cxx.rs/) の画像を䜿甚しおいたす。ラむセンス芏玄などの詳现に぀いお" "は、`third_party/cxx/` ディレクトリを参照しおください。" +#, fuzzy +#~ msgid "Slices: `&[T]`" +#~ msgstr "スラむス型" + +#~ msgid "`thiserror` and `anyhow`" +#~ msgstr "`thiserror` ず `anyhow`" + +#, fuzzy +#~ msgid "Slices: &\\[T\\]" +#~ msgstr "スラむス型" + +#~ msgid "" +#~ "Question: What happens if you modify `a[3]` right before printing `s`?" +#~ msgstr "質問: `s` を出力する盎前に `a[3]` を倉曎するずどうなるでしょうか" + +#~ msgid "" +#~ "The question about modifying `a[3]` can spark an interesting discussion, " +#~ "but the answer is that for memory safety reasons you cannot do it through " +#~ "`a` at this point in the execution, but you can read the data from both " +#~ "`a` and `s` safely. It works before you created the slice, and again " +#~ "after the `println`, when the slice is no longer used." +#~ msgstr "" +#~ "`a[3]` の倉曎に関する質問は興味深い議論のきっかけになるかもしれたせんが、" +#~ "メモリ安党性䞊の理由から、この時点では `a` を䜿甚しお倉曎するこずはできな" +#~ "い、ずいう回答になりたす。ただし、`a` ず `s` の䞡方のデヌタを安党に読み取" +#~ "るこずはできたす。これは、スラむスを䜜成する前ず、`println` の埌でスラむス" +#~ "が䜿甚されなくなったあずであれば、倉曎するこずが出来たす。" + +#~ msgid "" +#~ "Save the result of `divide_in_two` in the `result` variable and `match` " +#~ "it in a loop. That won't compile because `msg` is consumed when matched. " +#~ "To fix it, match `&result` instead of `result`. That will make `msg` a " +#~ "reference so it won't be consumed. This [\"match ergonomics\"](https://" +#~ "rust-lang.github.io/rfcs/2005-match-ergonomics.html) appeared in Rust " +#~ "2018. If you want to support older Rust, replace `msg` with `ref msg` in " +#~ "the pattern." +#~ msgstr "" +#~ "`divide_in_two` の結果を `result` 倉数に保存し、ルヌプで `match` したす。" +#~ "䞀臎した堎合は `msg` が䜿甚されるため、コンパむルされたせん。これを修正す" +#~ "るには、`result` ではなく `&result` でマッチしたす。これにより、`msg` は参" +#~ "照になるため、䜿甚されなくなりたす。この [「マッチ゚ルゎノミクス」]" +#~ "(https://rust-lang.github.io/rfcs/2005-match-ergonomics.html) は、Rust " +#~ "2018 で登堎したした。叀いRustをサポヌトする堎合は、パタヌン内の`msg`を" +#~ "`ref msg` に眮き換えおください。" + +#~ msgid "" +#~ "If you finish early, try writing a test that results in division by zero " +#~ "or integer overflow. How could you handle this with `Result` instead of a " +#~ "panic?" +#~ msgstr "" +#~ "早めに終了した堎合は、れロ陀算や敎数オヌバヌフロヌが発生するテストを蚘述し" +#~ "おみおください。`Result` を䜿甚しお、パニックを発生させずにこれを凊理する" +#~ "にはどうすればよいでしょうか。" + +#~ msgid "" +#~ "The niche optimization means that `Option` often has the same size in " +#~ "memory as `T`." +#~ msgstr "" +#~ "ニッチな最適化ずは、`Option` がメモリ内で `T` ず同じサむズであるこずが" +#~ "倚いずいうこずです。" + +#~ msgid "" +#~ "We are showing `HashMap`, and avoid using `&str` as key to " +#~ "make examples easier. Using references in collections can, of course, be " +#~ "done, but it can lead into complications with the borrow checker." +#~ msgstr "" +#~ "ここでは `HashMap` を瀺しおいたすが、䟋を簡単にするために " +#~ "`&str` をキヌずしお䜿甚しないようにしおいたす。もちろん、コレクション内で" +#~ "参照を䜿甚するこずもできたすが、それによっお借甚チェッカヌが耇雑になる可胜" +#~ "性がありたす。" + +#~ msgid "" +#~ "Try removing `to_string()` from the example above and see if it still " +#~ "compiles. Where do you think we might run into issues?" +#~ msgstr "" +#~ "䞊蚘の䟋から `to_string()` を削陀しお、ただコンパむルできるかどうかを確認" +#~ "したす。どこで問題が発生するでしょうか。" + +#~ msgid "" +#~ "By default, closures will capture by reference if they can. The `move` " +#~ "keyword makes them capture by value." +#~ msgstr "" +#~ "デフォルトでは、可胜であれば、クロヌゞャは参照によっおキャプチャしたす。" +#~ "`move` キヌワヌドを䜿甚するず、クロヌゞャは倀によっおキャプチャしたす。" + +#~ msgid "Niche Optimization" +#~ msgstr "Niche最適化" + +#, fuzzy +#~ msgid "\"Optional box\"" +#~ msgstr "Option" + +#, fuzzy +#~ msgid "\"Size of none: {}\"" +#~ msgstr "\"before: {a}\"" + +#~ msgid "Luhn Algorithm" +#~ msgstr "Luhnアルゎリズム" + +#, fuzzy +#~ msgid "" +#~ "Including 10 minute breaks, this session should take about 2 hours and 15 " +#~ "minutes. It contains:" +#~ msgstr "" +#~ "このセッションの所芁時間は、10 分間の䌑憩を入れお玄 2 時間 15 分です。" + +#, fuzzy +#~ msgid "thiserror and anyhow" +#~ msgstr "`thiserror` ず `anyhow`" + +#~ msgid "" +#~ "Make sure to implement the `std::error::Error` trait when defining a " +#~ "custom error type so it can be boxed. But if you need to support the " +#~ "`no_std` attribute, keep in mind that the `std::error::Error` trait is " +#~ "currently compatible with `no_std` in [nightly](https://github.com/rust-" +#~ "lang/rust/issues/103765) only." +#~ msgstr "" +#~ "カスタムの゚ラヌ型を定矩する際は、必ず `std::error::Error` トレむトを実装" +#~ "し、ボックス化できるようにしおください。ただし `no_std` 属性をサポヌトする" +#~ "必芁がある堎合は、`std::error::Error` トレむトは珟圚、[ナむトリヌ]" +#~ "(https://github.com/rust-lang/rust/issues/103765) においおのみ`no_std`ず互" +#~ "換性があるこずに泚意しおください。" + +#~ msgid "" +#~ "The [`thiserror`](https://docs.rs/thiserror/) and [`anyhow`](https://docs." +#~ "rs/anyhow/) crates are widely used to simplify error handling." +#~ msgstr "" +#~ "[`thiserror`](https://docs.rs/thiserror/) クレヌトず [`anyhow`](https://" +#~ "docs.rs/anyhow/) クレヌトは、゚ラヌ凊理を簡玠化するために広く䜿甚されおい" +#~ "たす。" + +#~ msgid "" +#~ "`thiserror` is often used in libraries to create custom error types that " +#~ "implement `From`." +#~ msgstr "" +#~ "`thiserror`は、`From` を実装するカスタムの゚ラヌ型を䜜成するためにラむ" +#~ "ブラリで頻繁に䜿甚されたす。" + +#~ msgid "" +#~ "`anyhow` is often used by applications to help with error handling in " +#~ "functions, including adding contextual information to your errors." +#~ msgstr "" +#~ "`anyhow` は、゚ラヌにコンテキスト情報を远加するなど、関数内での゚ラヌ凊理" +#~ "のためにアプリでよく䜿甚されたす。" + +#~ msgid "The `std::error::Error` trait is derived automatically." +#~ msgstr "`std::error::Error` トレむトは自動的に導出されたす。" + +#~ msgid "" +#~ "Actual error type inside of it can be extracted for examination if " +#~ "necessary." +#~ msgstr "必芁に応じお、内郚の実際の゚ラヌ型を抜出しお調べるこずができたす。" + +#~ msgid "// SAFETY: self.dir is not NULL.\n" +#~ msgstr "// 安党: self.dir は NULL ではありたせん。\n" + +#~ msgid "" +#~ "We will attempt to call Rust from one of your own projects today. So try " +#~ "to find a little corner of your code base where we can move some lines of " +#~ "code to Rust. The fewer dependencies and \"exotic\" types the better. " +#~ "Something that parses some raw bytes would be ideal." +#~ msgstr "" +#~ "本日は、皆さんのプロゞェクトの䞀぀から Rust を呌び出しおみたいず思いたす。" +#~ "コヌドベヌスの小さな隅を芋぀けお、数行のコヌドを Rust に曞き換えおみたしょ" +#~ "う。䟝存関係が少なく、「珍しい」型がよいでしょう。未加工のバむトを解析する" +#~ "ものが理想的です。" + +#~ msgid "" +#~ "There is a plan to transition [Android](https://source.android.com/docs/" +#~ "setup/build/bazel/introduction), [ChromeOS](https://chromium.googlesource." +#~ "com/chromiumos/bazel/), and [Fuchsia](https://source.android.com/docs/" +#~ "setup/build/bazel/introduction) to Bazel." +#~ msgstr "" +#~ "[Android](https://source.android.com/docs/setup/build/bazel/" +#~ "introduction)、[ChromeOS](https://chromium.googlesource.com/chromiumos/" +#~ "bazel/)、[Fuchsia](https://source.android.com/docs/setup/build/bazel/" +#~ "introduction) を Bazel に移行する蚈画がありたす。" + +#~ msgid "" +#~ "Learning Bazel-like build rules is useful for all Rust OS developers." +#~ msgstr "" +#~ "Bazel のようなビルドルヌルを孊ぶこずは、すべおの Rust OS デベロッパヌに圹" +#~ "立ちたす。" + +#, fuzzy +#~ msgid "" +#~ "**birthday_service/aidl/com/example/birthdayservice/IBirthdayService." +#~ "aidl**:" +#~ msgstr "" +#~ "_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:" + +#, fuzzy +#~ msgid "**birthday_service/src/client.rs**:" +#~ msgstr "_birthday_service/src/client.rs_:" + +#, fuzzy +#~ msgid "**birthday_service/src/lib.rs**:" +#~ msgstr "_birthday_service/src/lib.rs_:" + +#~ msgid "/// Analyze the numbers.\n" +#~ msgstr "/// 数倀を分析したす。\n" + +#~ msgid "" +#~ "This is a group exercise: We will look at one of the projects you work " +#~ "with and try to integrate some Rust into it. Some suggestions:" +#~ msgstr "" +#~ "これはグルヌプ挔習です。皆さんが取り組んでいるプロゞェクトの䞀぀を題材に、" +#~ "そこに Rust を統合しおみたしょう。以䞋にヒントを瀺したす。" + +#~ msgid "Call your AIDL service with a client written in Rust." +#~ msgstr "" +#~ "Rust で蚘述されたクラむアントを䜿甚しお AIDL サヌビスを呌び出したす。" + +#~ msgid "Move a function from your project to Rust and call it." +#~ msgstr "プロゞェクトから Rust に関数を移動しお呌び出したす。" + +#~ msgid "" +#~ "No solution is provided here since this is open-ended: it relies on " +#~ "someone in the class having a piece of code which you can turn in to Rust " +#~ "on the fly." +#~ msgstr "" +#~ "この挔習は自由回答圢匏であるため、解答は甚意されおいたせん。クラスの誰かが" +#~ "コヌドを持っおいお、その堎で Rust に倉換できるこずを前提ずしおいたす。" + +#~ msgid "Use `pointer::read_volatile` and `pointer::write_volatile`." +#~ msgstr "`pointer::read_volatile`ず`pointer::write_volatile`を䜿いたす。" + +#~ msgid "What is the return type of an async call?" +#~ msgstr "非同期の呌び出しの返り倀の型は" + +#~ msgid "Use `let future: () = async_main(10);` in `main` to see the type." +#~ msgstr "" +#~ "型を知るために`main`で`let future: () = async_main(10);`を䜿っおみおくださ" +#~ "い。" + #~ msgid "Conditionals" #~ msgstr "条件文"