From 4c08d2c39900c61b39af7740719e72373f857b78 Mon Sep 17 00:00:00 2001 From: "Md. Rasel Mandol" <130071257+raselmandol@users.noreply.github.com> Date: Tue, 5 Sep 2023 23:20:42 +0530 Subject: [PATCH] bn: Refresh most strings (#1162) After PR #1124 , many source strings have been changed. Fixed most of them. --- po/bn.po | 5914 ++++++++++++++++++++++++------------------------------ 1 file changed, 2609 insertions(+), 3305 deletions(-) diff --git a/po/bn.po b/po/bn.po index 88b98a25..a8b5b0e9 100644 --- a/po/bn.po +++ b/po/bn.po @@ -4,13 +4,13 @@ msgstr "" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Md. Rasel Mandol \n" -"Language-Team: \n" +"Language-Team: noob_rasel\n" "Language: bn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n==0 || n==1);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.3.1\n" #: src/SUMMARY.md:4 src/index.md:1 msgid "Welcome to Comprehensive Rust đŸĻ€" @@ -121,8 +121,7 @@ msgstr "āĻĢāĻžāĻ‚āĻļāĻ¨" msgid "Rustdoc" msgstr "Rustdoc" -#: src/SUMMARY.md:36 src/SUMMARY.md:107 src/basic-syntax/methods.md:1 -#: src/methods.md:1 +#: src/SUMMARY.md:36 src/SUMMARY.md:107 src/basic-syntax/methods.md:1 src/methods.md:1 msgid "Methods" msgstr "āĻŽā§‡āĻĨāĻĄāĻ¸" @@ -134,8 +133,7 @@ msgstr "āĻ…āĻ­āĻžāĻ°āĻ˛ā§‹āĻĄāĻŋāĻ‚" #: src/SUMMARY.md:129 src/SUMMARY.md:157 src/SUMMARY.md:187 src/SUMMARY.md:214 #: src/SUMMARY.md:235 src/SUMMARY.md:263 src/SUMMARY.md:285 src/SUMMARY.md:306 #: src/exercises/android/morning.md:1 src/exercises/bare-metal/morning.md:1 -#: src/exercises/bare-metal/afternoon.md:1 -#: src/exercises/concurrency/morning.md:1 +#: src/exercises/bare-metal/afternoon.md:1 src/exercises/concurrency/morning.md:1 #: src/exercises/concurrency/afternoon.md:1 msgid "Exercises" msgstr "āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨" @@ -209,9 +207,8 @@ msgid "Enum Sizes" msgstr "Enum āĻāĻ° āĻŽāĻžāĻĒ" #: src/SUMMARY.md:60 src/control-flow/novel.md:1 -#, fuzzy msgid "Novel Control Flow" -msgstr "āĻĒā§āĻ°āĻŦāĻžāĻš āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ" +msgstr "āĻ¨āĻ­ā§‡āĻ˛ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ āĻĢā§āĻ˛ā§‹" #: src/SUMMARY.md:61 msgid "if let expressions" @@ -251,9 +248,8 @@ msgid "Luhn Algorithm" msgstr "āĻ˛ā§āĻ¨ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ" #: src/SUMMARY.md:73 -#, fuzzy msgid "Pattern Matching (TBD)" -msgstr "āĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨ āĻŽāĻŋāĻ˛āĻžāĻ¨ā§‹" +msgstr "āĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨ āĻŽā§āĻ¯āĻžāĻšāĻŋāĻ‚ (TBD)" #: src/SUMMARY.md:75 msgid "Day 2: Morning" @@ -336,9 +332,8 @@ msgid "Lifetimes in Data Structures" msgstr "āĻĄā§‡āĻŸāĻž āĻ¸ā§āĻŸā§āĻ°āĻžāĻ•āĻšāĻžāĻ° āĻ āĻœā§€āĻŦāĻ¨āĻ•āĻžāĻ˛" #: src/SUMMARY.md:101 src/exercises/day-2/book-library.md:1 -#, fuzzy msgid "Storing Books" -msgstr "Strings" +msgstr "āĻŦāĻ‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻž" #: src/SUMMARY.md:102 src/exercises/day-2/iterators-and-ownership.md:1 msgid "Iterators and Ownership" @@ -360,8 +355,8 @@ msgstr "Field Shorthand Syntax" msgid "Method Receiver" msgstr "Method Receiver" -#: src/SUMMARY.md:109 src/SUMMARY.md:169 src/SUMMARY.md:284 -#: src/methods/example.md:1 src/concurrency/shared_state/example.md:1 +#: src/SUMMARY.md:109 src/SUMMARY.md:169 src/SUMMARY.md:284 src/methods/example.md:1 +#: src/concurrency/shared_state/example.md:1 msgid "Example" msgstr "āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ" @@ -812,9 +807,8 @@ msgid "Using It" msgstr "" #: src/SUMMARY.md:253 src/bare-metal/aps/exceptions.md:1 -#, fuzzy msgid "Exceptions" -msgstr "āĻĢāĻžāĻ‚āĻļāĻ¨" +msgstr "āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ" #: src/SUMMARY.md:255 msgid "Useful Crates" @@ -934,8 +928,8 @@ msgstr "" msgid "Tokio" msgstr "Tokio" -#: src/SUMMARY.md:296 src/exercises/concurrency/link-checker.md:126 -#: src/async/tasks.md:1 src/exercises/concurrency/chat-app.md:140 +#: src/SUMMARY.md:296 src/exercises/concurrency/link-checker.md:126 src/async/tasks.md:1 +#: src/exercises/concurrency/chat-app.md:140 msgid "Tasks" msgstr "Tasks-āĻ•āĻ°ā§āĻŽ" @@ -1038,43 +1032,39 @@ msgid "Concurrency Afternoon" msgstr "Concurrency: āĻŦāĻŋāĻ•āĻžāĻ˛" #: src/index.md:3 -#, fuzzy msgid "" -"[![Build workflow](https://img.shields.io/github/actions/workflow/status/" -"google/comprehensive-rust/build.yml?style=flat-square)](https://github.com/" -"google/comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain) [!" -"[GitHub contributors](https://img.shields.io/github/contributors/google/" -"comprehensive-rust?style=flat-square)](https://github.com/google/" -"comprehensive-rust/graphs/contributors) [![GitHub stars](https://img.shields." -"io/github/stars/google/comprehensive-rust?style=flat-square)](https://github." -"com/google/comprehensive-rust/stargazers)" +"[![Build workflow](https://img.shields.io/github/actions/workflow/status/google/" +"comprehensive-rust/build.yml?style=flat-square)](https://github.com/google/" +"comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain) [![GitHub " +"contributors](https://img.shields.io/github/contributors/google/comprehensive-rust?" +"style=flat-square)](https://github.com/google/comprehensive-rust/graphs/contributors) [!" +"[GitHub stars](https://img.shields.io/github/stars/google/comprehensive-rust?style=flat-" +"square)](https://github.com/google/comprehensive-rust/stargazers)" msgstr "" -"[![Build workflow](https://img.shields.io/github/actions/workflow/status/" -"google/comprehensive-rust/build.yml?style=flat-square)](https://github.com/" -"google/comprehensive-rust/actions/workflows/build.yml) [![GitHub " -"contributors](https://img.shields.io/github/contributors/google/" -"comprehensive-rust?style=flat-square)](https://github.com/google/" -"comprehensive-rust/graphs/contributors)" +"[![Build workflow](https://img.shields.io/github/actions/workflow/status/google/" +"comprehensive-rust/build.yml?style=flat-square)](https://github.com/google/" +"comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain) [![GitHub " +"contributors](https://img.shields.io/github/contributors/google/comprehensive-rust?" +"style=flat-square)](https://github.com/google/comprehensive-rust/graphs/contributors) [!" +"[GitHub stars](https://img.shields.io/github/stars/google/comprehensive-rust?style=flat-" +"square)](https://github.com/google/comprehensive-rust/stargazers)" #: src/index.md:7 -#, fuzzy msgid "" -"This is a free Rust course developed by the Android team at Google. The " -"course covers the full spectrum of Rust, from basic syntax to advanced " -"topics like generics and error handling." +"This is a free Rust course developed by the Android team at Google. The course covers " +"the full spectrum of Rust, from basic syntax to advanced topics like generics and error " +"handling." msgstr "" -"āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¤āĻŋāĻ¨ āĻĻāĻŋāĻ¨ā§‡āĻ° āĻ°āĻžāĻ¸ā§āĻŸ āĻ•ā§‹āĻ°ā§āĻ¸ āĻ¯āĻž āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄ āĻŸāĻŋāĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ āĻ•ā§‹āĻ°ā§āĻ¸ " -"āĻ•āĻ­āĻžāĻ° āĻ•āĻ°ā§‡ Rust-āĻāĻ° āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻĒā§‡āĻ•āĻŸā§āĻ°āĻžāĻŽ, āĻŽā§ŒāĻ˛āĻŋāĻ• āĻ¸āĻŋāĻ¨āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸ āĻĨā§‡āĻ•ā§‡ āĻœā§‡āĻ¨ā§‡āĻ°āĻŋāĻ•ā§‡ āĻāĻŦāĻ‚ āĻāĻ°āĻ° " -"āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻŋāĻ‚ āĻāĻ° āĻŽāĻ¤ā§‹ āĻ‰āĻ¨ā§āĻ¨āĻ¤ āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤āĨ¤ āĻāĻŸāĻŋ āĻļā§‡āĻˇ āĻĻāĻŋāĻ¨ā§‡ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄ-āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ¸āĻžāĻŽāĻ—ā§āĻ°ā§€āĻ“ " -"āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĨ¤" +"āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¤āĻŋāĻ¨ āĻĻāĻŋāĻ¨ā§‡āĻ° āĻ°āĻžāĻ¸ā§āĻŸ āĻ•ā§‹āĻ°ā§āĻ¸ āĻ¯āĻž āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄ āĻŸāĻŋāĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ āĻ•ā§‹āĻ°ā§āĻ¸ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°ā§‡ Rust-" +"āĻāĻ° āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻĒā§‡āĻ•āĻŸā§āĻ°āĻžāĻŽ, āĻŽā§ŒāĻ˛āĻŋāĻ• āĻ¸āĻŋāĻ¨āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸ āĻĨā§‡āĻ•ā§‡ āĻœā§‡āĻ¨ā§‡āĻ°āĻŋāĻ•ā§‡ āĻāĻŦāĻ‚ āĻāĻ°āĻ° āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻŋāĻ‚ āĻāĻ° āĻŽāĻ¤ā§‹ āĻ‰āĻ¨ā§āĻ¨āĻ¤ āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤āĨ¤" #: src/index.md:11 msgid "" -"The goal of the course is to teach you Rust. We assume you don't know " -"anything about Rust and hope to:" +"The goal of the course is to teach you Rust. We assume you don't know anything about " +"Rust and hope to:" msgstr "" -"āĻ•ā§‹āĻ°ā§āĻ¸ā§‡āĻ° āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻšāĻ˛ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ°āĻžāĻ¸ā§āĻŸ āĻļā§‡āĻ–āĻžāĻ¨ā§‹āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ§āĻ°ā§‡ āĻ¨āĻŋāĻ˛āĻžāĻŽ āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻŋāĻ›ā§āĻ‡ āĻœāĻžāĻ¨ā§‡āĻ¨ āĻ¨āĻž āĻ°āĻžāĻ¸ā§āĻŸ " -"āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻāĻŦāĻ‚ āĻ†āĻļāĻž āĻ•āĻ°āĻŋāĻƒ" +"āĻ•ā§‹āĻ°ā§āĻ¸ā§‡āĻ° āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻšāĻ˛ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ°āĻžāĻ¸ā§āĻŸ āĻļā§‡āĻ–āĻžāĻ¨ā§‹āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ§āĻ°ā§‡ āĻ¨āĻŋāĻ˛āĻžāĻŽ āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻŋāĻ›ā§āĻ‡ āĻœāĻžāĻ¨ā§‡āĻ¨ āĻ¨āĻž āĻ°āĻžāĻ¸ā§āĻŸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻāĻŦāĻ‚ " +"āĻ†āĻļāĻž āĻ•āĻ°āĻŋāĻƒ" #: src/index.md:14 msgid "Give you a comprehensive understanding of the Rust syntax and language." @@ -1082,8 +1072,7 @@ msgstr "āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ°āĻžāĻ¸ā§āĻŸ āĻ¸āĻŋāĻ¨āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸ āĻāĻŦ #: src/index.md:15 msgid "Enable you to modify existing programs and write new programs in Rust." -msgstr "" -"āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻ—ā§āĻ˛āĻŋ āĻ¸āĻ‚āĻļā§‹āĻ§āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ°āĻžāĻ¸ā§āĻŸ āĻ āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§‡āĨ¤" +msgstr "āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻ—ā§āĻ˛āĻŋ āĻ¸āĻ‚āĻļā§‹āĻ§āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ°āĻžāĻ¸ā§āĻŸ āĻ āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§‡āĨ¤" #: src/index.md:16 msgid "Show you common Rust idioms." @@ -1091,48 +1080,32 @@ msgstr "āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ°āĻžāĻ¸ā§āĻŸ āĻ‡āĻĄāĻŋāĻ¯āĻŧāĻŽ #: src/index.md:18 msgid "We call the first three course days Rust Fundamentals." -msgstr "" +msgstr "āĻ†āĻŽāĻ°āĻž āĻ•ā§‹āĻ°ā§āĻ¸ā§‡āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻĻāĻŋāĻ¨āĻ•ā§‡ āĻ°āĻžāĻ¸ā§āĻŸ āĻĢāĻžāĻ¨ā§āĻĄāĻžāĻŽā§‡āĻ¨ā§āĻŸāĻžāĻ˛ āĻŦāĻ˛āĻŋāĨ¤" #: src/index.md:20 -#, fuzzy -msgid "" -"Building on this, you're invited to dive into one or more specialized topics:" -msgstr "" -"āĻĒā§āĻ°āĻĨāĻŽ āĻ¤āĻŋāĻ¨ āĻĻāĻŋāĻ¨ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ°āĻžāĻ¸ā§āĻŸ āĻāĻ° āĻŽā§ŒāĻ˛āĻŋāĻ•āĻ¤ā§āĻŦ āĻĻā§‡āĻ–āĻžāĻŦā§‹āĨ¤ āĻāĻ‡ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ• āĻŦāĻž āĻāĻ•āĻžāĻ§āĻŋāĻ• " -"āĻŦāĻŋāĻļā§‡āĻˇāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻĄā§āĻŦ āĻĻā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŋāĻ¤āĻƒ" +msgid "Building on this, you're invited to dive into one or more specialized topics:" +msgstr "āĻāĻŸāĻŋāĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻ• āĻŦāĻž āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻŦāĻŋāĻļā§‡āĻˇ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻĄā§āĻŦ āĻĻā§‡āĻ“ā§ŸāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŋāĻ¤āĨ¤" #: src/index.md:22 -#, fuzzy msgid "" -"[Android](android.md): a half-day course on using Rust for Android platform " -"development (AOSP). This includes interoperability with C, C++, and Java." +"[Android](android.md): a half-day course on using Rust for Android platform development " +"(AOSP). This includes interoperability with C, C++, and Java." msgstr "" -"[Android](android.md): āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ Rust āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ…āĻ°ā§āĻ§-āĻĻāĻŋāĻ¨ā§‡āĻ° " -"āĻ•ā§‹āĻ°ā§āĻ¸ development (AOSP). āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ C, C++ āĻāĻŦāĻ‚ Java āĻ¸āĻš āĻ†āĻ¨ā§āĻ¤āĻƒāĻ•āĻžāĻ°ā§āĻ¯āĻ¯ā§‹āĻ—ā§āĻ¯āĻ¤āĻž āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ " -"āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤" +"[Android](android.md): āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽā§‡āĻ° āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻŽā§‡āĻ¨ā§āĻŸ (AOSP) āĻāĻ° āĻœāĻ¨ā§āĻ¯ Rust āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° " +"āĻāĻ•āĻŸāĻŋ āĻ…āĻ°ā§āĻ§-āĻĻāĻŋāĻ¨ā§‡āĻ° āĻ•ā§‹āĻ°ā§āĻ¸āĨ¤ āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ C, C++ āĻāĻŦāĻ‚ Java āĻ¸āĻš āĻ†āĻ¨ā§āĻ¤āĻƒāĻ•āĻžāĻ°ā§āĻ¯āĻ¯ā§‹āĻ—ā§āĻ¯āĻ¤āĻž āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤" #: src/index.md:24 -#, fuzzy msgid "" -"[Bare-metal](bare-metal.md): a whole-day class on using Rust for bare-metal " -"(embedded) development. Both microcontrollers and application processors are " -"covered." +"[Bare-metal](bare-metal.md): a whole-day class on using Rust for bare-metal (embedded) " +"development. Both microcontrollers and application processors are covered." msgstr "" -"[Bare-metal](bare-metal.md): Rust āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹ āĻĻāĻŋāĻ¨ā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ¸ bare-" -"metal āĻāĻ° (embedded) āĻ‰āĻ¨ā§āĻ¨āĻ¤āĻŋāĻ° āĻœāĻ¨ā§āĻ¯āĨ¤ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ° āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ° āĻ‰āĻ­āĻ¯āĻŧāĻ‡ " -"āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡" #: src/index.md:27 -#, fuzzy msgid "" -"[Concurrency](concurrency.md): a whole-day class on concurrency in Rust. We " -"cover both classical concurrency (preemptively scheduling using threads and " -"mutexes) and async/await concurrency (cooperative multitasking using " -"futures)." +"[Concurrency](concurrency.md): a whole-day class on concurrency in Rust. We cover both " +"classical concurrency (preemptively scheduling using threads and mutexes) and async/" +"await concurrency (cooperative multitasking using futures)." msgstr "" -"[Concurrency](concurrency.md): concurrency in Rust āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻĒā§‚āĻ°ā§āĻŖ āĻĻāĻŋāĻ¨ā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ¸āĨ¤" -"āĻ†āĻŽāĻ°āĻž āĻ‰āĻ­āĻ¯āĻŧ āĻ§ā§āĻ°ā§āĻĒāĻĻā§€ āĻ¸āĻ™ā§āĻ—āĻ¤āĻŋ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻŋ (āĻĨā§āĻ°ā§‡āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĒā§‚āĻ°ā§āĻŦāĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§‚āĻšā§€ āĻāĻŦāĻ‚ " -"mutextes) āĻāĻŦāĻ‚ async/await concurrency (āĻ¸āĻŽāĻŦāĻžāĻ¯āĻŧ āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻŸāĻžāĻ¸ā§āĻ•āĻŋāĻ‚ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ­āĻŦāĻŋāĻˇā§āĻ¯āĻ¤)āĨ¤" #: src/index.md:33 msgid "Non-Goals" @@ -1140,56 +1113,50 @@ msgstr "" #: src/index.md:35 msgid "" -"Rust is a large language and we won't be able to cover all of it in a few " -"days. Some non-goals of this course are:" +"Rust is a large language and we won't be able to cover all of it in a few days. Some " +"non-goals of this course are:" msgstr "" -"āĻ°āĻžāĻ¸ā§āĻŸ āĻāĻ•āĻŸāĻŋ āĻŦā§ƒāĻšā§Ž āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ˛ā§āĻ¯āĻžāĻ‚āĻ—ā§āĻ¯āĻŧā§‡āĻœ āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž āĻ•āĻ¯āĻŧā§‡āĻ• āĻĻāĻŋāĻ¨ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻŸāĻŋāĻ•ā§‡ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ " -"āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻŦ āĻ¨āĻžāĨ¤ āĻāĻ‡ āĻ•ā§‹āĻ°ā§āĻ¸ā§‡āĻ° āĻ•āĻŋāĻ›ā§ āĻ…-āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻšāĻ˛āĻƒ" +"āĻ°āĻžāĻ¸ā§āĻŸ āĻāĻ•āĻŸāĻŋ āĻŦā§ƒāĻšā§Ž āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ˛ā§āĻ¯āĻžāĻ‚āĻ—ā§āĻ¯āĻŧā§‡āĻœ āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž āĻ•āĻ¯āĻŧā§‡āĻ• āĻĻāĻŋāĻ¨ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻŸāĻŋāĻ•ā§‡ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻŦ āĻ¨āĻžāĨ¤ " +"āĻāĻ‡ āĻ•ā§‹āĻ°ā§āĻ¸ā§‡āĻ° āĻ•āĻŋāĻ›ā§ āĻ…-āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻšāĻ˛āĻƒ" #: src/index.md:38 -#, fuzzy msgid "" -"Learning how to develop macros: please see [Chapter 19.5 in the Rust Book]" -"(https://doc.rust-lang.org/book/ch19-06-macros.html) and [Rust by Example]" -"(https://doc.rust-lang.org/rust-by-example/macros.html) instead." +"Learning how to develop macros: please see [Chapter 19.5 in the Rust Book](https://doc." +"rust-lang.org/book/ch19-06-macros.html) and [Rust by Example](https://doc.rust-lang.org/" +"rust-by-example/macros.html) instead." msgstr "" -"āĻļāĻŋāĻ–ā§āĻ¨ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ macros āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ, āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ āĻĻā§‡āĻ–ā§āĻ¨ [āĻ…āĻ§ā§āĻ¯āĻžāĻ¯āĻŧ 19.5 Rust āĻāĻ° āĻŦāĻ‡ āĻ]" -"(https://doc.rust-lang.org/book/ch19-06-macros.html) āĻāĻŦāĻ‚ [āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻāĻ° āĻŽāĻ§ā§āĻ¯āĻŽā§‡ " -"āĻ°āĻžāĻ¸ā§āĻŸ](https://doc.rust-lang.org/rust-by-example/macros.html) āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡āĨ¤" #: src/index.md:42 msgid "Assumptions" msgstr "\\##āĻ§ā§ƒāĻˇā§āĻŸāĻ¤āĻžāĻ¸āĻŽā§‚āĻš" #: src/index.md:44 -#, fuzzy msgid "" -"The course assumes that you already know how to program. Rust is a " -"statically-typed language and we will sometimes make comparisons with C and " -"C++ to better explain or contrast the Rust approach." +"The course assumes that you already know how to program. Rust is a statically-typed " +"language and we will sometimes make comparisons with C and C++ to better explain or " +"contrast the Rust approach." msgstr "" -"āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻ…āĻ¨ā§āĻŽāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻœāĻžāĻ¨ā§‡āĻ¨āĨ¤ Rust āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ•āĻžāĻ˛āĻŋ " -"āĻŸāĻžāĻ‡āĻĒāĻĄ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ˛ā§āĻ¯āĻžāĻ‚āĻ—ā§āĻ¯āĻŧā§‡āĻœ āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž āĻ•āĻ–āĻ¨āĻ“ āĻ•āĻ–āĻ¨āĻ“ C āĻāĻŦāĻ‚ C++ āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¤ā§āĻ˛āĻ¨āĻž āĻ•āĻ°āĻŦ " -"āĻ­āĻžāĻ˛ā§‹āĻ­āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻžāĻ–āĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĨāĻŦāĻž āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤ Rust āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĨ¤" +"āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻ…āĻ¨ā§āĻŽāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻœāĻžāĻ¨ā§‡āĻ¨āĨ¤ āĻ°āĻžāĻ¸ā§āĻŸ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ•āĻžāĻ˛āĻŋ āĻŸāĻžāĻ‡āĻĒāĻĄ " +"āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ˛ā§āĻ¯āĻžāĻ‚āĻ—ā§āĻ¯āĻŧā§‡āĻœ āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž āĻ•āĻ–āĻ¨āĻ“ āĻ•āĻ–āĻ¨āĻ“ C āĻāĻŦāĻ‚ C++ āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¤ā§āĻ˛āĻ¨āĻž āĻ•āĻ°āĻŦ āĻ­āĻžāĻ˛ā§‹āĻ­āĻžāĻŦ āĻŦā§āĻ¯āĻžāĻ–āĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ " +"āĻ…āĻĨāĻŦāĻž āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤ āĻ°āĻžāĻ¸ā§āĻŸ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĨ¤" #: src/index.md:48 -#, fuzzy msgid "" "If you know how to program in a dynamically-typed language such as Python or " "JavaScript, then you will be able to follow along just fine too." msgstr "" -"āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻœāĻžāĻ¨ā§‡āĻ¨ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻĄāĻžāĻ‡āĻ¨āĻžāĻŽāĻŋāĻ•ā§āĻ¯āĻžāĻ˛āĻŋ āĻŸāĻžāĻ‡āĻĒāĻĄ āĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ āĻ¯ā§‡āĻŽāĻ¨ " -"āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻŦāĻž āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ–ā§āĻŦ āĻ­āĻžāĻ˛ āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻŦā§‡āĻ¨āĨ¤" +"āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻœāĻžāĻ¨ā§‡āĻ¨ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻĄāĻžāĻ‡āĻ¨āĻžāĻŽāĻŋāĻ•ā§āĻ¯āĻžāĻ˛āĻŋ āĻŸāĻžāĻ‡āĻĒāĻĄ āĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ āĻ¯ā§‡āĻŽāĻ¨ āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻŦāĻž " +"āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ–ā§āĻŦ āĻ­āĻžāĻ˛ āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻŦā§‡āĻ¨āĨ¤ " #: src/index.md:53 msgid "" -"This is an example of a _speaker note_. We will use these to add additional " -"information to the slides. This could be key points which the instructor " -"should cover as well as answers to typical questions which come up in class." +"This is an example of a _speaker note_. We will use these to add additional information " +"to the slides. This could be key points which the instructor should cover as well as " +"answers to typical questions which come up in class." msgstr "" -"āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ _speaker note_ āĻāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĨ¤ āĻ†āĻŽāĻ°āĻž āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ¤āĻĨā§āĻ¯ āĻ¸ā§āĻ˛āĻžāĻ‡āĻĄā§‡ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻāĻ‡āĻ—ā§āĻ˛ā§‹ " -"āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦā§‹āĨ¤ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¯āĻž āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻ•ā§‡āĻ° āĻ‰āĻšāĻŋāĻ¤ āĻ•āĻ­āĻžāĻ°ā§‡āĻ° āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ " -"āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ āĻ†āĻ¸āĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒā§āĻ°āĻļā§āĻ¨ā§‡āĻ° āĻ‰āĻ¤ā§āĻ¤āĻ° āĻĻā§‡āĻ“āĻ¯āĻŧāĻžāĨ¤" +"āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ _speaker note_ āĻāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĨ¤ āĻ†āĻŽāĻ°āĻž āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ¤āĻĨā§āĻ¯ āĻ¸ā§āĻ˛āĻžāĻ‡āĻĄā§‡ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻāĻ‡āĻ—ā§āĻ˛ā§‹ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦā§‹āĨ¤ " +"āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¯āĻž āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻ•ā§‡āĻ° āĻ‰āĻšāĻŋāĻ¤ āĻ•āĻ­āĻžāĻ°ā§‡āĻ° āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ āĻ†āĻ¸āĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒā§āĻ°āĻļā§āĻ¨ā§‡āĻ° āĻ‰āĻ¤ā§āĻ¤āĻ° " +"āĻĻā§‡āĻ“āĻ¯āĻŧāĻžāĨ¤" #: src/running-the-course.md:3 src/running-the-course/course-structure.md:3 msgid "This page is for the course instructor." @@ -1197,11 +1164,10 @@ msgstr "āĻāĻ‡ āĻĒā§ƒāĻˇā§āĻ āĻžāĻŸāĻŋ āĻ•ā§‹āĻ°ā§āĻ¸ āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇ #: src/running-the-course.md:5 msgid "" -"Here is a bit of background information about how we've been running the " -"course internally at Google." +"Here is a bit of background information about how we've been running the course " +"internally at Google." msgstr "" -"āĻ†āĻŽāĻ°āĻž āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻšā§āĻ›āĻŋ āĻ¸ā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻāĻ–āĻžāĻ¨ā§‡ āĻ•āĻŋāĻ›ā§ āĻĒāĻŸāĻ­ā§‚āĻŽāĻŋāĻ° āĻ—ā§āĻ—āĻ˛ā§‡ āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖāĻ­āĻžāĻŦā§‡ āĻ¤āĻĨā§āĻ¯ " -"āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤" +"āĻ†āĻŽāĻ°āĻž āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻšā§āĻ›āĻŋ āĻ¸ā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻāĻ–āĻžāĻ¨ā§‡ āĻ•āĻŋāĻ›ā§ āĻĒāĻŸāĻ­ā§‚āĻŽāĻŋāĻ° āĻ—ā§āĻ—āĻ˛ā§‡ āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖāĻ­āĻžāĻŦā§‡ āĻ¤āĻĨā§āĻ¯ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤" #: src/running-the-course.md:8 msgid "Before you run the course, you will want to:" @@ -1209,101 +1175,95 @@ msgstr "āĻ†āĻĒāĻ¨āĻŋ āĻ•ā§‹āĻ°ā§āĻ¸ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ†āĻ—ā§‡, āĻ†āĻĒāĻ¨ #: src/running-the-course.md:10 msgid "" -"Make yourself familiar with the course material. We've included speaker " -"notes to help highlight the key points (please help us by contributing more " -"speaker notes!). When presenting, you should make sure to open the speaker " -"notes in a popup (click the link with a little arrow next to \"Speaker " -"Notes\"). This way you have a clean screen to present to the class." +"Make yourself familiar with the course material. We've included speaker notes to help " +"highlight the key points (please help us by contributing more speaker notes!). When " +"presenting, you should make sure to open the speaker notes in a popup (click the link " +"with a little arrow next to \"Speaker Notes\"). This way you have a clean screen to " +"present to the class." msgstr "" -"āĻ•ā§‹āĻ°ā§āĻ¸ā§‡āĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¨āĻŋāĻœā§‡āĻ•ā§‡ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ¸ā§āĻĒāĻŋāĻ•āĻžāĻ° āĻ¨ā§‹āĻŸ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻŽā§‚āĻ˛ " -"āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻšāĻžāĻ‡āĻ˛āĻžāĻ‡āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ (āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ āĻ†āĻ°āĻ“ āĻ¸ā§āĻĒāĻŋāĻ•āĻžāĻ° āĻ¨ā§‹āĻŸ āĻ…āĻŦāĻĻāĻžāĻ¨ āĻ°ā§‡āĻ–ā§‡ " -"āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°ā§āĻ¨ !)āĨ¤ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĒāĻŋāĻ•āĻžāĻ° āĻ¨ā§‹āĻŸ āĻĒāĻĒāĻ†āĻĒ āĻ āĻ–ā§āĻ˛āĻ¤ā§‡ " -"āĻ­ā§āĻ˛āĻŦā§‡āĻ¨ āĻ¨āĻž (\"āĻ¸ā§āĻĒā§€āĻ•āĻžāĻ° āĻ¨ā§‹āĻŸāĻ¸\" āĻāĻ° āĻĒāĻžāĻļā§‡ āĻāĻ•āĻŸāĻŋ āĻ›ā§‹āĻŸ āĻ¤ā§€āĻ° āĻ¸āĻš āĻ˛āĻŋāĻ™ā§āĻ•ā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°ā§āĻ¨)āĨ¤ āĻāĻ‡ āĻĒāĻĨā§‡ " -"āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻ›ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻĒāĻ°ā§āĻĻāĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤" +"āĻ•ā§‹āĻ°ā§āĻ¸ā§‡āĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¨āĻŋāĻœā§‡āĻ•ā§‡ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ¸ā§āĻĒāĻŋāĻ•āĻžāĻ° āĻ¨ā§‹āĻŸ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻŽā§‚āĻ˛ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻ—ā§āĻ˛āĻŋ " +"āĻšāĻžāĻ‡āĻ˛āĻžāĻ‡āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ (āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ āĻ†āĻ°āĻ“ āĻ¸ā§āĻĒāĻŋāĻ•āĻžāĻ° āĻ¨ā§‹āĻŸ āĻ…āĻŦāĻĻāĻžāĻ¨ āĻ°ā§‡āĻ–ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°ā§āĻ¨ !)āĨ¤ " +"āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĒāĻŋāĻ•āĻžāĻ° āĻ¨ā§‹āĻŸ āĻĒāĻĒāĻ†āĻĒ āĻ āĻ–ā§āĻ˛āĻ¤ā§‡ āĻ­ā§āĻ˛āĻŦā§‡āĻ¨ āĻ¨āĻž (\"āĻ¸ā§āĻĒā§€āĻ•āĻžāĻ° āĻ¨ā§‹āĻŸāĻ¸\" āĻāĻ° āĻĒāĻžāĻļā§‡ " +"āĻāĻ•āĻŸāĻŋ āĻ›ā§‹āĻŸ āĻ¤ā§€āĻ° āĻ¸āĻš āĻ˛āĻŋāĻ™ā§āĻ•ā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°ā§āĻ¨)āĨ¤ āĻāĻ‡ āĻĒāĻĨā§‡ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻ›ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° " +"āĻĒāĻ°ā§āĻĻāĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤" #: src/running-the-course.md:16 msgid "" -"Decide on the dates. Since the course takes at least three full days, we " -"recommend that you schedule the days over two weeks. Course participants " -"have said that they find it helpful to have a gap in the course since it " -"helps them process all the information we give them." +"Decide on the dates. Since the course takes at least three full days, we recommend that " +"you schedule the days over two weeks. Course participants have said that they find it " +"helpful to have a gap in the course since it helps them process all the information we " +"give them." msgstr "" -"āĻ¤āĻžāĻ°āĻŋāĻ–ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤āĨ¤āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻ•āĻŽāĻĒāĻ•ā§āĻˇā§‡ āĻ¤āĻŋāĻ¨ āĻĒā§‚āĻ°ā§āĻŖ āĻĻāĻŋāĻ¨ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨ā§‡āĻ¯āĻŧ, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ " -"āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°āĻ›āĻŋ āĻĻā§āĻ‡ āĻ¸āĻĒā§āĻ¤āĻžāĻš āĻ‰āĻĒāĻ° āĻĻāĻŋāĻ¨ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°ā§āĻ¨āĨ¤ āĻāĻŽāĻ¨āĻŸāĻžāĻ‡ āĻœāĻžāĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨ āĻ•ā§‹āĻ°ā§āĻ¸ā§‡ " -"āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ¯ā§‡ āĻ¤āĻžāĻ°āĻž āĻ•ā§‹āĻ°ā§āĻ¸ā§‡ āĻĢāĻžāĻāĻ• āĻĨāĻžāĻ•āĻž āĻ¸āĻšāĻžāĻ¯āĻŧāĻ• āĻŦāĻ˛ā§‡ āĻŽāĻ¨ā§‡ āĻ•āĻ°ā§‡ āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻ¤āĻžāĻĻā§‡āĻ° " -"āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¤āĻĨā§āĻ¯ āĻ¤āĻžāĻĻā§‡āĻ° āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤" +"āĻ¤āĻžāĻ°āĻŋāĻ–ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤āĨ¤āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻ•āĻŽāĻĒāĻ•ā§āĻˇā§‡ āĻ¤āĻŋāĻ¨ āĻĒā§‚āĻ°ā§āĻŖ āĻĻāĻŋāĻ¨ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨ā§‡āĻ¯āĻŧ, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ " +"āĻ•āĻ°āĻ›āĻŋ āĻĻā§āĻ‡ āĻ¸āĻĒā§āĻ¤āĻžāĻš āĻ‰āĻĒāĻ° āĻĻāĻŋāĻ¨ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°ā§āĻ¨āĨ¤ āĻāĻŽāĻ¨āĻŸāĻžāĻ‡ āĻœāĻžāĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨ āĻ•ā§‹āĻ°ā§āĻ¸ā§‡ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ¯ā§‡ āĻ¤āĻžāĻ°āĻž āĻ•ā§‹āĻ°ā§āĻ¸ā§‡ " +"āĻĢāĻžāĻāĻ• āĻĨāĻžāĻ•āĻž āĻ¸āĻšāĻžāĻ¯āĻŧāĻ• āĻŦāĻ˛ā§‡ āĻŽāĻ¨ā§‡ āĻ•āĻ°ā§‡ āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¤āĻĨā§āĻ¯ āĻ¤āĻžāĻĻā§‡āĻ° " +"āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤" #: src/running-the-course.md:21 msgid "" -"Find a room large enough for your in-person participants. We recommend a " -"class size of 15-25 people. That's small enough that people are comfortable " -"asking questions --- it's also small enough that one instructor will have " -"time to answer the questions. Make sure the room has _desks_ for yourself " -"and for the students: you will all need to be able to sit and work with your " -"laptops. In particular, you will be doing a lot of live-coding as an " -"instructor, so a lectern won't be very helpful for you." +"Find a room large enough for your in-person participants. We recommend a class size of " +"15-25 people. That's small enough that people are comfortable asking questions --- it's " +"also small enough that one instructor will have time to answer the questions. Make sure " +"the room has _desks_ for yourself and for the students: you will all need to be able to " +"sit and work with your laptops. In particular, you will be doing a lot of live-coding " +"as an instructor, so a lectern won't be very helpful for you." msgstr "" -"āĻ†āĻĒāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻŦāĻĄāĻŧ āĻāĻ•āĻŸāĻŋ āĻ°ā§āĻŽ āĻ–ā§āĻāĻœā§āĻ¨āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°āĻŋ 15-25 āĻœāĻ¨ā§‡āĻ° " -"āĻ¸āĻžāĻ‡āĻœā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ¸āĨ¤ āĻāĻŸāĻŋ āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻ›ā§‹āĻŸ āĻ¯ā§‡ āĻŽāĻžāĻ¨ā§āĻˇ āĻ†āĻ°āĻžāĻŽāĻĻāĻžāĻ¯āĻŧāĻ• āĻ…āĻ¨ā§āĻ­āĻŦ āĻ•āĻ°ā§‡ āĻĒā§āĻ°āĻļā§āĻ¨ āĻœāĻŋāĻœā§āĻžāĻžāĻ¸āĻž āĻ•āĻ°āĻ¤ā§‡--- " -"āĻāĻŸāĻŋ āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻ›ā§‹āĻŸ āĻ¯ā§‡ āĻāĻ•āĻœāĻ¨ āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻ• āĻāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĨāĻžāĻ•āĻŦā§‡ āĻĒā§āĻ°āĻļā§āĻ¨ā§‡āĻ° āĻ‰āĻ¤ā§āĻ¤āĻ° āĻĻā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯āĨ¤ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ " -"āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ āĻ˜āĻ°ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŦāĻ‚ āĻ›āĻžāĻ¤ā§āĻ°āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ _desks_ āĻ†āĻ›ā§‡ : āĻ†āĻĒāĻ¨āĻžā§āĻĻā§‡āĻ° āĻ¸āĻ•āĻ˛āĻ•ā§‡ āĻ†āĻĒāĻ¨āĻžāĻĻā§‡āĻ° " -"āĻ˛ā§āĻ¯āĻžāĻĒāĻŸāĻĒā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŦāĻ¸ā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻŦāĻŋāĻļā§‡āĻˇ āĻ•āĻ°ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻœāĻ¨ āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻ• āĻšāĻŋāĻ¸āĻžāĻŦā§‡ " -"āĻĒā§āĻ°āĻšā§āĻ° āĻ˛āĻžāĻ‡āĻ­-āĻ•ā§‹āĻĄāĻŋāĻ‚ āĻ•āĻ°āĻŦā§‡āĻ¨, āĻ¤āĻžāĻ‡ lecturn āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ–ā§āĻŦ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ• āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤" +"āĻ†āĻĒāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻŦāĻĄāĻŧ āĻāĻ•āĻŸāĻŋ āĻ°ā§āĻŽ āĻ–ā§āĻāĻœā§āĻ¨āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°āĻŋ 15-25 āĻœāĻ¨ā§‡āĻ° āĻ¸āĻžāĻ‡āĻœā§‡āĻ° " +"āĻ•ā§āĻ˛āĻžāĻ¸āĨ¤ āĻāĻŸāĻŋ āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻ›ā§‹āĻŸ āĻ¯ā§‡ āĻŽāĻžāĻ¨ā§āĻˇ āĻ†āĻ°āĻžāĻŽāĻĻāĻžāĻ¯āĻŧāĻ• āĻ…āĻ¨ā§āĻ­āĻŦ āĻ•āĻ°ā§‡ āĻĒā§āĻ°āĻļā§āĻ¨ āĻœāĻŋāĻœā§āĻžāĻžāĻ¸āĻž āĻ•āĻ°āĻ¤ā§‡--- āĻāĻŸāĻŋ āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻ›ā§‹āĻŸ āĻ¯ā§‡ " +"āĻāĻ•āĻœāĻ¨ āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻ• āĻāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĨāĻžāĻ•āĻŦā§‡ āĻĒā§āĻ°āĻļā§āĻ¨ā§‡āĻ° āĻ‰āĻ¤ā§āĻ¤āĻ° āĻĻā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯āĨ¤ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ āĻ˜āĻ°ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŦāĻ‚ " +"āĻ›āĻžāĻ¤ā§āĻ°āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ _desks_ āĻ†āĻ›ā§‡ : āĻ†āĻĒāĻ¨āĻžā§āĻĻā§‡āĻ° āĻ¸āĻ•āĻ˛āĻ•ā§‡ āĻ†āĻĒāĻ¨āĻžāĻĻā§‡āĻ° āĻ˛ā§āĻ¯āĻžāĻĒāĻŸāĻĒā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŦāĻ¸ā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ¤ā§‡ " +"āĻšāĻŦā§‡āĨ¤ āĻŦāĻŋāĻļā§‡āĻˇ āĻ•āĻ°ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻœāĻ¨ āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻ• āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĒā§āĻ°āĻšā§āĻ° āĻ˛āĻžāĻ‡āĻ­-āĻ•ā§‹āĻĄāĻŋāĻ‚ āĻ•āĻ°āĻŦā§‡āĻ¨, āĻ¤āĻžāĻ‡ lecturn āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ " +"āĻ–ā§āĻŦ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ• āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤" #: src/running-the-course.md:29 msgid "" -"On the day of your course, show up to the room a little early to set things " -"up. We recommend presenting directly using `mdbook serve` running on your " -"laptop (see the [installation instructions](https://github.com/google/" -"comprehensive-rust#building)). This ensures optimal performance with no lag " -"as you change pages. Using your laptop will also allow you to fix typos as " -"you or the course participants spot them." +"On the day of your course, show up to the room a little early to set things up. We " +"recommend presenting directly using `mdbook serve` running on your laptop (see the " +"[installation instructions](https://github.com/google/comprehensive-rust#building)). " +"This ensures optimal performance with no lag as you change pages. Using your laptop " +"will also allow you to fix typos as you or the course participants spot them." msgstr "" -"āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§‹āĻ°ā§āĻ¸ā§‡āĻ° āĻĻāĻŋāĻ¨, āĻœāĻŋāĻ¨āĻŋāĻ¸āĻ—ā§āĻ˛āĻŋ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻāĻ•āĻŸā§ āĻ¤āĻžāĻĄāĻŧāĻžāĻ¤āĻžāĻĄāĻŧāĻŋ āĻ•āĻ°ā§āĻ¨ āĻ†āĻŽāĻ°āĻž āĻ†āĻĒāĻ¨āĻžāĻ° āĻ˛ā§āĻ¯āĻžāĻĒāĻŸāĻĒā§‡ " -"āĻšāĻ˛āĻŽāĻžāĻ¨ `mdbook serve` āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ‡ (āĻĻā§‡āĻ–ā§āĻ¨ " -"\\[āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€\\] [3](https://github.com/google/comprehensive-" -"rust#building))āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻĒā§ƒāĻˇā§āĻ āĻžāĻ—ā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡ āĻāĻŸāĻŋ āĻ•ā§‹āĻ¨āĻ“ āĻ˛ā§āĻ¯āĻžāĻ— āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ " -"āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽ āĻ•āĻžāĻ°ā§āĻ¯āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ˛ā§āĻ¯āĻžāĻĒāĻŸāĻĒ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻŦāĻž āĻ•ā§‹āĻ°ā§āĻ¸ā§‡āĻ° " -"āĻŽāĻ¤ā§‹ āĻŸāĻžāĻ‡āĻĒ āĻ­ā§āĻ˛ āĻ āĻŋāĻ• āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŦā§‡āĻ¨ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ¤āĻžāĻĻā§‡āĻ° āĻ–ā§āĻāĻœā§‡ āĻŦā§‡āĻ° āĻ•āĻ°ā§‡āĨ¤" +"āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§‹āĻ°ā§āĻ¸ā§‡āĻ° āĻĻāĻŋāĻ¨, āĻœāĻŋāĻ¨āĻŋāĻ¸āĻ—ā§āĻ˛āĻŋ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻāĻ•āĻŸā§ āĻ¤āĻžāĻĄāĻŧāĻžāĻ¤āĻžāĻĄāĻŧāĻŋ āĻ•āĻ°ā§āĻ¨ āĻ†āĻŽāĻ°āĻž āĻ†āĻĒāĻ¨āĻžāĻ° āĻ˛ā§āĻ¯āĻžāĻĒāĻŸāĻĒā§‡ āĻšāĻ˛āĻŽāĻžāĻ¨ `mdbook " +"serve` āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ‡ (āĻĻā§‡āĻ–ā§āĻ¨ \\[āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€\\] [3]" +"(https://github.com/google/comprehensive-rust#building))āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻĒā§ƒāĻˇā§āĻ āĻžāĻ—ā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻžāĻ° " +"āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡ āĻāĻŸāĻŋ āĻ•ā§‹āĻ¨āĻ“ āĻ˛ā§āĻ¯āĻžāĻ— āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽ āĻ•āĻžāĻ°ā§āĻ¯āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ˛ā§āĻ¯āĻžāĻĒāĻŸāĻĒ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ˛ā§‡ " +"āĻ†āĻĒāĻ¨āĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻŦāĻž āĻ•ā§‹āĻ°ā§āĻ¸ā§‡āĻ° āĻŽāĻ¤ā§‹ āĻŸāĻžāĻ‡āĻĒ āĻ­ā§āĻ˛ āĻ āĻŋāĻ• āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŦā§‡āĻ¨ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ¤āĻžāĻĻā§‡āĻ° āĻ–ā§āĻāĻœā§‡ āĻŦā§‡āĻ° āĻ•āĻ°ā§‡āĨ¤" #: src/running-the-course.md:35 msgid "" -"Let people solve the exercises by themselves or in small groups. We " -"typically spend 30-45 minutes on exercises in the morning and in the " -"afternoon (including time to review the solutions). Make sure to ask people " -"if they're stuck or if there is anything you can help with. When you see " -"that several people have the same problem, call it out to the class and " -"offer a solution, e.g., by showing people where to find the relevant " +"Let people solve the exercises by themselves or in small groups. We typically spend " +"30-45 minutes on exercises in the morning and in the afternoon (including time to " +"review the solutions). Make sure to ask people if they're stuck or if there is anything " +"you can help with. When you see that several people have the same problem, call it out " +"to the class and offer a solution, e.g., by showing people where to find the relevant " "information in the standard library." msgstr "" -"āĻ¤āĻžāĻĻā§‡āĻ°āĻ•ā§‡ āĻāĻ•āĻž āĻāĻ•āĻž āĻŦāĻž āĻ›ā§‹āĻŸ āĻĻāĻ˛ā§‡ āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨ā§‡āĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĻāĻŋāĻ¨āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ¸āĻ•āĻžāĻ˛ā§‡ āĻāĻŦāĻ‚ " -"āĻŦāĻŋāĻ•ā§‡āĻ˛ā§‡ āĻŦā§āĻ¯āĻžāĻ¯āĻŧāĻžāĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ 30-45 āĻŽāĻŋāĻ¨āĻŋāĻŸ āĻŦā§āĻ¯āĻ¯āĻŧ āĻ•āĻ°āĻŋ (āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§‹āĻšāĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸āĻš)āĨ¤ " -"āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ āĻ˛ā§‹āĻ•ā§‡āĻĻā§‡āĻ° āĻœāĻŋāĻœā§āĻžāĻžāĻ¸āĻž āĻ•āĻ°ā§āĻ¨ āĻ¤āĻžāĻ°āĻž āĻ†āĻŸāĻ•ā§‡ āĻ†āĻ›ā§‡ āĻ•āĻŋāĻ¨āĻž āĻŦāĻž āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ " -"āĻāĻŽāĻ¨ āĻ•āĻŋāĻ›ā§ āĻ†āĻ›ā§‡ āĻ•āĻŋāĻ¨āĻžāĨ¤ āĻ¯āĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›ā§‡āĻ¨ āĻ¯ā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻœāĻ¨ā§‡āĻ° āĻāĻ•āĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡, " -"āĻāĻŸāĻŋāĻ•ā§‡ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ āĻ•āĻ˛ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ…āĻĢāĻžāĻ° āĻ•āĻ°ā§āĻ¨, āĻ¯ā§‡āĻŽāĻ¨, āĻĒā§āĻ°āĻžāĻ¸āĻ™ā§āĻ—āĻŋāĻ• āĻ¤āĻĨā§āĻ¯āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ " -"āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ¤ā§‡ āĻ•ā§‹āĻĨāĻžāĻ¯āĻŧ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡ āĻ¤āĻž āĻ˛ā§‹āĻ•ā§‡āĻĻā§‡āĻ° āĻĻā§‡āĻ–āĻŋāĻ¯āĻŧā§‡ āĻĻāĻŋāĻ¨āĨ¤" +"āĻ¤āĻžāĻĻā§‡āĻ°āĻ•ā§‡ āĻāĻ•āĻž āĻāĻ•āĻž āĻŦāĻž āĻ›ā§‹āĻŸ āĻĻāĻ˛ā§‡ āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨ā§‡āĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĻāĻŋāĻ¨āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ¸āĻ•āĻžāĻ˛ā§‡ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ•ā§‡āĻ˛ā§‡ " +"āĻŦā§āĻ¯āĻžāĻ¯āĻŧāĻžāĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ 30-45 āĻŽāĻŋāĻ¨āĻŋāĻŸ āĻŦā§āĻ¯āĻ¯āĻŧ āĻ•āĻ°āĻŋ (āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§‹āĻšāĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸āĻš)āĨ¤ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ āĻ˛ā§‹āĻ•ā§‡āĻĻā§‡āĻ° " +"āĻœāĻŋāĻœā§āĻžāĻžāĻ¸āĻž āĻ•āĻ°ā§āĻ¨ āĻ¤āĻžāĻ°āĻž āĻ†āĻŸāĻ•ā§‡ āĻ†āĻ›ā§‡ āĻ•āĻŋāĻ¨āĻž āĻŦāĻž āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻŽāĻ¨ āĻ•āĻŋāĻ›ā§ āĻ†āĻ›ā§‡ āĻ•āĻŋāĻ¨āĻžāĨ¤ āĻ¯āĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻŋ " +"āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›ā§‡āĻ¨ āĻ¯ā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻœāĻ¨ā§‡āĻ° āĻāĻ•āĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡, āĻāĻŸāĻŋāĻ•ā§‡ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ āĻ•āĻ˛ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ…āĻĢāĻžāĻ° " +"āĻ•āĻ°ā§āĻ¨, āĻ¯ā§‡āĻŽāĻ¨, āĻĒā§āĻ°āĻžāĻ¸āĻ™ā§āĻ—āĻŋāĻ• āĻ¤āĻĨā§āĻ¯āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ¤ā§‡ āĻ•ā§‹āĻĨāĻžāĻ¯āĻŧ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡ āĻ¤āĻž āĻ˛ā§‹āĻ•ā§‡āĻĻā§‡āĻ° āĻĻā§‡āĻ–āĻŋāĻ¯āĻŧā§‡ āĻĻāĻŋāĻ¨āĨ¤" #: src/running-the-course.md:43 msgid "" -"That is all, good luck running the course! We hope it will be as much fun " -"for you as it has been for us!" +"That is all, good luck running the course! We hope it will be as much fun for you as it " +"has been for us!" msgstr "" -"āĻāĻ‡āĻ¸āĻŦ āĻ¯ā§‡, āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻļā§āĻ­āĻ•āĻžāĻŽāĻ¨āĻžāĨ¤ āĻ†āĻŽāĻ°āĻž āĻ†āĻļāĻž āĻ•āĻ°āĻŋ āĻāĻŸāĻž āĻ¤āĻ¤āĻŸāĻžāĻ‡ āĻŽāĻœāĻžāĻ° āĻšāĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° " -"āĻœāĻ¨ā§āĻ¯ āĻ¯āĻ¤āĻŸāĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ā§‹ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡āĨ¤" +"āĻāĻ‡āĻ¸āĻŦ āĻ¯ā§‡, āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻļā§āĻ­āĻ•āĻžāĻŽāĻ¨āĻžāĨ¤ āĻ†āĻŽāĻ°āĻž āĻ†āĻļāĻž āĻ•āĻ°āĻŋ āĻāĻŸāĻž āĻ¤āĻ¤āĻŸāĻžāĻ‡ āĻŽāĻœāĻžāĻ° āĻšāĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯āĻ¤āĻŸāĻž " +"āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ā§‹ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡āĨ¤" #: src/running-the-course.md:46 msgid "" -"Please [provide feedback](https://github.com/google/comprehensive-rust/" -"discussions/86) afterwards so that we can keep improving the course. We " -"would love to hear what worked well for you and what can be made better. " -"Your students are also very welcome to [send us feedback](https://github.com/" -"google/comprehensive-rust/discussions/100)!" +"Please [provide feedback](https://github.com/google/comprehensive-rust/discussions/86) " +"afterwards so that we can keep improving the course. We would love to hear what worked " +"well for you and what can be made better. Your students are also very welcome to [send " +"us feedback](https://github.com/google/comprehensive-rust/discussions/100)!" msgstr "" -"āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ \\[āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§āĻ¨\\] [1](https://github.com/google/" -"comprehensive-rust/discussions/86) āĻĒāĻ°ā§‡ āĻ¯āĻžāĻ¤ā§‡ āĻ†āĻŽāĻ°āĻž āĻ‰āĻ¨ā§āĻ¨āĻ¤āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋā§ˇ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ " -"āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§€ āĻ­āĻžāĻ˛ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ‰āĻ¤ā§āĻ¤āĻŽ āĻ•ā§€ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¤āĻž āĻ†āĻŽāĻ°āĻž āĻļā§āĻ¨āĻ¤ā§‡ āĻšāĻžāĻ‡ āĨ¤" -"āĻ†āĻĒāĻ¨āĻžāĻ° āĻ›āĻžāĻ¤ā§āĻ°āĻĻā§‡āĻ°āĻ“ \\[āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒāĻžāĻ āĻžāĻ¤ā§‡\\] āĻ–ā§āĻŦ āĻ¸ā§āĻŦāĻžāĻ—āĻ¤ āĻœāĻžāĻ¨āĻžāĻ‡[2](https://" -"github.com/google/comprehensive-rust/discussions/100)" +"āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ \\[āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§āĻ¨\\] [1](https://github.com/google/comprehensive-rust/" +"discussions/86) āĻĒāĻ°ā§‡ āĻ¯āĻžāĻ¤ā§‡ āĻ†āĻŽāĻ°āĻž āĻ‰āĻ¨ā§āĻ¨āĻ¤āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋā§ˇ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§€ āĻ­āĻžāĻ˛ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ " +"āĻ‰āĻ¤ā§āĻ¤āĻŽ āĻ•ā§€ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¤āĻž āĻ†āĻŽāĻ°āĻž āĻļā§āĻ¨āĻ¤ā§‡ āĻšāĻžāĻ‡ āĨ¤āĻ†āĻĒāĻ¨āĻžāĻ° āĻ›āĻžāĻ¤ā§āĻ°āĻĻā§‡āĻ°āĻ“ \\[āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž " +"āĻĒāĻžāĻ āĻžāĻ¤ā§‡\\] āĻ–ā§āĻŦ āĻ¸ā§āĻŦāĻžāĻ—āĻ¤ āĻœāĻžāĻ¨āĻžāĻ‡[2](https://github.com/google/comprehensive-rust/" +"discussions/100)" #: src/running-the-course/course-structure.md:5 msgid "The course is fast paced and covers a lot of ground:" @@ -1314,16 +1274,14 @@ msgid "Day 1: Basic Rust, syntax, control flow, creating and consuming values." msgstr "" #: src/running-the-course/course-structure.md:8 -#, fuzzy msgid "" -"Day 2: Memory management, ownership, compound data types, and the standard " -"library." -msgstr "āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ āĻĻāĻŋāĻ¨āĻƒ āĻ¯ā§ŒāĻ—āĻŋāĻ• āĻĄā§‡āĻŸāĻž āĻŸāĻžāĻ‡āĻĒāĻ¸, āĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨ āĻŽā§āĻ¯āĻžāĻšāĻŋāĻ‚, āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĨ¤" +"Day 2: Memory management, ownership, compound data types, and the standard library." +msgstr "" +"āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ āĻĻāĻŋāĻ¨āĻƒ āĻŽā§‡āĻŽā§‹āĻ°āĻŋ āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻŽā§‡āĻ¨ā§āĻŸ, āĻŽāĻžāĻ˛āĻŋāĻ•āĻžāĻ¨āĻž, āĻ•āĻŽā§āĻĒāĻžāĻ‰āĻ¨ā§āĻĄ āĻĄā§‡āĻŸāĻž āĻŸāĻžāĻ‡āĻĒāĻ¸, āĻāĻŦāĻ‚ āĻĻāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĨ¤" #: src/running-the-course/course-structure.md:9 -#, fuzzy msgid "Day 3: Generics, traits, error handling, testing, and unsafe Rust." -msgstr "āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻĻāĻŋāĻ¨āĻƒ Traits āĻāĻŦāĻ‚ Generics, āĻāĻ°āĻ° āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻŋāĻ‚, āĻŸā§‡āĻ¸ā§āĻŸāĻŋāĻ‚, āĻ…āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻ°āĻžāĻ¸ā§āĻŸāĨ¤" +msgstr "āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻĻāĻŋāĻ¨āĻƒ Traits āĻāĻŦāĻ‚ Generics, āĻāĻ°āĻ° āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻŋāĻ‚, āĻŸā§‡āĻ¸ā§āĻŸāĻŋāĻ‚, āĻāĻŦāĻ‚ āĻ…āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻ°āĻžāĻ¸ā§āĻŸāĨ¤" #: src/running-the-course/course-structure.md:11 msgid "Deep Dives" @@ -1331,102 +1289,88 @@ msgstr "āĻ—āĻ­ā§€āĻ° āĻĄā§āĻŦ" #: src/running-the-course/course-structure.md:13 msgid "" -"In addition to the 3-day class on Rust Fundamentals, we cover some more " -"specialized topics:" -msgstr "" -"āĻ°āĻžāĻ¸ā§āĻŸ āĻĢāĻžāĻ¨ā§āĻĄāĻžāĻŽā§‡āĻ¨ā§āĻŸāĻžāĻ˛ā§‡āĻ° ā§Š āĻĻāĻŋāĻ¨ā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ¸ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻ†āĻŽāĻ°āĻž āĻ†āĻ°āĻ“ āĻ•āĻŋāĻ›ā§ āĻŦāĻŋāĻļā§‡āĻˇ āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻŋāĻƒ" +"In addition to the 3-day class on Rust Fundamentals, we cover some more specialized " +"topics:" +msgstr "āĻ°āĻžāĻ¸ā§āĻŸ āĻĢāĻžāĻ¨ā§āĻĄāĻžāĻŽā§‡āĻ¨ā§āĻŸāĻžāĻ˛ā§‡āĻ° ā§Š āĻĻāĻŋāĻ¨ā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ¸ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻ†āĻŽāĻ°āĻž āĻ†āĻ°āĻ“ āĻ•āĻŋāĻ›ā§ āĻŦāĻŋāĻļā§‡āĻˇ āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻŋāĻƒ" #: src/running-the-course/course-structure.md:16 -#, fuzzy msgid "Rust in Android" -msgstr "Android" +msgstr "āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄā§‡ āĻ°āĻžāĻ¸ā§āĻŸ" #: src/running-the-course/course-structure.md:18 -#, fuzzy msgid "" -"The [Rust in Android](../android.md) deep dive is a half-day course on using " -"Rust for Android platform development. This includes interoperability with " -"C, C++, and Java." +"The [Rust in Android](../android.md) deep dive is a half-day course on using Rust for " +"Android platform development. This includes interoperability with C, C++, and Java." msgstr "" -"[Android Deep Dive](../android.md) āĻšāĻ˛ Rust āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ…āĻ°ā§āĻ§-āĻĻāĻŋāĻ¨ā§‡āĻ° " -"āĻ•ā§‹āĻ°ā§āĻ¸ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨āĨ¤ āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ C, C++, āĻāĻŦāĻ‚ āĻāĻ° āĻ¸āĻžāĻĨā§‡ " -"āĻ†āĻ¨ā§āĻ¤āĻƒāĻ•āĻžāĻ°ā§āĻ¯āĻ¯ā§‹āĻ—ā§āĻ¯āĻ¤āĻž Java." +"[āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄā§‡ āĻ°āĻžāĻ¸ā§āĻŸ](../android.md) āĻšāĻ˛ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻŽā§‡āĻ¨ā§āĻŸ āĻāĻ° āĻœāĻ¨ā§āĻ¯ Rust āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° " +"āĻ•āĻ°āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ°ā§āĻ§-āĻĻāĻŋāĻ¨ā§‡āĻ° āĻ•ā§‹āĻ°ā§āĻ¸āĨ¤ āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ C, C++, āĻāĻŦāĻ‚ Java āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ†āĻ¨ā§āĻ¤āĻƒāĻ•āĻžāĻ°ā§āĻ¯āĻ¯ā§‹āĻ—ā§āĻ¯āĻ¤āĻžāĨ¤" #: src/running-the-course/course-structure.md:22 msgid "" -"You will need an [AOSP checkout](https://source.android.com/docs/setup/" -"download/downloading). Make a checkout of the [course repository](https://" -"github.com/google/comprehensive-rust) on the same machine and move the `src/" -"android/` directory into the root of your AOSP checkout. This will ensure " -"that the Android build system sees the `Android.bp` files in `src/android/`." +"You will need an [AOSP checkout](https://source.android.com/docs/setup/download/" +"downloading). Make a checkout of the [course repository](https://github.com/google/" +"comprehensive-rust) on the same machine and move the `src/android/` directory into the " +"root of your AOSP checkout. This will ensure that the Android build system sees the " +"`Android.bp` files in `src/android/`." msgstr "" -"āĻ†āĻĒāĻ¨āĻžāĻ° āĻāĻ•āĻŸāĻŋ \\[AOSP āĻšā§‡āĻ•āĻ†āĻ‰āĻŸ\\] āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡ [1](https://source.android.com/docs/" -"setup/download/downloading)ā§ˇ āĻāĻ•āĻŸāĻŋ āĻšā§‡āĻ•āĻ†āĻ‰āĻŸ āĻ•āĻ°ā§āĻ¨ \\[āĻ•ā§‹āĻ°ā§āĻ¸ āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋ [2](https://" -"github.com/google/comprehensive-rust) āĻāĻ•āĻ‡ āĻŽā§‡āĻļāĻŋāĻ¨ā§‡ āĻāĻŦāĻ‚ `src/android/` āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ " -"āĻ¸āĻ°āĻžāĻ¨ āĻ†āĻĒāĻ¨āĻžāĻ° AOSP āĻšā§‡āĻ•āĻ†āĻ‰āĻŸā§‡āĻ° āĻŽā§‚āĻ˛ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡āĨ¤ āĻāĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ " -"āĻ•āĻ°āĻŦā§‡ `src/android/`\\-āĻ `Android.bp` āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–ā§āĻ¨āĨ¤" +"āĻ†āĻĒāĻ¨āĻžāĻ° āĻāĻ•āĻŸāĻŋ \\[AOSP āĻšā§‡āĻ•āĻ†āĻ‰āĻŸ\\] āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡ [1](https://source.android.com/docs/setup/" +"download/downloading)ā§ˇ āĻāĻ•āĻŸāĻŋ āĻšā§‡āĻ•āĻ†āĻ‰āĻŸ āĻ•āĻ°ā§āĻ¨ \\[āĻ•ā§‹āĻ°ā§āĻ¸ āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋ [2](https://github.com/google/" +"comprehensive-rust) āĻāĻ•āĻ‡ āĻŽā§‡āĻļāĻŋāĻ¨ā§‡ āĻāĻŦāĻ‚ `src/android/` āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ āĻ¸āĻ°āĻžāĻ¨ āĻ†āĻĒāĻ¨āĻžāĻ° AOSP āĻšā§‡āĻ•āĻ†āĻ‰āĻŸā§‡āĻ° āĻŽā§‚āĻ˛ " +"āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡āĨ¤ āĻāĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻŦā§‡ `src/android/`\\-āĻ `Android.bp` " +"āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–ā§āĻ¨āĨ¤" #: src/running-the-course/course-structure.md:27 msgid "" -"Ensure that `adb sync` works with your emulator or real device and pre-build " -"all Android examples using `src/android/build_all.sh`. Read the script to " -"see the commands it runs and make sure they work when you run them by hand." +"Ensure that `adb sync` works with your emulator or real device and pre-build all " +"Android examples using `src/android/build_all.sh`. Read the script to see the commands " +"it runs and make sure they work when you run them by hand." msgstr "" -"āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ `adb āĻ¸āĻŋāĻ™ā§āĻ•` āĻ†āĻĒāĻ¨āĻžāĻ° āĻāĻŽā§āĻ˛ā§‡āĻŸāĻ° āĻŦāĻž āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ " -"Android āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛ā§‹ āĻĒā§āĻ°āĻŋ-āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āĻ°ā§āĻ¨ `src/android/build_all.sh` āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĨ¤āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ " -"āĻĒāĻĄāĻŧā§āĻ¨ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻ¯ā§‡āĻ—ā§āĻ˛ā§‹ āĻāĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻ–āĻ¨ āĻ¤āĻžāĻĻā§‡āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ¨ " -"āĻ¤āĻ–āĻ¨ āĻ¤āĻžāĻ°āĻž āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤" +"āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ `adb āĻ¸āĻŋāĻ™ā§āĻ•` āĻ†āĻĒāĻ¨āĻžāĻ° āĻāĻŽā§āĻ˛ā§‡āĻŸāĻ° āĻŦāĻž āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ Android " +"āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛ā§‹ āĻĒā§āĻ°āĻŋ-āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āĻ°ā§āĻ¨ `src/android/build_all.sh` āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĨ¤āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻĒāĻĄāĻŧā§āĻ¨ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻā§‡āĻ–āĻ¤ā§‡ " +"āĻ¯ā§‡āĻ—ā§āĻ˛ā§‹ āĻāĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻ–āĻ¨ āĻ¤āĻžāĻĻā§‡āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ¨ āĻ¤āĻ–āĻ¨ āĻ¤āĻžāĻ°āĻž āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤" #: src/running-the-course/course-structure.md:34 -#, fuzzy msgid "Bare-Metal Rust" -msgstr "Bare-Metal" +msgstr "Bare-Metal Rust" #: src/running-the-course/course-structure.md:36 -#, fuzzy msgid "" -"The [Bare-Metal Rust](../bare-metal.md) deep dive is a full day class on " -"using Rust for bare-metal (embedded) development. Both microcontrollers and " -"application processors are covered." +"The [Bare-Metal Rust](../bare-metal.md) deep dive is a full day class on using Rust for " +"bare-metal (embedded) development. Both microcontrollers and application processors are " +"covered." msgstr "" -"[Bare-Metal Deep Dive](../bare-metal.md): Rust āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ bare-metal " -"(embedded) āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹ āĻĻāĻŋāĻ¨ā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ¸āĨ¤ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ° āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ " -"āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ° āĻ‰āĻ­āĻ¯āĻŧāĻ‡ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤" +"[Bare-Metal Rust](../bare-metal.md): Rust āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ bare-metal (embedded) āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻŽā§‡āĻ¨ā§āĻŸ " +"āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹ āĻĻāĻŋāĻ¨ā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ¸āĨ¤ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ° āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ° āĻ‰āĻ­āĻ¯āĻŧāĻ‡ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤" #: src/running-the-course/course-structure.md:40 msgid "" -"For the microcontroller part, you will need to buy the [BBC micro:bit]" -"(https://microbit.org/) v2 development board ahead of time. Everybody will " -"need to install a number of packages as described on the [welcome page](../" -"bare-metal.md)." +"For the microcontroller part, you will need to buy the [BBC micro:bit](https://microbit." +"org/) v2 development board ahead of time. Everybody will need to install a number of " +"packages as described on the [welcome page](../bare-metal.md)." msgstr "" -"āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ° āĻ…āĻ‚āĻļā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻ†āĻ—ā§‡ āĻ•āĻŋāĻ¨āĻ¤ā§‡ āĻšāĻŦā§‡ [BBC micro:bit](https://" -"microbit.org/) v2 āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻŦā§‹āĻ°ā§āĻĄāĨ¤ āĻ¸āĻŦāĻžāĻ‡āĻ•ā§‡ [welcome page](../bare-metal.md) āĻ " -"āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤" +"āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ° āĻ…āĻ‚āĻļā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻ†āĻ—ā§‡ āĻ•āĻŋāĻ¨āĻ¤ā§‡ āĻšāĻŦā§‡ [BBC micro:bit](https://microbit." +"org/) v2 āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻŦā§‹āĻ°ā§āĻĄāĨ¤ āĻ¸āĻŦāĻžāĻ‡āĻ•ā§‡ [welcome page](../bare-metal.md) āĻ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ " +"āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤" #: src/running-the-course/course-structure.md:45 -#, fuzzy msgid "Concurrency in Rust" -msgstr "Concurrency: āĻŦāĻŋāĻ•āĻžāĻ˛" +msgstr "Concurrency in Rust" #: src/running-the-course/course-structure.md:47 -#, fuzzy msgid "" -"The [Concurrency in Rust](../concurrency.md) deep dive is a full day class " -"on classical as well as `async`/`await` concurrency." +"The [Concurrency in Rust](../concurrency.md) deep dive is a full day class on classical " +"as well as `async`/`await` concurrency." msgstr "" -"The [Concurrency Deep Dive](../concurrency.md) āĻ•ā§āĻ˛āĻžāĻ¸āĻŋāĻ•ā§āĻ¯āĻžāĻ˛ā§‡āĻ° āĻ‰āĻĒāĻ° āĻĒā§āĻ°ā§‹ āĻĻāĻŋāĻ¨ā§‡āĻ° " -"āĻ•ā§āĻ˛āĻžāĻ¸ āĻ¸ā§‡āĻ‡āĻ¸āĻžāĻĨā§‡ `async`/`await` concurrency." +"[Concurrency in Rust](../concurrency.md) āĻĄāĻŋāĻĒ āĻĄāĻžāĻ‡āĻ­ āĻ•ā§āĻ˛āĻžāĻ¸āĻŋāĻ•ā§āĻ¯āĻžāĻ˛ā§‡āĻ° āĻ‰āĻĒāĻ° āĻĒā§āĻ°ā§‹ āĻĻāĻŋāĻ¨ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ " +"āĻ¸ā§‡āĻ‡āĻ¸āĻžāĻĨā§‡ `async`/`await` concurrency." #: src/running-the-course/course-structure.md:50 msgid "" -"You will need a fresh crate set up and the dependencies downloaded and ready " -"to go. You can then copy/paste the examples into `src/main.rs` to experiment " -"with them:" +"You will need a fresh crate set up and the dependencies downloaded and ready to go. You " +"can then copy/paste the examples into `src/main.rs` to experiment with them:" msgstr "" -"āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ•ā§āĻ°ā§‡āĻŸ āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻž āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ " -"āĻšāĻ“āĻ¯āĻŧāĻžāĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ†āĻĒāĻ¨āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ `src/main.rs`\\-āĻ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛ā§‹ āĻ•āĻĒāĻŋ/āĻĒā§‡āĻ¸ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ " -"āĻĒāĻžāĻ°ā§‡āĻ¨:" +"āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ•ā§āĻ°ā§‡āĻŸ āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻž āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻšāĻ“āĻ¯āĻŧāĻžāĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° " +"āĻ†āĻĒāĻ¨āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ `src/main.rs`\\-āĻ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛ā§‹ āĻ•āĻĒāĻŋ/āĻĒā§‡āĻ¸ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨:" #: src/running-the-course/course-structure.md:54 msgid "" @@ -1450,11 +1394,11 @@ msgstr "āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸" #: src/running-the-course/course-structure.md:63 msgid "" -"The course is meant to be very interactive and we recommend letting the " -"questions drive the exploration of Rust!" +"The course is meant to be very interactive and we recommend letting the questions drive " +"the exploration of Rust!" msgstr "" -"āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻ–ā§āĻŦ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°ā§‡āĻ•ā§āĻŸāĻŋāĻ­ āĻšāĻ¤ā§‡ āĻŦā§‹āĻāĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°āĻ›āĻŋ āĻĒā§āĻ°āĻļā§āĻ¨āĻ—ā§āĻ˛ā§‹ " -"Rust āĻāĻ° āĻ…āĻ¨ā§āĻŦā§‡āĻˇāĻŖ āĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°ā§āĻ•!" +"āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻ–ā§āĻŦ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°ā§‡āĻ•ā§āĻŸāĻŋāĻ­ āĻšāĻ¤ā§‡ āĻŦā§‹āĻāĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°āĻ›āĻŋ āĻĒā§āĻ°āĻļā§āĻ¨āĻ—ā§āĻ˛ā§‹ Rust āĻāĻ° " +"āĻ…āĻ¨ā§āĻŦā§‡āĻˇāĻŖ āĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°ā§āĻ•!" #: src/running-the-course/keyboard-shortcuts.md:3 msgid "There are several useful keyboard shortcuts in mdBook:" @@ -1494,112 +1438,98 @@ msgstr ": Activate the search bar." #: src/running-the-course/translations.md:3 msgid "" -"The course has been translated into other languages by a set of wonderful " -"volunteers:" -msgstr "āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻŦāĻŋāĻ¸ā§āĻŽāĻ¯āĻŧāĻ•āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻŸ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¸ā§āĻŦā§‡āĻšā§āĻ›āĻžāĻ¸ā§‡āĻŦāĻ•:" +"The course has been translated into other languages by a set of wonderful volunteers:" +msgstr "āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻŦāĻŋāĻ¸ā§āĻŽāĻ¯āĻŧāĻ•āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻŸ āĻ¸ā§āĻŦā§‡āĻšā§āĻ›āĻžāĻ¸ā§‡āĻŦāĻ• āĻĻā§āĻŦāĻžāĻ°āĻž āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĻƒ" #: src/running-the-course/translations.md:6 -#, fuzzy msgid "" -"[Brazilian Portuguese](https://google.github.io/comprehensive-rust/pt-BR/) " -"by [@rastringer](https://github.com/rastringer), [@hugojacob](https://github." -"com/hugojacob), [@joaovicmendes](https://github.com/joaovicmendes) and " -"[@henrif75](https://github.com/henrif75)." +"[Brazilian Portuguese](https://google.github.io/comprehensive-rust/pt-BR/) by " +"[@rastringer](https://github.com/rastringer), [@hugojacob](https://github.com/" +"hugojacob), [@joaovicmendes](https://github.com/joaovicmendes) and [@henrif75](https://" +"github.com/henrif75)." msgstr "" -"[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol]" -"(https://github.com/raselmandol)" +"[Brazilian Portuguese](https://google.github.io/comprehensive-rust/pt-BR/) by " +"[@rastringer](https://github.com/rastringer), [@hugojacob](https://github.com/" +"hugojacob), [@joaovicmendes](https://github.com/joaovicmendes) and [@henrif75](https://" +"github.com/henrif75)." #: src/running-the-course/translations.md:7 -#, fuzzy msgid "" -"[Korean](https://google.github.io/comprehensive-rust/ko/) by [@keispace]" -"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp) and " -"[@jooyunghan](https://github.com/jooyunghan)." +"[Korean](https://google.github.io/comprehensive-rust/ko/) by [@keispace](https://github." +"com/keispace), [@jiyongp](https://github.com/jiyongp) and [@jooyunghan](https://github." +"com/jooyunghan)." msgstr "" -"[Brazilian Portuguese](https://google.github.io/comprehensive-rust/pt-BR/) " -"by [@rastringer](https://github.com/rastringer) and [@hugojacob](https://" -"github.com/hugojacob).\n" -"\n" -"[Korean](https://google.github.io/comprehensive-rust/ko/) by [@keispace]" -"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp) and " -"[@jooyunghan](https://github.com/jooyunghan)." +"[Korean](https://google.github.io/comprehensive-rust/ko/) by [@keispace](https://github." +"com/keispace), [@jiyongp](https://github.com/jiyongp) and [@jooyunghan](https://github." +"com/jooyunghan)." #: src/running-the-course/translations.md:9 -msgid "" -"Use the language picker in the top-right corner to switch between languages." +msgid "Use the language picker in the top-right corner to switch between languages." msgstr "āĻ­āĻžāĻˇāĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸ā§āĻ¯ā§āĻ‡āĻš āĻ•āĻ°āĻ¤ā§‡ āĻ‰āĻĒāĻ°ā§‡āĻ°-āĻĄāĻžāĻ¨ āĻ•ā§‹āĻŖā§‡ āĻ­āĻžāĻˇāĻž āĻšāĻ¯āĻŧāĻ¨āĻ•āĻžāĻ°ā§€ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§āĻ¨āĨ¤" #: src/running-the-course/translations.md:11 -#, fuzzy msgid "Incomplete Translations" -msgstr "āĻ…āĻ¨ā§āĻŦāĻžāĻĻ" +msgstr "āĻ…āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ…āĻ¨ā§āĻŦāĻžāĻĻ" #: src/running-the-course/translations.md:13 msgid "" -"There is a large number of in-progress translations. We link to the most " -"recently updated translations:" -msgstr "" +"There is a large number of in-progress translations. We link to the most recently " +"updated translations:" +msgstr "āĻĒā§āĻ°āĻšā§āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻ• āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻšāĻ˛āĻ›ā§‡āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ¸āĻžāĻŽā§āĻĒā§āĻ°āĻ¤āĻŋāĻ• āĻ†āĻĒāĻĄā§‡āĻŸ āĻšāĻ“āĻ¯āĻŧāĻž āĻ…āĻ¨ā§āĻŦāĻžāĻĻāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ˛āĻŋāĻ™ā§āĻ• āĻ•āĻ°āĻŋāĻƒ" #: src/running-the-course/translations.md:16 -#, fuzzy msgid "" -"[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol]" -"(https://github.com/raselmandol)." +"[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol](https://" +"github.com/raselmandol)." msgstr "" -"[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol]" -"(https://github.com/raselmandol)" +"[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol](https://" +"github.com/raselmandol)" #: src/running-the-course/translations.md:17 -#, fuzzy msgid "" -"[French](https://google.github.io/comprehensive-rust/fr/) by [@KookaS]" -"(https://github.com/KookaS) and [@vcaen](https://github.com/vcaen)." +"[French](https://google.github.io/comprehensive-rust/fr/) by [@KookaS](https://github." +"com/KookaS) and [@vcaen](https://github.com/vcaen)." msgstr "" -"[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol]" -"(https://github.com/raselmandol)" +"[French](https://google.github.io/comprehensive-rust/fr/) by [@KookaS](https://github." +"com/KookaS) and [@vcaen](https://github.com/vcaen)" #: src/running-the-course/translations.md:18 -#, fuzzy msgid "" -"[German](https://google.github.io/comprehensive-rust/de/) by [@Throvn]" -"(https://github.com/Throvn) and [@ronaldfw](https://github.com/ronaldfw)." +"[German](https://google.github.io/comprehensive-rust/de/) by [@Throvn](https://github." +"com/Throvn) and [@ronaldfw](https://github.com/ronaldfw)." msgstr "" -"[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol]" -"(https://github.com/raselmandol)" +"[German](https://google.github.io/comprehensive-rust/de/) by [@Throvn](https://github." +"com/Throvn) and [@ronaldfw](https://github.com/ronaldfw)." #: src/running-the-course/translations.md:19 -#, fuzzy msgid "" -"[Japanese](https://google.github.io/comprehensive-rust/ja/) by [@CoinEZ-JPN]" -"(https://github.com/CoinEZ) and [@momotaro1105](https://github.com/" -"momotaro1105)." +"[Japanese](https://google.github.io/comprehensive-rust/ja/) by [@CoinEZ-JPN](https://" +"github.com/CoinEZ) and [@momotaro1105](https://github.com/momotaro1105)." msgstr "" -"[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol]" -"(https://github.com/raselmandol)" +"[Japanese](https://google.github.io/comprehensive-rust/ja/) by [@CoinEZ-JPN](https://" +"github.com/CoinEZ) and [@momotaro1105](https://github.com/momotaro1105)." #: src/running-the-course/translations.md:21 msgid "" -"If you want to help with this effort, please see [our instructions](https://" -"github.com/google/comprehensive-rust/blob/main/TRANSLATIONS.md) for how to " -"get going. Translations are coordinated on the [issue tracker](https://" -"github.com/google/comprehensive-rust/issues/282)." +"If you want to help with this effort, please see [our instructions](https://github.com/" +"google/comprehensive-rust/blob/main/TRANSLATIONS.md) for how to get going. Translations " +"are coordinated on the [issue tracker](https://github.com/google/comprehensive-rust/" +"issues/282)." msgstr "" -"āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻ‡ āĻĒā§āĻ°āĻšā§‡āĻˇā§āĻŸāĻžāĻ¯āĻŧ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¨, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ " -"\\[āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€\\] āĻĻā§‡āĻ–ā§āĻ¨ āĨ¤ āĻ…āĻ¨ā§āĻŦāĻžāĻĻāĻ—ā§āĻ˛āĻŋ \\[āĻ‡āĻ¸ā§āĻ¯ā§ āĻŸā§āĻ°ā§āĻ¯āĻžāĻ•āĻžāĻ°\\] āĻ āĻ¸āĻŽāĻ¨ā§āĻŦāĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤" +"āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻ‡ āĻĒā§āĻ°āĻšā§‡āĻˇā§āĻŸāĻžāĻ¯āĻŧ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¨, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ \\[āĻ†āĻŽāĻžāĻĻā§‡āĻ° " +"āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€\\] āĻĻā§‡āĻ–ā§āĻ¨ āĨ¤ āĻ…āĻ¨ā§āĻŦāĻžāĻĻāĻ—ā§āĻ˛āĻŋ \\[āĻ‡āĻ¸ā§āĻ¯ā§ āĻŸā§āĻ°ā§āĻ¯āĻžāĻ•āĻžāĻ°\\] āĻ āĻ¸āĻŽāĻ¨ā§āĻŦāĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤" #: src/cargo.md:3 msgid "" -"When you start reading about Rust, you will soon meet [Cargo](https://doc." -"rust-lang.org/cargo/), the standard tool used in the Rust ecosystem to build " -"and run Rust applications. Here we want to give a brief overview of what " -"Cargo is and how it fits into the wider ecosystem and how it fits into this " -"training." +"When you start reading about Rust, you will soon meet [Cargo](https://doc.rust-lang.org/" +"cargo/), the standard tool used in the Rust ecosystem to build and run Rust " +"applications. Here we want to give a brief overview of what Cargo is and how it fits " +"into the wider ecosystem and how it fits into this training." msgstr "" -"āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻ–āĻ¨ Rust āĻ¸āĻŽā§āĻŦāĻ¨ā§āĻ§ā§‡ āĻĒāĻĄāĻŧāĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻŦā§‡āĻ¨, āĻ†āĻĒāĻ¨āĻŋ āĻļā§€āĻ˜ā§āĻ°āĻ‡ [āĻ•āĻžāĻ°ā§āĻ—ā§‹](https://doc.rust-lang." -"org/cargo/) āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻĻā§‡āĻ–āĻž āĻ•āĻ°āĻŦā§‡āĻ¨, āĻāĻ•āĻŸāĻŋ āĻ†āĻĻāĻ°ā§āĻļ āĻŸā§āĻ˛ āĻ¯āĻž Rust āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻāĻŦāĻ‚ " -"āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ Rust āĻ‡āĻ•ā§‹āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻšāĻžāĻ‡ āĻ•āĻžāĻ°ā§āĻ—ā§‹ āĻ•ā§€ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ " -"āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻŦā§ƒāĻšāĻ¤ā§āĻ¤āĻ° āĻ‡āĻ•ā§‹āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻĢāĻŋāĻŸ āĻ•āĻ°ā§‡ āĻ¤āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻĻāĻŋāĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻāĻŸāĻŋ " -"āĻāĻ‡ āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻŖā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ–āĻžāĻĒ āĻ–āĻžāĻ¯āĻŧāĨ¤" +"āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻ–āĻ¨ Rust āĻ¸āĻŽā§āĻŦāĻ¨ā§āĻ§ā§‡ āĻĒāĻĄāĻŧāĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻŦā§‡āĻ¨, āĻ†āĻĒāĻ¨āĻŋ āĻļā§€āĻ˜ā§āĻ°āĻ‡ [āĻ•āĻžāĻ°ā§āĻ—ā§‹](https://doc.rust-lang.org/cargo/) " +"āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻĻā§‡āĻ–āĻž āĻ•āĻ°āĻŦā§‡āĻ¨, āĻāĻ•āĻŸāĻŋ āĻ†āĻĻāĻ°ā§āĻļ āĻŸā§āĻ˛ āĻ¯āĻž Rust āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻāĻŦāĻ‚ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ Rust " +"āĻ‡āĻ•ā§‹āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻšāĻžāĻ‡ āĻ•āĻžāĻ°ā§āĻ—ā§‹ āĻ•ā§€ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻŦā§ƒāĻšāĻ¤ā§āĻ¤āĻ° āĻ‡āĻ•ā§‹āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻĢāĻŋāĻŸ āĻ•āĻ°ā§‡ " +"āĻ¤āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻĻāĻŋāĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻāĻŸāĻŋ āĻāĻ‡ āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻŖā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ–āĻžāĻĒ āĻ–āĻžāĻ¯āĻŧāĨ¤" #: src/cargo.md:8 msgid "Installation" @@ -1610,177 +1540,159 @@ msgid "**Please follow the instructions on .**" msgstr "" #: src/cargo.md:12 -#, fuzzy msgid "" -"This will give you the Cargo build tool (`cargo`) and the Rust compiler " -"(`rustc`). You will also get `rustup`, a command line utility that you can " -"use to install/switch toolchains, setup cross compilation, etc." +"This will give you the Cargo build tool (`cargo`) and the Rust compiler (`rustc`). You " +"will also get `rustup`, a command line utility that you can use to install/switch " +"toolchains, setup cross compilation, etc." msgstr "" -"Cargo āĻāĻŦāĻ‚ rustc āĻāĻ° āĻ¸āĻžāĻĨā§‡, Rustup āĻ¨āĻŋāĻœā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻ‡āĻ¨ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ " -"āĻ•āĻ°āĻŦā§‡ āĻ¯āĻž āĻ†āĻĒāĻ¨āĻŋ āĻŸā§āĻ˛āĻšā§‡āĻ‡āĻ¨ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛/āĻ¸ā§āĻ‡āĻš, āĻ¸ā§‡āĻŸāĻ†āĻĒ āĻ•ā§āĻ°āĻ¸ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ā§‡āĻļāĻ¨ āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ " -"āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤" #: src/cargo.md:16 -#, fuzzy 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 " -"command would be:" +"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 command would be:" msgstr "" -"Debian/Ubuntu āĻ¤ā§‡, āĻ†āĻĒāĻ¨āĻŋ Cargo, Rust āĻ¸ā§‹āĻ°ā§āĻ¸ āĻāĻŦāĻ‚ [Rust formatter](https://github." -"com/rust-lang/rustfmt) āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨" #: src/cargo.md:18 -#, fuzzy msgid "" "```shell\n" "sudo apt install cargo rust-src rustfmt\n" "```" msgstr "" "```shell\n" -"$ sudo apt install cargo rust-src rustfmt\n" +"sudo apt install cargo rust-src rustfmt\n" "```" #: src/cargo.md:22 #, fuzzy msgid "" -"We suggest using [VS Code](https://code.visualstudio.com/) to edit the code " -"(but any LSP compatible editor works with rust-analyzer[3](https://rust-" -"analyzer.github.io/))." +"We suggest using [VS Code](https://code.visualstudio.com/) to edit the code (but any " +"LSP compatible editor works with rust-analyzer[3](https://rust-analyzer.github.io/))." msgstr "" -"āĻāĻŸāĻŋ \\[rust-analyzer\\] \\[1\\] āĻ•ā§‡ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧ āĻ¯ā§‡āĻ¤ā§‡ āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻŦā§‡āĨ¤ āĻ†āĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° " -"āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ‡ [VS Code](https://code.visualstudio.com/) āĻ•ā§‹āĻĄ āĻāĻĄāĻŋāĻŸ āĻ•āĻ°āĻ¤ā§‡ (āĻ•āĻŋāĻ¨ā§āĻ¤ā§ " -"āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ LSP āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖ āĻāĻĄāĻŋāĻŸāĻ° āĻ•āĻžāĻœ āĻ•āĻ°ā§‡)āĨ¤" +"āĻāĻŸāĻŋ \\[rust-analyzer\\] \\[1\\] āĻ•ā§‡ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧ āĻ¯ā§‡āĻ¤ā§‡ āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻŦā§‡āĨ¤ āĻ†āĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ‡ " +"[VS Code](https://code.visualstudio.com/) āĻ•ā§‹āĻĄ āĻāĻĄāĻŋāĻŸ āĻ•āĻ°āĻ¤ā§‡ (āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ LSP āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖ " +"āĻāĻĄāĻŋāĻŸāĻ° āĻ•āĻžāĻœ āĻ•āĻ°ā§‡)āĨ¤" #: src/cargo.md:24 msgid "" -"Some folks also like to use the [JetBrains](https://www.jetbrains.com/" -"clion/) family of IDEs, which do their own analysis but have their own " -"tradeoffs. If you prefer them, you can install the [Rust Plugin](https://www." -"jetbrains.com/rust/). Please take note that as of January 2023 debugging " -"only works on the CLion version of the JetBrains IDEA suite." +"Some folks also like to use the [JetBrains](https://www.jetbrains.com/clion/) family of " +"IDEs, which do their own analysis but have their own tradeoffs. If you prefer them, you " +"can install the [Rust Plugin](https://www.jetbrains.com/rust/). Please take note that " +"as of January 2023 debugging only works on the CLion version of the JetBrains IDEA " +"suite." msgstr "" -"āĻ•āĻŋāĻ›ā§ āĻ˛ā§‹āĻ• IDE-āĻāĻ° āĻœāĻ¨ā§āĻ¯ [JetBrains](https://www.jetbrains.com/clion/) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ " -"āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āĻ°ā§‡, āĻ¯āĻžāĻ°āĻž āĻ¤āĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡ āĻ•āĻ°ā§‡ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻŸā§āĻ°ā§‡āĻĄāĻ…āĻĢ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ " -"āĻ¯āĻĻāĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āĻ°ā§‡āĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ [Rust Plugin](https://www.jetbrains.com/rust/) " -"āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻœāĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ°ā§€ 2023 āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€ āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° " -"JetBrains IDEA āĻ¸ā§āĻ¯ā§āĻŸā§‡āĻ° CLion āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤" +"āĻ•āĻŋāĻ›ā§ āĻ˛ā§‹āĻ• IDE-āĻāĻ° āĻœāĻ¨ā§āĻ¯ [JetBrains](https://www.jetbrains.com/clion/) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āĻ°ā§‡, " +"āĻ¯āĻžāĻ°āĻž āĻ¤āĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡ āĻ•āĻ°ā§‡ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻŸā§āĻ°ā§‡āĻĄāĻ…āĻĢ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āĻ°ā§‡āĻ¨ " +"āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ [Rust Plugin](https://www.jetbrains.com/rust/) āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ āĻŽāĻ¨ā§‡ " +"āĻ°āĻžāĻ–āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻœāĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ°ā§€ 2023 āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€ āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° JetBrains IDEA āĻ¸ā§āĻ¯ā§āĻŸā§‡āĻ° CLion āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤" #: src/cargo/rust-ecosystem.md:1 msgid "The Rust Ecosystem" msgstr "The Rust āĻāĻ° āĻ‡āĻ•ā§‹āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ" #: src/cargo/rust-ecosystem.md:3 -msgid "" -"The Rust ecosystem consists of a number of tools, of which the main ones are:" +msgid "The Rust ecosystem consists of a number of tools, of which the main ones are:" msgstr "The Rust ecosystem āĻ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒā§āĻ°āĻ§āĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻšāĻ˛:" #: src/cargo/rust-ecosystem.md:5 msgid "" -"`rustc`: the Rust compiler which turns `.rs` files into binaries and other " -"intermediate formats." +"`rustc`: the Rust compiler which turns `.rs` files into binaries and other intermediate " +"formats." msgstr "" -"`rustc`: Rust āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻ¯āĻž `.rs` āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻ•āĻ°ā§‡ " -"āĻŽāĻ§ā§āĻ¯āĻŦāĻ°ā§āĻ¤ā§€ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§‡āĨ¤" +"`rustc`: Rust āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻ¯āĻž `.rs` āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻ•āĻ°ā§‡ āĻŽāĻ§ā§āĻ¯āĻŦāĻ°ā§āĻ¤ā§€ " +"āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§‡āĨ¤" #: src/cargo/rust-ecosystem.md:8 #, fuzzy msgid "" -"`cargo`: the Rust dependency manager and build tool. Cargo knows how to " -"download dependencies, usually hosted on , and it will " -"pass them to `rustc` when building your project. Cargo also comes with a " -"built-in test runner which is used to execute unit tests." +"`cargo`: the Rust dependency manager and build tool. Cargo knows how to download " +"dependencies, usually hosted on , and it will pass them to `rustc` " +"when building your project. Cargo also comes with a built-in test runner which is used " +"to execute unit tests." msgstr "" -"`cargo`: Rust āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻž āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻžāĻ° āĻāĻŦāĻ‚ āĻŦāĻŋāĻ˛ā§āĻĄ āĻŸā§āĻ˛āĨ¤ Cargo āĻœāĻžāĻ¨ā§‡ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ \\-āĻ āĻšā§‹āĻ¸ā§āĻŸ āĻ•āĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻž āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒāĻžāĻ¸ āĻ•āĻ°āĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° " -"āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ `rustc` āĻ¤ā§‡āĨ¤ Cargo āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻŸā§‡āĻ¸ā§āĻŸ āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻ° āĻ¸āĻ™ā§āĻ—ā§‡ āĻ†āĻ¸ā§‡ " -"āĻ°āĻžāĻ¨āĻžāĻ° āĻ¯āĻž āĻ‡āĻ‰āĻ¨āĻŋāĻŸ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧāĨ¤" +"`cargo`: Rust āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻž āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻžāĻ° āĻāĻŦāĻ‚ āĻŦāĻŋāĻ˛ā§āĻĄ āĻŸā§āĻ˛āĨ¤ Cargo āĻœāĻžāĻ¨ā§‡ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ \\-āĻ " +"āĻšā§‹āĻ¸ā§āĻŸ āĻ•āĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻž āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒāĻžāĻ¸ āĻ•āĻ°āĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ " +"`rustc` āĻ¤ā§‡āĨ¤ Cargo āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻŸā§‡āĻ¸ā§āĻŸ āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻ° āĻ¸āĻ™ā§āĻ—ā§‡ āĻ†āĻ¸ā§‡ āĻ°āĻžāĻ¨āĻžāĻ° āĻ¯āĻž āĻ‡āĻ‰āĻ¨āĻŋāĻŸ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° " +"āĻœāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧāĨ¤" #: src/cargo/rust-ecosystem.md:13 msgid "" -"`rustup`: the Rust toolchain installer and updater. This tool is used to " -"install and update `rustc` and `cargo` when new versions of Rust is " -"released. In addition, `rustup` can also download documentation for the " -"standard library. You can have multiple versions of Rust installed at once " -"and `rustup` will let you switch between them as needed." +"`rustup`: the Rust toolchain installer and updater. This tool is used to install and " +"update `rustc` and `cargo` when new versions of Rust is released. In addition, `rustup` " +"can also download documentation for the standard library. You can have multiple " +"versions of Rust installed at once and `rustup` will let you switch between them as " +"needed." msgstr "" -"`rustup`: Rust āĻŸā§āĻ˛āĻšā§‡āĻ‡āĻ¨ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛āĻžāĻ° āĻāĻŦāĻ‚ āĻ†āĻĒāĻĄā§‡āĻŸāĻžāĻ°āĨ¤ āĻāĻ‡ āĻŸā§āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ Rust-āĻāĻ° āĻ¨āĻ¤ā§āĻ¨ " -"āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻĒā§āĻ°āĻ•āĻžāĻļāĻŋāĻ¤ āĻšāĻ˛ā§‡ `rustc` āĻāĻŦāĻ‚ `cargo` āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ“ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻ¤ā§‡āĨ¤ āĻ‰āĻĒāĻ°āĻ¨ā§āĻ¤ā§, `rustup` " -"āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄā§‡ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨āĻ“ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŦāĻžāĻ°ā§‡ Rust āĻāĻ° " -"āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻāĻŦāĻ‚ `āĻ°āĻ¸ā§āĻŸāĻ†āĻĒ` āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ " -"āĻ¸ā§āĻ¯ā§āĻ‡āĻš āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻŦā§‡āĨ¤" +"`rustup`: Rust āĻŸā§āĻ˛āĻšā§‡āĻ‡āĻ¨ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛āĻžāĻ° āĻāĻŦāĻ‚ āĻ†āĻĒāĻĄā§‡āĻŸāĻžāĻ°āĨ¤ āĻāĻ‡ āĻŸā§āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ Rust-āĻāĻ° āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ " +"āĻĒā§āĻ°āĻ•āĻžāĻļāĻŋāĻ¤ āĻšāĻ˛ā§‡ `rustc` āĻāĻŦāĻ‚ `cargo` āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ“ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻ¤ā§‡āĨ¤ āĻ‰āĻĒāĻ°āĻ¨ā§āĻ¤ā§, `rustup` āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄā§‡ " +"āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨āĻ“ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŦāĻžāĻ°ā§‡ Rust āĻāĻ° āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻāĻŦāĻ‚ " +"`āĻ°āĻ¸ā§āĻŸāĻ†āĻĒ` āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸ā§āĻ¯ā§āĻ‡āĻš āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻŦā§‡āĨ¤" #: src/cargo/rust-ecosystem.md:21 src/hello-world.md:25 #: src/hello-world/small-example.md:27 src/why-rust/runtime.md:10 #: src/why-rust/modern.md:21 src/basic-syntax/compound-types.md:30 -#: src/basic-syntax/references.md:23 -#: src/pattern-matching/destructuring-enums.md:35 +#: src/basic-syntax/references.md:23 src/pattern-matching/destructuring-enums.md:35 #: src/error-handling/try-operator.md:48 -#: src/error-handling/converting-error-types-example.md:50 -#: src/concurrency/threads.md:30 src/async/async-await.md:25 +#: src/error-handling/converting-error-types-example.md:50 src/concurrency/threads.md:30 +#: src/async/async-await.md:25 msgid "Key points:" msgstr "āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻĻāĻŋāĻ•:" #: src/cargo/rust-ecosystem.md:23 msgid "" -"Rust has a rapid release schedule with a new release coming out every six " -"weeks. New releases maintain backwards compatibility with old releases --- " -"plus they enable new functionality." +"Rust has a rapid release schedule with a new release coming out every six weeks. New " +"releases maintain backwards compatibility with old releases --- plus they enable new " +"functionality." msgstr "" #: src/cargo/rust-ecosystem.md:27 -msgid "" -"There are three release channels: \"stable\", \"beta\", and \"nightly\"." +msgid "There are three release channels: \"stable\", \"beta\", and \"nightly\"." msgstr "" #: src/cargo/rust-ecosystem.md:29 msgid "" -"New features are being tested on \"nightly\", \"beta\" is what becomes " -"\"stable\" every six weeks." +"New features are being tested on \"nightly\", \"beta\" is what becomes \"stable\" every " +"six weeks." msgstr "" #: src/cargo/rust-ecosystem.md:32 msgid "" -"Dependencies can also be resolved from alternative [registries](https://doc." -"rust-lang.org/cargo/reference/registries.html), git, folders, and more." +"Dependencies can also be resolved from alternative [registries](https://doc.rust-lang." +"org/cargo/reference/registries.html), git, folders, and more." msgstr "" #: src/cargo/rust-ecosystem.md:34 msgid "" -"Rust also has [editions](https://doc.rust-lang.org/edition-guide/): the " -"current edition is Rust 2021. Previous editions were Rust 2015 and Rust 2018." +"Rust also has [editions](https://doc.rust-lang.org/edition-guide/): the current edition " +"is Rust 2021. Previous editions were Rust 2015 and Rust 2018." msgstr "" #: src/cargo/rust-ecosystem.md:37 -msgid "" -"The editions are allowed to make backwards incompatible changes to the " -"language." +msgid "The editions are allowed to make backwards incompatible changes to the language." msgstr "" #: src/cargo/rust-ecosystem.md:40 msgid "" -"To prevent breaking code, editions are opt-in: you select the edition for " -"your crate via the `Cargo.toml` file." +"To prevent breaking code, editions are opt-in: you select the edition for your crate " +"via the `Cargo.toml` file." msgstr "" #: src/cargo/rust-ecosystem.md:43 msgid "" -"To avoid splitting the ecosystem, Rust compilers can mix code written for " -"different editions." +"To avoid splitting the ecosystem, Rust compilers can mix code written for different " +"editions." msgstr "" #: src/cargo/rust-ecosystem.md:46 msgid "" -"Mention that it is quite rare to ever use the compiler directly not through " -"`cargo` (most users never do)." +"Mention that it is quite rare to ever use the compiler directly not through `cargo` " +"(most users never do)." msgstr "" #: src/cargo/rust-ecosystem.md:48 msgid "" -"It might be worth alluding that Cargo itself is an extremely powerful and " -"comprehensive tool. It is capable of many advanced features including but " -"not limited to: " +"It might be worth alluding that Cargo itself is an extremely powerful and comprehensive " +"tool. It is capable of many advanced features including but not limited to: " msgstr "" #: src/cargo/rust-ecosystem.md:49 @@ -1796,26 +1708,21 @@ msgid "Dev Dependencies and Runtime Dependency management/caching" msgstr "" #: src/cargo/rust-ecosystem.md:52 -msgid "" -"[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts." -"html)" +msgid "[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts.html)" msgstr "" #: src/cargo/rust-ecosystem.md:53 -msgid "" -"[global installation](https://doc.rust-lang.org/cargo/commands/cargo-install." -"html)" +msgid "[global installation](https://doc.rust-lang.org/cargo/commands/cargo-install.html)" msgstr "" #: src/cargo/rust-ecosystem.md:54 msgid "" -"It is also extensible with sub command plugins as well (such as [cargo " -"clippy](https://github.com/rust-lang/rust-clippy))." +"It is also extensible with sub command plugins as well (such as [cargo clippy](https://" +"github.com/rust-lang/rust-clippy))." msgstr "" #: src/cargo/rust-ecosystem.md:55 -msgid "" -"Read more from the [official Cargo Book](https://doc.rust-lang.org/cargo/)" +msgid "Read more from the [official Cargo Book](https://doc.rust-lang.org/cargo/)" msgstr "" #: src/cargo/code-samples.md:1 @@ -1824,16 +1731,16 @@ msgstr "āĻāĻ‡ āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻŖā§‡ āĻ•ā§‹āĻĄ āĻ¨āĻŽā§āĻ¨āĻž" #: src/cargo/code-samples.md:3 msgid "" -"For this training, we will mostly explore the Rust language through examples " -"which can be executed through your browser. This makes the setup much easier " -"and ensures a consistent experience for everyone." +"For this training, we will mostly explore the Rust language through examples which can " +"be executed through your browser. This makes the setup much easier and ensures a " +"consistent experience for everyone." msgstr "" #: src/cargo/code-samples.md:7 msgid "" -"Installing Cargo is still encouraged: it will make it easier for you to do " -"the exercises. On the last day, we will do a larger exercise which shows you " -"how to work with dependencies and for that you need Cargo." +"Installing Cargo is still encouraged: it will make it easier for you to do the " +"exercises. On the last day, we will do a larger exercise which shows you how to work " +"with dependencies and for that you need Cargo." msgstr "" #: src/cargo/code-samples.md:11 @@ -1864,23 +1771,23 @@ msgstr " āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤" #: src/cargo/code-samples.md:24 msgid "" -"Most code samples are editable like shown above. A few code samples are not " -"editable for various reasons:" +"Most code samples are editable like shown above. A few code samples are not editable " +"for various reasons:" msgstr "" -"āĻŦā§‡āĻļāĻŋāĻ°āĻ­āĻžāĻ— āĻ•ā§‹āĻĄ āĻ¨āĻŽā§āĻ¨āĻž āĻ‰āĻĒāĻ°ā§‡ āĻĻā§‡āĻ–āĻžāĻ¨ā§‹ āĻŽāĻ¤ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻžāĻ¯ā§‹āĻ—ā§āĻ¯āĨ¤ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ•ā§‹āĻĄ āĻ¨āĻŽā§āĻ¨āĻž āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ•āĻžāĻ°āĻŖā§‡ " -"āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻžāĻ¯ā§‹āĻ—ā§āĻ¯ āĻ¨āĻ¯āĻŧ:" +"āĻŦā§‡āĻļāĻŋāĻ°āĻ­āĻžāĻ— āĻ•ā§‹āĻĄ āĻ¨āĻŽā§āĻ¨āĻž āĻ‰āĻĒāĻ°ā§‡ āĻĻā§‡āĻ–āĻžāĻ¨ā§‹ āĻŽāĻ¤ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻžāĻ¯ā§‹āĻ—ā§āĻ¯āĨ¤ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ•ā§‹āĻĄ āĻ¨āĻŽā§āĻ¨āĻž āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ•āĻžāĻ°āĻŖā§‡ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻžāĻ¯ā§‹āĻ—ā§āĻ¯ " +"āĻ¨āĻ¯āĻŧ:" #: src/cargo/code-samples.md:27 msgid "" -"The embedded playgrounds cannot execute unit tests. Copy-paste the code and " -"open it in the real Playground to demonstrate unit tests." +"The embedded playgrounds cannot execute unit tests. Copy-paste the code and open it in " +"the real Playground to demonstrate unit tests." msgstr "" #: src/cargo/code-samples.md:30 msgid "" -"The embedded playgrounds lose their state the moment you navigate away from " -"the page! This is the reason that the students should solve the exercises " -"using a local Rust installation or via the Playground." +"The embedded playgrounds lose their state the moment you navigate away from the page! " +"This is the reason that the students should solve the exercises using a local Rust " +"installation or via the Playground." msgstr "" #: src/cargo/running-locally.md:1 @@ -1889,11 +1796,11 @@ msgstr "Cargo āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ #: src/cargo/running-locally.md:3 msgid "" -"If you want to experiment with the code on your own system, then you will " -"need to first install Rust. Do this by following the [instructions in the " -"Rust Book](https://doc.rust-lang.org/book/ch01-01-installation.html). This " -"should give you a working `rustc` and `cargo`. At the time of writing, the " -"latest stable Rust release has these version numbers:" +"If you want to experiment with the code on your own system, then you will need to first " +"install Rust. Do this by following the [instructions in the Rust Book](https://doc.rust-" +"lang.org/book/ch01-01-installation.html). This should give you a working `rustc` and " +"`cargo`. At the time of writing, the latest stable Rust release has these version " +"numbers:" msgstr "" #: src/cargo/running-locally.md:8 @@ -1914,19 +1821,16 @@ msgstr "" "```" #: src/cargo/running-locally.md:15 -msgid "" -"You can use any later version too since Rust maintains backwards " -"compatibility." +msgid "You can use any later version too since Rust maintains backwards compatibility." msgstr "" #: src/cargo/running-locally.md:17 #, fuzzy msgid "" -"With this in place, follow these steps to build a Rust binary from one of " -"the examples in this training:" +"With this in place, follow these steps to build a Rust binary from one of the examples " +"in this training:" msgstr "" -"āĻāĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡, āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻ‡ āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻŖā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ Rust āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ " -"āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ \n" +"āĻāĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡, āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻ‡ āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻŖā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ Rust āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ \n" "āĻāĻ‡ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒāĻ—ā§āĻ˛āĻŋ āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻ•āĻ°ā§āĻ¨:" #: src/cargo/running-locally.md:20 @@ -1934,8 +1838,7 @@ msgid "Click the \"Copy to clipboard\" button on the example you want to copy." msgstr "" #: src/cargo/running-locally.md:22 -msgid "" -"Use `cargo new exercise` to create a new `exercise/` directory for your code:" +msgid "Use `cargo new exercise` to create a new `exercise/` directory for your code:" msgstr "" #: src/cargo/running-locally.md:24 @@ -1947,8 +1850,7 @@ msgid "" msgstr "" #: src/cargo/running-locally.md:29 -msgid "" -"Navigate into `exercise/` and use `cargo run` to build and run your binary:" +msgid "Navigate into `exercise/` and use `cargo run` to build and run your binary:" msgstr "" #: src/cargo/running-locally.md:31 @@ -1965,8 +1867,8 @@ msgstr "" #: src/cargo/running-locally.md:40 msgid "" -"Replace the boiler-plate code in `src/main.rs` with your own code. For " -"example, using the example on the previous page, make `src/main.rs` look like" +"Replace the boiler-plate code in `src/main.rs` with your own code. For example, using " +"the example on the previous page, make `src/main.rs` look like" msgstr "" #: src/cargo/running-locally.md:43 @@ -1995,28 +1897,26 @@ msgstr "" #: src/cargo/running-locally.md:59 msgid "" -"Use `cargo check` to quickly check your project for errors, use `cargo " -"build` to compile it without running it. You will find the output in `target/" -"debug/` for a normal debug build. Use `cargo build --release` to produce an " -"optimized release build in `target/release/`." +"Use `cargo check` to quickly check your project for errors, use `cargo build` to " +"compile it without running it. You will find the output in `target/debug/` for a normal " +"debug build. Use `cargo build --release` to produce an optimized release build in " +"`target/release/`." msgstr "" #: src/cargo/running-locally.md:64 msgid "" -"You can add dependencies for your project by editing `Cargo.toml`. When you " -"run `cargo` commands, it will automatically download and compile missing " -"dependencies for you." +"You can add dependencies for your project by editing `Cargo.toml`. When you run `cargo` " +"commands, it will automatically download and compile missing dependencies for you." msgstr "" #: src/cargo/running-locally.md:72 msgid "" -"Try to encourage the class participants to install Cargo and use a local " -"editor. It will make their life easier since they will have a normal " -"development environment." +"Try to encourage the class participants to install Cargo and use a local editor. It " +"will make their life easier since they will have a normal development environment." msgstr "" -"āĻ•ā§āĻ˛āĻžāĻ¸ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° Cargo āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ˛ā§‹āĻ•āĻžāĻ˛ āĻāĻĄāĻŋāĻŸāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ " -"āĻ‰ā§ŽāĻ¸āĻžāĻšāĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§āĻ¨ āĨ¤ āĻāĻŸāĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻœā§€āĻŦāĻ¨āĻ•ā§‡ āĻ¸āĻšāĻœ āĻ•āĻ°ā§‡ āĻ¤ā§āĻ˛āĻŦā§‡ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ¤āĻžāĻĻā§‡āĻ° āĻāĻ•āĻŸāĻŋ " -"āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ• āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻŽā§‡āĻ¨ā§āĻŸ āĻāĻ¨āĻ­āĻžāĻ‡āĻ°āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ āĻĨāĻžāĻ•āĻŦā§‡āĨ¤" +"āĻ•ā§āĻ˛āĻžāĻ¸ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° Cargo āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ˛ā§‹āĻ•āĻžāĻ˛ āĻāĻĄāĻŋāĻŸāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ‰ā§ŽāĻ¸āĻžāĻšāĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° " +"āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§āĻ¨ āĨ¤ āĻāĻŸāĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻœā§€āĻŦāĻ¨āĻ•ā§‡ āĻ¸āĻšāĻœ āĻ•āĻ°ā§‡ āĻ¤ā§āĻ˛āĻŦā§‡ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ¤āĻžāĻĻā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ• āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻŽā§‡āĻ¨ā§āĻŸ " +"āĻāĻ¨āĻ­āĻžāĻ‡āĻ°āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ āĻĨāĻžāĻ•āĻŦā§‡āĨ¤" #: src/welcome-day-1.md:1 msgid "Welcome to Day 1" @@ -2024,21 +1924,18 @@ msgstr "āĻĒā§āĻ°āĻĨāĻŽ āĻĻāĻŋāĻ¨ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸ā§āĻŦāĻžāĻ—āĻ¤āĻŽ" #: src/welcome-day-1.md:3 #, fuzzy -msgid "" -"This is the first day of Rust Fundamentals. We will cover a lot of ground " -"today:" +msgid "This is the first day of Rust Fundamentals. We will cover a lot of ground today:" msgstr "Comprehensive Rust āĻ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻĨāĻŽ āĻĻāĻŋāĻ¨āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ†āĻœāĻ•ā§‡ āĻ…āĻ¨ā§‡āĻ•āĻ•āĻŋāĻ›ā§ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻŦā§‹āĨ¤" #: src/welcome-day-1.md:6 msgid "" -"Basic Rust syntax: variables, scalar and compound types, enums, structs, " -"references, functions, and methods." +"Basic Rust syntax: variables, scalar and compound types, enums, structs, references, " +"functions, and methods." msgstr "" #: src/welcome-day-1.md:9 msgid "" -"Control flow constructs: `if`, `if let`, `while`, `while let`, `break`, and " -"`continue`." +"Control flow constructs: `if`, `if let`, `while`, `while let`, `break`, and `continue`." msgstr "" #: src/welcome-day-1.md:12 @@ -2050,51 +1947,45 @@ msgid "Please remind the students that:" msgstr "āĻļāĻŋāĻ•ā§āĻˇāĻžāĻ°ā§āĻĨā§€āĻĻā§‡āĻ° āĻāĻŸāĻŋ āĻŽāĻ¨ā§‡ āĻ•āĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻāĻŋāĻ¨ āĻ¯ā§‡āĻƒ" #: src/welcome-day-1.md:18 -msgid "" -"They should ask questions when they get them, don't save them to the end." +msgid "They should ask questions when they get them, don't save them to the end." msgstr "" #: src/welcome-day-1.md:19 -msgid "" -"The class is meant to be interactive and discussions are very much " -"encouraged!" +msgid "The class is meant to be interactive and discussions are very much encouraged!" msgstr "" #: src/welcome-day-1.md:20 msgid "" -"As an instructor, you should try to keep the discussions relevant, i.e., " -"keep the discussions related to how Rust does things vs some other " -"language. It can be hard to find the right balance, but err on the side of " -"allowing discussions since they engage people much more than one-way " -"communication." +"As an instructor, you should try to keep the discussions relevant, i.e., keep the " +"discussions related to how Rust does things vs some other language. It can be hard to " +"find the right balance, but err on the side of allowing discussions since they engage " +"people much more than one-way communication." msgstr "" #: src/welcome-day-1.md:24 -msgid "" -"The questions will likely mean that we talk about things ahead of the slides." +msgid "The questions will likely mean that we talk about things ahead of the slides." msgstr "" #: src/welcome-day-1.md:25 msgid "" -"This is perfectly okay! Repetition is an important part of learning. " -"Remember that the slides are just a support and you are free to skip them as " -"you like." +"This is perfectly okay! Repetition is an important part of learning. Remember that the " +"slides are just a support and you are free to skip them as you like." msgstr "" #: src/welcome-day-1.md:29 msgid "" -"The idea for the first day is to show _just enough_ of Rust to be able to " -"speak about the famous borrow checker. The way Rust handles memory is a " -"major feature and we should show students this right away." +"The idea for the first day is to show _just enough_ of Rust to be able to speak about " +"the famous borrow checker. The way Rust handles memory is a major feature and we should " +"show students this right away." msgstr "" #: src/welcome-day-1.md:33 msgid "" -"If you're teaching this in a classroom, this is a good place to go over the " -"schedule. We suggest splitting the day into two parts (following the slides):" +"If you're teaching this in a classroom, this is a good place to go over the schedule. " +"We suggest splitting the day into two parts (following the slides):" msgstr "" -"āĻ¯āĻĻāĻŋ āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻļā§āĻ°ā§‡āĻ¨ā§€āĻ•āĻ•ā§āĻˇā§‡ āĻĒāĻĄāĻŧāĻžāĻšā§āĻ›ā§‡āĻ¨, āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ˛ā§‹ āĻ¯āĻžāĻ¯āĻŧāĻ—āĻž āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŽāĻžāĻĢāĻŋāĻ• āĻšāĻ˛āĻžāĻ° " -"āĻœāĻ¨ā§āĻ¯āĨ¤ āĻ†āĻŽāĻ°āĻž āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ‡ āĻ¯ā§‡ āĻĻāĻŋāĻ¨āĻŸāĻžāĻ•ā§‡ āĻĻā§āĻ‡āĻŸāĻž āĻ­āĻžāĻ—ā§‡ āĻ­āĻžāĻ— āĻ•āĻ°ā§āĻ¨(āĻ¸ā§āĻ˛āĻžāĻ‡āĻĄāĻ—ā§āĻ˛ā§‹āĻ•ā§‡ āĻ…āĻ¨ā§āĻ¸āĻ°āĻ¨ āĻ•āĻ°ā§‡):" +"āĻ¯āĻĻāĻŋ āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻļā§āĻ°ā§‡āĻ¨ā§€āĻ•āĻ•ā§āĻˇā§‡ āĻĒāĻĄāĻŧāĻžāĻšā§āĻ›ā§‡āĻ¨, āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ˛ā§‹ āĻ¯āĻžāĻ¯āĻŧāĻ—āĻž āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŽāĻžāĻĢāĻŋāĻ• āĻšāĻ˛āĻžāĻ° āĻœāĻ¨ā§āĻ¯āĨ¤ āĻ†āĻŽāĻ°āĻž " +"āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ‡ āĻ¯ā§‡ āĻĻāĻŋāĻ¨āĻŸāĻžāĻ•ā§‡ āĻĻā§āĻ‡āĻŸāĻž āĻ­āĻžāĻ—ā§‡ āĻ­āĻžāĻ— āĻ•āĻ°ā§āĻ¨(āĻ¸ā§āĻ˛āĻžāĻ‡āĻĄāĻ—ā§āĻ˛ā§‹āĻ•ā§‡ āĻ…āĻ¨ā§āĻ¸āĻ°āĻ¨ āĻ•āĻ°ā§‡):" #: src/welcome-day-1.md:36 msgid "Morning: 9:00 to 12:00," @@ -2106,19 +1997,19 @@ msgstr "āĻŦāĻŋāĻ•āĻžāĻ˛ ā§§:ā§Ļā§Ļ āĻĨā§‡āĻ•ā§‡ ā§Ē:ā§Ļā§Ļ." #: src/welcome-day-1.md:39 msgid "" -"You can of course adjust this as necessary. Please make sure to include " -"breaks, we recommend a break every hour!" +"You can of course adjust this as necessary. Please make sure to include breaks, we " +"recommend a break every hour!" msgstr "" -"āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ āĻŦāĻŋāĻ°āĻ¤āĻŋ " -"āĻ¨āĻŋāĻ¤ā§‡, āĻ†āĻŽāĻ°āĻž āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ‡ āĻĒā§āĻ°āĻ¤āĻŋ āĻ˜āĻ¨ā§āĻŸāĻžāĻ¯āĻŧ āĻāĻ•āĻŦāĻžāĻ° āĻŦāĻŋāĻ°āĻ¤āĻŋ āĻ¨āĻŋāĻ¤ā§‡!" +"āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ āĻŦāĻŋāĻ°āĻ¤āĻŋ āĻ¨āĻŋāĻ¤ā§‡, āĻ†āĻŽāĻ°āĻž " +"āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ‡ āĻĒā§āĻ°āĻ¤āĻŋ āĻ˜āĻ¨ā§āĻŸāĻžāĻ¯āĻŧ āĻāĻ•āĻŦāĻžāĻ° āĻŦāĻŋāĻ°āĻ¤āĻŋ āĻ¨āĻŋāĻ¤ā§‡!" #: src/welcome-day-1/what-is-rust.md:3 msgid "" -"Rust is a new programming language which had its [1.0 release in 2015]" -"(https://blog.rust-lang.org/2015/05/15/Rust-1.0.html):" -msgstr "" -"Rust āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāĻˇāĻž āĻ¯ā§‡āĻŸāĻžāĻ° āĻ›āĻŋāĻ˛ā§‹ [1.0 āĻĒā§āĻ°āĻ•āĻžāĻļ 2015 āĻ¤ā§‡](https://blog." +"Rust is a new programming language which had its [1.0 release in 2015](https://blog." "rust-lang.org/2015/05/15/Rust-1.0.html):" +msgstr "" +"Rust āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāĻˇāĻž āĻ¯ā§‡āĻŸāĻžāĻ° āĻ›āĻŋāĻ˛ā§‹ [1.0 āĻĒā§āĻ°āĻ•āĻžāĻļ 2015 āĻ¤ā§‡](https://blog.rust-lang." +"org/2015/05/15/Rust-1.0.html):" #: src/welcome-day-1/what-is-rust.md:5 msgid "Rust is a statically compiled language in a similar role as C++" @@ -2130,8 +2021,8 @@ msgstr "" #: src/welcome-day-1/what-is-rust.md:7 msgid "" -"Rust supports many [platforms and architectures](https://doc.rust-lang.org/" -"nightly/rustc/platform-support.html):" +"Rust supports many [platforms and architectures](https://doc.rust-lang.org/nightly/" +"rustc/platform-support.html):" msgstr "" #: src/welcome-day-1/what-is-rust.md:9 @@ -2179,8 +2070,7 @@ msgid "High level of control." msgstr "" #: src/welcome-day-1/what-is-rust.md:25 -msgid "" -"Can be scaled down to very constrained devices such as microcontrollers." +msgid "Can be scaled down to very constrained devices such as microcontrollers." msgstr "" #: src/welcome-day-1/what-is-rust.md:26 @@ -2193,8 +2083,7 @@ msgstr "" #: src/hello-world.md:3 msgid "" -"Let us jump into the simplest possible Rust program, a classic Hello World " -"program:" +"Let us jump into the simplest possible Rust program, a classic Hello World program:" msgstr "" #: src/hello-world.md:6 @@ -2237,15 +2126,14 @@ msgstr "" #: src/hello-world.md:22 msgid "" -"This slide tries to make the students comfortable with Rust code. They will " -"see a ton of it over the next three days so we start small with something " -"familiar." +"This slide tries to make the students comfortable with Rust code. They will see a ton " +"of it over the next three days so we start small with something familiar." msgstr "" #: src/hello-world.md:27 msgid "" -"Rust is very much like other languages in the C/C++/Java tradition. It is " -"imperative and it doesn't try to reinvent things unless absolutely necessary." +"Rust is very much like other languages in the C/C++/Java tradition. It is imperative " +"and it doesn't try to reinvent things unless absolutely necessary." msgstr "" #: src/hello-world.md:31 @@ -2254,24 +2142,23 @@ msgstr "" #: src/hello-world.md:33 msgid "" -"Rust uses macros for situations where you want to have a variable number of " -"arguments (no function [overloading](basic-syntax/functions-interlude.md))." +"Rust uses macros for situations where you want to have a variable number of arguments " +"(no function [overloading](basic-syntax/functions-interlude.md))." msgstr "" #: src/hello-world.md:36 msgid "" -"Macros being 'hygienic' means they don't accidentally capture identifiers " -"from the scope they are used in. Rust macros are actually only [partially " -"hygienic](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene." -"html)." +"Macros being 'hygienic' means they don't accidentally capture identifiers from the " +"scope they are used in. Rust macros are actually only [partially hygienic](https://" +"veykril.github.io/tlborm/decl-macros/minutiae/hygiene.html)." msgstr "" #: src/hello-world.md:40 msgid "" -"Rust is multi-paradigm. For example, it has powerful [object-oriented " -"programming features](https://doc.rust-lang.org/book/ch17-00-oop.html), and, " -"while it is not a functional language, it includes a range of [functional " -"concepts](https://doc.rust-lang.org/book/ch13-00-functional-features.html)." +"Rust is multi-paradigm. For example, it has powerful [object-oriented programming " +"features](https://doc.rust-lang.org/book/ch17-00-oop.html), and, while it is not a " +"functional language, it includes a range of [functional concepts](https://doc.rust-lang." +"org/book/ch13-00-functional-features.html)." msgstr "" #: src/hello-world/small-example.md:3 @@ -2314,16 +2201,14 @@ msgstr "" #: src/hello-world/small-example.md:23 msgid "" -"The code implements the Collatz conjecture: it is believed that the loop " -"will always end, but this is not yet proved. Edit the code and play with " -"different inputs." +"The code implements the Collatz conjecture: it is believed that the loop will always " +"end, but this is not yet proved. Edit the code and play with different inputs." msgstr "" #: src/hello-world/small-example.md:29 msgid "" -"Explain that all variables are statically typed. Try removing `i32` to " -"trigger type inference. Try with `i8` instead and trigger a runtime integer " -"overflow." +"Explain that all variables are statically typed. Try removing `i32` to trigger type " +"inference. Try with `i8` instead and trigger a runtime integer overflow." msgstr "" #: src/hello-world/small-example.md:32 @@ -2332,27 +2217,26 @@ msgstr "" #: src/hello-world/small-example.md:34 msgid "" -"Show how `print!` gives a compilation error if the arguments don't match the " -"format string." +"Show how `print!` gives a compilation error if the arguments don't match the format " +"string." msgstr "" #: src/hello-world/small-example.md:37 msgid "" -"Show how you need to use `{}` as a placeholder if you want to print an " -"expression which is more complex than just a single variable." +"Show how you need to use `{}` as a placeholder if you want to print an expression which " +"is more complex than just a single variable." msgstr "" #: src/hello-world/small-example.md:40 msgid "" -"Show the students the standard library, show them how to search for `std::" -"fmt` which has the rules of the formatting mini-language. It's important " -"that the students become familiar with searching in the standard library." +"Show the students the standard library, show them how to search for `std::fmt` which " +"has the rules of the formatting mini-language. It's important that the students become " +"familiar with searching in the standard library." msgstr "" #: src/hello-world/small-example.md:44 msgid "" -"In a shell `rustup doc std::fmt` will open a browser on the local std::fmt " -"documentation" +"In a shell `rustup doc std::fmt` will open a browser on the local std::fmt documentation" msgstr "" #: src/why-rust.md:3 @@ -2373,24 +2257,24 @@ msgstr "" #: src/why-rust.md:11 msgid "" -"Make sure to ask the class which languages they have experience with. " -"Depending on the answer you can highlight different features of Rust:" +"Make sure to ask the class which languages they have experience with. Depending on the " +"answer you can highlight different features of Rust:" msgstr "" #: src/why-rust.md:14 msgid "" -"Experience with C or C++: Rust eliminates a whole class of _runtime errors_ " -"via the borrow checker. You get performance like in C and C++, but you don't " -"have the memory unsafety issues. In addition, you get a modern language with " -"constructs like pattern matching and built-in dependency management." +"Experience with C or C++: Rust eliminates a whole class of _runtime errors_ via the " +"borrow checker. You get performance like in C and C++, but you don't have the memory " +"unsafety issues. In addition, you get a modern language with constructs like pattern " +"matching and built-in dependency management." msgstr "" #: src/why-rust.md:19 msgid "" -"Experience with Java, Go, Python, JavaScript...: You get the same memory " -"safety as in those languages, plus a similar high-level language feeling. In " -"addition you get fast and predictable performance like C and C++ (no garbage " -"collector) as well as access to low-level hardware (should you need it)" +"Experience with Java, Go, Python, JavaScript...: You get the same memory safety as in " +"those languages, plus a similar high-level language feeling. In addition you get fast " +"and predictable performance like C and C++ (no garbage collector) as well as access to " +"low-level hardware (should you need it)" msgstr "" #: src/why-rust/compile-time.md:3 @@ -2430,40 +2314,38 @@ msgid "No iterator invalidation." msgstr "" #: src/why-rust/compile-time.md:16 -msgid "" -"It is possible to produce memory leaks in (safe) Rust. Some examples are:" +msgid "It is possible to produce memory leaks in (safe) Rust. Some examples are:" msgstr "" #: src/why-rust/compile-time.md:19 msgid "" -"You can use [`Box::leak`](https://doc.rust-lang.org/std/boxed/struct.Box." -"html#method.leak) to leak a pointer. A use of this could be to get runtime-" -"initialized and runtime-sized static variables" +"You can use [`Box::leak`](https://doc.rust-lang.org/std/boxed/struct.Box.html#method." +"leak) to leak a pointer. A use of this could be to get runtime-initialized and runtime-" +"sized static variables" msgstr "" #: src/why-rust/compile-time.md:21 msgid "" -"You can use [`std::mem::forget`](https://doc.rust-lang.org/std/mem/fn.forget." -"html) to make the compiler \"forget\" about a value (meaning the destructor " -"is never run)." +"You can use [`std::mem::forget`](https://doc.rust-lang.org/std/mem/fn.forget.html) to " +"make the compiler \"forget\" about a value (meaning the destructor is never run)." msgstr "" #: src/why-rust/compile-time.md:23 msgid "" -"You can also accidentally create a [reference cycle](https://doc.rust-lang." -"org/book/ch15-06-reference-cycles.html) with `Rc` or `Arc`." +"You can also accidentally create a [reference cycle](https://doc.rust-lang.org/book/" +"ch15-06-reference-cycles.html) with `Rc` or `Arc`." msgstr "" #: src/why-rust/compile-time.md:25 msgid "" -"In fact, some will consider infinitely populating a collection a memory leak " -"and Rust does not protect from those." +"In fact, some will consider infinitely populating a collection a memory leak and Rust " +"does not protect from those." msgstr "" #: src/why-rust/compile-time.md:28 msgid "" -"For the purpose of this course, \"No memory leaks\" should be understood as " -"\"Pretty much no _accidental_ memory leaks\"." +"For the purpose of this course, \"No memory leaks\" should be understood as \"Pretty " +"much no _accidental_ memory leaks\"." msgstr "" #: src/why-rust/runtime.md:3 @@ -2481,20 +2363,18 @@ msgstr "āĻĒā§‚āĻ°ā§āĻŖāĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ“āĻ­āĻžāĻ°āĻĢā§āĻ˛ā§‹ āĻ¸āĻ‚āĻœā§ #: src/why-rust/runtime.md:12 msgid "" -"Integer overflow is defined via the [`overflow-checks`](https://doc.rust-" -"lang.org/rustc/codegen-options/index.html#overflow-checks) compile-time " -"flag. If enabled, the program will panic (a controlled crash of the " -"program), otherwise you get wrap-around semantics. By default, you get " -"panics in debug mode (`cargo build`) and wrap-around in release mode (`cargo " -"build --release`)." +"Integer overflow is defined via the [`overflow-checks`](https://doc.rust-lang.org/rustc/" +"codegen-options/index.html#overflow-checks) compile-time flag. If enabled, the program " +"will panic (a controlled crash of the program), otherwise you get wrap-around " +"semantics. By default, you get panics in debug mode (`cargo build`) and wrap-around in " +"release mode (`cargo build --release`)." msgstr "" #: src/why-rust/runtime.md:18 msgid "" -"Bounds checking cannot be disabled with a compiler flag. It can also not be " -"disabled directly with the `unsafe` keyword. However, `unsafe` allows you to " -"call functions such as `slice::get_unchecked` which does not do bounds " -"checking." +"Bounds checking cannot be disabled with a compiler flag. It can also not be disabled " +"directly with the `unsafe` keyword. However, `unsafe` allows you to call functions such " +"as `slice::get_unchecked` which does not do bounds checking." msgstr "" #: src/why-rust/modern.md:3 @@ -2544,32 +2424,31 @@ msgstr "" #: src/why-rust/modern.md:23 msgid "" -"Zero-cost abstractions, similar to C++, means that you don't have to 'pay' " -"for higher-level programming constructs with memory or CPU. For example, " -"writing a loop using `for` should result in roughly the same low level " -"instructions as using the `.iter().fold()` construct." +"Zero-cost abstractions, similar to C++, means that you don't have to 'pay' for higher-" +"level programming constructs with memory or CPU. For example, writing a loop using " +"`for` should result in roughly the same low level instructions as using the `.iter()." +"fold()` construct." msgstr "" #: src/why-rust/modern.md:28 msgid "" -"It may be worth mentioning that Rust enums are 'Algebraic Data Types', also " -"known as 'sum types', which allow the type system to express things like " -"`Option` and `Result`." +"It may be worth mentioning that Rust enums are 'Algebraic Data Types', also known as " +"'sum types', which allow the type system to express things like `Option` and " +"`Result`." msgstr "" #: src/why-rust/modern.md:32 msgid "" -"Remind people to read the errors --- many developers have gotten used to " -"ignore lengthy compiler output. The Rust compiler is significantly more " -"talkative than other compilers. It will often provide you with _actionable_ " -"feedback, ready to copy-paste into your code." +"Remind people to read the errors --- many developers have gotten used to ignore lengthy " +"compiler output. The Rust compiler is significantly more talkative than other " +"compilers. It will often provide you with _actionable_ feedback, ready to copy-paste " +"into your code." msgstr "" #: src/why-rust/modern.md:37 msgid "" -"The Rust standard library is small compared to languages like Java, Python, " -"and Go. Rust does not come with several things you might consider standard " -"and essential:" +"The Rust standard library is small compared to languages like Java, Python, and Go. " +"Rust does not come with several things you might consider standard and essential:" msgstr "" #: src/why-rust/modern.md:41 @@ -2586,24 +2465,24 @@ msgstr "" #: src/why-rust/modern.md:45 msgid "" -"The reasoning behind this is that functionality in the standard library " -"cannot go away, so it has to be very stable. For the examples above, the " -"Rust community is still working on finding the best solution --- and perhaps " -"there isn't a single \"best solution\" for some of these things." +"The reasoning behind this is that functionality in the standard library cannot go away, " +"so it has to be very stable. For the examples above, the Rust community is still " +"working on finding the best solution --- and perhaps there isn't a single \"best " +"solution\" for some of these things." msgstr "" #: src/why-rust/modern.md:50 msgid "" -"Rust comes with a built-in package manager in the form of Cargo and this " -"makes it trivial to download and compile third-party crates. A consequence " -"of this is that the standard library can be smaller." +"Rust comes with a built-in package manager in the form of Cargo and this makes it " +"trivial to download and compile third-party crates. A consequence of this is that the " +"standard library can be smaller." msgstr "" #: src/why-rust/modern.md:54 msgid "" -"Discovering good third-party crates can be a problem. Sites like help with this by letting you compare health metrics for crates to " -"find a good and trusted one." +"Discovering good third-party crates can be a problem. Sites like help " +"with this by letting you compare health metrics for crates to find a good and trusted " +"one." msgstr "" #: src/why-rust/modern.md:58 @@ -2621,9 +2500,7 @@ msgid "Blocks and scopes are delimited by curly braces." msgstr "" #: src/basic-syntax.md:6 -msgid "" -"Line comments are started with `//`, block comments are delimited by `/* ... " -"*/`." +msgid "Line comments are started with `//`, block comments are delimited by `/* ... */`." msgstr "" #: src/basic-syntax.md:8 @@ -2746,13 +2623,13 @@ msgstr "āĻ•āĻŋāĻ›ā§ āĻ¸āĻŋāĻ¨āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸ āĻ†āĻ›ā§‡ āĻ¯āĻž āĻ‰āĻĒāĻ° #: src/basic-syntax/scalar-types.md:23 msgid "" -"Raw strings allow you to create a `&str` value with escapes disabled: " -"`r\"\\n\" == \"\\\\n\"`. You can embed double-quotes by using an equal " -"amount of `#` on either side of the quotes:" +"Raw strings allow you to create a `&str` value with escapes disabled: `r\"\\n\" == \"\\" +"\\n\"`. You can embed double-quotes by using an equal amount of `#` on either side of " +"the quotes:" msgstr "" -"Raw strings allow you to create a `&str` value with escapes disabled: " -"`r\"\\n\" == \"\\\\n\"`. You can embed double-quotes by using an equal " -"amount of `#` on either side of the quotes:" +"Raw strings allow you to create a `&str` value with escapes disabled: `r\"\\n\" == \"\\" +"\\n\"`. You can embed double-quotes by using an equal amount of `#` on either side of " +"the quotes:" #: src/basic-syntax/scalar-types.md:27 msgid "" @@ -2792,9 +2669,8 @@ msgstr "" #: src/basic-syntax/scalar-types.md:43 msgid "" -"All underscores in numbers can be left out, they are for legibility only. So " -"`1_000` can be written as `1000` (or `10_00`), and `123_i64` can be written " -"as `123i64`." +"All underscores in numbers can be left out, they are for legibility only. So `1_000` " +"can be written as `1000` (or `10_00`), and `123_i64` can be written as `123i64`." msgstr "" #: src/basic-syntax/compound-types.md:5 @@ -2864,10 +2740,9 @@ msgstr "Arrays:" #: src/basic-syntax/compound-types.md:34 msgid "" -"A value of the array type `[T; N]` holds `N` (a compile-time constant) " -"elements of the same type `T`. Note that the length of the array is _part of " -"its type_, which means that `[u8; 3]` and `[u8; 4]` are considered two " -"different types." +"A value of the array type `[T; N]` holds `N` (a compile-time constant) elements of the " +"same type `T`. Note that the length of the array is _part of its type_, which means " +"that `[u8; 3]` and `[u8; 4]` are considered two different types." msgstr "" #: src/basic-syntax/compound-types.md:38 @@ -2876,16 +2751,16 @@ msgstr "" #: src/basic-syntax/compound-types.md:40 msgid "" -"In the main function, the print statement asks for the debug implementation " -"with the `?` format parameter: `{}` gives the default output, `{:?}` gives " -"the debug output. We could also have used `{a}` and `{a:?}` without " -"specifying the value after the format string." +"In the main function, the print statement asks for the debug implementation with the `?" +"` format parameter: `{}` gives the default output, `{:?}` gives the debug output. We " +"could also have used `{a}` and `{a:?}` without specifying the value after the format " +"string." msgstr "" #: src/basic-syntax/compound-types.md:45 msgid "" -"Adding `#`, eg `{a:#?}`, invokes a \"pretty printing\" format, which can be " -"easier to read." +"Adding `#`, eg `{a:#?}`, invokes a \"pretty printing\" format, which can be easier to " +"read." msgstr "" #: src/basic-syntax/compound-types.md:47 @@ -2902,22 +2777,22 @@ msgstr "" #: src/basic-syntax/compound-types.md:53 msgid "" -"Fields of a tuple can be accessed by the period and the index of the value, " -"e.g. `t.0`, `t.1`." +"Fields of a tuple can be accessed by the period and the index of the value, e.g. `t.0`, " +"`t.1`." msgstr "" #: src/basic-syntax/compound-types.md:55 msgid "" -"The empty tuple `()` is also known as the \"unit type\". It is both a type, " -"and the only valid value of that type - that is to say both the type and its " -"value are expressed as `()`. It is used to indicate, for example, that a " -"function or expression has no return value, as we'll see in a future slide. " +"The empty tuple `()` is also known as the \"unit type\". It is both a type, and the " +"only valid value of that type - that is to say both the type and its value are " +"expressed as `()`. It is used to indicate, for example, that a function or expression " +"has no return value, as we'll see in a future slide. " msgstr "" #: src/basic-syntax/compound-types.md:59 msgid "" -"You can think of it as `void` that can be familiar to you from other " -"programming languages." +"You can think of it as `void` that can be familiar to you from other programming " +"languages." msgstr "" #: src/basic-syntax/references.md:3 @@ -2941,29 +2816,26 @@ msgid "Some notes:" msgstr "āĻ•āĻŋāĻ›ā§ āĻ¨ā§‹āĻŸ:" #: src/basic-syntax/references.md:16 -msgid "" -"We must dereference `ref_x` when assigning to it, similar to C and C++ " -"pointers." +msgid "We must dereference `ref_x` when assigning to it, similar to C and C++ pointers." msgstr "" #: src/basic-syntax/references.md:17 msgid "" -"Rust will auto-dereference in some cases, in particular when invoking " -"methods (try `ref_x.count_ones()`)." +"Rust will auto-dereference in some cases, in particular when invoking methods (try " +"`ref_x.count_ones()`)." msgstr "" #: src/basic-syntax/references.md:19 msgid "" -"References that are declared as `mut` can be bound to different values over " -"their lifetime." +"References that are declared as `mut` can be bound to different values over their " +"lifetime." msgstr "" #: src/basic-syntax/references.md:25 msgid "" -"Be sure to note the difference between `let mut ref_x: &i32` and `let ref_x: " -"&mut i32`. The first one represents a mutable reference which can be bound " -"to different values, while the second represents a reference to a mutable " -"value." +"Be sure to note the difference between `let mut ref_x: &i32` and `let ref_x: &mut i32`. " +"The first one represents a mutable reference which can be bound to different values, " +"while the second represents a reference to a mutable value." msgstr "" #: src/basic-syntax/references-dangling.md:3 @@ -2989,9 +2861,7 @@ msgid "A reference is said to \"borrow\" the value it refers to." msgstr "" #: src/basic-syntax/references-dangling.md:17 -msgid "" -"Rust is tracking the lifetimes of all references to ensure they live long " -"enough." +msgid "Rust is tracking the lifetimes of all references to ensure they live long enough." msgstr "" #: src/basic-syntax/references-dangling.md:19 @@ -3034,33 +2904,30 @@ msgstr "" #: src/basic-syntax/slices.md:21 msgid "" -"We create a slice by borrowing `a` and specifying the starting and ending " -"indexes in brackets." +"We create a slice by borrowing `a` and specifying the starting and ending indexes in " +"brackets." msgstr "" #: src/basic-syntax/slices.md:23 msgid "" -"If the slice starts at index 0, Rust’s range syntax allows us to drop the " -"starting index, meaning that `&a[0..a.len()]` and `&a[..a.len()]` are " -"identical." +"If the slice starts at index 0, Rust’s range syntax allows us to drop the starting " +"index, meaning that `&a[0..a.len()]` and `&a[..a.len()]` are identical." msgstr "" #: src/basic-syntax/slices.md:25 msgid "" -"The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are " -"identical." +"The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are identical." msgstr "" #: src/basic-syntax/slices.md:27 -msgid "" -"To easily create a slice of the full array, we can therefore use `&a[..]`." +msgid "To easily create a slice of the full array, we can therefore use `&a[..]`." msgstr "" #: src/basic-syntax/slices.md:29 msgid "" -"`s` is a reference to a slice of `i32`s. Notice that the type of `s` " -"(`&[i32]`) no longer mentions the array length. This allows us to perform " -"computation on slices of different sizes." +"`s` is a reference to a slice of `i32`s. Notice that the type of `s` (`&[i32]`) no " +"longer mentions the array length. This allows us to perform computation on slices of " +"different sizes." msgstr "" #: src/basic-syntax/slices.md:31 @@ -3071,12 +2938,11 @@ msgstr "" #: src/basic-syntax/slices.md:33 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. More details will be explained " -"in the borrow checker section." +"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. " +"More details will be explained in the borrow checker section." msgstr "" #: src/basic-syntax/string-slices.md:1 @@ -3119,48 +2985,46 @@ msgstr "" #: src/basic-syntax/string-slices.md:27 msgid "" -"`&str` introduces a string slice, which is an immutable reference to UTF-8 " -"encoded string data stored in a block of memory. String literals " -"(`”Hello”`), are stored in the program’s binary." +"`&str` introduces a string slice, which is an immutable reference to UTF-8 encoded " +"string data stored in a block of memory. String literals (`”Hello”`), are stored in " +"the program’s binary." msgstr "" #: src/basic-syntax/string-slices.md:30 msgid "" -"Rust’s `String` type is a wrapper around a vector of bytes. As with a " -"`Vec`, it is owned." +"Rust’s `String` type is a wrapper around a vector of bytes. As with a `Vec`, it is " +"owned." msgstr "" #: src/basic-syntax/string-slices.md:32 msgid "" -"As with many other types `String::from()` creates a string from a string " -"literal; `String::new()` creates a new empty string, to which string data " -"can be added using the `push()` and `push_str()` methods." +"As with many other types `String::from()` creates a string from a string literal; " +"`String::new()` creates a new empty string, to which string data can be added using " +"the `push()` and `push_str()` methods." msgstr "" #: src/basic-syntax/string-slices.md:35 msgid "" -"The `format!()` macro is a convenient way to generate an owned string from " -"dynamic values. It accepts the same format specification as `println!()`." +"The `format!()` macro is a convenient way to generate an owned string from dynamic " +"values. It accepts the same format specification as `println!()`." msgstr "" #: src/basic-syntax/string-slices.md:38 -msgid "" -"You can borrow `&str` slices from `String` via `&` and optionally range " -"selection." +msgid "You can borrow `&str` slices from `String` via `&` and optionally range selection." msgstr "" #: src/basic-syntax/string-slices.md:40 msgid "" -"For C++ programmers: think of `&str` as `const char*` from C++, but the one " -"that always points to a valid string in memory. Rust `String` is a rough " -"equivalent of `std::string` from C++ (main difference: it can only contain " -"UTF-8 encoded bytes and will never use a small-string optimization)." +"For C++ programmers: think of `&str` as `const char*` from C++, but the one that always " +"points to a valid string in memory. Rust `String` is a rough equivalent of `std::" +"string` from C++ (main difference: it can only contain UTF-8 encoded bytes and will " +"never use a small-string optimization)." msgstr "" #: src/basic-syntax/functions.md:3 msgid "" -"A Rust version of the famous [FizzBuzz](https://en.wikipedia.org/wiki/" -"Fizz_buzz) interview question:" +"A Rust version of the famous [FizzBuzz](https://en.wikipedia.org/wiki/Fizz_buzz) " +"interview question:" msgstr "" #: src/basic-syntax/functions.md:5 @@ -3196,52 +3060,49 @@ msgstr "" #: src/basic-syntax/functions.md:35 msgid "" -"We refer in `main` to a function written below. Neither forward declarations " -"nor headers are necessary. " +"We refer in `main` to a function written below. Neither forward declarations nor " +"headers are necessary. " msgstr "" #: src/basic-syntax/functions.md:36 msgid "" -"Declaration parameters are followed by a type (the reverse of some " -"programming languages), then a return type." +"Declaration parameters are followed by a type (the reverse of some programming " +"languages), then a return type." msgstr "" #: src/basic-syntax/functions.md:37 msgid "" -"The last expression in a function body (or any block) becomes the return " -"value. Simply omit the `;` at the end of the expression." +"The last expression in a function body (or any block) becomes the return value. Simply " +"omit the `;` at the end of the expression." msgstr "" #: src/basic-syntax/functions.md:38 msgid "" -"Some functions have no return value, and return the 'unit type', `()`. The " -"compiler will infer this if the `-> ()` return type is omitted." +"Some functions have no return value, and return the 'unit type', `()`. The compiler " +"will infer this if the `-> ()` return type is omitted." msgstr "" #: src/basic-syntax/functions.md:39 msgid "" -"The range expression in the `for` loop in `print_fizzbuzz_to()` contains " -"`=n`, which causes it to include the upper bound." +"The range expression in the `for` loop in `print_fizzbuzz_to()` contains `=n`, which " +"causes it to include the upper bound." msgstr "" #: src/basic-syntax/rustdoc.md:3 -msgid "" -"All language items in Rust can be documented using special `///` syntax." +msgid "All language items in Rust can be documented using special `///` syntax." msgstr "" #: src/basic-syntax/rustdoc.md:5 msgid "" "```rust,editable\n" -"/// Determine whether the first argument is divisible by the second " -"argument.\n" +"/// Determine whether the first argument is divisible by the second argument.\n" "///\n" "/// If the second argument is zero, the result is false.\n" "fn is_divisible_by(lhs: u32, rhs: u32) -> bool {\n" " if rhs == 0 {\n" " return false; // Corner case, early return\n" " }\n" -" lhs % rhs == 0 // The last expression in a block is the return " -"value\n" +" lhs % rhs == 0 // The last expression in a block is the return value\n" "}\n" "```" msgstr "" @@ -3249,40 +3110,39 @@ msgstr "" #: src/basic-syntax/rustdoc.md:17 msgid "" "The contents are treated as Markdown. All published Rust library crates are " -"automatically documented at [`docs.rs`](https://docs.rs) using the [rustdoc]" -"(https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) tool. It is " -"idiomatic to document all public items in an API using this pattern." +"automatically documented at [`docs.rs`](https://docs.rs) using the [rustdoc](https://" +"doc.rust-lang.org/rustdoc/what-is-rustdoc.html) tool. It is idiomatic to document all " +"public items in an API using this pattern." msgstr "" #: src/basic-syntax/rustdoc.md:24 msgid "" -"Show students the generated docs for the `rand` crate at [`docs.rs/rand`]" -"(https://docs.rs/rand)." +"Show students the generated docs for the `rand` crate at [`docs.rs/rand`](https://docs." +"rs/rand)." msgstr "" #: src/basic-syntax/rustdoc.md:27 msgid "" -"This course does not include rustdoc on slides, just to save space, but in " -"real code they should be present." +"This course does not include rustdoc on slides, just to save space, but in real code " +"they should be present." msgstr "" #: src/basic-syntax/rustdoc.md:30 msgid "" -"Inner doc comments are discussed later (in the page on modules) and need not " -"be addressed here." +"Inner doc comments are discussed later (in the page on modules) and need not be " +"addressed here." msgstr "" #: src/basic-syntax/rustdoc.md:33 msgid "" -"Rustdoc comments can contain code snippets that we can run and test using " -"`cargo test`. We will discuss these tests in the [Testing section](../" -"testing/doc-tests.html)." +"Rustdoc comments can contain code snippets that we can run and test using `cargo test`. " +"We will discuss these tests in the [Testing section](../testing/doc-tests.html)." msgstr "" #: src/basic-syntax/methods.md:3 msgid "" -"Methods are functions associated with a type. The `self` argument of a " -"method is an instance of the type it is associated with:" +"Methods are functions associated with a type. The `self` argument of a method is an " +"instance of the type it is associated with:" msgstr "" #: src/basic-syntax/methods.md:6 @@ -3313,9 +3173,7 @@ msgid "" msgstr "" #: src/basic-syntax/methods.md:30 -msgid "" -"We will look much more at methods in today's exercise and in tomorrow's " -"class." +msgid "We will look much more at methods in today's exercise and in tomorrow's class." msgstr "" #: src/basic-syntax/methods.md:34 @@ -3333,16 +3191,16 @@ msgstr "" #: src/basic-syntax/methods.md:42 msgid "" -"While _technically_, Rust does not have custom constructors, static methods " -"are commonly used to initialize structs (but don't have to). The actual " -"constructor, `Rectangle { width, height }`, could be called directly. See " -"the [Rustnomicon](https://doc.rust-lang.org/nomicon/constructors.html)." +"While _technically_, Rust does not have custom constructors, static methods are " +"commonly used to initialize structs (but don't have to). The actual constructor, " +"`Rectangle { width, height }`, could be called directly. See the [Rustnomicon](https://" +"doc.rust-lang.org/nomicon/constructors.html)." msgstr "" #: src/basic-syntax/methods.md:45 msgid "" -"Add a `Rectangle::square(width: u32)` constructor to illustrate that such " -"static methods can take arbitrary parameters." +"Add a `Rectangle::square(width: u32)` constructor to illustrate that such static " +"methods can take arbitrary parameters." msgstr "" #: src/basic-syntax/functions-interlude.md:1 @@ -3397,9 +3255,8 @@ msgstr "" #: src/basic-syntax/functions-interlude.md:27 msgid "" -"When using generics, the standard library's `Into` can provide a kind of " -"limited polymorphism on argument types. We will see more details in a later " -"section." +"When using generics, the standard library's `Into` can provide a kind of limited " +"polymorphism on argument types. We will see more details in a later section." msgstr "" #: src/exercises/day-1/morning.md:1 @@ -3424,9 +3281,9 @@ msgstr "" #: src/exercises/day-1/morning.md:13 msgid "" -"Use a local Rust installation, if possible. This way you can get auto-" -"completion in your editor. See the page about [Using Cargo](../../cargo.md) " -"for details on installing Rust." +"Use a local Rust installation, if possible. This way you can get auto-completion in " +"your editor. See the page about [Using Cargo](../../cargo.md) for details on installing " +"Rust." msgstr "" #: src/exercises/day-1/morning.md:17 @@ -3435,23 +3292,23 @@ msgstr "" #: src/exercises/day-1/morning.md:19 msgid "" -"The code snippets are not editable on purpose: the inline code snippets lose " -"their state if you navigate away from the page." +"The code snippets are not editable on purpose: the inline code snippets lose their " +"state if you navigate away from the page." msgstr "" #: src/exercises/day-1/morning.md:22 src/exercises/day-2/morning.md:11 #: src/exercises/day-3/morning.md:9 src/exercises/bare-metal/morning.md:7 #: src/exercises/concurrency/morning.md:12 msgid "" -"After looking at the exercises, you can look at the [solutions](solutions-" -"morning.md) provided." +"After looking at the exercises, you can look at the [solutions](solutions-morning.md) " +"provided." msgstr "" #: src/exercises/day-1/implicit-conversions.md:3 msgid "" -"Rust will not automatically apply _implicit conversions_ between types " -"([unlike C++](https://en.cppreference.com/w/cpp/language/" -"implicit_conversion)). You can see this in a program like this:" +"Rust will not automatically apply _implicit conversions_ between types ([unlike C++]" +"(https://en.cppreference.com/w/cpp/language/implicit_conversion)). You can see this in " +"a program like this:" msgstr "" #: src/exercises/day-1/implicit-conversions.md:6 @@ -3472,28 +3329,27 @@ msgstr "" #: src/exercises/day-1/implicit-conversions.md:19 msgid "" -"The Rust integer types all implement the [`From`](https://doc.rust-lang." -"org/std/convert/trait.From.html) and [`Into`](https://doc.rust-lang.org/" -"std/convert/trait.Into.html) traits to let us convert between them. The " -"`From` trait has a single `from()` method and similarly, the `Into` " -"trait has a single `into()` method. Implementing these traits is how a type " -"expresses that it can be converted into another type." +"The Rust integer types all implement the [`From`](https://doc.rust-lang.org/std/" +"convert/trait.From.html) and [`Into`](https://doc.rust-lang.org/std/convert/trait." +"Into.html) traits to let us convert between them. The `From` trait has a single " +"`from()` method and similarly, the `Into` trait has a single `into()` method. " +"Implementing these traits is how a type expresses that it can be converted into another " +"type." msgstr "" #: src/exercises/day-1/implicit-conversions.md:25 msgid "" -"The standard library has an implementation of `From for i16`, which " -"means that we can convert a variable `x` of type `i8` to an `i16` by " -"calling `i16::from(x)`. Or, simpler, with `x.into()`, because `From for " -"i16` implementation automatically create an implementation of `Into for " -"i8`." +"The standard library has an implementation of `From for i16`, which means that we " +"can convert a variable `x` of type `i8` to an `i16` by calling `i16::from(x)`. Or, " +"simpler, with `x.into()`, because `From for i16` implementation automatically " +"create an implementation of `Into for i8`." msgstr "" #: src/exercises/day-1/implicit-conversions.md:30 msgid "" -"The same applies for your own `From` implementations for your own types, so " -"it is sufficient to only implement `From` to get a respective `Into` " -"implementation automatically." +"The same applies for your own `From` implementations for your own types, so it is " +"sufficient to only implement `From` to get a respective `Into` implementation " +"automatically." msgstr "" #: src/exercises/day-1/implicit-conversions.md:33 @@ -3506,15 +3362,14 @@ msgstr "" #: src/exercises/day-1/implicit-conversions.md:37 msgid "" -"Change the types of `x` and `y` to other things (such as `f32`, `bool`, " -"`i128`) to see which types you can convert to which other types. Try " -"converting small types to big types and the other way around. Check the " -"[standard library documentation](https://doc.rust-lang.org/std/convert/trait." -"From.html) to see if `From` is implemented for the pairs you check." +"Change the types of `x` and `y` to other things (such as `f32`, `bool`, `i128`) to see " +"which types you can convert to which other types. Try converting small types to big " +"types and the other way around. Check the [standard library documentation](https://doc." +"rust-lang.org/std/convert/trait.From.html) to see if `From` is implemented for the " +"pairs you check." msgstr "" -#: src/exercises/day-1/for-loops.md:1 -#: src/exercises/day-1/solutions-morning.md:3 +#: src/exercises/day-1/for-loops.md:1 src/exercises/day-1/solutions-morning.md:3 msgid "Arrays and `for` Loops" msgstr "" @@ -3530,9 +3385,7 @@ msgid "" msgstr "" #: src/exercises/day-1/for-loops.md:9 -msgid "" -"You can print such an array by asking for its debug representation with `{:?}" -"`:" +msgid "You can print such an array by asking for its debug representation with `{:?}`:" msgstr "" #: src/exercises/day-1/for-loops.md:11 @@ -3546,9 +3399,7 @@ msgid "" msgstr "" #: src/exercises/day-1/for-loops.md:18 -msgid "" -"Rust lets you iterate over things like arrays and ranges using the `for` " -"keyword:" +msgid "Rust lets you iterate over things like arrays and ranges using the `for` keyword:" msgstr "" #: src/exercises/day-1/for-loops.md:21 @@ -3573,9 +3424,8 @@ msgstr "" #: src/exercises/day-1/for-loops.md:38 msgid "" -"Use the above to write a function `pretty_print` which pretty-print a matrix " -"and a function `transpose` which will transpose a matrix (turn rows into " -"columns):" +"Use the above to write a function `pretty_print` which pretty-print a matrix and a " +"function `transpose` which will transpose a matrix (turn rows into columns):" msgstr "" #: src/exercises/day-1/for-loops.md:41 @@ -3592,9 +3442,7 @@ msgid "Hard-code both functions to operate on 3 × 3 matrices." msgstr "" #: src/exercises/day-1/for-loops.md:49 -msgid "" -"Copy the code below to and implement the " -"functions:" +msgid "Copy the code below to and implement the functions:" msgstr "" #: src/exercises/day-1/for-loops.md:52 @@ -3634,9 +3482,9 @@ msgstr "" #: src/exercises/day-1/for-loops.md:82 msgid "" -"Could you use `&[i32]` slices instead of hard-coded 3 × 3 matrices for your " -"argument and return types? Something like `&[&[i32]]` for a two-dimensional " -"slice-of-slices. Why or why not?" +"Could you use `&[i32]` slices instead of hard-coded 3 × 3 matrices for your argument " +"and return types? Something like `&[&[i32]]` for a two-dimensional slice-of-slices. Why " +"or why not?" msgstr "" #: src/exercises/day-1/for-loops.md:87 @@ -3647,14 +3495,14 @@ msgstr "" #: src/exercises/day-1/for-loops.md:92 msgid "" -"The solution and the answer to the bonus section are available in the " -"[Solution](solutions-morning.md#arrays-and-for-loops) section." +"The solution and the answer to the bonus section are available in the [Solution]" +"(solutions-morning.md#arrays-and-for-loops) section." msgstr "" #: src/exercises/day-1/for-loops.md:95 msgid "" -"The use of the reference `&array` within `for n in &array` is a subtle " -"preview of issues of ownership that will come later in the afternoon." +"The use of the reference `&array` within `for n in &array` is a subtle preview of " +"issues of ownership that will come later in the afternoon." msgstr "" #: src/exercises/day-1/for-loops.md:98 @@ -3663,29 +3511,28 @@ msgstr "" #: src/exercises/day-1/for-loops.md:99 msgid "" -"The loop would have been one that consumes the array. This is a change " -"[introduced in the 2021 Edition](https://doc.rust-lang.org/edition-guide/" -"rust-2021/IntoIterator-for-arrays.html)." +"The loop would have been one that consumes the array. This is a change [introduced in " +"the 2021 Edition](https://doc.rust-lang.org/edition-guide/rust-2021/IntoIterator-for-" +"arrays.html)." msgstr "" #: src/exercises/day-1/for-loops.md:102 msgid "" -"An implicit array copy would have occured. Since `i32` is a copy type, then " -"`[i32; 3]` is also a copy type." +"An implicit array copy would have occured. Since `i32` is a copy type, then `[i32; 3]` " +"is also a copy type." msgstr "" #: src/control-flow.md:3 msgid "" -"As we have seen, `if` is an expression in Rust. It is used to conditionally " -"evaluate one of two blocks, but the blocks can have a value which then " -"becomes the value of the `if` expression. Other control flow expressions " -"work similarly in Rust." +"As we have seen, `if` is an expression in Rust. It is used to conditionally evaluate " +"one of two blocks, but the blocks can have a value which then becomes the value of the " +"`if` expression. Other control flow expressions work similarly in Rust." msgstr "" #: src/control-flow/blocks.md:3 msgid "" -"A block in Rust contains a sequence of expressions. Each block has a value " -"and a type, which are those of the last expression of the block:" +"A block in Rust contains a sequence of expressions. Each block has a value and a type, " +"which are those of the last expression of the block:" msgstr "" #: src/control-flow/blocks.md:7 @@ -3711,15 +3558,12 @@ msgid "" msgstr "" #: src/control-flow/blocks.md:26 -msgid "" -"If the last expression ends with `;`, then the resulting value and type is " -"`()`." +msgid "If the last expression ends with `;`, then the resulting value and type is `()`." msgstr "" #: src/control-flow/blocks.md:28 msgid "" -"The same rule is used for functions: the value of the function body is the " -"return value:" +"The same rule is used for functions: the value of the function body is the return value:" msgstr "" #: src/control-flow/blocks.md:31 @@ -3736,21 +3580,19 @@ msgid "" msgstr "" #: src/control-flow/blocks.md:43 src/enums.md:34 src/enums/sizes.md:28 -#: src/pattern-matching.md:25 src/pattern-matching/match-guards.md:22 -#: src/structs.md:31 src/methods.md:30 src/methods/example.md:46 +#: src/pattern-matching.md:25 src/pattern-matching/match-guards.md:22 src/structs.md:31 +#: src/methods.md:30 src/methods/example.md:46 msgid "Key Points:" msgstr "" #: src/control-flow/blocks.md:44 -msgid "" -"The point of this slide is to show that blocks have a type and value in " -"Rust. " +msgid "The point of this slide is to show that blocks have a type and value in Rust. " msgstr "" #: src/control-flow/blocks.md:45 msgid "" -"You can show how the value of the block changes by changing the last line in " -"the block. For instance, adding/removing a semicolon or using a `return`." +"You can show how the value of the block changes by changing the last line in the block. " +"For instance, adding/removing a semicolon or using a `return`." msgstr "" #: src/control-flow/if-expressions.md:1 @@ -3759,8 +3601,8 @@ msgstr "" #: src/control-flow/if-expressions.md:3 msgid "" -"You use [`if` expressions](https://doc.rust-lang.org/reference/expressions/" -"if-expr.html#if-expressions) exactly like `if` statements in other languages:" +"You use [`if` expressions](https://doc.rust-lang.org/reference/expressions/if-expr." +"html#if-expressions) exactly like `if` statements in other languages:" msgstr "" #: src/control-flow/if-expressions.md:7 @@ -3779,8 +3621,8 @@ msgstr "" #: src/control-flow/if-expressions.md:18 msgid "" -"In addition, you can use `if` as an expression. The last expression of each " -"block becomes the value of the `if` expression:" +"In addition, you can use `if` as an expression. The last expression of each block " +"becomes the value of the `if` expression:" msgstr "" #: src/control-flow/if-expressions.md:22 @@ -3799,9 +3641,9 @@ msgstr "" #: src/control-flow/if-expressions.md:35 msgid "" -"Because `if` is an expression and must have a particular type, both of its " -"branch blocks must have the same type. Consider showing what happens if you " -"add `;` after `x / 2` in the second example." +"Because `if` is an expression and must have a particular type, both of its branch " +"blocks must have the same type. Consider showing what happens if you add `;` after `x / " +"2` in the second example." msgstr "" #: src/control-flow/for-expressions.md:1 @@ -3810,9 +3652,9 @@ msgstr "" #: src/control-flow/for-expressions.md:3 msgid "" -"The [`for` loop](https://doc.rust-lang.org/std/keyword.for.html) is closely " -"related to the [`while let` loop](while-let-expressions.md). It will " -"automatically call `into_iter()` on the expression and then iterate over it:" +"The [`for` loop](https://doc.rust-lang.org/std/keyword.for.html) is closely related to " +"the [`while let` loop](while-let-expressions.md). It will automatically call " +"`into_iter()` on the expression and then iterate over it:" msgstr "" #: src/control-flow/for-expressions.md:7 @@ -3846,14 +3688,13 @@ msgstr "" #: src/control-flow/for-expressions.md:27 msgid "" -"`step_by` is a method that returns another `Iterator` that skips every other " -"element. " +"`step_by` is a method that returns another `Iterator` that skips every other element. " msgstr "" #: src/control-flow/for-expressions.md:28 msgid "" -"Modify the elements in the vector and explain the compiler errors. Change " -"vector `v` to be mutable and the for loop to `for x in v.iter_mut()`." +"Modify the elements in the vector and explain the compiler errors. Change vector `v` to " +"be mutable and the for loop to `for x in v.iter_mut()`." msgstr "" #: src/control-flow/while-expressions.md:1 @@ -3862,8 +3703,8 @@ msgstr "" #: src/control-flow/while-expressions.md:3 msgid "" -"The [`while` keyword](https://doc.rust-lang.org/reference/expressions/loop-" -"expr.html#predicate-loops) works very similar to other languages:" +"The [`while` keyword](https://doc.rust-lang.org/reference/expressions/loop-expr." +"html#predicate-loops) works very similar to other languages:" msgstr "" #: src/control-flow/while-expressions.md:6 @@ -3889,20 +3730,20 @@ msgstr "" #: src/control-flow/break-continue.md:3 msgid "" -"If you want to exit a loop early, use [`break`](https://doc.rust-lang.org/" -"reference/expressions/loop-expr.html#break-expressions)," +"If you want to exit a loop early, use [`break`](https://doc.rust-lang.org/reference/" +"expressions/loop-expr.html#break-expressions)," msgstr "" #: src/control-flow/break-continue.md:4 msgid "" -"If you want to immediately start the next iteration use [`continue`](https://" -"doc.rust-lang.org/reference/expressions/loop-expr.html#continue-expressions)." +"If you want to immediately start the next iteration use [`continue`](https://doc.rust-" +"lang.org/reference/expressions/loop-expr.html#continue-expressions)." msgstr "" #: src/control-flow/break-continue.md:7 msgid "" -"Both `continue` and `break` can optionally take a label argument which is " -"used to break out of nested loops:" +"Both `continue` and `break` can optionally take a label argument which is used to break " +"out of nested loops:" msgstr "" #: src/control-flow/break-continue.md:10 @@ -3927,8 +3768,7 @@ msgid "" msgstr "" #: src/control-flow/break-continue.md:28 -msgid "" -"In this case we break the outer loop after 3 iterations of the inner loop." +msgid "In this case we break the outer loop after 3 iterations of the inner loop." msgstr "" #: src/control-flow/loop-expressions.md:1 @@ -3937,8 +3777,8 @@ msgstr "" #: src/control-flow/loop-expressions.md:3 msgid "" -"Finally, there is a [`loop` keyword](https://doc.rust-lang.org/reference/" -"expressions/loop-expr.html#infinite-loops) which creates an endless loop." +"Finally, there is a [`loop` keyword](https://doc.rust-lang.org/reference/expressions/" +"loop-expr.html#infinite-loops) which creates an endless loop." msgstr "" #: src/control-flow/loop-expressions.md:6 @@ -3971,15 +3811,13 @@ msgstr "" #: src/control-flow/loop-expressions.md:28 msgid "" -"Note that `loop` is the only looping construct which returns a non-trivial " -"value. This is because it's guaranteed to be entered at least once (unlike " -"`while` and `for` loops)." +"Note that `loop` is the only looping construct which returns a non-trivial value. This " +"is because it's guaranteed to be entered at least once (unlike `while` and `for` loops)." msgstr "" #: src/basic-syntax/variables.md:3 msgid "" -"Rust provides type safety via static typing. Variable bindings are immutable " -"by default:" +"Rust provides type safety via static typing. Variable bindings are immutable by default:" msgstr "" #: src/basic-syntax/variables.md:6 @@ -3996,8 +3834,8 @@ msgstr "" #: src/basic-syntax/variables.md:17 msgid "" -"Due to type inference the `i32` is optional. We will gradually show the " -"types less and less as the course progresses." +"Due to type inference the `i32` is optional. We will gradually show the types less and " +"less as the course progresses." msgstr "" #: src/basic-syntax/type-inference.md:3 @@ -4028,24 +3866,22 @@ msgstr "" #: src/basic-syntax/type-inference.md:26 msgid "" -"This slide demonstrates how the Rust compiler infers types based on " -"constraints given by variable declarations and usages." +"This slide demonstrates how the Rust compiler infers types based on constraints given " +"by variable declarations and usages." msgstr "" #: src/basic-syntax/type-inference.md:28 msgid "" -"It is very important to emphasize that variables declared like this are not " -"of some sort of dynamic \"any type\" that can hold any data. The machine " -"code generated by such declaration is identical to the explicit declaration " -"of a type. The compiler does the job for us and helps us write more concise " -"code." +"It is very important to emphasize that variables declared like this are not of some " +"sort of dynamic \"any type\" that can hold any data. The machine code generated by such " +"declaration is identical to the explicit declaration of a type. The compiler does the " +"job for us and helps us write more concise code." msgstr "" #: src/basic-syntax/type-inference.md:32 msgid "" -"The following code tells the compiler to copy into a certain generic " -"container without the code ever explicitly specifying the contained type, " -"using `_` as a placeholder:" +"The following code tells the compiler to copy into a certain generic container without " +"the code ever explicitly specifying the contained type, using `_` as a placeholder:" msgstr "" #: src/basic-syntax/type-inference.md:34 @@ -4065,11 +3901,10 @@ msgstr "" #: src/basic-syntax/type-inference.md:46 msgid "" -"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator." -"html#method.collect) relies on [`FromIterator`](https://doc.rust-lang.org/" -"std/iter/trait.FromIterator.html), which [`HashSet`](https://doc.rust-lang." -"org/std/collections/struct.HashSet.html#impl-FromIterator%3CT%3E-for-" -"HashSet%3CT,+S%3E) implements." +"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator.html#method." +"collect) relies on [`FromIterator`](https://doc.rust-lang.org/std/iter/trait." +"FromIterator.html), which [`HashSet`](https://doc.rust-lang.org/std/collections/struct." +"HashSet.html#impl-FromIterator%3CT%3E-for-HashSet%3CT,+S%3E) implements." msgstr "" #: src/basic-syntax/static-and-const.md:1 @@ -4078,9 +3913,8 @@ msgstr "" #: src/basic-syntax/static-and-const.md:3 msgid "" -"Static and constant variables are two different ways to create globally-" -"scoped values that cannot be moved or reallocated during the execution of " -"the program. " +"Static and constant variables are two different ways to create globally-scoped values " +"that cannot be moved or reallocated during the execution of the program. " msgstr "" #: src/basic-syntax/static-and-const.md:6 @@ -4089,8 +3923,8 @@ msgstr "" #: src/basic-syntax/static-and-const.md:8 msgid "" -"Constant variables are evaluated at compile time and their values are " -"inlined wherever they are used:" +"Constant variables are evaluated at compile time and their values are inlined wherever " +"they are used:" msgstr "" #: src/basic-syntax/static-and-const.md:11 @@ -4102,8 +3936,7 @@ msgid "" "fn compute_digest(text: &str) -> [u8; DIGEST_SIZE] {\n" " let mut digest = [ZERO.unwrap_or(0); DIGEST_SIZE];\n" " for (idx, &b) in text.as_bytes().iter().enumerate() {\n" -" digest[idx % DIGEST_SIZE] = digest[idx % DIGEST_SIZE]." -"wrapping_add(b);\n" +" digest[idx % DIGEST_SIZE] = digest[idx % DIGEST_SIZE].wrapping_add(b);\n" " }\n" " digest\n" "}\n" @@ -4117,14 +3950,14 @@ msgstr "" #: src/basic-syntax/static-and-const.md:29 msgid "" -"According to the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-" -"vs-static.html) these are inlined upon use." +"According to the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-vs-static." +"html) these are inlined upon use." msgstr "" #: src/basic-syntax/static-and-const.md:31 msgid "" -"Only functions marked `const` can be called at compile time to generate " -"`const` values. `const` functions can however be called at runtime." +"Only functions marked `const` can be called at compile time to generate `const` values. " +"`const` functions can however be called at runtime." msgstr "" #: src/basic-syntax/static-and-const.md:33 @@ -4133,8 +3966,8 @@ msgstr "" #: src/basic-syntax/static-and-const.md:35 msgid "" -"Static variables will live during the whole execution of the program, and " -"therefore will not move:" +"Static variables will live during the whole execution of the program, and therefore " +"will not move:" msgstr "" #: src/basic-syntax/static-and-const.md:37 @@ -4150,22 +3983,21 @@ msgstr "" #: src/basic-syntax/static-and-const.md:45 msgid "" -"As noted in the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-" -"vs-static.html), these are not inlined upon use and have an actual " -"associated memory location. This is useful for unsafe and embedded code, " -"and the variable lives through the entirety of the program execution. When a " -"globally-scoped value does not have a reason to need object identity, " -"`const` is generally preferred." +"As noted in the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-vs-static." +"html), these are not inlined upon use and have an actual associated memory location. " +"This is useful for unsafe and embedded code, and the variable lives through the " +"entirety of the program execution. When a globally-scoped value does not have a reason " +"to need object identity, `const` is generally preferred." msgstr "" #: src/basic-syntax/static-and-const.md:49 msgid "" -"Because `static` variables are accessible from any thread, they must be " -"`Sync`. Interior mutability is possible through a [`Mutex`](https://doc.rust-" -"lang.org/std/sync/struct.Mutex.html), atomic or similar. It is also possible " -"to have mutable statics, but they require manual synchronisation so any " -"access to them requires `unsafe` code. We will look at [mutable statics](../" -"unsafe/mutable-static-variables.md) in the chapter on Unsafe Rust." +"Because `static` variables are accessible from any thread, they must be `Sync`. " +"Interior mutability is possible through a [`Mutex`](https://doc.rust-lang.org/std/sync/" +"struct.Mutex.html), atomic or similar. It is also possible to have mutable statics, but " +"they require manual synchronisation so any access to them requires `unsafe` code. We " +"will look at [mutable statics](../unsafe/mutable-static-variables.md) in the chapter on " +"Unsafe Rust." msgstr "" #: src/basic-syntax/static-and-const.md:57 @@ -4174,20 +4006,20 @@ msgstr "" #: src/basic-syntax/static-and-const.md:58 msgid "" -"`static`, on the other hand, is much more similar to a `const` or mutable " -"global variable in C++." +"`static`, on the other hand, is much more similar to a `const` or mutable global " +"variable in C++." msgstr "" #: src/basic-syntax/static-and-const.md:59 msgid "" -"`static` provides object identity: an address in memory and state as " -"required by types with interior mutability such as `Mutex`." +"`static` provides object identity: an address in memory and state as required by types " +"with interior mutability such as `Mutex`." msgstr "" #: src/basic-syntax/static-and-const.md:60 msgid "" -"It isn't super common that one would need a runtime evaluated constant, but " -"it is helpful and safer than using a static." +"It isn't super common that one would need a runtime evaluated constant, but it is " +"helpful and safer than using a static." msgstr "" #: src/basic-syntax/static-and-const.md:61 @@ -4214,10 +4046,8 @@ msgstr "" msgid "Has an address in memory" msgstr "" -#: src/basic-syntax/static-and-const.md:67 -#: src/basic-syntax/static-and-const.md:68 -#: src/basic-syntax/static-and-const.md:70 -#: src/basic-syntax/static-and-const.md:71 +#: src/basic-syntax/static-and-const.md:67 src/basic-syntax/static-and-const.md:68 +#: src/basic-syntax/static-and-const.md:70 src/basic-syntax/static-and-const.md:71 msgid "Yes" msgstr "" @@ -4229,8 +4059,7 @@ msgstr "" msgid "Lives for the entire duration of the program" msgstr "" -#: src/basic-syntax/static-and-const.md:68 -#: src/basic-syntax/static-and-const.md:69 +#: src/basic-syntax/static-and-const.md:68 src/basic-syntax/static-and-const.md:69 #: src/basic-syntax/static-and-const.md:71 msgid "No" msgstr "" @@ -4257,8 +4086,8 @@ msgstr "" #: src/basic-syntax/scopes-shadowing.md:3 msgid "" -"You can shadow variables, both those from outer scopes and variables from " -"the same scope:" +"You can shadow variables, both those from outer scopes and variables from the same " +"scope:" msgstr "" #: src/basic-syntax/scopes-shadowing.md:6 @@ -4283,9 +4112,9 @@ msgstr "" #: src/basic-syntax/scopes-shadowing.md:25 msgid "" -"Definition: Shadowing is different from mutation, because after shadowing " -"both variable's memory locations exist at the same time. Both are available " -"under the same name, depending where you use it in the code. " +"Definition: Shadowing is different from mutation, because after shadowing both " +"variable's memory locations exist at the same time. Both are available under the same " +"name, depending where you use it in the code. " msgstr "" #: src/basic-syntax/scopes-shadowing.md:26 @@ -4294,15 +4123,14 @@ msgstr "" #: src/basic-syntax/scopes-shadowing.md:27 msgid "" -"Shadowing looks obscure at first, but is convenient for holding on to values " -"after `.unwrap()`." +"Shadowing looks obscure at first, but is convenient for holding on to values after `." +"unwrap()`." msgstr "" #: src/basic-syntax/scopes-shadowing.md:28 msgid "" -"The following code demonstrates why the compiler can't simply reuse memory " -"locations when shadowing an immutable variable in a scope, even if the type " -"does not change." +"The following code demonstrates why the compiler can't simply reuse memory locations " +"when shadowing an immutable variable in a scope, even if the type does not change." msgstr "" #: src/basic-syntax/scopes-shadowing.md:30 @@ -4319,8 +4147,7 @@ msgstr "" #: src/enums.md:3 msgid "" -"The `enum` keyword allows the creation of a type which has a few different " -"variants:" +"The `enum` keyword allows the creation of a type which has a few different variants:" msgstr "" #: src/enums.md:6 @@ -4358,8 +4185,8 @@ msgstr "" #: src/enums.md:37 msgid "" -"This page offers an enum type `CoinFlip` with two variants `Heads` and " -"`Tails`. You might note the namespace when using variants." +"This page offers an enum type `CoinFlip` with two variants `Heads` and `Tails`. You " +"might note the namespace when using variants." msgstr "" #: src/enums.md:38 @@ -4368,8 +4195,8 @@ msgstr "" #: src/enums.md:39 msgid "" -"In both, you can have a simple version without fields (unit struct) or one " -"with different types of fields (variant payloads). " +"In both, you can have a simple version without fields (unit struct) or one with " +"different types of fields (variant payloads). " msgstr "" #: src/enums.md:40 @@ -4378,15 +4205,14 @@ msgstr "" #: src/enums.md:41 msgid "" -"You could even implement the different variants of an enum with separate " -"structs but then they wouldn’t be the same type as they would if they were " -"all defined in an enum. " +"You could even implement the different variants of an enum with separate structs but " +"then they wouldn’t be the same type as they would if they were all defined in an enum. " msgstr "" #: src/enums/variant-payloads.md:3 msgid "" -"You can define richer enums where the variants carry data. You can then use " -"the `match` statement to extract the data from each variant:" +"You can define richer enums where the variants carry data. You can then use the `match` " +"statement to extract the data from each variant:" msgstr "" #: src/enums/variant-payloads.md:6 @@ -4421,33 +4247,32 @@ msgstr "" #: src/enums/variant-payloads.md:35 msgid "" -"The values in the enum variants can only be accessed after being pattern " -"matched. The pattern binds references to the fields in the \"match arm\" " -"after the `=>`." +"The values in the enum variants can only be accessed after being pattern matched. The " +"pattern binds references to the fields in the \"match arm\" after the `=>`." msgstr "" #: src/enums/variant-payloads.md:36 msgid "" -"The expression is matched against the patterns from top to bottom. There is " -"no fall-through like in C or C++." +"The expression is matched against the patterns from top to bottom. There is no fall-" +"through like in C or C++." msgstr "" #: src/enums/variant-payloads.md:37 msgid "" -"The match expression has a value. The value is the last expression in the " -"match arm which was executed." +"The match expression has a value. The value is the last expression in the match arm " +"which was executed." msgstr "" #: src/enums/variant-payloads.md:38 msgid "" -"Starting from the top we look for what pattern matches the value then run " -"the code following the arrow. Once we find a match, we stop. " +"Starting from the top we look for what pattern matches the value then run the code " +"following the arrow. Once we find a match, we stop. " msgstr "" #: src/enums/variant-payloads.md:39 msgid "" -"Demonstrate what happens when the search is inexhaustive. Note the advantage " -"the Rust compiler provides by confirming when all cases are handled. " +"Demonstrate what happens when the search is inexhaustive. Note the advantage the Rust " +"compiler provides by confirming when all cases are handled. " msgstr "" #: src/enums/variant-payloads.md:40 @@ -4455,28 +4280,24 @@ msgid "`match` inspects a hidden discriminant field in the `enum`." msgstr "" #: src/enums/variant-payloads.md:41 -msgid "" -"It is possible to retrieve the discriminant by calling `std::mem::" -"discriminant()`" +msgid "It is possible to retrieve the discriminant by calling `std::mem::discriminant()`" msgstr "" #: src/enums/variant-payloads.md:42 msgid "" -"This is useful, for example, if implementing `PartialEq` for structs where " -"comparing field values doesn't affect equality." +"This is useful, for example, if implementing `PartialEq` for structs where comparing " +"field values doesn't affect equality." msgstr "" #: src/enums/variant-payloads.md:43 msgid "" -"`WebEvent::Click { ... }` is not exactly the same as `WebEvent::" -"Click(Click)` with a top level `struct Click { ... }`. The inlined version " -"cannot implement traits, for example." +"`WebEvent::Click { ... }` is not exactly the same as `WebEvent::Click(Click)` with a " +"top level `struct Click { ... }`. The inlined version cannot implement traits, for " +"example." msgstr "" #: src/enums/sizes.md:3 -msgid "" -"Rust enums are packed tightly, taking constraints due to alignment into " -"account:" +msgid "Rust enums are packed tightly, taking constraints due to alignment into account:" msgstr "" #: src/enums/sizes.md:5 @@ -4502,20 +4323,15 @@ msgid "" msgstr "" #: src/enums/sizes.md:24 -msgid "" -"See the [Rust Reference](https://doc.rust-lang.org/reference/type-layout." -"html)." +msgid "See the [Rust Reference](https://doc.rust-lang.org/reference/type-layout.html)." msgstr "" #: src/enums/sizes.md:30 -msgid "" -"Internally Rust is using a field (discriminant) to keep track of the enum " -"variant." +msgid "Internally Rust is using a field (discriminant) to keep track of the enum variant." msgstr "" #: src/enums/sizes.md:32 -msgid "" -"You can control the discriminant if needed (e.g., for compatibility with C):" +msgid "You can control the discriminant if needed (e.g., for compatibility with C):" msgstr "" #: src/enums/sizes.md:34 @@ -4537,9 +4353,7 @@ msgid "" msgstr "" #: src/enums/sizes.md:49 -msgid "" -"Without `repr`, the discriminant type takes 2 bytes, because 10001 fits 2 " -"bytes." +msgid "Without `repr`, the discriminant type takes 2 bytes, because 10001 fits 2 bytes." msgstr "" #: src/enums/sizes.md:53 @@ -4552,8 +4366,7 @@ msgstr "" #: src/enums/sizes.md:56 msgid "" -"`dbg_size!(Option)`: size 1 bytes, align: 1 bytes (niche optimization, " -"see below)," +"`dbg_size!(Option)`: size 1 bytes, align: 1 bytes (niche optimization, see below)," msgstr "" #: src/enums/sizes.md:57 @@ -4562,28 +4375,25 @@ msgstr "" #: src/enums/sizes.md:58 msgid "" -"`dbg_size!(Option<&i32>)`: size 8 bytes, align: 8 bytes (null pointer " -"optimization, see below)." +"`dbg_size!(Option<&i32>)`: size 8 bytes, align: 8 bytes (null pointer optimization, see " +"below)." msgstr "" #: src/enums/sizes.md:60 -msgid "" -"Niche optimization: Rust will merge unused bit patterns for the enum " -"discriminant." +msgid "Niche optimization: Rust will merge unused bit patterns for the enum discriminant." msgstr "" #: src/enums/sizes.md:63 msgid "" -"Null pointer optimization: For [some types](https://doc.rust-lang.org/std/" -"option/#representation), Rust guarantees that `size_of::()` equals " -"`size_of::>()`." +"Null pointer optimization: For [some types](https://doc.rust-lang.org/std/option/" +"#representation), Rust guarantees that `size_of::()` equals `size_of::>()`." msgstr "" #: src/enums/sizes.md:67 msgid "" -"Example code if you want to show how the bitwise representation _may_ look " -"like in practice. It's important to note that the compiler provides no " -"guarantees regarding this representation, therefore this is totally unsafe." +"Example code if you want to show how the bitwise representation _may_ look like in " +"practice. It's important to note that the compiler provides no guarantees regarding " +"this representation, therefore this is totally unsafe." msgstr "" #: src/enums/sizes.md:70 @@ -4593,8 +4403,7 @@ msgid "" "\n" "macro_rules! dbg_bits {\n" " ($e:expr, $bit_type:ty) => {\n" -" println!(\"- {}: {:#x}\", stringify!($e), transmute::<_, " -"$bit_type>($e));\n" +" println!(\"- {}: {:#x}\", stringify!($e), transmute::<_, $bit_type>($e));\n" " };\n" "}\n" "\n" @@ -4627,8 +4436,8 @@ msgstr "" #: src/enums/sizes.md:105 msgid "" -"More complex example if you want to discuss what happens when we chain more " -"than 256 `Option`s together." +"More complex example if you want to discuss what happens when we chain more than 256 " +"`Option`s together." msgstr "" #: src/enums/sizes.md:107 @@ -4640,13 +4449,11 @@ msgid "" "\n" "macro_rules! dbg_bits {\n" " ($e:expr, $bit_type:ty) => {\n" -" println!(\"- {}: {:#x}\", stringify!($e), transmute::<_, " -"$bit_type>($e));\n" +" println!(\"- {}: {:#x}\", stringify!($e), transmute::<_, $bit_type>($e));\n" " };\n" "}\n" "\n" -"// Macro to wrap a value in 2^n Some() where n is the number of \"@\" " -"signs.\n" +"// Macro to wrap a value in 2^n Some() where n is the number of \"@\" signs.\n" "// Increasing the recursion limit is required to evaluate this macro.\n" "macro_rules! many_options {\n" " ($value:expr) => { Some($value) };\n" @@ -4664,8 +4471,7 @@ msgid "" " unsafe {\n" " assert_eq!(many_options!(false), Some(false));\n" " assert_eq!(many_options!(false, @), Some(Some(false)));\n" -" assert_eq!(many_options!(false, @@), " -"Some(Some(Some(Some(false)))));\n" +" assert_eq!(many_options!(false, @@), Some(Some(Some(Some(false)))));\n" "\n" " println!(\"Bitwise representation of a chain of 128 Option's.\");\n" " dbg_bits!(many_options!(false, @@@@@@@), u8);\n" @@ -4686,8 +4492,8 @@ msgstr "" #: src/control-flow/novel.md:3 msgid "" -"Rust has a few control flow constructs which differ from other languages. " -"They are used for pattern matching:" +"Rust has a few control flow constructs which differ from other languages. They are used " +"for pattern matching:" msgstr "" #: src/control-flow/novel.md:6 src/control-flow/if-let-expressions.md:1 @@ -4705,9 +4511,9 @@ msgstr "" #: src/control-flow/if-let-expressions.md:3 msgid "" -"The [`if let` expression](https://doc.rust-lang.org/reference/expressions/if-" -"expr.html#if-let-expressions) lets you execute different code depending on " -"whether a value matches a pattern:" +"The [`if let` expression](https://doc.rust-lang.org/reference/expressions/if-expr." +"html#if-let-expressions) lets you execute different code depending on whether a value " +"matches a pattern:" msgstr "" #: src/control-flow/if-let-expressions.md:7 @@ -4724,18 +4530,16 @@ msgid "" "```" msgstr "" -#: src/control-flow/if-let-expressions.md:18 -#: src/control-flow/while-let-expressions.md:21 +#: src/control-flow/if-let-expressions.md:18 src/control-flow/while-let-expressions.md:21 #: src/control-flow/match-expressions.md:23 msgid "" -"See [pattern matching](../pattern-matching.md) for more details on patterns " -"in Rust." +"See [pattern matching](../pattern-matching.md) for more details on patterns in Rust." msgstr "" #: src/control-flow/if-let-expressions.md:23 msgid "" -"Unlike `match`, `if let` does not have to cover all branches. This can make " -"it more concise than `match`." +"Unlike `match`, `if let` does not have to cover all branches. This can make it more " +"concise than `match`." msgstr "" #: src/control-flow/if-let-expressions.md:24 @@ -4743,16 +4547,15 @@ msgid "A common usage is handling `Some` values when working with `Option`." msgstr "" #: src/control-flow/if-let-expressions.md:25 -msgid "" -"Unlike `match`, `if let` does not support guard clauses for pattern matching." +msgid "Unlike `match`, `if let` does not support guard clauses for pattern matching." msgstr "" #: src/control-flow/if-let-expressions.md:26 msgid "" -"Since 1.65, a similar [let-else](https://doc.rust-lang.org/rust-by-example/" -"flow_control/let_else.html) construct allows to do a destructuring " -"assignment, or if it fails, execute a block which is required to abort " -"normal control flow (with `panic`/`return`/`break`/`continue`):" +"Since 1.65, a similar [let-else](https://doc.rust-lang.org/rust-by-example/flow_control/" +"let_else.html) construct allows to do a destructuring assignment, or if it fails, " +"execute a block which is required to abort normal control flow (with `panic`/`return`/" +"`break`/`continue`):" msgstr "" #: src/control-flow/if-let-expressions.md:28 @@ -4779,9 +4582,9 @@ msgstr "" #: src/control-flow/while-let-expressions.md:3 msgid "" -"Like with `if let`, there is a [`while let`](https://doc.rust-lang.org/" -"reference/expressions/loop-expr.html#predicate-pattern-loops) variant which " -"repeatedly tests a value against a pattern:" +"Like with `if let`, there is a [`while let`](https://doc.rust-lang.org/reference/" +"expressions/loop-expr.html#predicate-pattern-loops) variant which repeatedly tests a " +"value against a pattern:" msgstr "" #: src/control-flow/while-let-expressions.md:6 @@ -4800,30 +4603,29 @@ msgstr "" #: src/control-flow/while-let-expressions.md:17 msgid "" -"Here the iterator returned by `v.into_iter()` will return a `Option` on " -"every call to `next()`. It returns `Some(x)` until it is done, after which " -"it will return `None`. The `while let` lets us keep iterating through all " -"items." +"Here the iterator returned by `v.into_iter()` will return a `Option` on every call " +"to `next()`. It returns `Some(x)` until it is done, after which it will return `None`. " +"The `while let` lets us keep iterating through all items." msgstr "" #: src/control-flow/while-let-expressions.md:26 msgid "" -"Point out that the `while let` loop will keep going as long as the value " -"matches the pattern." +"Point out that the `while let` loop will keep going as long as the value matches the " +"pattern." msgstr "" #: src/control-flow/while-let-expressions.md:27 msgid "" -"You could rewrite the `while let` loop as an infinite loop with an if " -"statement that breaks when there is no value to unwrap for `iter.next()`. " -"The `while let` provides syntactic sugar for the above scenario." +"You could rewrite the `while let` loop as an infinite loop with an if statement that " +"breaks when there is no value to unwrap for `iter.next()`. The `while let` provides " +"syntactic sugar for the above scenario." msgstr "" #: src/control-flow/match-expressions.md:3 msgid "" -"The [`match` keyword](https://doc.rust-lang.org/reference/expressions/match-" -"expr.html) is used to match a value against one or more patterns. In that " -"sense, it works like a series of `if let` expressions:" +"The [`match` keyword](https://doc.rust-lang.org/reference/expressions/match-expr.html) " +"is used to match a value against one or more patterns. In that sense, it works like a " +"series of `if let` expressions:" msgstr "" #: src/control-flow/match-expressions.md:7 @@ -4844,8 +4646,8 @@ msgstr "" #: src/control-flow/match-expressions.md:20 msgid "" -"Like `if let`, each match arm must have the same type. The type is the last " -"expression of the block, if any. In the example above, the type is `()`." +"Like `if let`, each match arm must have the same type. The type is the last expression " +"of the block, if any. In the example above, the type is `()`." msgstr "" #: src/control-flow/match-expressions.md:28 @@ -4858,25 +4660,24 @@ msgstr "" #: src/control-flow/match-expressions.md:30 msgid "" -"`std::env::args().next()` returns an `Option`, but we cannot match " -"against `String`." +"`std::env::args().next()` returns an `Option`, but we cannot match against " +"`String`." msgstr "" #: src/control-flow/match-expressions.md:31 msgid "" -"`as_deref()` transforms an `Option` to `Option<&T::Target>`. In our case, " -"this turns `Option` into `Option<&str>`." +"`as_deref()` transforms an `Option` to `Option<&T::Target>`. In our case, this turns " +"`Option` into `Option<&str>`." msgstr "" #: src/control-flow/match-expressions.md:32 -msgid "" -"We can now use pattern matching to match against the `&str` inside `Option`." +msgid "We can now use pattern matching to match against the `&str` inside `Option`." msgstr "" #: src/pattern-matching.md:3 msgid "" -"The `match` keyword let you match a value against one or more _patterns_. " -"The comparisons are done from top to bottom and the first match wins." +"The `match` keyword let you match a value against one or more _patterns_. The " +"comparisons are done from top to bottom and the first match wins." msgstr "" #: src/pattern-matching.md:6 @@ -4904,9 +4705,7 @@ msgid "The `_` pattern is a wildcard pattern which matches any value." msgstr "" #: src/pattern-matching.md:26 -msgid "" -"You might point out how some specific characters are being used when in a " -"pattern" +msgid "You might point out how some specific characters are being used when in a pattern" msgstr "" #: src/pattern-matching.md:27 @@ -4927,8 +4726,8 @@ msgstr "" #: src/pattern-matching.md:31 msgid "" -"It can be useful to show how binding works, by for instance replacing a " -"wildcard character with a variable, or removing the quotes around `q`." +"It can be useful to show how binding works, by for instance replacing a wildcard " +"character with a variable, or removing the quotes around `q`." msgstr "" #: src/pattern-matching.md:32 @@ -4937,15 +4736,14 @@ msgstr "" #: src/pattern-matching.md:33 msgid "" -"This might be a good time to bring up the concept of irrefutable patterns, " -"as the term can show up in error messages." +"This might be a good time to bring up the concept of irrefutable patterns, as the term " +"can show up in error messages." msgstr "" #: src/pattern-matching/destructuring-enums.md:3 msgid "" -"Patterns can also be used to bind variables to parts of your values. This is " -"how you inspect the structure of your types. Let us start with a simple " -"`enum` type:" +"Patterns can also be used to bind variables to parts of your values. This is how you " +"inspect the structure of your types. Let us start with a simple `enum` type:" msgstr "" #: src/pattern-matching/destructuring-enums.md:6 @@ -4976,22 +4774,21 @@ msgstr "" #: src/pattern-matching/destructuring-enums.md:29 msgid "" -"Here we have used the arms to _destructure_ the `Result` value. In the first " -"arm, `half` is bound to the value inside the `Ok` variant. In the second " -"arm, `msg` is bound to the error message." +"Here we have used the arms to _destructure_ the `Result` value. In the first arm, " +"`half` is bound to the value inside the `Ok` variant. In the second arm, `msg` is bound " +"to the error message." msgstr "" #: src/pattern-matching/destructuring-enums.md:36 msgid "" -"The `if`/`else` expression is returning an enum that is later unpacked with " -"a `match`." +"The `if`/`else` expression is returning an enum that is later unpacked with a `match`." msgstr "" #: src/pattern-matching/destructuring-enums.md:37 msgid "" -"You can try adding a third variant to the enum definition and displaying the " -"errors when running the code. Point out the places where your code is now " -"inexhaustive and how the compiler tries to give you hints." +"You can try adding a third variant to the enum definition and displaying the errors " +"when running the code. Point out the places where your code is now inexhaustive and how " +"the compiler tries to give you hints." msgstr "" #: src/pattern-matching/destructuring-structs.md:3 @@ -5012,8 +4809,7 @@ msgid "" " match foo {\n" " Foo { x: (1, b), y } => println!(\"x.0 = 1, b = {b}, y = {y}\"),\n" " Foo { y: 2, x: i } => println!(\"y = 2, x = {i:?}\"),\n" -" Foo { y, .. } => println!(\"y = {y}, other fields were " -"ignored\"),\n" +" Foo { y, .. } => println!(\"y = {y}, other fields were ignored\"),\n" " }\n" "}\n" "```" @@ -5029,14 +4825,13 @@ msgstr "" #: src/pattern-matching/destructuring-structs.md:25 msgid "" -"The distinction between a capture and a constant expression can be hard to " -"spot. Try changing the `2` in the second arm to a variable, and see that it " -"subtly doesn't work. Change it to a `const` and see it working again." +"The distinction between a capture and a constant expression can be hard to spot. Try " +"changing the `2` in the second arm to a variable, and see that it subtly doesn't work. " +"Change it to a `const` and see it working again." msgstr "" #: src/pattern-matching/destructuring-arrays.md:3 -msgid "" -"You can destructure arrays, tuples, and slices by matching on their elements:" +msgid "You can destructure arrays, tuples, and slices by matching on their elements:" msgstr "" #: src/pattern-matching/destructuring-arrays.md:5 @@ -5057,8 +4852,7 @@ msgstr "" #: src/pattern-matching/destructuring-arrays.md:21 msgid "" -"Destructuring of slices of unknown length also works with patterns of fixed " -"length." +"Destructuring of slices of unknown length also works with patterns of fixed length." msgstr "" #: src/pattern-matching/destructuring-arrays.md:24 @@ -5090,9 +4884,7 @@ msgid "Add more values to the array." msgstr "" #: src/pattern-matching/destructuring-arrays.md:43 -msgid "" -"Point out that how `..` will expand to account for different number of " -"elements." +msgid "Point out that how `..` will expand to account for different number of elements." msgstr "" #: src/pattern-matching/destructuring-arrays.md:44 @@ -5101,8 +4893,8 @@ msgstr "" #: src/pattern-matching/match-guards.md:3 msgid "" -"When matching, you can add a _guard_ to a pattern. This is an arbitrary " -"Boolean expression which will be executed if the pattern matches:" +"When matching, you can add a _guard_ to a pattern. This is an arbitrary Boolean " +"expression which will be executed if the pattern matches:" msgstr "" #: src/pattern-matching/match-guards.md:6 @@ -5124,17 +4916,16 @@ msgstr "" #: src/pattern-matching/match-guards.md:23 msgid "" -"Match guards as a separate syntax feature are important and necessary when " -"we wish to concisely express more complex ideas than patterns alone would " -"allow." +"Match guards as a separate syntax feature are important and necessary when we wish to " +"concisely express more complex ideas than patterns alone would allow." msgstr "" #: src/pattern-matching/match-guards.md:24 msgid "" -"They are not the same as separate `if` expression inside of the match arm. " -"An `if` expression inside of the branch block (after `=>`) happens after the " -"match arm is selected. Failing the `if` condition inside of that block won't " -"result in other arms of the original `match` expression being considered." +"They are not the same as separate `if` expression inside of the match arm. An `if` " +"expression inside of the branch block (after `=>`) happens after the match arm is " +"selected. Failing the `if` condition inside of that block won't result in other arms of " +"the original `match` expression being considered." msgstr "" #: src/pattern-matching/match-guards.md:26 @@ -5143,8 +4934,7 @@ msgstr "" #: src/pattern-matching/match-guards.md:27 msgid "" -"The condition defined in the guard applies to every expression in a pattern " -"with an `|`." +"The condition defined in the guard applies to every expression in a pattern with an `|`." msgstr "" #: src/exercises/day-1/afternoon.md:1 @@ -5166,18 +4956,17 @@ msgid "An exercise on pattern matching." msgstr "Enums and pattern matching." #: src/exercises/day-1/afternoon.md:11 src/exercises/day-2/afternoon.md:7 -#: src/exercises/bare-metal/afternoon.md:7 -#: src/exercises/concurrency/afternoon.md:13 +#: src/exercises/bare-metal/afternoon.md:7 src/exercises/concurrency/afternoon.md:13 msgid "" -"After looking at the exercises, you can look at the [solutions](solutions-" -"afternoon.md) provided." +"After looking at the exercises, you can look at the [solutions](solutions-afternoon.md) " +"provided." msgstr "" #: src/exercises/day-1/luhn.md:3 msgid "" -"The [Luhn algorithm](https://en.wikipedia.org/wiki/Luhn_algorithm) is used " -"to validate credit card numbers. The algorithm takes a string as input and " -"does the following to validate the credit card number:" +"The [Luhn algorithm](https://en.wikipedia.org/wiki/Luhn_algorithm) is used to validate " +"credit card numbers. The algorithm takes a string as input and does the following to " +"validate the credit card number:" msgstr "" #: src/exercises/day-1/luhn.md:7 @@ -5186,14 +4975,13 @@ msgstr "" #: src/exercises/day-1/luhn.md:9 msgid "" -"Moving from **right to left**, double every second digit: for the number " -"`1234`, we double `3` and `1`. For the number `98765`, we double `6` and `8`." +"Moving from **right to left**, double every second digit: for the number `1234`, we " +"double `3` and `1`. For the number `98765`, we double `6` and `8`." msgstr "" #: src/exercises/day-1/luhn.md:12 msgid "" -"After doubling a digit, sum the digits. So doubling `7` becomes `14` which " -"becomes `5`." +"After doubling a digit, sum the digits. So doubling `7` becomes `14` which becomes `5`." msgstr "" #: src/exercises/day-1/luhn.md:15 @@ -5205,15 +4993,13 @@ msgid "The credit card number is valid if the sum ends with `0`." msgstr "" #: src/exercises/day-1/luhn.md:19 -msgid "" -"Copy the code below to and implement the " -"function." +msgid "Copy the code below to and implement the function." msgstr "" #: src/exercises/day-1/luhn.md:21 msgid "" -"Try to solve the problem the \"simple\" way first, using `for` loops and " -"integers. Then, revisit the solution and try to implement it with iterators." +"Try to solve the problem the \"simple\" way first, using `for` loops and integers. " +"Then, revisit the solution and try to implement it with iterators." msgstr "" #: src/exercises/day-1/luhn.md:25 @@ -5278,13 +5064,12 @@ msgstr "" #: src/welcome-day-2.md:5 msgid "" -"Memory management: stack vs heap, manual memory management, scope-based " -"memory management, and garbage collection." +"Memory management: stack vs heap, manual memory management, scope-based memory " +"management, and garbage collection." msgstr "" #: src/welcome-day-2.md:8 -msgid "" -"Ownership: move semantics, copying and cloning, borrowing, and lifetimes." +msgid "Ownership: move semantics, copying and cloning, borrowing, and lifetimes." msgstr "" #: src/welcome-day-2.md:10 @@ -5294,8 +5079,7 @@ msgstr "Strings āĻāĻŦāĻ‚ Iterators" #: src/welcome-day-2.md:12 msgid "" -"The Standard Library: `String`, `Option` and `Result`, `Vec`, `HashMap`, " -"`Rc` and `Arc`." +"The Standard Library: `String`, `Option` and `Result`, `Vec`, `HashMap`, `Rc` and `Arc`." msgstr "" #: src/welcome-day-2.md:15 @@ -5312,8 +5096,7 @@ msgstr "" #: src/memory-management.md:6 msgid "" -"Full safety via automatic memory management at runtime: Java, Python, Go, " -"Haskell, ..." +"Full safety via automatic memory management at runtime: Java, Python, Go, Haskell, ..." msgstr "" #: src/memory-management.md:8 @@ -5322,8 +5105,7 @@ msgstr "" #: src/memory-management.md:10 msgid "" -"Full control _and_ safety via compile time enforcement of correct memory " -"management." +"Full control _and_ safety via compile time enforcement of correct memory management." msgstr "" #: src/memory-management.md:13 @@ -5381,8 +5163,8 @@ msgstr "Stack āĻŦāĻ¨āĻžāĻŽ Heap" #: src/memory-management/stack.md:3 msgid "" -"Creating a `String` puts fixed-sized metadata on the stack and dynamically " -"sized data, the actual string, on the heap:" +"Creating a `String` puts fixed-sized metadata on the stack and dynamically sized data, " +"the actual string, on the heap:" msgstr "" #: src/memory-management/stack.md:6 @@ -5413,22 +5195,22 @@ msgstr "" #: src/memory-management/stack.md:28 msgid "" -"Mention that a `String` is backed by a `Vec`, so it has a capacity and " -"length and can grow if mutable via reallocation on the heap." +"Mention that a `String` is backed by a `Vec`, so it has a capacity and length and can " +"grow if mutable via reallocation on the heap." msgstr "" #: src/memory-management/stack.md:30 msgid "" -"If students ask about it, you can mention that the underlying memory is heap " -"allocated using the [System Allocator](https://doc.rust-lang.org/std/alloc/" -"struct.System.html) and custom allocators can be implemented using the " -"[Allocator API](https://doc.rust-lang.org/std/alloc/index.html)" +"If students ask about it, you can mention that the underlying memory is heap allocated " +"using the [System Allocator](https://doc.rust-lang.org/std/alloc/struct.System.html) " +"and custom allocators can be implemented using the [Allocator API](https://doc.rust-" +"lang.org/std/alloc/index.html)" msgstr "" #: src/memory-management/stack.md:32 msgid "" -"We can inspect the memory layout with `unsafe` code. However, you should " -"point out that this is rightfully unsafe!" +"We can inspect the memory layout with `unsafe` code. However, you should point out that " +"this is rightfully unsafe!" msgstr "" #: src/memory-management/stack.md:34 @@ -5439,12 +5221,10 @@ msgid "" " s1.push(' ');\n" " s1.push_str(\"world\");\n" " // DON'T DO THIS AT HOME! For educational purposes only.\n" -" // String provides no guarantees about its layout, so this could lead " -"to\n" +" // String provides no guarantees about its layout, so this could lead to\n" " // undefined behavior.\n" " unsafe {\n" -" let (ptr, capacity, len): (usize, usize, usize) = std::mem::" -"transmute(s1);\n" +" let (ptr, capacity, len): (usize, usize, usize) = std::mem::transmute(s1);\n" " println!(\"ptr = {ptr:#x}, len = {len}, capacity = {capacity}\");\n" " }\n" "}\n" @@ -5457,8 +5237,8 @@ msgstr "āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻœā§‡āĻ‡ heap-memory āĻāĻ˛ā§‹āĻ•ā§‡āĻŸ āĻāĻŦāĻ‚ #: src/memory-management/manual.md:5 msgid "" -"If not done with care, this can lead to crashes, bugs, security " -"vulnerabilities, and memory leaks." +"If not done with care, this can lead to crashes, bugs, security vulnerabilities, and " +"memory leaks." msgstr "" #: src/memory-management/manual.md:7 @@ -5484,28 +5264,25 @@ msgstr "" #: src/memory-management/manual.md:21 msgid "" -"Memory is leaked if the function returns early between `malloc` and `free`: " -"the pointer is lost and we cannot deallocate the memory. Worse, freeing the " -"pointer twice, or accessing a freed pointer can lead to exploitable security " -"vulnerabilities." +"Memory is leaked if the function returns early between `malloc` and `free`: the pointer " +"is lost and we cannot deallocate the memory. Worse, freeing the pointer twice, or " +"accessing a freed pointer can lead to exploitable security vulnerabilities." msgstr "" #: src/memory-management/scope-based.md:3 -msgid "" -"Constructors and destructors let you hook into the lifetime of an object." +msgid "Constructors and destructors let you hook into the lifetime of an object." msgstr "" #: src/memory-management/scope-based.md:5 msgid "" -"By wrapping a pointer in an object, you can free memory when the object is " -"destroyed. The compiler guarantees that this happens, even if an exception " -"is raised." +"By wrapping a pointer in an object, you can free memory when the object is destroyed. " +"The compiler guarantees that this happens, even if an exception is raised." msgstr "" #: src/memory-management/scope-based.md:9 msgid "" -"This is often called _resource acquisition is initialization_ (RAII) and " -"gives you smart pointers." +"This is often called _resource acquisition is initialization_ (RAII) and gives you " +"smart pointers." msgstr "" #: src/memory-management/scope-based.md:12 @@ -5523,8 +5300,8 @@ msgstr "" #: src/memory-management/scope-based.md:20 msgid "" -"The `std::unique_ptr` object is allocated on the stack, and points to memory " -"allocated on the heap." +"The `std::unique_ptr` object is allocated on the stack, and points to memory allocated " +"on the heap." msgstr "" #: src/memory-management/scope-based.md:22 @@ -5536,8 +5313,7 @@ msgid "The destructor frees the `Person` object it points to." msgstr "" #: src/memory-management/scope-based.md:25 -msgid "" -"Special move constructors are used when passing ownership to a function:" +msgid "Special move constructors are used when passing ownership to a function:" msgstr "" #: src/memory-management/scope-based.md:27 @@ -5554,8 +5330,8 @@ msgstr "" #: src/memory-management/garbage-collection.md:3 msgid "" -"An alternative to manual and scope-based memory management is automatic " -"memory management:" +"An alternative to manual and scope-based memory management is automatic memory " +"management:" msgstr "" #: src/memory-management/garbage-collection.md:6 @@ -5563,9 +5339,7 @@ msgid "The programmer never allocates or deallocates memory explicitly." msgstr "" #: src/memory-management/garbage-collection.md:7 -msgid "" -"A garbage collector finds unused memory and deallocates it for the " -"programmer." +msgid "A garbage collector finds unused memory and deallocates it for the programmer." msgstr "" #: src/memory-management/garbage-collection.md:9 @@ -5599,9 +5373,8 @@ msgstr "" #: src/memory-management/rust.md:6 msgid "" -"Depending on which abstraction (or combination of abstractions) you choose, " -"can be a single unique pointer, reference counted, or atomically reference " -"counted." +"Depending on which abstraction (or combination of abstractions) you choose, can be a " +"single unique pointer, reference counted, or atomically reference counted." msgstr "" #: src/memory-management/rust.md:7 @@ -5610,8 +5383,8 @@ msgstr "" #: src/memory-management/rust.md:8 msgid "" -"A Rust user can choose the right abstraction for the situation, some even " -"have no cost at runtime like C." +"A Rust user can choose the right abstraction for the situation, some even have no cost " +"at runtime like C." msgstr "" #: src/memory-management/rust.md:10 @@ -5620,19 +5393,18 @@ msgstr "" #: src/memory-management/rust.md:14 msgid "" -"If asked how at this point, you can mention that in Rust this is usually " -"handled by RAII wrapper types such as [Box](https://doc.rust-lang.org/std/" -"boxed/struct.Box.html), [Vec](https://doc.rust-lang.org/std/vec/struct.Vec." -"html), [Rc](https://doc.rust-lang.org/std/rc/struct.Rc.html), or [Arc]" -"(https://doc.rust-lang.org/std/sync/struct.Arc.html). These encapsulate " -"ownership and memory allocation via various means, and prevent the potential " -"errors in C." +"If asked how at this point, you can mention that in Rust this is usually handled by " +"RAII wrapper types such as [Box](https://doc.rust-lang.org/std/boxed/struct.Box.html), " +"[Vec](https://doc.rust-lang.org/std/vec/struct.Vec.html), [Rc](https://doc.rust-lang." +"org/std/rc/struct.Rc.html), or [Arc](https://doc.rust-lang.org/std/sync/struct.Arc." +"html). These encapsulate ownership and memory allocation via various means, and prevent " +"the potential errors in C." msgstr "" #: src/memory-management/rust.md:16 msgid "" -"You may be asked about destructors here, the [Drop](https://doc.rust-lang." -"org/std/ops/trait.Drop.html) trait is the Rust equivalent." +"You may be asked about destructors here, the [Drop](https://doc.rust-lang.org/std/ops/" +"trait.Drop.html) trait is the Rust equivalent." msgstr "" #: src/memory-management/comparison.md:3 @@ -5660,13 +5432,11 @@ msgstr "" msgid "Fully automatic." msgstr "" -#: src/memory-management/comparison.md:11 -#: src/memory-management/comparison.md:18 +#: src/memory-management/comparison.md:11 src/memory-management/comparison.md:18 msgid "Safe and correct." msgstr "" -#: src/memory-management/comparison.md:12 -#: src/memory-management/comparison.md:29 +#: src/memory-management/comparison.md:12 src/memory-management/comparison.md:29 msgid "Scope-based like C++:" msgstr "" @@ -5732,8 +5502,8 @@ msgstr "" #: src/ownership.md:3 msgid "" -"All variable bindings have a _scope_ where they are valid and it is an error " -"to use a variable outside its scope:" +"All variable bindings have a _scope_ where they are valid and it is an error to use a " +"variable outside its scope:" msgstr "" #: src/ownership.md:6 @@ -5752,8 +5522,7 @@ msgid "" msgstr "" #: src/ownership.md:18 -msgid "" -"At the end of the scope, the variable is _dropped_ and the data is freed." +msgid "At the end of the scope, the variable is _dropped_ and the data is freed." msgstr "" #: src/ownership.md:19 @@ -5798,20 +5567,19 @@ msgstr "" #: src/ownership/move-semantics.md:21 msgid "" -"Mention that this is the opposite of the defaults in C++, which copies by " -"value unless you use `std::move` (and the move constructor is defined!)." +"Mention that this is the opposite of the defaults in C++, which copies by value unless " +"you use `std::move` (and the move constructor is defined!)." msgstr "" #: src/ownership/move-semantics.md:23 msgid "" -"It is only the ownership that moves. Whether any machine code is generated " -"to manipulate the data itself is a matter of optimization, and such copies " -"are aggressively optimized away." +"It is only the ownership that moves. Whether any machine code is generated to " +"manipulate the data itself is a matter of optimization, and such copies are " +"aggressively optimized away." msgstr "" #: src/ownership/move-semantics.md:25 -msgid "" -"Simple values (such as integers) can be marked `Copy` (see later slides)." +msgid "Simple values (such as integers) can be marked `Copy` (see later slides)." msgstr "" #: src/ownership/move-semantics.md:27 @@ -5904,8 +5672,7 @@ msgid "" msgstr "" #: src/ownership/double-free-modern-cpp.md:10 -msgid "" -"The heap data from `s1` is duplicated and `s2` gets its own independent copy." +msgid "The heap data from `s1` is duplicated and `s2` gets its own independent copy." msgstr "" #: src/ownership/double-free-modern-cpp.md:11 @@ -5963,8 +5730,8 @@ msgstr "" #: src/ownership/moves-function-calls.md:3 msgid "" -"When you pass a value to a function, the value is assigned to the function " -"parameter. This transfers ownership:" +"When you pass a value to a function, the value is assigned to the function parameter. " +"This transfers ownership:" msgstr "" #: src/ownership/moves-function-calls.md:6 @@ -5984,37 +5751,35 @@ msgstr "" #: src/ownership/moves-function-calls.md:20 msgid "" -"With the first call to `say_hello`, `main` gives up ownership of `name`. " -"Afterwards, `name` cannot be used anymore within `main`." +"With the first call to `say_hello`, `main` gives up ownership of `name`. Afterwards, " +"`name` cannot be used anymore within `main`." msgstr "" #: src/ownership/moves-function-calls.md:21 msgid "" -"The heap memory allocated for `name` will be freed at the end of the " -"`say_hello` function." +"The heap memory allocated for `name` will be freed at the end of the `say_hello` " +"function." msgstr "" #: src/ownership/moves-function-calls.md:22 msgid "" -"`main` can retain ownership if it passes `name` as a reference (`&name`) and " -"if `say_hello` accepts a reference as a parameter." +"`main` can retain ownership if it passes `name` as a reference (`&name`) and if " +"`say_hello` accepts a reference as a parameter." msgstr "" #: src/ownership/moves-function-calls.md:23 msgid "" -"Alternatively, `main` can pass a clone of `name` in the first call (`name." -"clone()`)." +"Alternatively, `main` can pass a clone of `name` in the first call (`name.clone()`)." msgstr "" #: src/ownership/moves-function-calls.md:24 msgid "" -"Rust makes it harder than C++ to inadvertently create copies by making move " -"semantics the default, and by forcing programmers to make clones explicit." +"Rust makes it harder than C++ to inadvertently create copies by making move semantics " +"the default, and by forcing programmers to make clones explicit." msgstr "" #: src/ownership/copy-clone.md:3 -msgid "" -"While move semantics are the default, certain types are copied by default:" +msgid "While move semantics are the default, certain types are copied by default:" msgstr "" #: src/ownership/copy-clone.md:5 @@ -6066,19 +5831,18 @@ msgstr "" #: src/ownership/copy-clone.md:37 msgid "" -"Copying refers to bitwise copies of memory regions and does not work on " -"arbitrary objects." +"Copying refers to bitwise copies of memory regions and does not work on arbitrary " +"objects." msgstr "" #: src/ownership/copy-clone.md:38 -msgid "" -"Copying does not allow for custom logic (unlike copy constructors in C++)." +msgid "Copying does not allow for custom logic (unlike copy constructors in C++)." msgstr "" #: src/ownership/copy-clone.md:39 msgid "" -"Cloning is a more general operation and also allows for custom behavior by " -"implementing the `Clone` trait." +"Cloning is a more general operation and also allows for custom behavior by implementing " +"the `Clone` trait." msgstr "" #: src/ownership/copy-clone.md:40 @@ -6091,14 +5855,14 @@ msgstr "" #: src/ownership/copy-clone.md:44 msgid "" -"Add a `String` field to `struct Point`. It will not compile because `String` " -"is not a `Copy` type." +"Add a `String` field to `struct Point`. It will not compile because `String` is not a " +"`Copy` type." msgstr "" #: src/ownership/copy-clone.md:45 msgid "" -"Remove `Copy` from the `derive` attribute. The compiler error is now in the " -"`println!` for `p1`." +"Remove `Copy` from the `derive` attribute. The compiler error is now in the `println!` " +"for `p1`." msgstr "" #: src/ownership/copy-clone.md:46 @@ -6107,15 +5871,15 @@ msgstr "" #: src/ownership/copy-clone.md:48 msgid "" -"If students ask about `derive`, it is sufficient to say that this is a way " -"to generate code in Rust at compile time. In this case the default " -"implementations of `Copy` and `Clone` traits are generated." +"If students ask about `derive`, it is sufficient to say that this is a way to generate " +"code in Rust at compile time. In this case the default implementations of `Copy` and " +"`Clone` traits are generated." msgstr "" #: src/ownership/borrowing.md:3 msgid "" -"Instead of transferring ownership when calling a function, you can let a " -"function _borrow_ the value:" +"Instead of transferring ownership when calling a function, you can let a function " +"_borrow_ the value:" msgstr "" #: src/ownership/borrowing.md:6 @@ -6151,12 +5915,11 @@ msgstr "" #: src/ownership/borrowing.md:28 msgid "" -"Demonstrate that the return from `add` is cheap because the compiler can " -"eliminate the copy operation. Change the above code to print stack addresses " -"and run it on the [Playground](https://play.rust-lang.org/) or look at the " -"assembly in [Godbolt](https://rust.godbolt.org/). In the \"DEBUG\" " -"optimization level, the addresses should change, while they stay the same " -"when changing to the \"RELEASE\" setting:" +"Demonstrate that the return from `add` is cheap because the compiler can eliminate the " +"copy operation. Change the above code to print stack addresses and run it on the " +"[Playground](https://play.rust-lang.org/) or look at the assembly in [Godbolt](https://" +"rust.godbolt.org/). In the \"DEBUG\" optimization level, the addresses should change, " +"while they stay the same when changing to the \"RELEASE\" setting:" msgstr "" #: src/ownership/borrowing.md:30 @@ -6188,9 +5951,8 @@ msgstr "" #: src/ownership/borrowing.md:49 msgid "" "In C++, copy elision has to be defined in the language specification because " -"constructors can have side effects. In Rust, this is not an issue at all. If " -"RVO did not happen, Rust will always perform a simple and efficient `memcpy` " -"copy." +"constructors can have side effects. In Rust, this is not an issue at all. If RVO did " +"not happen, Rust will always perform a simple and efficient `memcpy` copy." msgstr "" #: src/ownership/shared-unique-borrows.md:3 @@ -6225,21 +5987,21 @@ msgstr "" #: src/ownership/shared-unique-borrows.md:25 msgid "" -"The above code does not compile because `a` is borrowed as mutable (through " -"`c`) and as immutable (through `b`) at the same time." +"The above code does not compile because `a` is borrowed as mutable (through `c`) and as " +"immutable (through `b`) at the same time." msgstr "" #: src/ownership/shared-unique-borrows.md:26 msgid "" -"Move the `println!` statement for `b` before the scope that introduces `c` " -"to make the code compile." +"Move the `println!` statement for `b` before the scope that introduces `c` to make the " +"code compile." msgstr "" #: src/ownership/shared-unique-borrows.md:27 msgid "" -"After that change, the compiler realizes that `b` is only ever used before " -"the new mutable borrow of `a` through `c`. This is a feature of the borrow " -"checker called \"non-lexical lifetimes\"." +"After that change, the compiler realizes that `b` is only ever used before the new " +"mutable borrow of `a` through `c`. This is a feature of the borrow checker called \"non-" +"lexical lifetimes\"." msgstr "" #: src/ownership/lifetimes.md:3 @@ -6256,33 +6018,29 @@ msgstr "" #: src/ownership/lifetimes.md:7 src/ownership/lifetimes-function-calls.md:23 msgid "" -"Read `&'a Point` as \"a borrowed `Point` which is valid for at least the " -"lifetime `a`\"." +"Read `&'a Point` as \"a borrowed `Point` which is valid for at least the lifetime `a`\"." msgstr "" #: src/ownership/lifetimes.md:9 msgid "" -"Lifetimes are always inferred by the compiler: you cannot assign a lifetime " -"yourself." +"Lifetimes are always inferred by the compiler: you cannot assign a lifetime yourself." msgstr "" #: src/ownership/lifetimes.md:11 msgid "" -"Lifetime annotations create constraints; the compiler verifies that there is " -"a valid solution." +"Lifetime annotations create constraints; the compiler verifies that there is a valid " +"solution." msgstr "" #: src/ownership/lifetimes.md:13 msgid "" -"Lifetimes for function arguments and return values must be fully specified, " -"but Rust allows lifetimes to be elided in most cases with [a few simple " -"rules](https://doc.rust-lang.org/nomicon/lifetime-elision.html)." +"Lifetimes for function arguments and return values must be fully specified, but Rust " +"allows lifetimes to be elided in most cases with [a few simple rules](https://doc.rust-" +"lang.org/nomicon/lifetime-elision.html)." msgstr "" #: src/ownership/lifetimes-function-calls.md:3 -msgid "" -"In addition to borrowing its arguments, a function can return a borrowed " -"value:" +msgid "In addition to borrowing its arguments, a function can return a borrowed value:" msgstr "" #: src/ownership/lifetimes-function-calls.md:5 @@ -6313,14 +6071,13 @@ msgid "Lifetimes start with `'` and `'a` is a typical default name." msgstr "" #: src/ownership/lifetimes-function-calls.md:25 -msgid "" -"The _at least_ part is important when parameters are in different scopes." +msgid "The _at least_ part is important when parameters are in different scopes." msgstr "" #: src/ownership/lifetimes-function-calls.md:31 msgid "" -"Move the declaration of `p2` and `p3` into a new scope (`{ ... }`), " -"resulting in the following code:" +"Move the declaration of `p2` and `p3` into a new scope (`{ ... }`), resulting in the " +"following code:" msgstr "" #: src/ownership/lifetimes-function-calls.md:32 @@ -6351,9 +6108,9 @@ msgstr "" #: src/ownership/lifetimes-function-calls.md:52 msgid "" -"Reset the workspace and change the function signature to `fn left_most<'a, " -"'b>(p1: &'a Point, p2: &'a Point) -> &'b Point`. This will not compile " -"because the relationship between the lifetimes `'a` and `'b` is unclear." +"Reset the workspace and change the function signature to `fn left_most<'a, 'b>(p1: &'a " +"Point, p2: &'a Point) -> &'b Point`. This will not compile because the relationship " +"between the lifetimes `'a` and `'b` is unclear." msgstr "" #: src/ownership/lifetimes-function-calls.md:53 @@ -6362,25 +6119,22 @@ msgstr "" #: src/ownership/lifetimes-function-calls.md:54 msgid "" -"Two references to two values are borrowed by a function and the function " -"returns another reference." +"Two references to two values are borrowed by a function and the function returns " +"another reference." msgstr "" #: src/ownership/lifetimes-function-calls.md:56 -msgid "" -"It must have come from one of those two inputs (or from a global variable)." +msgid "It must have come from one of those two inputs (or from a global variable)." msgstr "" #: src/ownership/lifetimes-function-calls.md:57 msgid "" -"Which one is it? The compiler needs to know, so at the call site the " -"returned reference is not used for longer than a variable from where the " -"reference came from." +"Which one is it? The compiler needs to know, so at the call site the returned reference " +"is not used for longer than a variable from where the reference came from." msgstr "" #: src/ownership/lifetimes-data-structures.md:3 -msgid "" -"If a data type stores borrowed data, it must be annotated with a lifetime:" +msgid "If a data type stores borrowed data, it must be annotated with a lifetime:" msgstr "" #: src/ownership/lifetimes-data-structures.md:5 @@ -6394,8 +6148,7 @@ msgid "" "}\n" "\n" "fn main() {\n" -" let text = String::from(\"The quick brown fox jumps over the lazy dog." -"\");\n" +" let text = String::from(\"The quick brown fox jumps over the lazy dog.\");\n" " let fox = Highlight(&text[4..19]);\n" " let dog = Highlight(&text[35..43]);\n" " // erase(text);\n" @@ -6407,22 +6160,22 @@ msgstr "" #: src/ownership/lifetimes-data-structures.md:25 msgid "" -"In the above example, the annotation on `Highlight` enforces that the data " -"underlying the contained `&str` lives at least as long as any instance of " -"`Highlight` that uses that data." +"In the above example, the annotation on `Highlight` enforces that the data underlying " +"the contained `&str` lives at least as long as any instance of `Highlight` that uses " +"that data." msgstr "" #: src/ownership/lifetimes-data-structures.md:26 msgid "" -"If `text` is consumed before the end of the lifetime of `fox` (or `dog`), " -"the borrow checker throws an error." +"If `text` is consumed before the end of the lifetime of `fox` (or `dog`), the borrow " +"checker throws an error." msgstr "" #: src/ownership/lifetimes-data-structures.md:27 msgid "" -"Types with borrowed data force users to hold on to the original data. This " -"can be useful for creating lightweight views, but it generally makes them " -"somewhat harder to use." +"Types with borrowed data force users to hold on to the original data. This can be " +"useful for creating lightweight views, but it generally makes them somewhat harder to " +"use." msgstr "" #: src/ownership/lifetimes-data-structures.md:28 @@ -6432,9 +6185,9 @@ msgstr "" #: src/ownership/lifetimes-data-structures.md:29 msgid "" "Some structs with multiple references inside can have more than one lifetime " -"annotation. This can be necessary if there is a need to describe lifetime " -"relationships between the references themselves, in addition to the lifetime " -"of the struct itself. Those are very advanced use cases." +"annotation. This can be necessary if there is a need to describe lifetime relationships " +"between the references themselves, in addition to the lifetime of the struct itself. " +"Those are very advanced use cases." msgstr "" #: src/exercises/day-2/morning.md:1 @@ -6455,8 +6208,8 @@ msgstr "" #: src/exercises/day-2/book-library.md:3 msgid "" -"We will learn much more about structs and the `Vec` type tomorrow. For " -"now, you just need to know part of its API:" +"We will learn much more about structs and the `Vec` type tomorrow. For now, you just " +"need to know part of its API:" msgstr "" #: src/exercises/day-2/book-library.md:6 @@ -6476,8 +6229,8 @@ msgstr "" #: src/exercises/day-2/book-library.md:18 msgid "" -"Use this to model a library's book collection. Copy the code below to " -" and update the types to make it compile:" +"Use this to model a library's book collection. Copy the code below to and update the types to make it compile:" msgstr "" #: src/exercises/day-2/book-library.md:21 @@ -6526,8 +6279,7 @@ msgid "" " //}\n" "\n" " //fn print_books(self) {\n" -" // todo!(\"Iterate over `self.books` and each book's title and " -"year\")\n" +" // todo!(\"Iterate over `self.books` and each book's title and year\")\n" " //}\n" "\n" " //fn oldest_book(self) -> Option<&Book> {\n" @@ -6546,11 +6298,10 @@ msgid "" "is_empty());\n" " //\n" " //library.add_book(Book::new(\"Lord of the Rings\", 1954));\n" -" //library.add_book(Book::new(\"Alice's Adventures in Wonderland\", " -"1865));\n" +" //library.add_book(Book::new(\"Alice's Adventures in Wonderland\", 1865));\n" " //\n" -" //println!(\"The library is no longer empty: library.is_empty() -> {}\", " -"library.is_empty());\n" +" //println!(\"The library is no longer empty: library.is_empty() -> {}\", library." +"is_empty());\n" " //\n" " //\n" " //library.print_books();\n" @@ -6572,10 +6323,9 @@ msgstr "" #: src/exercises/day-2/iterators-and-ownership.md:3 msgid "" -"The ownership model of Rust affects many APIs. An example of this is the " -"[`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) and " -"[`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator.html) " -"traits." +"The ownership model of Rust affects many APIs. An example of this is the [`Iterator`]" +"(https://doc.rust-lang.org/std/iter/trait.Iterator.html) and [`IntoIterator`](https://" +"doc.rust-lang.org/std/iter/trait.IntoIterator.html) traits." msgstr "" #: src/exercises/day-2/iterators-and-ownership.md:8 src/bare-metal/no_std.md:28 @@ -6584,9 +6334,8 @@ msgstr "" #: src/exercises/day-2/iterators-and-ownership.md:10 msgid "" -"Traits are like interfaces: they describe behavior (methods) for a type. The " -"`Iterator` trait simply says that you can call `next` until you get `None` " -"back:" +"Traits are like interfaces: they describe behavior (methods) for a type. The `Iterator` " +"trait simply says that you can call `next` until you get `None` back:" msgstr "" #: src/exercises/day-2/iterators-and-ownership.md:13 @@ -6645,9 +6394,8 @@ msgstr "" #: src/exercises/day-2/iterators-and-ownership.md:50 msgid "" -"The `Iterator` trait tells you how to _iterate_ once you have created an " -"iterator. The related trait `IntoIterator` tells you how to create the " -"iterator:" +"The `Iterator` trait tells you how to _iterate_ once you have created an iterator. The " +"related trait `IntoIterator` tells you how to create the iterator:" msgstr "" #: src/exercises/day-2/iterators-and-ownership.md:53 @@ -6664,8 +6412,8 @@ msgstr "" #: src/exercises/day-2/iterators-and-ownership.md:62 msgid "" -"The syntax here means that every implementation of `IntoIterator` must " -"declare two types:" +"The syntax here means that every implementation of `IntoIterator` must declare two " +"types:" msgstr "" #: src/exercises/day-2/iterators-and-ownership.md:65 @@ -6678,8 +6426,8 @@ msgstr "" #: src/exercises/day-2/iterators-and-ownership.md:68 msgid "" -"Note that `IntoIter` and `Item` are linked: the iterator must have the same " -"`Item` type, which means that it returns `Option`" +"Note that `IntoIter` and `Item` are linked: the iterator must have the same `Item` " +"type, which means that it returns `Option`" msgstr "" #: src/exercises/day-2/iterators-and-ownership.md:71 @@ -6690,8 +6438,7 @@ msgstr "" msgid "" "```rust,editable,compile_fail\n" "fn main() {\n" -" let v: Vec = vec![String::from(\"foo\"), String::" -"from(\"bar\")];\n" +" let v: Vec = vec![String::from(\"foo\"), String::from(\"bar\")];\n" " let mut iter = v.into_iter();\n" "\n" " let v0: Option<..> = iter.next();\n" @@ -6706,17 +6453,15 @@ msgstr "" #: src/exercises/day-2/iterators-and-ownership.md:85 msgid "" -"Now that we know both `Iterator` and `IntoIterator`, we can build `for` " -"loops. They call `into_iter()` on an expression and iterates over the " -"resulting iterator:" +"Now that we know both `Iterator` and `IntoIterator`, we can build `for` loops. They " +"call `into_iter()` on an expression and iterates over the resulting iterator:" msgstr "" #: src/exercises/day-2/iterators-and-ownership.md:89 msgid "" "```rust,editable\n" "fn main() {\n" -" let v: Vec = vec![String::from(\"foo\"), String::" -"from(\"bar\")];\n" +" let v: Vec = vec![String::from(\"foo\"), String::from(\"bar\")];\n" "\n" " for word in &v {\n" " println!(\"word: {word}\");\n" @@ -6736,10 +6481,10 @@ msgstr "" #: src/exercises/day-2/iterators-and-ownership.md:105 msgid "" "Experiment with the code above and then consult the documentation for [`impl " -"IntoIterator for &Vec`](https://doc.rust-lang.org/std/vec/struct.Vec." -"html#impl-IntoIterator-for-%26'a+Vec%3CT,+A%3E) and [`impl IntoIterator for " -"Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-" -"for-Vec%3CT,+A%3E) to check your answers." +"IntoIterator for &Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-" +"IntoIterator-for-%26'a+Vec%3CT,+A%3E) and [`impl IntoIterator for Vec`](https://doc." +"rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-for-Vec%3CT,+A%3E) to check " +"your answers." msgstr "" #: src/structs.md:3 @@ -6786,35 +6531,29 @@ msgid "Unlike in C++, there is no inheritance between structs." msgstr "" #: src/structs.md:36 -msgid "" -"Methods are defined in an `impl` block, which we will see in following " -"slides." +msgid "Methods are defined in an `impl` block, which we will see in following slides." msgstr "" #: src/structs.md:37 -msgid "" -"This may be a good time to let people know there are different types of " -"structs. " +msgid "This may be a good time to let people know there are different types of structs. " msgstr "" #: src/structs.md:38 msgid "" -"Zero-sized structs `e.g., struct Foo;` might be used when implementing a " -"trait on some type but don’t have any data that you want to store in the " -"value itself. " +"Zero-sized structs `e.g., struct Foo;` might be used when implementing a trait on some " +"type but don’t have any data that you want to store in the value itself. " msgstr "" #: src/structs.md:39 msgid "" -"The next slide will introduce Tuple structs, used when the field names are " -"not important." +"The next slide will introduce Tuple structs, used when the field names are not " +"important." msgstr "" #: src/structs.md:40 msgid "" -"The syntax `..peter` allows us to copy the majority of the fields from the " -"old struct without having to explicitly type it all out. It must always be " -"the last element." +"The syntax `..peter` allows us to copy the majority of the fields from the old struct " +"without having to explicitly type it all out. It must always be the last element." msgstr "" #: src/structs/tuple-structs.md:3 @@ -6861,8 +6600,8 @@ msgstr "" #: src/structs/tuple-structs.md:37 msgid "" -"Newtypes are a great way to encode additional information about the value in " -"a primitive type, for example:" +"Newtypes are a great way to encode additional information about the value in a " +"primitive type, for example:" msgstr "" #: src/structs/tuple-structs.md:38 @@ -6871,20 +6610,20 @@ msgstr "" #: src/structs/tuple-structs.md:39 msgid "" -"The value passed some validation when it was created, so you no longer have " -"to validate it again at every use: 'PhoneNumber(String)`or`OddNumber(u32)\\`." +"The value passed some validation when it was created, so you no longer have to validate " +"it again at every use: 'PhoneNumber(String)`or`OddNumber(u32)\\`." msgstr "" #: src/structs/tuple-structs.md:40 msgid "" -"Demonstrate how to add a `f64` value to a `Newtons` type by accessing the " -"single field in the newtype." +"Demonstrate how to add a `f64` value to a `Newtons` type by accessing the single field " +"in the newtype." msgstr "" #: src/structs/tuple-structs.md:41 msgid "" -"Rust generally doesn’t like inexplicit things, like automatic unwrapping or " -"for instance using booleans as integers." +"Rust generally doesn’t like inexplicit things, like automatic unwrapping or for " +"instance using booleans as integers." msgstr "" #: src/structs/tuple-structs.md:42 @@ -6893,14 +6632,14 @@ msgstr "" #: src/structs/tuple-structs.md:43 msgid "" -"The example is a subtle reference to the [Mars Climate Orbiter](https://en." -"wikipedia.org/wiki/Mars_Climate_Orbiter) failure." +"The example is a subtle reference to the [Mars Climate Orbiter](https://en.wikipedia." +"org/wiki/Mars_Climate_Orbiter) failure." msgstr "" #: src/structs/field-shorthand.md:3 msgid "" -"If you already have variables with the right names, then you can create the " -"struct using a shorthand:" +"If you already have variables with the right names, then you can create the struct " +"using a shorthand:" msgstr "" #: src/structs/field-shorthand.md:6 @@ -6927,8 +6666,8 @@ msgstr "" #: src/structs/field-shorthand.md:27 msgid "" -"The `new` function could be written using `Self` as a type, as it is " -"interchangeable with the struct type name" +"The `new` function could be written using `Self` as a type, as it is interchangeable " +"with the struct type name" msgstr "" #: src/structs/field-shorthand.md:29 @@ -6949,8 +6688,8 @@ msgstr "" #: src/structs/field-shorthand.md:41 msgid "" -"Implement the `Default` trait for the struct. Define some fields and use the " -"default values for the other fields." +"Implement the `Default` trait for the struct. Define some fields and use the default " +"values for the other fields." msgstr "" #: src/structs/field-shorthand.md:43 @@ -6987,19 +6726,18 @@ msgstr "" #: src/structs/field-shorthand.md:69 msgid "" -"Use struct update syntax to define a new structure using `peter`. Note that " -"the variable `peter` will no longer be accessible afterwards." +"Use struct update syntax to define a new structure using `peter`. Note that the " +"variable `peter` will no longer be accessible afterwards." msgstr "" #: src/structs/field-shorthand.md:70 -msgid "" -"Use `{:#?}` when printing structs to request the `Debug` representation." +msgid "Use `{:#?}` when printing structs to request the `Debug` representation." msgstr "" #: src/methods.md:3 msgid "" -"Rust allows you to associate functions with your new types. You do this with " -"an `impl` block:" +"Rust allows you to associate functions with your new types. You do this with an `impl` " +"block:" msgstr "" #: src/methods.md:6 @@ -7033,15 +6771,15 @@ msgstr "" #: src/methods.md:32 msgid "" -"Methods are called on an instance of a type (such as a struct or enum), the " -"first parameter represents the instance as `self`." +"Methods are called on an instance of a type (such as a struct or enum), the first " +"parameter represents the instance as `self`." msgstr "" #: src/methods.md:33 msgid "" -"Developers may choose to use methods to take advantage of method receiver " -"syntax and to help keep them more organized. By using methods we can keep " -"all the implementation code in one predictable place." +"Developers may choose to use methods to take advantage of method receiver syntax and to " +"help keep them more organized. By using methods we can keep all the implementation code " +"in one predictable place." msgstr "" #: src/methods.md:34 @@ -7050,26 +6788,26 @@ msgstr "" #: src/methods.md:35 msgid "" -"Show that it is an abbreviated term for `self: Self` and perhaps show how " -"the struct name could also be used." +"Show that it is an abbreviated term for `self: Self` and perhaps show how the struct " +"name could also be used." msgstr "" #: src/methods.md:36 msgid "" -"Explain that `Self` is a type alias for the type the `impl` block is in and " -"can be used elsewhere in the block." +"Explain that `Self` is a type alias for the type the `impl` block is in and can be used " +"elsewhere in the block." msgstr "" #: src/methods.md:37 msgid "" -"Note how `self` is used like other structs and dot notation can be used to " -"refer to individual fields." +"Note how `self` is used like other structs and dot notation can be used to refer to " +"individual fields." msgstr "" #: src/methods.md:38 msgid "" -"This might be a good time to demonstrate how the `&self` differs from `self` " -"by modifying the code and trying to run say_hello twice." +"This might be a good time to demonstrate how the `&self` differs from `self` by " +"modifying the code and trying to run say_hello twice." msgstr "" #: src/methods.md:39 @@ -7078,28 +6816,28 @@ msgstr "" #: src/methods/receiver.md:3 msgid "" -"The `&self` above indicates that the method borrows the object immutably. " -"There are other possible receivers for a method:" +"The `&self` above indicates that the method borrows the object immutably. There are " +"other possible receivers for a method:" msgstr "" #: src/methods/receiver.md:6 msgid "" -"`&self`: borrows the object from the caller using a shared and immutable " -"reference. The object can be used again afterwards." +"`&self`: borrows the object from the caller using a shared and immutable reference. The " +"object can be used again afterwards." msgstr "" #: src/methods/receiver.md:8 msgid "" -"`&mut self`: borrows the object from the caller using a unique and mutable " -"reference. The object can be used again afterwards." +"`&mut self`: borrows the object from the caller using a unique and mutable reference. " +"The object can be used again afterwards." msgstr "" #: src/methods/receiver.md:10 msgid "" -"`self`: takes ownership of the object and moves it away from the caller. The " -"method becomes the owner of the object. The object will be dropped " -"(deallocated) when the method returns, unless its ownership is explicitly " -"transmitted. Complete ownership does not automatically mean mutability." +"`self`: takes ownership of the object and moves it away from the caller. The method " +"becomes the owner of the object. The object will be dropped (deallocated) when the " +"method returns, unless its ownership is explicitly transmitted. Complete ownership does " +"not automatically mean mutability." msgstr "" #: src/methods/receiver.md:14 @@ -7108,23 +6846,23 @@ msgstr "" #: src/methods/receiver.md:15 msgid "" -"No receiver: this becomes a static method on the struct. Typically used to " -"create constructors which are called `new` by convention." +"No receiver: this becomes a static method on the struct. Typically used to create " +"constructors which are called `new` by convention." msgstr "" #: src/methods/receiver.md:18 msgid "" -"Beyond variants on `self`, there are also [special wrapper types](https://" -"doc.rust-lang.org/reference/special-types-and-traits.html) allowed to be " -"receiver types, such as `Box`." +"Beyond variants on `self`, there are also [special wrapper types](https://doc.rust-lang." +"org/reference/special-types-and-traits.html) allowed to be receiver types, such as " +"`Box`." msgstr "" #: src/methods/receiver.md:24 msgid "" -"Consider emphasizing \"shared and immutable\" and \"unique and mutable\". " -"These constraints always come together in Rust due to borrow checker rules, " -"and `self` is no exception. It isn't possible to reference a struct from " -"multiple locations and call a mutating (`&mut self`) method on it." +"Consider emphasizing \"shared and immutable\" and \"unique and mutable\". These " +"constraints always come together in Rust due to borrow checker rules, and `self` is no " +"exception. It isn't possible to reference a struct from multiple locations and call a " +"mutating (`&mut self`) method on it." msgstr "" #: src/methods/example.md:3 @@ -7141,8 +6879,7 @@ msgid "" " Race { name: String::from(name), laps: Vec::new() }\n" " }\n" "\n" -" fn add_lap(&mut self, lap: i32) { // Exclusive borrowed read-write " -"access to self\n" +" fn add_lap(&mut self, lap: i32) { // Exclusive borrowed read-write access to self\n" " self.laps.push(lap);\n" " }\n" "\n" @@ -7155,8 +6892,7 @@ msgid "" "\n" " fn finish(self) { // Exclusive ownership of self\n" " let total = self.laps.iter().sum::();\n" -" println!(\"Race {} is finished, total lap time: {}\", self.name, " -"total);\n" +" println!(\"Race {} is finished, total lap time: {}\", self.name, total);\n" " }\n" "}\n" "\n" @@ -7179,27 +6915,26 @@ msgstr "" #: src/methods/example.md:48 msgid "" -"You can point out how that changes what the function can do with the " -"variable values and if/how it can be used again in `main`." +"You can point out how that changes what the function can do with the variable values " +"and if/how it can be used again in `main`." msgstr "" #: src/methods/example.md:49 -msgid "" -"You can showcase the error that appears when trying to call `finish` twice." +msgid "You can showcase the error that appears when trying to call `finish` twice." msgstr "" #: src/methods/example.md:50 msgid "" -"Note that although the method receivers are different, the non-static " -"functions are called the same way in the main body. Rust enables automatic " -"referencing and dereferencing when calling methods. Rust automatically adds " -"in the `&`, `*`, `muts` so that that object matches the method signature." +"Note that although the method receivers are different, the non-static functions are " +"called the same way in the main body. Rust enables automatic referencing and " +"dereferencing when calling methods. Rust automatically adds in the `&`, `*`, `muts` so " +"that that object matches the method signature." msgstr "" #: src/methods/example.md:51 msgid "" -"You might point out that `print_laps` is using a vector that is iterated " -"over. We describe vectors in more detail in the afternoon. " +"You might point out that `print_laps` is using a vector that is iterated over. We " +"describe vectors in more detail in the afternoon. " msgstr "" #: src/exercises/day-2/afternoon.md:1 @@ -7212,21 +6947,20 @@ msgstr "" #: src/exercises/day-2/health-statistics.md:3 msgid "" -"You're working on implementing a health-monitoring system. As part of that, " -"you need to keep track of users' health statistics." +"You're working on implementing a health-monitoring system. As part of that, you need to " +"keep track of users' health statistics." msgstr "" #: src/exercises/day-2/health-statistics.md:6 msgid "" -"You'll start with some stubbed functions in an `impl` block as well as a " -"`User` struct definition. Your goal is to implement the stubbed out methods " -"on the `User` `struct` defined in the `impl` block." +"You'll start with some stubbed functions in an `impl` block as well as a `User` struct " +"definition. Your goal is to implement the stubbed out methods on the `User` `struct` " +"defined in the `impl` block." msgstr "" #: src/exercises/day-2/health-statistics.md:10 msgid "" -"Copy the code below to and fill in the missing " -"methods:" +"Copy the code below to and fill in the missing methods:" msgstr "" #: src/exercises/day-2/health-statistics.md:13 @@ -7284,8 +7018,7 @@ msgid "" " unimplemented!()\n" " }\n" "\n" -" pub fn visit_doctor(&mut self, measurements: Measurements) -> " -"HealthReport {\n" +" pub fn visit_doctor(&mut self, measurements: Measurements) -> HealthReport {\n" " unimplemented!()\n" " }\n" "}\n" @@ -7334,9 +7067,9 @@ msgstr "" #: src/std.md:3 msgid "" -"Rust comes with a standard library which helps establish a set of common " -"types used by Rust library and programs. This way, two libraries can work " -"together smoothly because they both use the same `String` type." +"Rust comes with a standard library which helps establish a set of common types used by " +"Rust library and programs. This way, two libraries can work together smoothly because " +"they both use the same `String` type." msgstr "" #: src/std.md:7 @@ -7345,8 +7078,8 @@ msgstr "" #: src/std.md:9 msgid "" -"[`Option` and `Result`](std/option-result.md) types: used for optional " -"values and [error handling](error-handling.md)." +"[`Option` and `Result`](std/option-result.md) types: used for optional values and " +"[error handling](error-handling.md)." msgstr "" #: src/std.md:12 @@ -7359,8 +7092,7 @@ msgstr "" #: src/std.md:16 msgid "" -"[`HashMap`](std/hashmap.md): a hash map type with a configurable hashing " -"algorithm." +"[`HashMap`](std/hashmap.md): a hash map type with a configurable hashing algorithm." msgstr "" #: src/std.md:19 @@ -7368,32 +7100,29 @@ msgid "[`Box`](std/box.md): an owned pointer for heap-allocated data." msgstr "" #: src/std.md:21 -msgid "" -"[`Rc`](std/rc.md): a shared reference-counted pointer for heap-allocated " -"data." +msgid "[`Rc`](std/rc.md): a shared reference-counted pointer for heap-allocated data." msgstr "" #: src/std.md:25 msgid "" -"In fact, Rust contains several layers of the Standard Library: `core`, " -"`alloc` and `std`. " +"In fact, Rust contains several layers of the Standard Library: `core`, `alloc` and " +"`std`. " msgstr "" #: src/std.md:26 msgid "" -"`core` includes the most basic types and functions that don't depend on " -"`libc`, allocator or even the presence of an operating system. " +"`core` includes the most basic types and functions that don't depend on `libc`, " +"allocator or even the presence of an operating system. " msgstr "" #: src/std.md:28 msgid "" -"`alloc` includes types which require a global heap allocator, such as `Vec`, " -"`Box` and `Arc`." +"`alloc` includes types which require a global heap allocator, such as `Vec`, `Box` and " +"`Arc`." msgstr "" #: src/std.md:29 -msgid "" -"Embedded Rust applications often only use `core`, and sometimes `alloc`." +msgid "Embedded Rust applications often only use `core`, and sometimes `alloc`." msgstr "" #: src/std/option-result.md:1 @@ -7427,9 +7156,7 @@ msgid "`Option<&T>` has zero space overhead compared to `&T`." msgstr "" #: src/std/option-result.md:20 -msgid "" -"`Result` is the standard type to implement error handling as we will see on " -"Day 3." +msgid "`Result` is the standard type to implement error handling as we will see on Day 3." msgstr "" #: src/std/option-result.md:21 @@ -7442,14 +7169,13 @@ msgstr "" #: src/std/option-result.md:23 msgid "" -"Otherwise, `Result::Err` contains the index where such an element should be " -"inserted." +"Otherwise, `Result::Err` contains the index where such an element should be inserted." msgstr "" #: src/std/string.md:3 msgid "" -"[`String`](https://doc.rust-lang.org/std/string/struct.String.html) is the " -"standard heap-allocated growable UTF-8 string buffer:" +"[`String`](https://doc.rust-lang.org/std/string/struct.String.html) is the standard " +"heap-allocated growable UTF-8 string buffer:" msgstr "" #: src/std/string.md:5 @@ -7474,47 +7200,46 @@ msgstr "" #: src/std/string.md:22 msgid "" -"`String` implements [`Deref`](https://doc.rust-lang.org/std/" -"string/struct.String.html#deref-methods-str), which means that you can call " -"all `str` methods on a `String`." +"`String` implements [`Deref`](https://doc.rust-lang.org/std/string/struct." +"String.html#deref-methods-str), which means that you can call all `str` methods on a " +"`String`." msgstr "" #: src/std/string.md:30 msgid "" -"`String::new` returns a new empty string, use `String::with_capacity` when " -"you know how much data you want to push to the string." +"`String::new` returns a new empty string, use `String::with_capacity` when you know how " +"much data you want to push to the string." msgstr "" #: src/std/string.md:31 msgid "" -"`String::len` returns the size of the `String` in bytes (which can be " -"different from its length in characters)." +"`String::len` returns the size of the `String` in bytes (which can be different from " +"its length in characters)." msgstr "" #: src/std/string.md:32 msgid "" -"`String::chars` returns an iterator over the actual characters. Note that a " -"`char` can be different from what a human will consider a \"character\" due " -"to [grapheme clusters](https://docs.rs/unicode-segmentation/latest/" -"unicode_segmentation/struct.Graphemes.html)." +"`String::chars` returns an iterator over the actual characters. Note that a `char` can " +"be different from what a human will consider a \"character\" due to [grapheme clusters]" +"(https://docs.rs/unicode-segmentation/latest/unicode_segmentation/struct.Graphemes." +"html)." msgstr "" #: src/std/string.md:33 msgid "" -"When people refer to strings they could either be talking about `&str` or " -"`String`." +"When people refer to strings they could either be talking about `&str` or `String`." msgstr "" #: src/std/string.md:34 msgid "" -"When a type implements `Deref`, the compiler will let you " -"transparently call methods from `T`." +"When a type implements `Deref`, the compiler will let you transparently " +"call methods from `T`." msgstr "" #: src/std/string.md:35 msgid "" -"`String` implements `Deref` which transparently gives it " -"access to `str`'s methods." +"`String` implements `Deref` which transparently gives it access to " +"`str`'s methods." msgstr "" #: src/std/string.md:36 @@ -7523,9 +7248,9 @@ msgstr "" #: src/std/string.md:37 msgid "" -"`String` is implemented as a wrapper around a vector of bytes, many of the " -"operations you see supported on vectors are also supported on `String`, but " -"with some extra guarantees." +"`String` is implemented as a wrapper around a vector of bytes, many of the operations " +"you see supported on vectors are also supported on `String`, but with some extra " +"guarantees." msgstr "" #: src/std/string.md:38 @@ -7534,14 +7259,13 @@ msgstr "" #: src/std/string.md:39 msgid "" -"To a character by using `s3.chars().nth(i).unwrap()` where `i` is in-bound, " -"out-of-bounds." +"To a character by using `s3.chars().nth(i).unwrap()` where `i` is in-bound, out-of-" +"bounds." msgstr "" #: src/std/string.md:40 msgid "" -"To a substring by using `s3[0..4]`, where that slice is on character " -"boundaries or not." +"To a substring by using `s3[0..4]`, where that slice is on character boundaries or not." msgstr "" #: src/std/vec.md:1 @@ -7550,8 +7274,8 @@ msgstr "" #: src/std/vec.md:3 msgid "" -"[`Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html) is the standard " -"resizable heap-allocated buffer:" +"[`Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html) is the standard resizable " +"heap-allocated buffer:" msgstr "" #: src/std/vec.md:5 @@ -7583,42 +7307,40 @@ msgstr "" #: src/std/vec.md:29 msgid "" -"`Vec` implements [`Deref`](https://doc.rust-lang.org/std/vec/" -"struct.Vec.html#deref-methods-%5BT%5D), which means that you can call slice " -"methods on a `Vec`." +"`Vec` implements [`Deref`](https://doc.rust-lang.org/std/vec/struct.Vec." +"html#deref-methods-%5BT%5D), which means that you can call slice methods on a `Vec`." msgstr "" #: src/std/vec.md:37 msgid "" -"`Vec` is a type of collection, along with `String` and `HashMap`. The data " -"it contains is stored on the heap. This means the amount of data doesn't " -"need to be known at compile time. It can grow or shrink at runtime." +"`Vec` is a type of collection, along with `String` and `HashMap`. The data it contains " +"is stored on the heap. This means the amount of data doesn't need to be known at " +"compile time. It can grow or shrink at runtime." msgstr "" #: src/std/vec.md:40 msgid "" "Notice how `Vec` is a generic type too, but you don't have to specify `T` " -"explicitly. As always with Rust type inference, the `T` was established " -"during the first `push` call." +"explicitly. As always with Rust type inference, the `T` was established during the " +"first `push` call." msgstr "" #: src/std/vec.md:42 msgid "" -"`vec![...]` is a canonical macro to use instead of `Vec::new()` and it " -"supports adding initial elements to the vector." +"`vec![...]` is a canonical macro to use instead of `Vec::new()` and it supports adding " +"initial elements to the vector." msgstr "" #: src/std/vec.md:44 msgid "" "To index the vector you use `[` `]`, but they will panic if out of bounds. " -"Alternatively, using `get` will return an `Option`. The `pop` function will " -"remove the last element." +"Alternatively, using `get` will return an `Option`. The `pop` function will remove the " +"last element." msgstr "" #: src/std/vec.md:46 msgid "" -"Show iterating over a vector and mutating the value: `for e in &mut v { *e " -"+= 50; }`" +"Show iterating over a vector and mutating the value: `for e in &mut v { *e += 50; }`" msgstr "" #: src/std/hashmap.md:1 src/bare-metal/no_std.md:46 @@ -7636,8 +7358,7 @@ msgid "" "\n" "fn main() {\n" " let mut page_counts = HashMap::new();\n" -" page_counts.insert(\"Adventures of Huckleberry Finn\".to_string(), " -"207);\n" +" page_counts.insert(\"Adventures of Huckleberry Finn\".to_string(), 207);\n" " page_counts.insert(\"Grimms' Fairy Tales\".to_string(), 751);\n" " page_counts.insert(\"Pride and Prejudice\".to_string(), 303);\n" "\n" @@ -7646,8 +7367,7 @@ msgid "" " page_counts.len());\n" " }\n" "\n" -" for book in [\"Pride and Prejudice\", \"Alice's Adventure in " -"Wonderland\"] {\n" +" for book in [\"Pride and Prejudice\", \"Alice's Adventure in Wonderland\"] {\n" " match page_counts.get(book) {\n" " Some(count) => println!(\"{book}: {count} pages\"),\n" " None => println!(\"{book} is unknown.\")\n" @@ -7655,10 +7375,8 @@ msgid "" " }\n" "\n" " // Use the .entry() method to insert a value if nothing is found.\n" -" for book in [\"Pride and Prejudice\", \"Alice's Adventure in " -"Wonderland\"] {\n" -" let page_count: &mut i32 = page_counts.entry(book.to_string())." -"or_insert(0);\n" +" for book in [\"Pride and Prejudice\", \"Alice's Adventure in Wonderland\"] {\n" +" let page_count: &mut i32 = page_counts.entry(book.to_string()).or_insert(0);\n" " *page_count += 1;\n" " }\n" "\n" @@ -7668,15 +7386,14 @@ msgid "" msgstr "" #: src/std/hashmap.md:38 -msgid "" -"`HashMap` is not defined in the prelude and needs to be brought into scope." +msgid "`HashMap` is not defined in the prelude and needs to be brought into scope." msgstr "" #: src/std/hashmap.md:39 msgid "" -"Try the following lines of code. The first line will see if a book is in the " -"hashmap and if not return an alternative value. The second line will insert " -"the alternative value in the hashmap if the book is not found." +"Try the following lines of code. The first line will see if a book is in the hashmap " +"and if not return an alternative value. The second line will insert the alternative " +"value in the hashmap if the book is not found." msgstr "" #: src/std/hashmap.md:41 @@ -7697,10 +7414,10 @@ msgstr "" #: src/std/hashmap.md:50 msgid "" -"Although, since Rust 1.56, HashMap implements [`From<[(K, V); N]>`](https://" -"doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#impl-" -"From%3C%5B(K,+V);+N%5D%3E-for-HashMap%3CK,+V,+RandomState%3E), which allows " -"us to easily initialize a hash map from a literal array:" +"Although, since Rust 1.56, HashMap implements [`From<[(K, V); N]>`](https://doc.rust-" +"lang.org/std/collections/hash_map/struct.HashMap.html#impl-From%3C%5B(K,+V);+N%5D%3E-" +"for-HashMap%3CK,+V,+RandomState%3E), which allows us to easily initialize a hash map " +"from a literal array:" msgstr "" #: src/std/hashmap.md:52 @@ -7715,29 +7432,27 @@ msgstr "" #: src/std/hashmap.md:59 msgid "" -"Alternatively HashMap can be built from any `Iterator` which yields key-" -"value tuples." +"Alternatively HashMap can be built from any `Iterator` which yields key-value tuples." msgstr "" #: src/std/hashmap.md:60 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." +"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 "" #: src/std/hashmap.md:62 msgid "" -"Try removing `to_string()` from the example above and see if it still " -"compiles. Where do you think we might run into issues?" +"Try removing `to_string()` from the example above and see if it still compiles. Where " +"do you think we might run into issues?" msgstr "" #: src/std/hashmap.md:64 msgid "" -"This type has several \"method-specific\" return types, such as `std::" -"collections::hash_map::Keys`. These types often appear in searches of the " -"Rust docs. Show students the docs for this type, and the helpful link back " -"to the `keys` method." +"This type has several \"method-specific\" return types, such as `std::collections::" +"hash_map::Keys`. These types often appear in searches of the Rust docs. Show students " +"the docs for this type, and the helpful link back to the `keys` method." msgstr "" #: src/std/box.md:1 @@ -7746,8 +7461,8 @@ msgstr "" #: src/std/box.md:3 msgid "" -"[`Box`](https://doc.rust-lang.org/std/boxed/struct.Box.html) is an owned " -"pointer to data on the heap:" +"[`Box`](https://doc.rust-lang.org/std/boxed/struct.Box.html) is an owned pointer to " +"data on the heap:" msgstr "" #: src/std/box.md:5 @@ -7778,21 +7493,20 @@ msgstr "" #: src/std/box.md:26 msgid "" -"`Box` implements `Deref`, which means that you can [call " -"methods from `T` directly on a `Box`](https://doc.rust-lang.org/std/ops/" -"trait.Deref.html#more-on-deref-coercion)." +"`Box` implements `Deref`, which means that you can [call methods from " +"`T` directly on a `Box`](https://doc.rust-lang.org/std/ops/trait.Deref.html#more-on-" +"deref-coercion)." msgstr "" #: src/std/box.md:34 msgid "" -"`Box` is like `std::unique_ptr` in C++, except that it's guaranteed to be " -"not null. " +"`Box` is like `std::unique_ptr` in C++, except that it's guaranteed to be not null. " msgstr "" #: src/std/box.md:35 msgid "" -"In the above example, you can even leave out the `*` in the `println!` " -"statement thanks to `Deref`. " +"In the above example, you can even leave out the `*` in the `println!` statement thanks " +"to `Deref`. " msgstr "" #: src/std/box.md:36 @@ -7801,15 +7515,15 @@ msgstr "" #: src/std/box.md:37 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 that can't be known at compile time, but the Rust compiler wants " +"to know an exact size." msgstr "" #: src/std/box.md:38 msgid "" -"want to transfer ownership of a large amount of data. To avoid copying large " -"amounts of data on the stack, instead store the data on the heap in a `Box` " -"so only the pointer is moved." +"want to transfer ownership of a large amount of data. To avoid copying large amounts of " +"data on the stack, instead store the data on the heap in a `Box` so only the pointer is " +"moved." msgstr "" #: src/std/box-recursive.md:1 @@ -7817,8 +7531,7 @@ msgid "Box with Recursive Data Structures" msgstr "" #: src/std/box-recursive.md:3 -msgid "" -"Recursive data types or data types with dynamic sizes need to use a `Box`:" +msgid "Recursive data types or data types with dynamic sizes need to use a `Box`:" msgstr "" #: src/std/box-recursive.md:5 src/std/box-niche.md:3 @@ -7831,8 +7544,7 @@ msgid "" "}\n" "\n" "fn main() {\n" -" let list: List = List::Cons(1, Box::new(List::Cons(2, Box::" -"new(List::Nil))));\n" +" let list: List = List::Cons(1, Box::new(List::Cons(2, Box::new(List::Nil))));\n" " println!(\"{list:?}\");\n" "}\n" "```" @@ -7842,69 +7554,57 @@ msgstr "" msgid "" "```bob\n" " Stack Heap\n" -".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - " -"- -.\n" +".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - - -.\n" ": : : :\n" -": " -"list : : :\n" -": +------+----+----+ : : +------+----+----+ +------+----+----" -"+ :\n" -": | Cons | 1 | o--+----+-----+--->| Cons | 2 | o--+--->| Nil | // | // " -"| :\n" -": +------+----+----+ : : +------+----+----+ +------+----+----" -"+ :\n" +": list : : :\n" +": +------+----+----+ : : +------+----+----+ +------+----+----+ :\n" +": | Cons | 1 | o--+----+-----+--->| Cons | 2 | o--+--->| Nil | // | // | :\n" +": +------+----+----+ : : +------+----+----+ +------+----+----+ :\n" ": : : :\n" ": : : :\n" -"'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - " -"- -'\n" +"'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - - -'\n" "```" msgstr "" #: src/std/box-recursive.md:33 msgid "" -"If `Box` was not used and we attempted to embed a `List` directly into the " -"`List`, the compiler would not compute a fixed size of the struct in memory " -"(`List` would be of infinite size)." +"If `Box` was not used and we attempted to embed a `List` directly into the `List`, the " +"compiler would not compute a fixed size of the struct in memory (`List` would be of " +"infinite size)." msgstr "" #: src/std/box-recursive.md:36 msgid "" -"`Box` solves this problem as it has the same size as a regular pointer and " -"just points at the next element of the `List` in the heap." +"`Box` solves this problem as it has the same size as a regular pointer and just points " +"at the next element of the `List` in the heap." msgstr "" #: src/std/box-recursive.md:39 msgid "" -"Remove the `Box` in the List definition and show the compiler error. " -"\"Recursive with indirection\" is a hint you might want to use a Box or " -"reference of some kind, instead of storing a value directly." +"Remove the `Box` in the List definition and show the compiler error. \"Recursive with " +"indirection\" is a hint you might want to use a Box or reference of some kind, instead " +"of storing a value directly." msgstr "" #: src/std/box-niche.md:16 msgid "" -"A `Box` cannot be empty, so the pointer is always valid and non-`null`. This " -"allows the compiler to optimize the memory layout:" +"A `Box` cannot be empty, so the pointer is always valid and non-`null`. This allows the " +"compiler to optimize the memory layout:" msgstr "" #: src/std/box-niche.md:19 msgid "" "```bob\n" " Stack Heap\n" -".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - " -"-.\n" +".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - -.\n" ": : : :\n" -": " -"list : : :\n" -": +----+----+ : : +----+----+ +----+------" -"+ :\n" -": | 1 | o--+-----------+-----+--->| 2 | o--+--->| // | null " -"| :\n" -": +----+----+ : : +----+----+ +----+------" -"+ :\n" +": list : : :\n" +": +----+----+ : : +----+----+ +----+------+ :\n" +": | 1 | o--+-----------+-----+--->| 2 | o--+--->| // | null | :\n" +": +----+----+ : : +----+----+ +----+------+ :\n" ": : : :\n" ": : : :\n" -"`- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - " -"-'\n" +"`- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - -'\n" "```" msgstr "" @@ -7914,9 +7614,8 @@ msgstr "" #: src/std/rc.md:3 msgid "" -"[`Rc`](https://doc.rust-lang.org/std/rc/struct.Rc.html) is a reference-" -"counted shared pointer. Use this when you need to refer to the same data " -"from multiple places:" +"[`Rc`](https://doc.rust-lang.org/std/rc/struct.Rc.html) is a reference-counted shared " +"pointer. Use this when you need to refer to the same data from multiple places:" msgstr "" #: src/std/rc.md:6 @@ -7936,21 +7635,20 @@ msgstr "" #: src/std/rc.md:18 msgid "" -"See [`Arc`](../concurrency/shared_state/arc.md) and [`Mutex`](https://doc." -"rust-lang.org/std/sync/struct.Mutex.html) if you are in a multi-threaded " -"context." +"See [`Arc`](../concurrency/shared_state/arc.md) and [`Mutex`](https://doc.rust-lang.org/" +"std/sync/struct.Mutex.html) if you are in a multi-threaded context." msgstr "" #: src/std/rc.md:19 msgid "" -"You can _downgrade_ a shared pointer into a [`Weak`](https://doc.rust-lang." -"org/std/rc/struct.Weak.html) pointer to create cycles that will get dropped." +"You can _downgrade_ a shared pointer into a [`Weak`](https://doc.rust-lang.org/std/rc/" +"struct.Weak.html) pointer to create cycles that will get dropped." msgstr "" #: src/std/rc.md:29 msgid "" -"`Rc`'s count ensures that its contained value is valid for as long as there " -"are references." +"`Rc`'s count ensures that its contained value is valid for as long as there are " +"references." msgstr "" #: src/std/rc.md:30 @@ -7959,15 +7657,15 @@ msgstr "" #: src/std/rc.md:31 msgid "" -"`Rc::clone` is cheap: it creates a pointer to the same allocation and " -"increases the reference count. Does not make a deep clone and can generally " -"be ignored when looking for performance issues in code." +"`Rc::clone` is cheap: it creates a pointer to the same allocation and increases the " +"reference count. Does not make a deep clone and can generally be ignored when looking " +"for performance issues in code." msgstr "" #: src/std/rc.md:32 msgid "" -"`make_mut` actually clones the inner value if necessary (\"clone-on-write\") " -"and returns a mutable reference." +"`make_mut` actually clones the inner value if necessary (\"clone-on-write\") and " +"returns a mutable reference." msgstr "" #: src/std/rc.md:33 @@ -7976,9 +7674,8 @@ msgstr "" #: src/std/rc.md:34 msgid "" -"`Rc::downgrade` gives you a _weakly reference-counted_ object to create " -"cycles that will be dropped properly (likely in combination with `RefCell`, " -"on the next slide)." +"`Rc::downgrade` gives you a _weakly reference-counted_ object to create cycles that " +"will be dropped properly (likely in combination with `RefCell`, on the next slide)." msgstr "" #: src/std/cell.md:1 @@ -7987,16 +7684,16 @@ msgstr "" #: src/std/cell.md:3 msgid "" -"[`Cell`](https://doc.rust-lang.org/std/cell/struct.Cell.html) and [`RefCell`]" -"(https://doc.rust-lang.org/std/cell/struct.RefCell.html) implement what Rust " -"calls _interior mutability:_ mutation of values in an immutable context." +"[`Cell`](https://doc.rust-lang.org/std/cell/struct.Cell.html) and [`RefCell`](https://" +"doc.rust-lang.org/std/cell/struct.RefCell.html) implement what Rust calls _interior " +"mutability:_ mutation of values in an immutable context." msgstr "" #: src/std/cell.md:8 msgid "" -"`Cell` is typically used for simple types, as it requires copying or moving " -"values. More complex interior types typically use `RefCell`, which tracks " -"shared and exclusive references at runtime and panics if they are misused." +"`Cell` is typically used for simple types, as it requires copying or moving values. " +"More complex interior types typically use `RefCell`, which tracks shared and exclusive " +"references at runtime and panics if they are misused." msgstr "" #: src/std/cell.md:12 @@ -8017,8 +7714,7 @@ msgid "" " }\n" "\n" " fn sum(&self) -> i64 {\n" -" self.value + self.children.iter().map(|c| c.borrow().sum()).sum::" -"()\n" +" self.value + self.children.iter().map(|c| c.borrow().sum()).sum::()\n" " }\n" "}\n" "\n" @@ -8038,30 +7734,28 @@ msgstr "" #: src/std/cell.md:47 msgid "" -"If we were using `Cell` instead of `RefCell` in this example, we would have " -"to move the `Node` out of the `Rc` to push children, then move it back in. " -"This is safe because there's always one, un-referenced value in the cell, " -"but it's not ergonomic." +"If we were using `Cell` instead of `RefCell` in this example, we would have to move the " +"`Node` out of the `Rc` to push children, then move it back in. This is safe because " +"there's always one, un-referenced value in the cell, but it's not ergonomic." msgstr "" #: src/std/cell.md:48 msgid "" -"To do anything with a Node, you must call a `RefCell` method, usually " -"`borrow` or `borrow_mut`." +"To do anything with a Node, you must call a `RefCell` method, usually `borrow` or " +"`borrow_mut`." msgstr "" #: src/std/cell.md:49 msgid "" -"Demonstrate that reference loops can be created by adding `root` to `subtree." -"children` (don't try to print it!)." +"Demonstrate that reference loops can be created by adding `root` to `subtree.children` " +"(don't try to print it!)." msgstr "" #: src/std/cell.md:50 msgid "" -"To demonstrate a runtime panic, add a `fn inc(&mut self)` that increments " -"`self.value` and calls the same method on its children. This will panic in " -"the presence of the reference loop, with `thread 'main' panicked at 'already " -"borrowed: BorrowMutError'`." +"To demonstrate a runtime panic, add a `fn inc(&mut self)` that increments `self.value` " +"and calls the same method on its children. This will panic in the presence of the " +"reference loop, with `thread 'main' panicked at 'already borrowed: BorrowMutError'`." msgstr "" #: src/modules.md:3 @@ -8096,14 +7790,14 @@ msgstr "" #: src/modules.md:28 msgid "" -"Packages provide functionality and include a `Cargo.toml` file that " -"describes how to build a bundle of 1+ crates." +"Packages provide functionality and include a `Cargo.toml` file that describes how to " +"build a bundle of 1+ crates." msgstr "" #: src/modules.md:29 msgid "" -"Crates are a tree of modules, where a binary crate creates an executable and " -"a library crate compiles to a library." +"Crates are a tree of modules, where a binary crate creates an executable and a library " +"crate compiles to a library." msgstr "" #: src/modules.md:30 @@ -8124,8 +7818,8 @@ msgstr "" #: src/modules/visibility.md:7 msgid "" -"In other words, if an item is visible in module `foo`, it's visible in all " -"the descendants of `foo`." +"In other words, if an item is visible in module `foo`, it's visible in all the " +"descendants of `foo`." msgstr "" #: src/modules/visibility.md:10 @@ -8164,14 +7858,14 @@ msgstr "" #: src/modules/visibility.md:41 msgid "" -"Additionally, there are advanced `pub(...)` specifiers to restrict the scope " -"of public visibility." +"Additionally, there are advanced `pub(...)` specifiers to restrict the scope of public " +"visibility." msgstr "" #: src/modules/visibility.md:43 msgid "" -"See the [Rust Reference](https://doc.rust-lang.org/reference/visibility-and-" -"privacy.html#pubin-path-pubcrate-pubsuper-and-pubself)." +"See the [Rust Reference](https://doc.rust-lang.org/reference/visibility-and-privacy." +"html#pubin-path-pubcrate-pubsuper-and-pubself)." msgstr "" #: src/modules/visibility.md:44 @@ -8184,8 +7878,8 @@ msgstr "" #: src/modules/visibility.md:46 msgid "" -"In any case, visibility must be granted to an ancestor module (and all of " -"its descendants)." +"In any case, visibility must be granted to an ancestor module (and all of its " +"descendants)." msgstr "" #: src/modules/paths.md:3 @@ -8218,8 +7912,8 @@ msgstr "" #: src/modules/paths.md:13 msgid "" -"A module can bring symbols from another module into scope with `use`. You " -"will typically see something like this at the top of each module:" +"A module can bring symbols from another module into scope with `use`. You will " +"typically see something like this at the top of each module:" msgstr "" #: src/modules/paths.md:16 @@ -8231,8 +7925,7 @@ msgid "" msgstr "" #: src/modules/filesystem.md:3 -msgid "" -"Omitting the module content will tell Rust to look for it in another file:" +msgid "Omitting the module content will tell Rust to look for it in another file:" msgstr "" #: src/modules/filesystem.md:5 @@ -8244,9 +7937,8 @@ msgstr "" #: src/modules/filesystem.md:9 msgid "" -"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`." +"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 "" #: src/modules/filesystem.md:12 @@ -8263,16 +7955,14 @@ msgstr "" #: src/modules/filesystem.md:17 msgid "" -"Modules defined in files can be documented, too, using \"inner doc " -"comments\". These document the item that contains them -- in this case, a " -"module." +"Modules defined in files can be documented, too, using \"inner doc comments\". These " +"document the item that contains them -- in this case, a module." msgstr "" #: src/modules/filesystem.md:20 msgid "" "```rust,editable,compile_fail\n" -"//! This module implements the garden, including a highly performant " -"germination\n" +"//! This module implements the garden, including a highly performant germination\n" "//! implementation.\n" "\n" "// Re-export types from this module.\n" @@ -8289,14 +7979,14 @@ msgstr "" #: src/modules/filesystem.md:37 msgid "" -"Before Rust 2018, modules needed to be located at `module/mod.rs` instead of " -"`module.rs`, and this is still a working alternative for editions after 2018." +"Before Rust 2018, modules needed to be located at `module/mod.rs` instead of `module." +"rs`, and this is still a working alternative for editions after 2018." msgstr "" #: src/modules/filesystem.md:39 msgid "" -"The main reason to introduce `filename.rs` as alternative to `filename/mod." -"rs` was because many files named `mod.rs` can be hard to distinguish in IDEs." +"The main reason to introduce `filename.rs` as alternative to `filename/mod.rs` was " +"because many files named `mod.rs` can be hard to distinguish in IDEs." msgstr "" #: src/modules/filesystem.md:42 @@ -8315,9 +8005,7 @@ msgid "" msgstr "" #: src/modules/filesystem.md:52 -msgid "" -"The place rust will look for modules can be changed with a compiler " -"directive:" +msgid "The place rust will look for modules can be changed with a compiler directive:" msgstr "" #: src/modules/filesystem.md:54 @@ -8330,22 +8018,22 @@ msgstr "" #: src/modules/filesystem.md:59 msgid "" -"This is useful, for example, if you would like to place tests for a module " -"in a file named `some_module_test.rs`, similar to the convention in Go." +"This is useful, for example, if you would like to place tests for a module in a file " +"named `some_module_test.rs`, similar to the convention in Go." msgstr "" #: src/exercises/day-2/strings-iterators.md:3 msgid "" -"In this exercise, you are implementing a routing component of a web server. " -"The server is configured with a number of _path prefixes_ which are matched " -"against _request paths_. The path prefixes can contain a wildcard character " -"which matches a full segment. See the unit tests below." +"In this exercise, you are implementing a routing component of a web server. The server " +"is configured with a number of _path prefixes_ which are matched against _request " +"paths_. The path prefixes can contain a wildcard character which matches a full " +"segment. See the unit tests below." msgstr "" #: src/exercises/day-2/strings-iterators.md:8 msgid "" -"Copy the following code to and make the tests " -"pass. Try avoiding allocating a `Vec` for your intermediate results:" +"Copy the following code to and make the tests pass. Try " +"avoiding allocating a `Vec` for your intermediate results:" msgstr "" #: src/exercises/day-2/strings-iterators.md:12 @@ -8361,15 +8049,12 @@ msgid "" "#[test]\n" "fn test_matches_without_wildcard() {\n" " assert!(prefix_matches(\"/v1/publishers\", \"/v1/publishers\"));\n" -" assert!(prefix_matches(\"/v1/publishers\", \"/v1/publishers/" -"abc-123\"));\n" -" assert!(prefix_matches(\"/v1/publishers\", \"/v1/publishers/abc/" -"books\"));\n" +" assert!(prefix_matches(\"/v1/publishers\", \"/v1/publishers/abc-123\"));\n" +" assert!(prefix_matches(\"/v1/publishers\", \"/v1/publishers/abc/books\"));\n" "\n" " assert!(!prefix_matches(\"/v1/publishers\", \"/v1\"));\n" " assert!(!prefix_matches(\"/v1/publishers\", \"/v1/publishersBooks\"));\n" -" assert!(!prefix_matches(\"/v1/publishers\", \"/v1/parent/" -"publishers\"));\n" +" assert!(!prefix_matches(\"/v1/publishers\", \"/v1/parent/publishers\"));\n" "}\n" "\n" "#[test]\n" @@ -8387,8 +8072,7 @@ msgid "" " \"/v1/publishers/foo/books/book1\"\n" " ));\n" "\n" -" assert!(!prefix_matches(\"/v1/publishers/*/books\", \"/v1/" -"publishers\"));\n" +" assert!(!prefix_matches(\"/v1/publishers/*/books\", \"/v1/publishers\"));\n" " assert!(!prefix_matches(\n" " \"/v1/publishers/*/books\",\n" " \"/v1/publishers/foo/booksByAuthor\"\n" @@ -8406,15 +8090,12 @@ msgid "Today, we will cover some more advanced topics of Rust:" msgstr "" #: src/welcome-day-3.md:5 -msgid "" -"Traits: deriving traits, default methods, and important standard library " -"traits." +msgid "Traits: deriving traits, default methods, and important standard library traits." msgstr "" #: src/welcome-day-3.md:8 msgid "" -"Generics: generic data types, generic methods, monomorphization, and trait " -"objects." +"Generics: generic data types, generic methods, monomorphization, and trait objects." msgstr "" #: src/welcome-day-3.md:11 @@ -8427,14 +8108,13 @@ msgstr "" #: src/welcome-day-3.md:15 msgid "" -"Unsafe Rust: raw pointers, static variables, unsafe functions, and extern " -"functions." +"Unsafe Rust: raw pointers, static variables, unsafe functions, and extern functions." msgstr "" #: src/generics.md:3 msgid "" -"Rust support generics, which lets you abstract algorithms or data structures " -"(such as sorting or a binary tree) over the types used or stored." +"Rust support generics, which lets you abstract algorithms or data structures (such as " +"sorting or a binary tree) over the types used or stored." msgstr "" #: src/generics/data-types.md:3 @@ -8492,15 +8172,13 @@ msgid "" msgstr "" #: src/generics/methods.md:25 -msgid "" -"_Q:_ Why `T` is specified twice in `impl Point {}`? Isn't that " -"redundant?" +msgid "_Q:_ Why `T` is specified twice in `impl Point {}`? Isn't that redundant?" msgstr "" #: src/generics/methods.md:26 msgid "" -"This is because it is a generic implementation section for generic type. " -"They are independently generic." +"This is because it is a generic implementation section for generic type. They are " +"independently generic." msgstr "" #: src/generics/methods.md:27 @@ -8513,8 +8191,8 @@ msgstr "" #: src/generics/methods.md:29 msgid "" -"`Point` is still generic and you can use `Point`, but methods in this " -"block will only be available for `Point`." +"`Point` is still generic and you can use `Point`, but methods in this block will " +"only be available for `Point`." msgstr "" #: src/generics/monomorphization.md:3 @@ -8557,13 +8235,12 @@ msgstr "" #: src/generics/monomorphization.md:31 msgid "" -"This is a zero-cost abstraction: you get exactly the same result as if you " -"had hand-coded the data structures without the abstraction." +"This is a zero-cost abstraction: you get exactly the same result as if you had hand-" +"coded the data structures without the abstraction." msgstr "" #: src/traits.md:3 -msgid "" -"Rust lets you abstract over types with traits. They're similar to interfaces:" +msgid "Rust lets you abstract over types with traits. They're similar to interfaces:" msgstr "" #: src/traits.md:5 @@ -8587,8 +8264,7 @@ msgid "" "\n" "impl Pet for Cat {\n" " fn name(&self) -> String {\n" -" String::from(\"The cat\") // No name, cats won't respond to it " -"anyway.\n" +" String::from(\"The cat\") // No name, cats won't respond to it anyway.\n" " }\n" "}\n" "\n" @@ -8607,9 +8283,7 @@ msgid "" msgstr "" #: src/traits/trait-objects.md:3 -msgid "" -"Trait objects allow for values of different types, for instance in a " -"collection:" +msgid "Trait objects allow for values of different types, for instance in a collection:" msgstr "" #: src/traits/trait-objects.md:5 @@ -8633,8 +8307,7 @@ msgid "" "\n" "impl Pet for Cat {\n" " fn name(&self) -> String {\n" -" String::from(\"The cat\") // No name, cats won't respond to it " -"anyway.\n" +" String::from(\"The cat\") // No name, cats won't respond to it anyway.\n" " }\n" "}\n" "\n" @@ -8658,72 +8331,51 @@ msgstr "" msgid "" "```bob\n" " Stack Heap\n" -".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - " -"- -.\n" +".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - -.\n" ": : : :\n" -": " -"pets : : :\n" -": +-----------+-------+ : : +-----+-----" -"+ :\n" -": | ptr | o---+---+-----+-->| o o | o o " -"| :\n" -": | len | 2 | : : +-|-|-+-|-|-" -"+ :\n" -": | capacity | 2 | : : | | | | +---------------" -"+ :\n" -": +-----------+-------+ : : | | | '-->| name: \"Fido\" " -"| :\n" -": : : | | | +---------------" -"+ :\n" -"`- - - - - - - - - - - - - -' : | | " -"| :\n" -" : | | | +----------------------" -"+ : \n" -" : | | '---->| \"::name\" " -"| :\n" -" : | | +----------------------" -"+ : \n" -" : | " -"| : \n" -" : | | +-" -"+ : \n" +": pets : : :\n" +": +-----------+-------+ : : +-----+-----+ :\n" +": | ptr | o---+---+-----+-->| o o | o o | :\n" +": | len | 2 | : : +-|-|-+-|-|-+ :\n" +": | capacity | 2 | : : | | | | +---------------+ :\n" +": +-----------+-------+ : : | | | '-->| name: \"Fido\" | :\n" +": : : | | | +---------------+ :\n" +"`- - - - - - - - - - - - - -' : | | | :\n" +" : | | | +----------------------+ : \n" +" : | | '---->| \"::name\" | :\n" +" : | | +----------------------+ : \n" +" : | | : \n" +" : | | +-+ : \n" " : | '-->|" "\\| : \n" -" : | +-" -"+ : \n" -" : " -"| : \n" -" : | +----------------------" -"+ : \n" -" : '---->| \"::name\" " -"| : \n" -" : +----------------------" -"+ :\n" +" : | +-+ : \n" +" : | : \n" +" : | +----------------------+ : \n" +" : '---->| \"::name\" | : \n" +" : +----------------------+ :\n" " : :\n" -" '- - - - - - - - - - - - - - - - - - - - - " -"- -'\n" +" '- - - - - - - - - - - - - - - - - - - - - - -'\n" "\n" "```" msgstr "" #: src/traits/trait-objects.md:72 msgid "" -"Types that implement a given trait may be of different sizes. This makes it " -"impossible to have things like `Vec` in the example above." +"Types that implement a given trait may be of different sizes. This makes it impossible " +"to have things like `Vec` in the example above." msgstr "" #: src/traits/trait-objects.md:73 msgid "" -"`dyn Pet` is a way to tell the compiler about a dynamically sized type that " -"implements `Pet`." +"`dyn Pet` is a way to tell the compiler about a dynamically sized type that implements " +"`Pet`." msgstr "" #: src/traits/trait-objects.md:74 msgid "" -"In the example, `pets` holds _fat pointers_ to objects that implement `Pet`. " -"The fat pointer consists of two components, a pointer to the actual object " -"and a pointer to the virtual method table for the `Pet` implementation of " -"that particular object." +"In the example, `pets` holds _fat pointers_ to objects that implement `Pet`. The fat " +"pointer consists of two components, a pointer to the actual object and a pointer to the " +"virtual method table for the `Pet` implementation of that particular object." msgstr "" #: src/traits/trait-objects.md:75 @@ -8733,10 +8385,8 @@ msgstr "" #: src/traits/trait-objects.md:76 msgid "" "```rust,ignore\n" -" println!(\"{} {}\", std::mem::size_of::(), std::mem::size_of::" -"());\n" -" println!(\"{} {}\", std::mem::size_of::<&Dog>(), std::mem::size_of::" -"<&Cat>());\n" +" println!(\"{} {}\", std::mem::size_of::(), std::mem::size_of::());\n" +" println!(\"{} {}\", std::mem::size_of::<&Dog>(), std::mem::size_of::<&Cat>());\n" " println!(\"{}\", std::mem::size_of::<&dyn Pet>());\n" " println!(\"{}\", std::mem::size_of::>());\n" "```" @@ -8744,8 +8394,8 @@ msgstr "" #: src/traits/deriving-traits.md:3 msgid "" -"Rust derive macros work by automatically generating code that implements the " -"specified traits for a data structure." +"Rust derive macros work by automatically generating code that implements the specified " +"traits for a data structure." msgstr "" #: src/traits/deriving-traits.md:5 @@ -8805,9 +8455,9 @@ msgstr "" #: src/traits/default-methods.md:32 msgid "" -"Traits may specify pre-implemented (default) methods and methods that users " -"are required to implement themselves. Methods with default implementations " -"can rely on required methods." +"Traits may specify pre-implemented (default) methods and methods that users are " +"required to implement themselves. Methods with default implementations can rely on " +"required methods." msgstr "" #: src/traits/default-methods.md:35 @@ -8850,14 +8500,14 @@ msgstr "" #: src/traits/default-methods.md:58 msgid "" -"With the blanket implementation, you no longer need `Equals` as a super " -"trait for `NotEqual`." +"With the blanket implementation, you no longer need `Equals` as a super trait for " +"`NotEqual`." msgstr "" #: src/traits/trait-bounds.md:3 msgid "" -"When working with generics, you often want to require the types to implement " -"some trait, so that you can call this trait's methods." +"When working with generics, you often want to require the types to implement some " +"trait, so that you can call this trait's methods." msgstr "" #: src/traits/trait-bounds.md:6 @@ -8918,8 +8568,8 @@ msgstr "" #: src/traits/trait-bounds.md:48 msgid "" -"If someone asks, the extra feature is that the type on the left of \":\" can " -"be arbitrary, like `Option`." +"If someone asks, the extra feature is that the type on the left of \":\" can be " +"arbitrary, like `Option`." msgstr "" #: src/traits/impl-trait.md:1 @@ -8928,8 +8578,8 @@ msgstr "" #: src/traits/impl-trait.md:3 msgid "" -"Similar to trait bounds, an `impl Trait` syntax can be used in function " -"arguments and return values:" +"Similar to trait bounds, an `impl Trait` syntax can be used in function arguments and " +"return values:" msgstr "" #: src/traits/impl-trait.md:6 @@ -8953,87 +8603,79 @@ msgid "`impl Trait` allows you to work with types which you cannot name." msgstr "" #: src/traits/impl-trait.md:23 -msgid "" -"The meaning of `impl Trait` is a bit different in the different positions." +msgid "The meaning of `impl Trait` is a bit different in the different positions." msgstr "" #: src/traits/impl-trait.md:25 msgid "" -"For a parameter, `impl Trait` is like an anonymous generic parameter with a " -"trait bound." +"For a parameter, `impl Trait` is like an anonymous generic parameter with a trait bound." msgstr "" #: src/traits/impl-trait.md:27 msgid "" -"For a return type, it means that the return type is some concrete type that " -"implements the trait, without naming the type. This can be useful when you " -"don't want to expose the concrete type in a public API." +"For a return type, it means that the return type is some concrete type that implements " +"the trait, without naming the type. This can be useful when you don't want to expose " +"the concrete type in a public API." msgstr "" #: src/traits/impl-trait.md:31 msgid "" -"Inference is hard in return position. A function returning `impl Foo` picks " -"the concrete type it returns, without writing it out in the source. A " -"function returning a generic type like `collect() -> B` can return any " -"type satisfying `B`, and the caller may need to choose one, such as with " -"`let x: Vec<_> = foo.collect()` or with the turbofish, `foo.collect::" -">()`." +"Inference is hard in return position. A function returning `impl Foo` picks the " +"concrete type it returns, without writing it out in the source. A function returning a " +"generic type like `collect() -> B` can return any type satisfying `B`, and the " +"caller may need to choose one, such as with `let x: Vec<_> = foo.collect()` or with the " +"turbofish, `foo.collect::>()`." msgstr "" #: src/traits/impl-trait.md:37 msgid "" -"This example is great, because it uses `impl Display` twice. It helps to " -"explain that nothing here enforces that it is _the same_ `impl Display` " -"type. If we used a single `T: Display`, it would enforce the constraint " -"that input `T` and return `T` type are the same type. It would not work for " -"this particular function, as the type we expect as input is likely not what " -"`format!` returns. If we wanted to do the same via `: Display` syntax, we'd " -"need two independent generic parameters." +"This example is great, because it uses `impl Display` twice. It helps to explain that " +"nothing here enforces that it is _the same_ `impl Display` type. If we used a single " +"`T: Display`, it would enforce the constraint that input `T` and return `T` type are " +"the same type. It would not work for this particular function, as the type we expect as " +"input is likely not what `format!` returns. If we wanted to do the same via `: Display` " +"syntax, we'd need two independent generic parameters." msgstr "" #: src/traits/important-traits.md:3 -msgid "" -"We will now look at some of the most common traits of the Rust standard " -"library:" +msgid "We will now look at some of the most common traits of the Rust standard library:" msgstr "" #: src/traits/important-traits.md:5 msgid "" "[`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) and " -"[`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator.html) " -"used in `for` loops," +"[`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator.html) used in " +"`for` loops," msgstr "" #: src/traits/important-traits.md:6 msgid "" -"[`From`](https://doc.rust-lang.org/std/convert/trait.From.html) and [`Into`]" -"(https://doc.rust-lang.org/std/convert/trait.Into.html) used to convert " -"values," +"[`From`](https://doc.rust-lang.org/std/convert/trait.From.html) and [`Into`](https://" +"doc.rust-lang.org/std/convert/trait.Into.html) used to convert values," msgstr "" #: src/traits/important-traits.md:7 msgid "" -"[`Read`](https://doc.rust-lang.org/std/io/trait.Read.html) and [`Write`]" -"(https://doc.rust-lang.org/std/io/trait.Write.html) used for IO," +"[`Read`](https://doc.rust-lang.org/std/io/trait.Read.html) and [`Write`](https://doc." +"rust-lang.org/std/io/trait.Write.html) used for IO," msgstr "" #: src/traits/important-traits.md:8 msgid "" -"[`Add`](https://doc.rust-lang.org/std/ops/trait.Add.html), [`Mul`](https://" -"doc.rust-lang.org/std/ops/trait.Mul.html), ... used for operator " -"overloading, and" +"[`Add`](https://doc.rust-lang.org/std/ops/trait.Add.html), [`Mul`](https://doc.rust-" +"lang.org/std/ops/trait.Mul.html), ... used for operator overloading, and" msgstr "" #: src/traits/important-traits.md:9 msgid "" -"[`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop.html) used for " -"defining destructors." +"[`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop.html) used for defining " +"destructors." msgstr "" #: src/traits/important-traits.md:10 msgid "" -"[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) used " -"to construct a default instance of a type." +"[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) used to construct " +"a default instance of a type." msgstr "" #: src/traits/iterator.md:1 @@ -9042,8 +8684,8 @@ msgstr "" #: src/traits/iterator.md:3 msgid "" -"You can implement the [`Iterator`](https://doc.rust-lang.org/std/iter/trait." -"Iterator.html) trait on your own types:" +"You can implement the [`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator." +"html) trait on your own types:" msgstr "" #: src/traits/iterator.md:5 @@ -9076,26 +8718,25 @@ msgstr "" #: src/traits/iterator.md:32 msgid "" -"The `Iterator` trait implements many common functional programming " -"operations over collections (e.g. `map`, `filter`, `reduce`, etc). This is " -"the trait where you can find all the documentation about them. In Rust these " -"functions should produce the code as efficient as equivalent imperative " -"implementations." +"The `Iterator` trait implements many common functional programming operations over " +"collections (e.g. `map`, `filter`, `reduce`, etc). This is the trait where you can " +"find all the documentation about them. In Rust these functions should produce the code " +"as efficient as equivalent imperative implementations." msgstr "" #: src/traits/iterator.md:37 msgid "" -"`IntoIterator` is the trait that makes for loops work. It is implemented by " -"collection types such as `Vec` and references to them such as `&Vec` " -"and `&[T]`. Ranges also implement it. This is why you can iterate over a " -"vector with `for i in some_vec { .. }` but `some_vec.next()` doesn't exist." +"`IntoIterator` is the trait that makes for loops work. It is implemented by collection " +"types such as `Vec` and references to them such as `&Vec` and `&[T]`. Ranges also " +"implement it. This is why you can iterate over a vector with `for i in some_vec { .. }` " +"but `some_vec.next()` doesn't exist." msgstr "" #: src/traits/from-iterator.md:3 msgid "" -"[`FromIterator`](https://doc.rust-lang.org/std/iter/trait.FromIterator.html) " -"lets you build a collection from an [`Iterator`](https://doc.rust-lang.org/" -"std/iter/trait.Iterator.html)." +"[`FromIterator`](https://doc.rust-lang.org/std/iter/trait.FromIterator.html) lets you " +"build a collection from an [`Iterator`](https://doc.rust-lang.org/std/iter/trait." +"Iterator.html)." msgstr "" #: src/traits/from-iterator.md:5 @@ -9113,8 +8754,8 @@ msgstr "" #: src/traits/from-iterator.md:17 msgid "" -"`Iterator` implements `fn collect(self) -> B where B: FromIterator, Self: Sized`" +"`Iterator` implements `fn collect(self) -> B where B: FromIterator, " +"Self: Sized`" msgstr "" #: src/traits/from-iterator.md:23 @@ -9129,9 +8770,9 @@ msgstr "" #: src/traits/from-into.md:3 msgid "" -"Types implement [`From`](https://doc.rust-lang.org/std/convert/trait.From." -"html) and [`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) to " -"facilitate type conversions:" +"Types implement [`From`](https://doc.rust-lang.org/std/convert/trait.From.html) and " +"[`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) to facilitate type " +"conversions:" msgstr "" #: src/traits/from-into.md:5 @@ -9149,9 +8790,9 @@ msgstr "" #: src/traits/from-into.md:15 msgid "" -"[`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) is " -"automatically implemented when [`From`](https://doc.rust-lang.org/std/" -"convert/trait.From.html) is implemented:" +"[`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) is automatically " +"implemented when [`From`](https://doc.rust-lang.org/std/convert/trait.From.html) is " +"implemented:" msgstr "" #: src/traits/from-into.md:17 @@ -9169,16 +8810,15 @@ msgstr "" #: src/traits/from-into.md:29 msgid "" -"That's why it is common to only implement `From`, as your type will get " -"`Into` implementation too." +"That's why it is common to only implement `From`, as your type will get `Into` " +"implementation too." msgstr "" #: src/traits/from-into.md:30 msgid "" -"When declaring a function argument input type like \"anything that can be " -"converted into a `String`\", the rule is opposite, you should use `Into`. " -"Your function will accept types that implement `From` and those that _only_ " -"implement `Into`." +"When declaring a function argument input type like \"anything that can be converted " +"into a `String`\", the rule is opposite, you should use `Into`. Your function will " +"accept types that implement `From` and those that _only_ implement `Into`." msgstr "" #: src/traits/read-write.md:1 @@ -9187,9 +8827,9 @@ msgstr "" #: src/traits/read-write.md:3 msgid "" -"Using [`Read`](https://doc.rust-lang.org/std/io/trait.Read.html) and " -"[`BufRead`](https://doc.rust-lang.org/std/io/trait.BufRead.html), you can " -"abstract over `u8` sources:" +"Using [`Read`](https://doc.rust-lang.org/std/io/trait.Read.html) and [`BufRead`]" +"(https://doc.rust-lang.org/std/io/trait.BufRead.html), you can abstract over `u8` " +"sources:" msgstr "" #: src/traits/read-write.md:5 @@ -9215,8 +8855,8 @@ msgstr "" #: src/traits/read-write.md:23 msgid "" -"Similarly, [`Write`](https://doc.rust-lang.org/std/io/trait.Write.html) lets " -"you abstract over `u8` sinks:" +"Similarly, [`Write`](https://doc.rust-lang.org/std/io/trait.Write.html) lets you " +"abstract over `u8` sinks:" msgstr "" #: src/traits/read-write.md:25 @@ -9245,8 +8885,8 @@ msgstr "" #: src/traits/drop.md:3 msgid "" -"Values which implement [`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop." -"html) can specify code to run when they go out of scope:" +"Values which implement [`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop.html) can " +"specify code to run when they go out of scope:" msgstr "" #: src/traits/drop.md:5 @@ -9289,8 +8929,8 @@ msgstr "" #: src/traits/drop.md:37 msgid "" -"Short-answer: If it did, `std::mem::drop` would be called at the end of the " -"block, resulting in another call to `Drop::drop`, and a stack overflow!" +"Short-answer: If it did, `std::mem::drop` would be called at the end of the block, " +"resulting in another call to `Drop::drop`, and a stack overflow!" msgstr "" #: src/traits/drop.md:40 @@ -9303,8 +8943,8 @@ msgstr "" #: src/traits/default.md:3 msgid "" -"[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) trait " -"produces a default value for a type." +"[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) trait produces a " +"default value for a type." msgstr "" #: src/traits/default.md:5 @@ -9344,14 +8984,13 @@ msgid "" msgstr "" #: src/traits/default.md:40 -msgid "" -"It can be implemented directly or it can be derived via `#[derive(Default)]`." +msgid "It can be implemented directly or it can be derived via `#[derive(Default)]`." msgstr "" #: src/traits/default.md:41 msgid "" -"A derived implementation will produce a value where all fields are set to " -"their default values." +"A derived implementation will produce a value where all fields are set to their default " +"values." msgstr "" #: src/traits/default.md:42 @@ -9360,8 +8999,8 @@ msgstr "" #: src/traits/default.md:43 msgid "" -"Standard Rust types often implement `Default` with reasonable values (e.g. " -"`0`, `\"\"`, etc)." +"Standard Rust types often implement `Default` with reasonable values (e.g. `0`, `\"\"`, " +"etc)." msgstr "" #: src/traits/default.md:44 @@ -9370,15 +9009,14 @@ msgstr "" #: src/traits/default.md:45 msgid "" -"Rust standard library is aware that types can implement `Default` and " -"provides convenience methods that use it." +"Rust standard library is aware that types can implement `Default` and provides " +"convenience methods that use it." msgstr "" #: src/traits/default.md:46 msgid "" -"the `..` syntax is called [struct update syntax](https://doc.rust-lang.org/" -"book/ch05-01-defining-structs.html#creating-instances-from-other-instances-" -"with-struct-update-syntax)" +"the `..` syntax is called [struct update syntax](https://doc.rust-lang.org/book/ch05-01-" +"defining-structs.html#creating-instances-from-other-instances-with-struct-update-syntax)" msgstr "" #: src/traits/operators.md:1 @@ -9387,8 +9025,8 @@ msgstr "" #: src/traits/operators.md:3 msgid "" -"Operator overloading is implemented via traits in [`std::ops`](https://doc." -"rust-lang.org/std/ops/index.html):" +"Operator overloading is implemented via traits in [`std::ops`](https://doc.rust-lang." +"org/std/ops/index.html):" msgstr "" #: src/traits/operators.md:5 @@ -9414,34 +9052,31 @@ msgid "" msgstr "" #: src/traits/operators.md:28 -msgid "" -"You could implement `Add` for `&Point`. In which situations is that useful? " +msgid "You could implement `Add` for `&Point`. In which situations is that useful? " msgstr "" #: src/traits/operators.md:29 msgid "" -"Answer: `Add:add` consumes `self`. If type `T` for which you are overloading " -"the operator is not `Copy`, you should consider overloading the operator for " -"`&T` as well. This avoids unnecessary cloning on the call site." +"Answer: `Add:add` consumes `self`. If type `T` for which you are overloading the " +"operator is not `Copy`, you should consider overloading the operator for `&T` as well. " +"This avoids unnecessary cloning on the call site." msgstr "" #: src/traits/operators.md:33 msgid "" -"Why is `Output` an associated type? Could it be made a type parameter of the " -"method?" +"Why is `Output` an associated type? Could it be made a type parameter of the method?" msgstr "" #: src/traits/operators.md:34 msgid "" -"Short answer: Function type parameters are controlled by the caller, but " -"associated types (like `Output`) are controlled by the implementor of a " -"trait." +"Short answer: Function type parameters are controlled by the caller, but associated " +"types (like `Output`) are controlled by the implementor of a trait." msgstr "" #: src/traits/operators.md:37 msgid "" -"You could implement `Add` for two different types, e.g. `impl Add<(i32, " -"i32)> for Point` would add a tuple to a `Point`." +"You could implement `Add` for two different types, e.g. `impl Add<(i32, i32)> for " +"Point` would add a tuple to a `Point`." msgstr "" #: src/traits/closures.md:1 @@ -9450,10 +9085,10 @@ msgstr "" #: src/traits/closures.md:3 msgid "" -"Closures or lambda expressions have types which cannot be named. However, " -"they implement special [`Fn`](https://doc.rust-lang.org/std/ops/trait.Fn." -"html), [`FnMut`](https://doc.rust-lang.org/std/ops/trait.FnMut.html), and " -"[`FnOnce`](https://doc.rust-lang.org/std/ops/trait.FnOnce.html) traits:" +"Closures or lambda expressions have types which cannot be named. However, they " +"implement special [`Fn`](https://doc.rust-lang.org/std/ops/trait.Fn.html), [`FnMut`]" +"(https://doc.rust-lang.org/std/ops/trait.FnMut.html), and [`FnOnce`](https://doc.rust-" +"lang.org/std/ops/trait.FnOnce.html) traits:" msgstr "" #: src/traits/closures.md:8 @@ -9485,40 +9120,39 @@ msgstr "" #: src/traits/closures.md:34 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, or perhaps " +"captures nothing at all. It can be called multiple times concurrently." msgstr "" #: src/traits/closures.md:37 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. You can call it multiple " +"times, but not concurrently." msgstr "" #: src/traits/closures.md:40 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. It might " +"consume captured values." msgstr "" #: src/traits/closures.md:43 msgid "" -"`FnMut` is a subtype of `FnOnce`. `Fn` is a subtype of `FnMut` and `FnOnce`. " -"I.e. you can use an `FnMut` wherever an `FnOnce` is called for, and you can " -"use an `Fn` wherever an `FnMut` or `FnOnce` is called for." +"`FnMut` is a subtype of `FnOnce`. `Fn` is a subtype of `FnMut` and `FnOnce`. I.e. you " +"can use an `FnMut` wherever an `FnOnce` is called for, and you can use an `Fn` wherever " +"an `FnMut` or `FnOnce` is called for." msgstr "" #: src/traits/closures.md:47 msgid "" -"The compiler also infers `Copy` (e.g. for `add_3`) and `Clone` (e.g. " -"`multiply_sum`), depending on what the closure captures." +"The compiler also infers `Copy` (e.g. for `add_3`) and `Clone` (e.g. `multiply_sum`), " +"depending on what the closure captures." msgstr "" #: src/traits/closures.md:50 msgid "" -"By default, closures will capture by reference if they can. The `move` " -"keyword makes them capture by value." +"By default, closures will capture by reference if they can. The `move` keyword makes " +"them capture by value." msgstr "" #: src/traits/closures.md:52 @@ -9544,15 +9178,13 @@ msgid "We will design a classical GUI library using traits and trait objects." msgstr "" #: src/exercises/day-3/morning.md:5 -msgid "" -"We will also look at enum dispatch with an exercise involving points and " -"polygons." +msgid "We will also look at enum dispatch with an exercise involving points and polygons." msgstr "" #: src/exercises/day-3/simple-gui.md:3 msgid "" -"Let us design a classical GUI library using our new knowledge of traits and " -"trait objects." +"Let us design a classical GUI library using our new knowledge of traits and trait " +"objects." msgstr "" #: src/exercises/day-3/simple-gui.md:6 @@ -9565,8 +9197,8 @@ msgstr "" #: src/exercises/day-3/simple-gui.md:9 msgid "" -"`Button`: has a `label` and a callback function which is invoked when the " -"button is pressed." +"`Button`: has a `label` and a callback function which is invoked when the button is " +"pressed." msgstr "" #: src/exercises/day-3/simple-gui.md:11 @@ -9579,8 +9211,8 @@ msgstr "" #: src/exercises/day-3/simple-gui.md:15 msgid "" -"Copy the code below to , fill in the missing " -"`draw_into` methods so that you implement the `Widget` trait:" +"Copy the code below to , fill in the missing `draw_into` " +"methods so that you implement the `Widget` trait:" msgstr "" #: src/exercises/day-3/simple-gui.md:18 @@ -9688,8 +9320,7 @@ msgid "" "\n" "fn main() {\n" " let mut window = Window::new(\"Rust GUI Demo 1.23\");\n" -" window.add_widget(Box::new(Label::new(\"This is a small text GUI demo." -"\")));\n" +" window.add_widget(Box::new(Label::new(\"This is a small text GUI demo.\")));\n" " window.add_widget(Box::new(Button::new(\n" " \"Click me!\",\n" " Box::new(|| println!(\"You clicked the button!\")),\n" @@ -9718,10 +9349,10 @@ msgstr "" #: src/exercises/day-3/simple-gui.md:142 msgid "" -"If you want to draw aligned text, you can use the [fill/alignment](https://" -"doc.rust-lang.org/std/fmt/index.html#fillalignment) formatting operators. In " -"particular, notice how you can pad with different characters (here a `'/'`) " -"and how you can control alignment:" +"If you want to draw aligned text, you can use the [fill/alignment](https://doc.rust-" +"lang.org/std/fmt/index.html#fillalignment) formatting operators. In particular, notice " +"how you can pad with different characters (here a `'/'`) and how you can control " +"alignment:" msgstr "" #: src/exercises/day-3/simple-gui.md:147 @@ -9737,8 +9368,7 @@ msgid "" msgstr "" #: src/exercises/day-3/simple-gui.md:156 -msgid "" -"Using such alignment tricks, you can for example produce output like this:" +msgid "Using such alignment tricks, you can for example produce output like this:" msgstr "" #: src/exercises/day-3/simple-gui.md:158 @@ -9761,9 +9391,8 @@ msgstr "" #: src/exercises/day-3/points-polygons.md:3 msgid "" -"We will create a `Polygon` struct which contain some points. Copy the code " -"below to and fill in the missing methods to " -"make the tests pass:" +"We will create a `Polygon` struct which contain some points. Copy the code below to " +" and fill in the missing methods to make the tests pass:" msgstr "" #: src/exercises/day-3/points-polygons.md:7 @@ -9879,9 +9508,8 @@ msgstr "" #: src/exercises/day-3/points-polygons.md:117 msgid "" -"Since the method signatures are missing from the problem statements, the key " -"part of the exercise is to specify those correctly. You don't have to modify " -"the tests." +"Since the method signatures are missing from the problem statements, the key part of " +"the exercise is to specify those correctly. You don't have to modify the tests." msgstr "" #: src/exercises/day-3/points-polygons.md:120 @@ -9890,14 +9518,14 @@ msgstr "" #: src/exercises/day-3/points-polygons.md:122 msgid "" -"Derive a `Copy` trait for some structs, as in tests the methods sometimes " -"don't borrow their arguments." +"Derive a `Copy` trait for some structs, as in tests the methods sometimes don't borrow " +"their arguments." msgstr "" #: src/exercises/day-3/points-polygons.md:123 msgid "" -"Discover that `Add` trait must be implemented for two objects to be addable " -"via \"+\". Note that we do not discuss generics until Day 3." +"Discover that `Add` trait must be implemented for two objects to be addable via \"+\". " +"Note that we do not discuss generics until Day 3." msgstr "" #: src/error-handling.md:3 @@ -9935,8 +9563,7 @@ msgid "Panics are symptoms of bugs in the program." msgstr "" #: src/error-handling/panics.md:14 -msgid "" -"Use non-panicking APIs (such as `Vec::get`) if crashing is not acceptable." +msgid "Use non-panicking APIs (such as `Vec::get`) if crashing is not acceptable." msgstr "" #: src/error-handling/panic-unwind.md:1 @@ -9944,9 +9571,7 @@ msgid "Catching the Stack Unwinding" msgstr "" #: src/error-handling/panic-unwind.md:3 -msgid "" -"By default, a panic will cause the stack to unwind. The unwinding can be " -"caught:" +msgid "By default, a panic will cause the stack to unwind. The unwinding can be caught:" msgstr "" #: src/error-handling/panic-unwind.md:5 @@ -9970,8 +9595,8 @@ msgstr "" #: src/error-handling/panic-unwind.md:21 msgid "" -"This can be useful in servers which should keep running even if a single " -"request crashes." +"This can be useful in servers which should keep running even if a single request " +"crashes." msgstr "" #: src/error-handling/panic-unwind.md:23 @@ -9984,8 +9609,8 @@ msgstr "" #: src/error-handling/result.md:3 msgid "" -"We have already seen the `Result` enum. This is used pervasively when errors " -"are expected as part of normal operation:" +"We have already seen the `Result` enum. This is used pervasively when errors are " +"expected as part of normal operation:" msgstr "" #: src/error-handling/result.md:6 @@ -10012,17 +9637,17 @@ msgstr "" #: src/error-handling/result.md:27 msgid "" -"As with `Option`, the successful value sits inside of `Result`, forcing the " -"developer to explicitly extract it. This encourages error checking. In the " -"case where an error should never happen, `unwrap()` or `expect()` can be " -"called, and this is a signal of the developer intent too." +"As with `Option`, the successful value sits inside of `Result`, forcing the developer " +"to explicitly extract it. This encourages error checking. In the case where an error " +"should never happen, `unwrap()` or `expect()` can be called, and this is a signal of " +"the developer intent too." msgstr "" #: src/error-handling/result.md:30 msgid "" -"`Result` documentation is a recommended read. Not during the course, but it " -"is worth mentioning. It contains a lot of convenience methods and functions " -"that help functional-style programming. " +"`Result` documentation is a recommended read. Not during the course, but it is worth " +"mentioning. It contains a lot of convenience methods and functions that help " +"functional-style programming. " msgstr "" #: src/error-handling/try-operator.md:1 @@ -10031,8 +9656,7 @@ msgstr "" #: src/error-handling/try-operator.md:3 msgid "" -"The try-operator `?` is used to return errors to the caller. It lets you " -"turn the common" +"The try-operator `?` is used to return errors to the caller. It lets you turn the common" msgstr "" #: src/error-handling/try-operator.md:6 @@ -10096,32 +9720,29 @@ msgstr "" #: src/error-handling/try-operator.md:51 #: src/error-handling/converting-error-types-example.md:53 msgid "" -"Use the `fs::write` call to test out the different scenarios: no file, empty " -"file, file with username." +"Use the `fs::write` call to test out the different scenarios: no file, empty file, file " +"with username." msgstr "" #: src/error-handling/try-operator.md:52 msgid "" -"The return type of the function has to be compatible with the nested " -"functions it calls. For instance, a function returning a `Result` " -"can only apply the `?` operator on a function returning a `Result`. It cannot apply the `?` operator on a function returning an " -"`Option` or `Result` unless `OtherErr` implements " -"`From`. Reciprocally, a function returning an `Option` can only " -"apply the `?` operator on a function returning an `Option`." +"The return type of the function has to be compatible with the nested functions it " +"calls. For instance, a function returning a `Result` can only apply the `?` " +"operator on a function returning a `Result`. It cannot apply the `?` " +"operator on a function returning an `Option` or `Result` unless " +"`OtherErr` implements `From`. Reciprocally, a function returning an `Option` " +"can only apply the `?` operator on a function returning an `Option`." msgstr "" #: src/error-handling/try-operator.md:57 msgid "" -"You can convert incompatible types into one another with the different " -"`Option` and `Result` methods such as `Option::ok_or`, `Result::ok`, " -"`Result::err`." +"You can convert incompatible types into one another with the different `Option` and " +"`Result` methods such as `Option::ok_or`, `Result::ok`, `Result::err`." msgstr "" #: src/error-handling/converting-error-types.md:3 msgid "" -"The effective expansion of `?` is a little more complicated than previously " -"indicated:" +"The effective expansion of `?` is a little more complicated than previously indicated:" msgstr "" #: src/error-handling/converting-error-types.md:5 @@ -10147,8 +9768,8 @@ msgstr "" #: src/error-handling/converting-error-types.md:18 msgid "" -"The `From::from` call here means we attempt to convert the error type to the " -"type returned by the function:" +"The `From::from` call here means we attempt to convert the error type to the type " +"returned by the function:" msgstr "" #: src/error-handling/converting-error-types-example.md:3 @@ -10171,8 +9792,8 @@ msgid "" " fn fmt(&self, f: &mut Formatter) -> fmt::Result {\n" " match self {\n" " Self::IoError(e) => write!(f, \"IO error: {e}\"),\n" -" Self::EmptyUsername(filename) => write!(f, \"Found no username " -"in {filename}\"),\n" +" Self::EmptyUsername(filename) => write!(f, \"Found no username in " +"{filename}\"),\n" " }\n" " }\n" "}\n" @@ -10202,23 +9823,23 @@ msgstr "" #: src/error-handling/converting-error-types-example.md:55 msgid "" -"It is good practice for all error types that don't need to be `no_std` to " -"implement `std::error::Error`, which requires `Debug` and `Display`. The " -"`Error` crate for `core` is only available in [nightly](https://github.com/" -"rust-lang/rust/issues/103765), so not fully `no_std` compatible yet." +"It is good practice for all error types that don't need to be `no_std` to implement " +"`std::error::Error`, which requires `Debug` and `Display`. The `Error` crate for `core` " +"is only available in [nightly](https://github.com/rust-lang/rust/issues/103765), so not " +"fully `no_std` compatible yet." msgstr "" #: src/error-handling/converting-error-types-example.md:57 msgid "" -"It's generally helpful for them to implement `Clone` and `Eq` too where " -"possible, to make life easier for tests and consumers of your library. In " -"this case we can't easily do so, because `io::Error` doesn't implement them." +"It's generally helpful for them to implement `Clone` and `Eq` too where possible, to " +"make life easier for tests and consumers of your library. In this case we can't easily " +"do so, because `io::Error` doesn't implement them." msgstr "" #: src/error-handling/deriving-error-enums.md:3 msgid "" -"The [thiserror](https://docs.rs/thiserror/) crate is a popular way to create " -"an error enum like we did on the previous page:" +"The [thiserror](https://docs.rs/thiserror/) crate is a popular way to create an error " +"enum like we did on the previous page:" msgstr "" #: src/error-handling/deriving-error-enums.md:6 @@ -10257,9 +9878,9 @@ msgstr "" #: src/error-handling/deriving-error-enums.md:39 msgid "" -"`thiserror`'s derive macro automatically implements `std::error::Error`, and " -"optionally `Display` (if the `#[error(...)]` attributes are provided) and " -"`From` (if the `#[from]` attribute is added). It also works for structs." +"`thiserror`'s derive macro automatically implements `std::error::Error`, and optionally " +"`Display` (if the `#[error(...)]` attributes are provided) and `From` (if the `#[from]` " +"attribute is added). It also works for structs." msgstr "" #: src/error-handling/deriving-error-enums.md:43 @@ -10268,9 +9889,8 @@ msgstr "" #: src/error-handling/dynamic-errors.md:3 msgid "" -"Sometimes we want to allow any type of error to be returned without writing " -"our own enum covering all the different possibilities. `std::error::Error` " -"makes this easy." +"Sometimes we want to allow any type of error to be returned without writing our own " +"enum covering all the different possibilities. `std::error::Error` makes this easy." msgstr "" #: src/error-handling/dynamic-errors.md:6 @@ -10306,18 +9926,16 @@ msgstr "" #: src/error-handling/dynamic-errors.md:36 msgid "" -"This saves on code, but gives up the ability to cleanly handle different " -"error cases differently in the program. As such it's generally not a good " -"idea to use `Box` in the public API of a library, but it can be a " -"good option in a program where you just want to display the error message " -"somewhere." +"This saves on code, but gives up the ability to cleanly handle different error cases " +"differently in the program. As such it's generally not a good idea to use `Box` in the public API of a library, but it can be a good option in a program where " +"you just want to display the error message somewhere." msgstr "" #: src/error-handling/error-contexts.md:3 msgid "" -"The widely used [anyhow](https://docs.rs/anyhow/) crate can help you add " -"contextual information to your errors and allows you to have fewer custom " -"error types:" +"The widely used [anyhow](https://docs.rs/anyhow/) crate can help you add contextual " +"information to your errors and allows you to have fewer custom error types:" msgstr "" #: src/error-handling/error-contexts.md:7 @@ -10355,21 +9973,19 @@ msgstr "" #: src/error-handling/error-contexts.md:36 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 " -"is widely used in applications." +"`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 is widely used in " +"applications." msgstr "" #: src/error-handling/error-contexts.md:38 -msgid "" -"Actual error type inside of it can be extracted for examination if necessary." +msgid "Actual error type inside of it can be extracted for examination if necessary." msgstr "" #: src/error-handling/error-contexts.md:39 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::Result` may be familiar to Go developers, as it " +"provides similar usage patterns and ergonomics to `(T, error)` from Go." msgstr "" #: src/testing.md:3 @@ -10421,8 +10037,8 @@ msgstr "" #: src/testing/test-modules.md:3 msgid "" -"Unit tests are often put in a nested module (run tests on the [Playground]" -"(https://play.rust-lang.org/)):" +"Unit tests are often put in a nested module (run tests on the [Playground](https://play." +"rust-lang.org/)):" msgstr "" #: src/testing/test-modules.md:6 @@ -10528,8 +10144,8 @@ msgstr "" #: src/testing/useful-crates.md:7 msgid "" -"[googletest](https://docs.rs/googletest): Comprehensive test assertion " -"library in the tradition of GoogleTest for C++." +"[googletest](https://docs.rs/googletest): Comprehensive test assertion library in the " +"tradition of GoogleTest for C++." msgstr "" #: src/testing/useful-crates.md:8 @@ -10537,9 +10153,7 @@ msgid "[proptest](https://docs.rs/proptest): Property-based testing for Rust." msgstr "" #: src/testing/useful-crates.md:9 -msgid "" -"[rstest](https://docs.rs/rstest): Support for fixtures and parameterised " -"tests." +msgid "[rstest](https://docs.rs/rstest): Support for fixtures and parameterised tests." msgstr "" #: src/unsafe.md:3 @@ -10551,21 +10165,19 @@ msgid "**Safe Rust:** memory safe, no undefined behavior possible." msgstr "" #: src/unsafe.md:6 -msgid "" -"**Unsafe Rust:** can trigger undefined behavior if preconditions are " -"violated." +msgid "**Unsafe Rust:** can trigger undefined behavior if preconditions are violated." msgstr "" #: src/unsafe.md:8 msgid "" -"We will be seeing mostly safe Rust in this course, but it's important to " -"know what Unsafe Rust is." +"We will be seeing mostly safe Rust in this course, but it's important to know what " +"Unsafe Rust is." msgstr "" #: src/unsafe.md:11 msgid "" -"Unsafe code is usually small and isolated, and its correctness should be " -"carefully documented. It is usually wrapped in a safe abstraction layer." +"Unsafe code is usually small and isolated, and its correctness should be carefully " +"documented. It is usually wrapped in a safe abstraction layer." msgstr "" #: src/unsafe.md:14 @@ -10594,17 +10206,16 @@ msgstr "" #: src/unsafe.md:22 msgid "" -"We will briefly cover unsafe capabilities next. For full details, please see " -"[Chapter 19.1 in the Rust Book](https://doc.rust-lang.org/book/ch19-01-" -"unsafe-rust.html) and the [Rustonomicon](https://doc.rust-lang.org/nomicon/)." +"We will briefly cover unsafe capabilities next. For full details, please see [Chapter " +"19.1 in the Rust Book](https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html) and the " +"[Rustonomicon](https://doc.rust-lang.org/nomicon/)." msgstr "" #: src/unsafe.md:28 msgid "" -"Unsafe Rust does not mean the code is incorrect. It means that developers " -"have turned off the compiler safety features and have to write correct code " -"by themselves. It means the compiler no longer enforces Rust's memory-safety " -"rules." +"Unsafe Rust does not mean the code is incorrect. It means that developers have turned " +"off the compiler safety features and have to write correct code by themselves. It means " +"the compiler no longer enforces Rust's memory-safety rules." msgstr "" #: src/unsafe/raw-pointers.md:3 @@ -10621,8 +10232,7 @@ msgid "" " let r2 = r1 as *const i32;\n" "\n" " // Safe because r1 and r2 were obtained from references and so are\n" -" // guaranteed to be non-null and properly aligned, the objects " -"underlying\n" +" // guaranteed to be non-null and properly aligned, the objects underlying\n" " // the references from which they were obtained are live throughout the\n" " // whole unsafe block, and they are not accessed either through the\n" " // references or concurrently through any other pointers.\n" @@ -10637,15 +10247,15 @@ msgstr "" #: src/unsafe/raw-pointers.md:27 msgid "" -"It is good practice (and required by the Android Rust style guide) to write " -"a comment for each `unsafe` block explaining how the code inside it " -"satisfies the safety requirements of the unsafe operations it is doing." +"It is good practice (and required by the Android Rust style guide) to write a comment " +"for each `unsafe` block explaining how the code inside it satisfies the safety " +"requirements of the unsafe operations it is doing." msgstr "" #: src/unsafe/raw-pointers.md:31 msgid "" -"In the case of pointer dereferences, this means that the pointers must be " -"[_valid_](https://doc.rust-lang.org/std/ptr/index.html#safety), i.e.:" +"In the case of pointer dereferences, this means that the pointers must be [_valid_]" +"(https://doc.rust-lang.org/std/ptr/index.html#safety), i.e.:" msgstr "" #: src/unsafe/raw-pointers.md:34 @@ -10654,8 +10264,7 @@ msgstr "" #: src/unsafe/raw-pointers.md:35 msgid "" -"The pointer must be _dereferenceable_ (within the bounds of a single " -"allocated object)." +"The pointer must be _dereferenceable_ (within the bounds of a single allocated object)." msgstr "" #: src/unsafe/raw-pointers.md:36 @@ -10668,8 +10277,8 @@ msgstr "" #: src/unsafe/raw-pointers.md:38 msgid "" -"If the pointer was obtained by casting a reference, the underlying object " -"must be live and no reference may be used to access the memory." +"If the pointer was obtained by casting a reference, the underlying object must be live " +"and no reference may be used to access the memory." msgstr "" #: src/unsafe/raw-pointers.md:41 @@ -10693,8 +10302,8 @@ msgstr "" #: src/unsafe/mutable-static-variables.md:13 msgid "" -"However, since data races can occur, it is unsafe to read and write mutable " -"static variables:" +"However, since data races can occur, it is unsafe to read and write mutable static " +"variables:" msgstr "" #: src/unsafe/mutable-static-variables.md:16 @@ -10716,9 +10325,9 @@ msgstr "" #: src/unsafe/mutable-static-variables.md:32 msgid "" -"Using a mutable static is generally a bad idea, but there are some cases " -"where it might make sense in low-level `no_std` code, such as implementing a " -"heap allocator or working with some C APIs." +"Using a mutable static is generally a bad idea, but there are some cases where it might " +"make sense in low-level `no_std` code, such as implementing a heap allocator or working " +"with some C APIs." msgstr "" #: src/unsafe/unions.md:3 @@ -10744,22 +10353,21 @@ msgstr "" #: src/unsafe/unions.md:21 msgid "" -"Unions are very rarely needed in Rust as you can usually use an enum. They " -"are occasionally needed for interacting with C library APIs." +"Unions are very rarely needed in Rust as you can usually use an enum. They are " +"occasionally needed for interacting with C library APIs." msgstr "" #: src/unsafe/unions.md:24 msgid "" -"If you just want to reinterpret bytes as a different type, you probably want " -"[`std::mem::transmute`](https://doc.rust-lang.org/stable/std/mem/fn." -"transmute.html) or a safe wrapper such as the [`zerocopy`](https://crates.io/" -"crates/zerocopy) crate." +"If you just want to reinterpret bytes as a different type, you probably want [`std::" +"mem::transmute`](https://doc.rust-lang.org/stable/std/mem/fn.transmute.html) or a safe " +"wrapper such as the [`zerocopy`](https://crates.io/crates/zerocopy) crate." msgstr "" #: src/unsafe/calling-unsafe-functions.md:3 msgid "" -"A function or method can be marked `unsafe` if it has extra preconditions " -"you must uphold to avoid undefined behaviour:" +"A function or method can be marked `unsafe` if it has extra preconditions you must " +"uphold to avoid undefined behaviour:" msgstr "" #: src/unsafe/calling-unsafe-functions.md:6 @@ -10768,8 +10376,7 @@ msgid "" "fn main() {\n" " let emojis = \"đŸ—ģ∈🌏\";\n" "\n" -" // Safe because the indices are in the correct order, within the bounds " -"of\n" +" // Safe because the indices are in the correct order, within the bounds of\n" " // the string slice, and lie on UTF-8 sequence boundaries.\n" " unsafe {\n" " println!(\"emoji: {}\", emojis.get_unchecked(0..4));\n" @@ -10777,8 +10384,7 @@ msgid "" " println!(\"emoji: {}\", emojis.get_unchecked(7..11));\n" " }\n" "\n" -" println!(\"char count: {}\", count_chars(unsafe { emojis." -"get_unchecked(0..7) }));\n" +" println!(\"char count: {}\", count_chars(unsafe { emojis.get_unchecked(0..7) }));\n" "\n" " // Not upholding the UTF-8 encoding requirement breaks memory safety!\n" " // println!(\"emoji: {}\", unsafe { emojis.get_unchecked(0..3) });\n" @@ -10794,8 +10400,8 @@ msgstr "" #: src/unsafe/writing-unsafe-functions.md:3 msgid "" -"You can mark your own functions as `unsafe` if they require particular " -"conditions to avoid undefined behaviour." +"You can mark your own functions as `unsafe` if they require particular conditions to " +"avoid undefined behaviour." msgstr "" #: src/unsafe/writing-unsafe-functions.md:6 @@ -10828,15 +10434,15 @@ msgstr "" #: src/unsafe/writing-unsafe-functions.md:33 msgid "" -"We wouldn't actually use pointers for this because it can be done safely " -"with references." +"We wouldn't actually use pointers for this because it can be done safely with " +"references." msgstr "" #: src/unsafe/writing-unsafe-functions.md:35 msgid "" -"Note that unsafe code is allowed within an unsafe function without an " -"`unsafe` block. We can prohibit this with `#[deny(unsafe_op_in_unsafe_fn)]`. " -"Try adding it and see what happens." +"Note that unsafe code is allowed within an unsafe function without an `unsafe` block. " +"We can prohibit this with `#[deny(unsafe_op_in_unsafe_fn)]`. Try adding it and see what " +"happens." msgstr "" #: src/unsafe/extern-functions.md:1 @@ -10845,8 +10451,8 @@ msgstr "" #: src/unsafe/extern-functions.md:3 msgid "" -"Functions from other languages might violate the guarantees of Rust. Calling " -"them is thus unsafe:" +"Functions from other languages might violate the guarantees of Rust. Calling them is " +"thus unsafe:" msgstr "" #: src/unsafe/extern-functions.md:6 @@ -10867,27 +10473,27 @@ msgstr "" #: src/unsafe/extern-functions.md:21 msgid "" -"This is usually only a problem for extern functions which 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." +"This is usually only a problem for extern functions which 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 "" #: src/unsafe/extern-functions.md:25 msgid "" -"The `\"C\"` in this example is the ABI; [other ABIs are available too]" -"(https://doc.rust-lang.org/reference/items/external-blocks.html)." +"The `\"C\"` in this example is the ABI; [other ABIs are available too](https://doc.rust-" +"lang.org/reference/items/external-blocks.html)." msgstr "" #: src/unsafe/unsafe-traits.md:3 msgid "" -"Like with functions, you can mark a trait as `unsafe` if the implementation " -"must guarantee particular conditions to avoid undefined behaviour." +"Like with functions, you can mark a trait as `unsafe` if the implementation must " +"guarantee particular conditions to avoid undefined behaviour." msgstr "" #: src/unsafe/unsafe-traits.md:6 msgid "" -"For example, the `zerocopy` crate has an unsafe trait that looks [something " -"like this](https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes.html):" +"For example, the `zerocopy` crate has an unsafe trait that looks [something like this]" +"(https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes.html):" msgstr "" #: src/unsafe/unsafe-traits.md:9 @@ -10902,8 +10508,7 @@ msgid "" "pub unsafe trait AsBytes {\n" " fn as_bytes(&self) -> &[u8] {\n" " unsafe {\n" -" slice::from_raw_parts(self as *const Self as *const u8, " -"size_of_val(self))\n" +" slice::from_raw_parts(self as *const Self as *const u8, size_of_val(self))\n" " }\n" " }\n" "}\n" @@ -10915,14 +10520,12 @@ msgstr "" #: src/unsafe/unsafe-traits.md:30 msgid "" -"There should be a `# Safety` section on the Rustdoc for the trait explaining " -"the requirements for the trait to be safely implemented." +"There should be a `# Safety` section on the Rustdoc for the trait explaining the " +"requirements for the trait to be safely implemented." msgstr "" #: src/unsafe/unsafe-traits.md:33 -msgid "" -"The actual safety section for `AsBytes` is rather longer and more " -"complicated." +msgid "The actual safety section for `AsBytes` is rather longer and more complicated." msgstr "" #: src/unsafe/unsafe-traits.md:35 @@ -10939,8 +10542,8 @@ msgstr "" #: src/exercises/day-3/afternoon.md:5 msgid "" -"For this exercise, we suggest using a local dev environment instead of the " -"Playground. This will allow you to run your binary on your own machine." +"For this exercise, we suggest using a local dev environment instead of the Playground. " +"This will allow you to run your binary on your own machine." msgstr "" #: src/exercises/day-3/afternoon.md:8 @@ -10951,15 +10554,15 @@ msgstr "" #: src/exercises/day-3/afternoon.md:14 msgid "" -"After looking at the exercise, you can look at the [solution](solutions-" -"afternoon.md) provided." +"After looking at the exercise, you can look at the [solution](solutions-afternoon.md) " +"provided." msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:3 msgid "" -"Rust has great support for calling functions through a _foreign function " -"interface_ (FFI). We will use this to build a safe wrapper for the `libc` " -"functions you would use from C to read the filenames of a directory." +"Rust has great support for calling functions through a _foreign function interface_ " +"(FFI). We will use this to build a safe wrapper for the `libc` functions you would use " +"from C to read the filenames of a directory." msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:7 @@ -10980,9 +10583,8 @@ msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:13 msgid "" -"You will also want to browse the [`std::ffi`](https://doc.rust-lang.org/std/" -"ffi/) module. There you find a number of string types which you need for the " -"exercise:" +"You will also want to browse the [`std::ffi`](https://doc.rust-lang.org/std/ffi/) " +"module. There you find a number of string types which you need for the exercise:" msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:16 @@ -10995,8 +10597,8 @@ msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:18 msgid "" -"[`str`](https://doc.rust-lang.org/std/primitive.str.html) and [`String`]" -"(https://doc.rust-lang.org/std/string/struct.String.html)" +"[`str`](https://doc.rust-lang.org/std/primitive.str.html) and [`String`](https://doc." +"rust-lang.org/std/string/struct.String.html)" msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:18 @@ -11009,8 +10611,8 @@ msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:19 msgid "" -"[`CStr`](https://doc.rust-lang.org/std/ffi/struct.CStr.html) and [`CString`]" -"(https://doc.rust-lang.org/std/ffi/struct.CString.html)" +"[`CStr`](https://doc.rust-lang.org/std/ffi/struct.CStr.html) and [`CString`](https://" +"doc.rust-lang.org/std/ffi/struct.CString.html)" msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:19 @@ -11023,8 +10625,8 @@ msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:20 msgid "" -"[`OsStr`](https://doc.rust-lang.org/std/ffi/struct.OsStr.html) and " -"[`OsString`](https://doc.rust-lang.org/std/ffi/struct.OsString.html)" +"[`OsStr`](https://doc.rust-lang.org/std/ffi/struct.OsStr.html) and [`OsString`](https://" +"doc.rust-lang.org/std/ffi/struct.OsString.html)" msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:20 @@ -11040,9 +10642,7 @@ msgid "You will convert between all these types:" msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:24 -msgid "" -"`&str` to `CString`: you need to allocate space for a trailing `\\0` " -"character," +msgid "`&str` to `CString`: you need to allocate space for a trailing `\\0` character," msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:25 @@ -11051,38 +10651,37 @@ msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:26 msgid "" -"`*const i8` to `&CStr`: you need something which can find the trailing `\\0` " -"character," +"`*const i8` to `&CStr`: you need something which can find the trailing `\\0` character," msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:27 msgid "" -"`&CStr` to `&[u8]`: a slice of bytes is the universal interface for \"some " -"unknow data\"," +"`&CStr` to `&[u8]`: a slice of bytes is the universal interface for \"some unknow " +"data\"," msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:28 msgid "" -"`&[u8]` to `&OsStr`: `&OsStr` is a step towards `OsString`, use [`OsStrExt`]" -"(https://doc.rust-lang.org/std/os/unix/ffi/trait.OsStrExt.html) to create it," +"`&[u8]` to `&OsStr`: `&OsStr` is a step towards `OsString`, use [`OsStrExt`](https://" +"doc.rust-lang.org/std/os/unix/ffi/trait.OsStrExt.html) to create it," msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:31 msgid "" -"`&OsStr` to `OsString`: you need to clone the data in `&OsStr` to be able to " -"return it and call `readdir` again." +"`&OsStr` to `OsString`: you need to clone the data in `&OsStr` to be able to return it " +"and call `readdir` again." msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:34 msgid "" -"The [Nomicon](https://doc.rust-lang.org/nomicon/ffi.html) also has a very " -"useful chapter about FFI." +"The [Nomicon](https://doc.rust-lang.org/nomicon/ffi.html) also has a very useful " +"chapter about FFI." msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:45 msgid "" -"Copy the code below to and fill in the missing " -"functions and methods:" +"Copy the code below to and fill in the missing functions " +"and methods:" msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:48 @@ -11100,12 +10699,10 @@ msgid "" " #[repr(C)]\n" " pub struct DIR {\n" " _data: [u8; 0],\n" -" _marker: core::marker::PhantomData<(*mut u8, core::marker::" -"PhantomPinned)>,\n" +" _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,\n" " }\n" "\n" -" // Layout according to the Linux man page for readdir(3), where ino_t " -"and\n" +" // Layout according to the Linux man page for readdir(3), where ino_t and\n" " // off_t are resolved according to the definitions in\n" " // /usr/include/x86_64-linux-gnu/{sys/types.h, bits/typesizes.h}.\n" " #[cfg(not(target_os = \"macos\"))]\n" @@ -11136,14 +10733,11 @@ msgid "" " #[cfg(not(all(target_os = \"macos\", target_arch = \"x86_64\")))]\n" " pub fn readdir(s: *mut DIR) -> *const dirent;\n" "\n" -" // See https://github.com/rust-lang/libc/issues/414 and the section " -"on\n" +" // See https://github.com/rust-lang/libc/issues/414 and the section on\n" " // _DARWIN_FEATURE_64_BIT_INODE in the macOS man page for stat(2).\n" " //\n" -" // \"Platforms that existed before these updates were available\" " -"refers\n" -" // to macOS (as opposed to iOS / wearOS / etc.) on Intel and " -"PowerPC.\n" +" // \"Platforms that existed before these updates were available\" refers\n" +" // to macOS (as opposed to iOS / wearOS / etc.) on Intel and PowerPC.\n" " #[cfg(all(target_os = \"macos\", target_arch = \"x86_64\"))]\n" " #[link_name = \"readdir$INODE64\"]\n" " pub fn readdir(s: *mut DIR) -> *const dirent;\n" @@ -11198,23 +10792,22 @@ msgstr "" #: src/android.md:3 msgid "" -"Rust is supported for native platform development on Android. This means " -"that you can write new operating system services in Rust, as well as " -"extending existing services." +"Rust is supported for native platform development on Android. This means that you can " +"write new operating system services in Rust, as well as extending existing services." msgstr "" #: src/android.md:7 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." +"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 "" #: src/android/setup.md:3 msgid "" -"We will be using an Android Virtual Device to test our code. Make sure you " -"have access to one or create a new one with:" +"We will be using an Android Virtual Device to test our code. Make sure you have access " +"to one or create a new one with:" msgstr "" #: src/android/setup.md:6 @@ -11228,8 +10821,8 @@ msgstr "" #: src/android/setup.md:12 msgid "" -"Please see the [Android Developer Codelab](https://source.android.com/docs/" -"setup/start) for details." +"Please see the [Android Developer Codelab](https://source.android.com/docs/setup/start) " +"for details." msgstr "" #: src/android/build-rules.md:3 @@ -11266,8 +10859,8 @@ msgstr "" #: src/android/build-rules.md:9 msgid "" -"Produces a Rust C library usable by `cc` modules, and provides both static " -"and shared variants." +"Produces a Rust C library usable by `cc` modules, and provides both static and shared " +"variants." msgstr "" #: src/android/build-rules.md:10 @@ -11275,9 +10868,7 @@ msgid "`rust_proc_macro`" msgstr "" #: src/android/build-rules.md:10 -msgid "" -"Produces a `proc-macro` Rust library. These are analogous to compiler " -"plugins." +msgid "Produces a `proc-macro` Rust library. These are analogous to compiler plugins." msgstr "" #: src/android/build-rules.md:11 @@ -11302,8 +10893,8 @@ msgstr "" #: src/android/build-rules.md:13 msgid "" -"Generates source and produces a Rust library that provides an interface for " -"a particular protobuf." +"Generates source and produces a Rust library that provides an interface for a " +"particular protobuf." msgstr "" #: src/android/build-rules.md:14 @@ -11312,8 +10903,7 @@ msgstr "" #: src/android/build-rules.md:14 msgid "" -"Generates source and produces a Rust library containing Rust bindings to C " -"libraries." +"Generates source and produces a Rust library containing Rust bindings to C libraries." msgstr "" #: src/android/build-rules.md:16 @@ -11326,8 +10916,8 @@ msgstr "" #: src/android/build-rules/binary.md:3 msgid "" -"Let us start with a simple application. At the root of an AOSP checkout, " -"create the following files:" +"Let us start with a simple application. At the root of an AOSP checkout, create the " +"following files:" msgstr "" #: src/android/build-rules/binary.md:6 src/android/build-rules/library.md:13 @@ -11399,9 +10989,8 @@ msgstr "" #: src/android/build-rules/library.md:8 msgid "" -"`libtextwrap`, which is a crate already vendored in [`external/rust/crates/`]" -"(https://cs.android.com/android/platform/superproject/+/master:external/rust/" -"crates/)." +"`libtextwrap`, which is a crate already vendored in [`external/rust/crates/`](https://" +"cs.android.com/android/platform/superproject/+/master:external/rust/crates/)." msgstr "" #: src/android/build-rules/library.md:15 @@ -11465,8 +11054,7 @@ msgstr "" msgid "" "```shell\n" "m hello_rust_with_dep\n" -"adb push \"$ANDROID_PRODUCT_OUT/system/bin/hello_rust_with_dep /data/local/" -"tmp\"\n" +"adb push \"$ANDROID_PRODUCT_OUT/system/bin/hello_rust_with_dep /data/local/tmp\"\n" "adb shell /data/local/tmp/hello_rust_with_dep\n" "```" msgstr "" @@ -11481,8 +11069,8 @@ msgstr "" #: src/android/aidl.md:3 msgid "" -"The [Android Interface Definition Language (AIDL)](https://developer.android." -"com/guide/components/aidl) is supported in Rust:" +"The [Android Interface Definition Language (AIDL)](https://developer.android.com/guide/" +"components/aidl) is supported in Rust:" msgstr "" #: src/android/aidl.md:6 @@ -11502,8 +11090,7 @@ msgid "You declare the API of your service using an AIDL interface:" msgstr "" #: src/android/aidl/interface.md:5 -msgid "" -"_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:" +msgid "_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:" msgstr "" #: src/android/aidl/interface.md:7 @@ -11541,8 +11128,8 @@ msgstr "" #: src/android/aidl/interface.md:32 msgid "" -"Add `vendor_available: true` if your AIDL file is used by a binary in the " -"vendor partition." +"Add `vendor_available: true` if your AIDL file is used by a binary in the vendor " +"partition." msgstr "" #: src/android/aidl/implementation.md:1 @@ -11561,8 +11148,8 @@ msgstr "" msgid "" "```rust,ignore\n" "//! Implementation of the `IBirthdayService` AIDL interface.\n" -"use com_example_birthdayservice::aidl::com::example::birthdayservice::" -"IBirthdayService::IBirthdayService;\n" +"use com_example_birthdayservice::aidl::com::example::birthdayservice::IBirthdayService::" +"IBirthdayService;\n" "use com_example_birthdayservice::binder;\n" "\n" "/// The `IBirthdayService` implementation.\n" @@ -11571,11 +11158,9 @@ msgid "" "impl binder::Interface for BirthdayService {}\n" "\n" "impl IBirthdayService for BirthdayService {\n" -" fn wishHappyBirthday(&self, name: &str, years: i32) -> binder::" -"Result {\n" +" fn wishHappyBirthday(&self, name: &str, years: i32) -> binder::Result {\n" " Ok(format!(\n" -" \"Happy Birthday {name}, congratulations with the {years} years!" -"\"\n" +" \"Happy Birthday {name}, congratulations with the {years} years!\"\n" " ))\n" " }\n" "}\n" @@ -11619,8 +11204,8 @@ msgid "" "```rust,ignore\n" "//! Birthday service.\n" "use birthdayservice::BirthdayService;\n" -"use com_example_birthdayservice::aidl::com::example::birthdayservice::" -"IBirthdayService::BnBirthdayService;\n" +"use com_example_birthdayservice::aidl::com::example::birthdayservice::IBirthdayService::" +"BnBirthdayService;\n" "use com_example_birthdayservice::binder;\n" "\n" "const SERVICE_IDENTIFIER: &str = \"birthdayservice\";\n" @@ -11632,8 +11217,7 @@ msgid "" " birthday_service,\n" " binder::BinderFeatures::default(),\n" " );\n" -" binder::add_service(SERVICE_IDENTIFIER, birthday_service_binder." -"as_binder())\n" +" binder::add_service(SERVICE_IDENTIFIER, birthday_service_binder.as_binder())\n" " .expect(\"Failed to register service\");\n" " binder::ProcessState::join_thread_pool()\n" "}\n" @@ -11665,8 +11249,7 @@ msgstr "" msgid "" "```shell\n" "m birthday_server\n" -"adb push \"$ANDROID_PRODUCT_OUT/system/bin/birthday_server /data/local/" -"tmp\"\n" +"adb push \"$ANDROID_PRODUCT_OUT/system/bin/birthday_server /data/local/tmp\"\n" "adb shell /data/local/tmp/birthday_server\n" "```" msgstr "" @@ -11731,15 +11314,14 @@ msgstr "" msgid "" "```rust,ignore\n" "//! Birthday service.\n" -"use com_example_birthdayservice::aidl::com::example::birthdayservice::" -"IBirthdayService::IBirthdayService;\n" +"use com_example_birthdayservice::aidl::com::example::birthdayservice::IBirthdayService::" +"IBirthdayService;\n" "use com_example_birthdayservice::binder;\n" "\n" "const SERVICE_IDENTIFIER: &str = \"birthdayservice\";\n" "\n" "/// Connect to the BirthdayService.\n" -"pub fn connect() -> Result, binder::" -"StatusCode> {\n" +"pub fn connect() -> Result, binder::StatusCode> {\n" " binder::get_interface(SERVICE_IDENTIFIER)\n" "}\n" "\n" @@ -11754,8 +11336,7 @@ msgid "" " .unwrap_or(42);\n" "\n" " binder::ProcessState::start_thread_pool();\n" -" let service = connect().expect(\"Failed to connect to " -"BirthdayService\");\n" +" let service = connect().expect(\"Failed to connect to BirthdayService\");\n" " let msg = service.wishHappyBirthday(&name, years)?;\n" " println!(\"{msg}\");\n" " Ok(())\n" @@ -11791,8 +11372,7 @@ msgstr "" msgid "" "```shell\n" "m birthday_client\n" -"adb push \"$ANDROID_PRODUCT_OUT/system/bin/birthday_client /data/local/" -"tmp\"\n" +"adb push \"$ANDROID_PRODUCT_OUT/system/bin/birthday_client /data/local/tmp\"\n" "adb shell /data/local/tmp/birthday_client Charlie 60\n" "```" msgstr "" @@ -11806,8 +11386,8 @@ msgstr "" #: src/android/aidl/changing.md:3 msgid "" -"Let us extend the API with more functionality: we want to let clients " -"specify a list of lines for the birthday card:" +"Let us extend the API with more functionality: we want to let clients specify a list of " +"lines for the birthday card:" msgstr "" #: src/android/aidl/changing.md:6 @@ -11825,8 +11405,8 @@ msgstr "" #: src/android/logging.md:3 msgid "" -"You should use the `log` crate to automatically log to `logcat` (on-device) " -"or `stdout` (on-host):" +"You should use the `log` crate to automatically log to `logcat` (on-device) or `stdout` " +"(on-host):" msgstr "" #: src/android/logging.md:6 @@ -11884,8 +11464,7 @@ msgstr "" msgid "" "```shell\n" "m hello_rust_logs\n" -"adb push \"$ANDROID_PRODUCT_OUT/system/bin/hello_rust_logs /data/local/" -"tmp\"\n" +"adb push \"$ANDROID_PRODUCT_OUT/system/bin/hello_rust_logs /data/local/tmp\"\n" "adb shell /data/local/tmp/hello_rust_logs\n" "```" msgstr "" @@ -11909,17 +11488,15 @@ msgstr "" msgid "" "```text\n" "09-08 08:38:32.454 2420 2420 D rust: hello_rust_logs: Starting program.\n" -"09-08 08:38:32.454 2420 2420 I rust: hello_rust_logs: Things are going " -"fine.\n" -"09-08 08:38:32.454 2420 2420 E rust: hello_rust_logs: Something went " -"wrong!\n" +"09-08 08:38:32.454 2420 2420 I rust: hello_rust_logs: Things are going fine.\n" +"09-08 08:38:32.454 2420 2420 E rust: hello_rust_logs: Something went wrong!\n" "```" msgstr "" #: src/android/interoperability.md:3 msgid "" -"Rust has excellent support for interoperability with other languages. This " -"means that you can:" +"Rust has excellent support for interoperability with other languages. This means that " +"you can:" msgstr "" #: src/android/interoperability.md:6 @@ -11932,8 +11509,8 @@ msgstr "" #: src/android/interoperability.md:9 msgid "" -"When you call functions in a foreign language we say that you're using a " -"_foreign function interface_, also known as FFI." +"When you call functions in a foreign language we say that you're using a _foreign " +"function interface_, also known as FFI." msgstr "" #: src/android/interoperability/with-c.md:1 @@ -11942,8 +11519,8 @@ msgstr "" #: src/android/interoperability/with-c.md:3 msgid "" -"Rust has full support for linking object files with a C calling convention. " -"Similarly, you can export Rust functions and call them from C." +"Rust has full support for linking object files with a C calling convention. Similarly, " +"you can export Rust functions and call them from C." msgstr "" #: src/android/interoperability/with-c.md:6 @@ -11967,14 +11544,13 @@ msgstr "" #: src/android/interoperability/with-c.md:20 msgid "" -"We already saw this in the [Safe FFI Wrapper exercise](../../exercises/day-3/" -"safe-ffi-wrapper.md)." +"We already saw this in the [Safe FFI Wrapper exercise](../../exercises/day-3/safe-ffi-" +"wrapper.md)." msgstr "" #: src/android/interoperability/with-c.md:23 msgid "" -"This assumes full knowledge of the target platform. Not recommended for " -"production." +"This assumes full knowledge of the target platform. Not recommended for production." msgstr "" #: src/android/interoperability/with-c.md:26 @@ -11987,8 +11563,8 @@ msgstr "" #: src/android/interoperability/with-c/bindgen.md:3 msgid "" -"The [bindgen](https://rust-lang.github.io/rust-bindgen/introduction.html) " -"tool can auto-generate bindings from a C header file." +"The [bindgen](https://rust-lang.github.io/rust-bindgen/introduction.html) tool can auto-" +"generate bindings from a C header file." msgstr "" #: src/android/interoperability/with-c/bindgen.md:6 @@ -12053,8 +11629,7 @@ msgstr "" #: src/android/interoperability/with-c/bindgen.md:44 msgid "" -"Create a wrapper header file for the library (not strictly needed in this " -"example):" +"Create a wrapper header file for the library (not strictly needed in this example):" msgstr "" #: src/android/interoperability/with-c/bindgen.md:47 @@ -12128,8 +11703,7 @@ msgstr "" msgid "" "```shell\n" "m print_birthday_card\n" -"adb push \"$ANDROID_PRODUCT_OUT/system/bin/print_birthday_card /data/local/" -"tmp\"\n" +"adb push \"$ANDROID_PRODUCT_OUT/system/bin/print_birthday_card /data/local/tmp\"\n" "adb shell /data/local/tmp/print_birthday_card\n" "```" msgstr "" @@ -12266,23 +11840,22 @@ msgstr "" msgid "" "```shell\n" "m analyze_numbers\n" -"adb push \"$ANDROID_PRODUCT_OUT/system/bin/analyze_numbers /data/local/" -"tmp\"\n" +"adb push \"$ANDROID_PRODUCT_OUT/system/bin/analyze_numbers /data/local/tmp\"\n" "adb shell /data/local/tmp/analyze_numbers\n" "```" msgstr "" #: src/android/interoperability/with-c/rust.md:83 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." +"`#[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." msgstr "" #: src/android/interoperability/cpp.md:3 msgid "" -"The [CXX crate](https://cxx.rs/) makes it possible to do safe " -"interoperability between Rust and C++." +"The [CXX crate](https://cxx.rs/) makes it possible to do safe interoperability between " +"Rust and C++." msgstr "" #: src/android/interoperability/cpp.md:6 @@ -12291,14 +11864,13 @@ msgstr "" #: src/android/interoperability/cpp.md:10 msgid "" -"See the [CXX tutorial](https://cxx.rs/tutorial.html) for an full example of " -"using this." +"See the [CXX tutorial](https://cxx.rs/tutorial.html) for an full example of using this." msgstr "" #: src/android/interoperability/cpp.md:14 msgid "" -"At this point, the instructor should switch to the [CXX tutorial](https://" -"cxx.rs/tutorial.html)." +"At this point, the instructor should switch to the [CXX tutorial](https://cxx.rs/" +"tutorial.html)." msgstr "" #: src/android/interoperability/cpp.md:16 @@ -12307,28 +11879,25 @@ msgstr "" #: src/android/interoperability/cpp.md:18 msgid "" -"Highlight how CXX presents a clean interface without unsafe code in _both " -"languages_." +"Highlight how CXX presents a clean interface without unsafe code in _both languages_." msgstr "" #: src/android/interoperability/cpp.md:20 msgid "" -"Show the correspondence between [Rust and C++ types](https://cxx.rs/bindings." -"html):" +"Show the correspondence between [Rust and C++ types](https://cxx.rs/bindings.html):" msgstr "" #: src/android/interoperability/cpp.md:22 msgid "" -"Explain how a Rust `String` cannot map to a C++ `std::string` (the latter " -"does not uphold the UTF-8 invariant). Show that despite being different " -"types, `rust::String` in C++ can be easily constructed from a C++ `std::" -"string`, making it very ergonomic to use." +"Explain how a Rust `String` cannot map to a C++ `std::string` (the latter does not " +"uphold the UTF-8 invariant). Show that despite being different types, `rust::String` in " +"C++ can be easily constructed from a C++ `std::string`, making it very ergonomic to use." msgstr "" #: src/android/interoperability/cpp.md:28 msgid "" -"Explain that a Rust function returning `Result` becomes a function " -"which throws a `E` exception in C++ (and vice versa)." +"Explain that a Rust function returning `Result` becomes a function which throws a " +"`E` exception in C++ (and vice versa)." msgstr "" #: src/android/interoperability/java.md:1 @@ -12337,9 +11906,9 @@ msgstr "" #: src/android/interoperability/java.md:3 msgid "" -"Java can load shared objects via [Java Native Interface (JNI)](https://en." -"wikipedia.org/wiki/Java_Native_Interface). The [`jni` crate](https://docs.rs/" -"jni/) allows you to create a compatible library." +"Java can load shared objects via [Java Native Interface (JNI)](https://en.wikipedia.org/" +"wiki/Java_Native_Interface). The [`jni` crate](https://docs.rs/jni/) allows you to " +"create a compatible library." msgstr "" #: src/android/interoperability/java.md:7 @@ -12374,8 +11943,7 @@ msgid "" "```" msgstr "" -#: src/android/interoperability/java.md:32 -#: src/android/interoperability/java.md:62 +#: src/android/interoperability/java.md:32 src/android/interoperability/java.md:62 msgid "_interoperability/java/Android.bp_:" msgstr "" @@ -12444,8 +12012,8 @@ msgstr "" #: src/exercises/android/morning.md:3 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:" +"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 "" #: src/exercises/android/morning.md:6 @@ -12458,8 +12026,8 @@ msgstr "" #: src/exercises/android/morning.md:12 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." +"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 "" #: src/bare-metal.md:1 @@ -12468,16 +12036,16 @@ msgstr "" #: src/bare-metal.md:3 msgid "" -"This is a standalone one-day course about bare-metal Rust, aimed at people " -"who are familiar with the basics of Rust (perhaps from completing the " -"Comprehensive Rust course), and ideally also have some experience with bare-" -"metal programming in some other language such as C." +"This is a standalone one-day course about bare-metal Rust, aimed at people who are " +"familiar with the basics of Rust (perhaps from completing the Comprehensive Rust " +"course), and ideally also have some experience with bare-metal programming in some " +"other language such as C." msgstr "" #: src/bare-metal.md:7 msgid "" -"Today we will talk about 'bare-metal' Rust: running Rust code without an OS " -"underneath us. This will be divided into several parts:" +"Today we will talk about 'bare-metal' Rust: running Rust code without an OS underneath " +"us. This will be divided into several parts:" msgstr "" #: src/bare-metal.md:10 @@ -12498,23 +12066,21 @@ msgstr "" #: src/bare-metal.md:15 msgid "" -"For the microcontroller part of the course we will use the [BBC micro:bit]" -"(https://microbit.org/) v2 as an example. It's a [development board](https://" -"tech.microbit.org/hardware/) based on the Nordic nRF51822 microcontroller " -"with some LEDs and buttons, an I2C-connected accelerometer and compass, and " -"an on-board SWD debugger." +"For the microcontroller part of the course we will use the [BBC micro:bit](https://" +"microbit.org/) v2 as an example. It's a [development board](https://tech.microbit.org/" +"hardware/) based on the Nordic nRF51822 microcontroller with some LEDs and buttons, an " +"I2C-connected accelerometer and compass, and an on-board SWD debugger." msgstr "" #: src/bare-metal.md:20 -msgid "" -"To get started, install some tools we'll need later. On gLinux or Debian:" +msgid "To get started, install some tools we'll need later. On gLinux or Debian:" msgstr "" #: src/bare-metal.md:22 msgid "" "```bash\n" -"sudo apt install gcc-aarch64-linux-gnu gdb-multiarch libudev-dev picocom pkg-" -"config qemu-system-arm\n" +"sudo apt install gcc-aarch64-linux-gnu gdb-multiarch libudev-dev picocom pkg-config " +"qemu-system-arm\n" "rustup update\n" "rustup target add aarch64-unknown-none thumbv7em-none-eabihf\n" "rustup component add llvm-tools-preview\n" @@ -12523,15 +12089,14 @@ msgid "" msgstr "" #: src/bare-metal.md:30 -msgid "" -"And give users in the `plugdev` group access to the micro:bit programmer:" +msgid "And give users in the `plugdev` group access to the micro:bit programmer:" msgstr "" #: src/bare-metal.md:32 msgid "" "```bash\n" -"echo 'SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0d28\", MODE=\"0664\", " -"GROUP=\"plugdev\"' |\\\n" +"echo 'SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0d28\", MODE=\"0664\", GROUP=\"plugdev\"' |" +"\\\n" " sudo tee /etc/udev/rules.d/50-microbit.rules\n" "sudo udevadm control --reload-rules\n" "```" @@ -12695,21 +12260,21 @@ msgstr "" #: src/bare-metal/minimal.md:20 msgid "" -"Depending on the target, you may need to compile with `panic = \"abort\"` to " -"avoid an error about `eh_personality`." +"Depending on the target, you may need to compile with `panic = \"abort\"` to avoid an " +"error about `eh_personality`." msgstr "" #: src/bare-metal/minimal.md:22 msgid "" -"Note that there is no `main` or any other entry point; it's up to you to " -"define your own entry point. This will typically involve a linker script and " -"some assembly code to set things up ready for Rust code to run." +"Note that there is no `main` or any other entry point; it's up to you to define your " +"own entry point. This will typically involve a linker script and some assembly code to " +"set things up ready for Rust code to run." msgstr "" #: src/bare-metal/alloc.md:3 msgid "" -"To use `alloc` you must implement a [global (heap) allocator](https://doc." -"rust-lang.org/stable/std/alloc/trait.GlobalAlloc.html)." +"To use `alloc` you must implement a [global (heap) allocator](https://doc.rust-lang.org/" +"stable/std/alloc/trait.GlobalAlloc.html)." msgstr "" #: src/bare-metal/alloc.md:6 @@ -12731,8 +12296,7 @@ msgid "" "static mut HEAP: [u8; 65536] = [0; 65536];\n" "\n" "pub fn entry() {\n" -" // Safe because `HEAP` is only used here and `entry` is only called " -"once.\n" +" // Safe because `HEAP` is only used here and `entry` is only called once.\n" " unsafe {\n" " // Give the allocator some memory to allocate.\n" " HEAP_ALLOCATOR\n" @@ -12749,28 +12313,28 @@ msgstr "" #: src/bare-metal/alloc.md:39 msgid "" -"`buddy_system_allocator` is a third-party crate implementing a basic buddy " -"system allocator. Other crates are available, or you can write your own or " -"hook into your existing allocator." +"`buddy_system_allocator` is a third-party crate implementing a basic buddy system " +"allocator. Other crates are available, or you can write your own or hook into your " +"existing allocator." msgstr "" #: src/bare-metal/alloc.md:41 msgid "" -"The const parameter of `LockedHeap` is the max order of the allocator; i.e. " -"in this case it can allocate regions of up to 2\\*\\*32 bytes." +"The const parameter of `LockedHeap` is the max order of the allocator; i.e. in this " +"case it can allocate regions of up to 2\\*\\*32 bytes." msgstr "" #: src/bare-metal/alloc.md:43 msgid "" -"If any crate in your dependency tree depends on `alloc` then you must have " -"exactly one global allocator defined in your binary. Usually this is done in " -"the top-level binary crate." +"If any crate in your dependency tree depends on `alloc` then you must have exactly one " +"global allocator defined in your binary. Usually this is done in the top-level binary " +"crate." msgstr "" #: src/bare-metal/alloc.md:45 msgid "" -"`extern crate panic_halt as _` is necessary to ensure that the `panic_halt` " -"crate is linked in so we get its panic handler." +"`extern crate panic_halt as _` is necessary to ensure that the `panic_halt` crate is " +"linked in so we get its panic handler." msgstr "" #: src/bare-metal/alloc.md:47 @@ -12779,8 +12343,8 @@ msgstr "" #: src/bare-metal/microcontrollers.md:3 msgid "" -"The `cortex_m_rt` crate provides (among other things) a reset handler for " -"Cortex M microcontrollers." +"The `cortex_m_rt` crate provides (among other things) a reset handler for Cortex M " +"microcontrollers." msgstr "" #: src/bare-metal/microcontrollers.md:5 @@ -12804,14 +12368,13 @@ msgstr "" #: src/bare-metal/microcontrollers.md:21 msgid "" -"Next we'll look at how to access peripherals, with increasing levels of " -"abstraction." +"Next we'll look at how to access peripherals, with increasing levels of abstraction." msgstr "" #: src/bare-metal/microcontrollers.md:25 msgid "" -"The `cortex_m_rt::entry` macro requires that the function have type `fn() -" -"> !`, because returning to the reset handler doesn't make sense." +"The `cortex_m_rt::entry` macro requires that the function have type `fn() -> !`, " +"because returning to the reset handler doesn't make sense." msgstr "" #: src/bare-metal/microcontrollers.md:27 @@ -12820,8 +12383,8 @@ msgstr "" #: src/bare-metal/microcontrollers/mmio.md:3 msgid "" -"Most microcontrollers access peripherals via memory-mapped IO. Let's try " -"turning on an LED on our micro:bit:" +"Most microcontrollers access peripherals via memory-mapped IO. Let's try turning on an " +"LED on our micro:bit:" msgstr "" #: src/bare-metal/microcontrollers/mmio.md:6 @@ -12855,12 +12418,9 @@ msgid "" "#[entry]\n" "fn main() -> ! {\n" " // Configure GPIO 0 pins 21 and 28 as push-pull outputs.\n" -" let pin_cnf_21 = (GPIO_P0 + PIN_CNF + 21 * size_of::()) as *mut " -"u32;\n" -" let pin_cnf_28 = (GPIO_P0 + PIN_CNF + 28 * size_of::()) as *mut " -"u32;\n" -" // Safe because the pointers are to valid peripheral control registers, " -"and\n" +" let pin_cnf_21 = (GPIO_P0 + PIN_CNF + 21 * size_of::()) as *mut u32;\n" +" let pin_cnf_28 = (GPIO_P0 + PIN_CNF + 28 * size_of::()) as *mut u32;\n" +" // Safe because the pointers are to valid peripheral control registers, and\n" " // no aliases exist.\n" " unsafe {\n" " pin_cnf_21.write_volatile(\n" @@ -12876,8 +12436,7 @@ msgid "" " // Set pin 28 low and pin 21 high to turn the LED on.\n" " let gpio0_outset = (GPIO_P0 + OUTSET) as *mut u32;\n" " let gpio0_outclr = (GPIO_P0 + OUTCLR) as *mut u32;\n" -" // Safe because the pointers are to valid peripheral control registers, " -"and\n" +" // Safe because the pointers are to valid peripheral control registers, and\n" " // no aliases exist.\n" " unsafe {\n" " gpio0_outclr.write_volatile(1 << 28);\n" @@ -12891,12 +12450,11 @@ msgstr "" #: src/bare-metal/microcontrollers/mmio.md:64 msgid "" -"GPIO 0 pin 21 is connected to the first column of the LED matrix, and pin 28 " -"to the first row." +"GPIO 0 pin 21 is connected to the first column of the LED matrix, and pin 28 to the " +"first row." msgstr "" -#: src/bare-metal/microcontrollers/mmio.md:66 -#: src/bare-metal/microcontrollers/pacs.md:59 +#: src/bare-metal/microcontrollers/mmio.md:66 src/bare-metal/microcontrollers/pacs.md:59 #: src/bare-metal/microcontrollers/hals.md:43 #: src/bare-metal/microcontrollers/board-support.md:34 msgid "Run the example with:" @@ -12915,9 +12473,9 @@ msgstr "" #: src/bare-metal/microcontrollers/pacs.md:3 msgid "" -"[`svd2rust`](https://crates.io/crates/svd2rust) generates mostly-safe Rust " -"wrappers for memory-mapped peripherals from [CMSIS-SVD](https://www.keil.com/" -"pack/doc/CMSIS/SVD/html/index.html) files." +"[`svd2rust`](https://crates.io/crates/svd2rust) generates mostly-safe Rust wrappers for " +"memory-mapped peripherals from [CMSIS-SVD](https://www.keil.com/pack/doc/CMSIS/SVD/html/" +"index.html) files." msgstr "" #: src/bare-metal/microcontrollers/pacs.md:7 @@ -12965,21 +12523,20 @@ msgstr "" #: src/bare-metal/microcontrollers/pacs.md:49 msgid "" -"SVD (System View Description) files are XML files typically provided by " -"silicon vendors which describe the memory map of the device." +"SVD (System View Description) files are XML files typically provided by silicon vendors " +"which describe the memory map of the device." msgstr "" #: src/bare-metal/microcontrollers/pacs.md:51 msgid "" -"They are organised by peripheral, register, field and value, with names, " -"descriptions, addresses and so on." +"They are organised by peripheral, register, field and value, with names, descriptions, " +"addresses and so on." msgstr "" #: src/bare-metal/microcontrollers/pacs.md:53 msgid "" -"SVD files are often buggy and incomplete, so there are various projects " -"which patch the mistakes, add missing details, and publish the generated " -"crates." +"SVD files are often buggy and incomplete, so there are various projects which patch the " +"mistakes, add missing details, and publish the generated crates." msgstr "" #: src/bare-metal/microcontrollers/pacs.md:55 @@ -12988,8 +12545,8 @@ msgstr "" #: src/bare-metal/microcontrollers/pacs.md:56 msgid "" -"If you `cargo install cargo-binutils` then you can run `cargo objdump --bin " -"pac -- -d --no-show-raw-insn` to see the resulting binary." +"If you `cargo install cargo-binutils` then you can run `cargo objdump --bin pac -- -d --" +"no-show-raw-insn` to see the resulting binary." msgstr "" #: src/bare-metal/microcontrollers/pacs.md:61 @@ -13005,10 +12562,9 @@ msgstr "" #: src/bare-metal/microcontrollers/hals.md:3 msgid "" -"[HAL crates](https://github.com/rust-embedded/awesome-embedded-rust#hal-" -"implementation-crates) for many microcontrollers provide wrappers around " -"various peripherals. These generally implement traits from [`embedded-hal`]" -"(https://crates.io/crates/embedded-hal)." +"[HAL crates](https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-" +"crates) for many microcontrollers provide wrappers around various peripherals. These " +"generally implement traits from [`embedded-hal`](https://crates.io/crates/embedded-hal)." msgstr "" #: src/bare-metal/microcontrollers/hals.md:7 @@ -13045,14 +12601,13 @@ msgid "" msgstr "" #: src/bare-metal/microcontrollers/hals.md:39 -msgid "" -"`set_low` and `set_high` are methods on the `embedded_hal` `OutputPin` trait." +msgid "`set_low` and `set_high` are methods on the `embedded_hal` `OutputPin` trait." msgstr "" #: src/bare-metal/microcontrollers/hals.md:40 msgid "" -"HAL crates exist for many Cortex-M and RISC-V devices, including various " -"STM32, GD32, nRF, NXP, MSP430, AVR and PIC microcontrollers." +"HAL crates exist for many Cortex-M and RISC-V devices, including various STM32, GD32, " +"nRF, NXP, MSP430, AVR and PIC microcontrollers." msgstr "" #: src/bare-metal/microcontrollers/hals.md:45 @@ -13068,8 +12623,8 @@ msgstr "" #: src/bare-metal/microcontrollers/board-support.md:3 msgid "" -"Board support crates provide a further level of wrapping for a specific " -"board for convenience." +"Board support crates provide a further level of wrapping for a specific board for " +"convenience." msgstr "" #: src/bare-metal/microcontrollers/board-support.md:5 @@ -13098,8 +12653,8 @@ msgstr "" #: src/bare-metal/microcontrollers/board-support.md:28 msgid "" -"In this case the board support crate is just providing more useful names, " -"and a bit of initialisation." +"In this case the board support crate is just providing more useful names, and a bit of " +"initialisation." msgstr "" #: src/bare-metal/microcontrollers/board-support.md:30 @@ -13139,17 +12694,15 @@ msgid "" " // ...\n" " }\n" " let mut pin_output: P0_01> = pin_input\n" -" .into_open_drain_output(OpenDrainConfig::Disconnect0Standard1, " -"Level::Low);\n" +" .into_open_drain_output(OpenDrainConfig::Disconnect0Standard1, Level::Low);\n" " pin_output.set_high().unwrap();\n" " // pin_input.is_high(); // Error, moved.\n" "\n" " let _pin2: P0_02> = gpio0\n" " .p0_02\n" -" .into_open_drain_output(OpenDrainConfig::Disconnect0Standard1, " -"Level::Low);\n" -" let _pin3: P0_03> = gpio0.p0_03." -"into_push_pull_output(Level::Low);\n" +" .into_open_drain_output(OpenDrainConfig::Disconnect0Standard1, Level::Low);\n" +" let _pin3: P0_03> = gpio0.p0_03.into_push_pull_output(Level::" +"Low);\n" "\n" " loop {}\n" "}\n" @@ -13158,29 +12711,28 @@ msgstr "" #: src/bare-metal/microcontrollers/type-state.md:32 msgid "" -"Pins don't implement `Copy` or `Clone`, so only one instance of each can " -"exist. Once a pin is moved out of the port struct nobody else can take it." +"Pins don't implement `Copy` or `Clone`, so only one instance of each can exist. Once a " +"pin is moved out of the port struct nobody else can take it." msgstr "" #: src/bare-metal/microcontrollers/type-state.md:34 msgid "" -"Changing the configuration of a pin consumes the old pin instance, so you " -"can’t keep use the old instance afterwards." +"Changing the configuration of a pin consumes the old pin instance, so you can’t keep " +"use the old instance afterwards." msgstr "" #: src/bare-metal/microcontrollers/type-state.md:36 msgid "" -"The type of a value indicates the state that it is in: e.g. in this case, " -"the configuration state of a GPIO pin. This encodes the state machine into " -"the type system, and ensures that you don't try to use a pin in a certain " -"way without properly configuring it first. Illegal state transitions are " -"caught at compile time." +"The type of a value indicates the state that it is in: e.g. in this case, the " +"configuration state of a GPIO pin. This encodes the state machine into the type system, " +"and ensures that you don't try to use a pin in a certain way without properly " +"configuring it first. Illegal state transitions are caught at compile time." msgstr "" #: src/bare-metal/microcontrollers/type-state.md:40 msgid "" -"You can call `is_high` on an input pin and `set_high` on an output pin, but " -"not vice-versa." +"You can call `is_high` on an input pin and `set_high` on an output pin, but not vice-" +"versa." msgstr "" #: src/bare-metal/microcontrollers/type-state.md:41 @@ -13193,8 +12745,8 @@ msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:3 msgid "" -"The [`embedded-hal`](https://crates.io/crates/embedded-hal) crate provides a " -"number of traits covering common microcontroller peripherals." +"The [`embedded-hal`](https://crates.io/crates/embedded-hal) crate provides a number of " +"traits covering common microcontroller peripherals." msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:6 @@ -13223,21 +12775,21 @@ msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:13 msgid "" -"Other crates then implement [drivers](https://github.com/rust-embedded/" -"awesome-embedded-rust#driver-crates) in terms of these traits, e.g. an " -"accelerometer driver might need an I2C or SPI bus implementation." +"Other crates then implement [drivers](https://github.com/rust-embedded/awesome-embedded-" +"rust#driver-crates) in terms of these traits, e.g. an accelerometer driver might need " +"an I2C or SPI bus implementation." msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:19 msgid "" -"There are implementations for many microcontrollers, as well as other " -"platforms such as Linux on Raspberry Pi." +"There are implementations for many microcontrollers, as well as other platforms such as " +"Linux on Raspberry Pi." msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:21 msgid "" -"There is work in progress on an `async` version of `embedded-hal`, but it " -"isn't stable yet." +"There is work in progress on an `async` version of `embedded-hal`, but it isn't stable " +"yet." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:1 @@ -13246,8 +12798,8 @@ msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:3 msgid "" -"[probe-rs](https://probe.rs/) is a handy toolset for embedded debugging, " -"like OpenOCD but better integrated." +"[probe-rs](https://probe.rs/) is a handy toolset for embedded debugging, like OpenOCD " +"but better integrated." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:6 @@ -13284,41 +12836,39 @@ msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:11 msgid "" -" output and connect GDB. It's configured by an `Embed.toml` file in your " -"project directory." +" output and connect GDB. It's configured by an `Embed.toml` file in your project " +"directory." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:16 msgid "" -"[CMSIS-DAP](https://arm-software.github.io/CMSIS_5/DAP/html/index.html) is " -"an Arm standard protocol over USB for an in-circuit debugger to access the " -"CoreSight Debug Access Port of various Arm Cortex processors. It's what the " -"on-board debugger on the BBC micro:bit uses." +"[CMSIS-DAP](https://arm-software.github.io/CMSIS_5/DAP/html/index.html) is an Arm " +"standard protocol over USB for an in-circuit debugger to access the CoreSight Debug " +"Access Port of various Arm Cortex processors. It's what the on-board debugger on the " +"BBC micro:bit uses." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:19 msgid "" -"ST-Link is a range of in-circuit debuggers from ST Microelectronics, J-Link " -"is a range from SEGGER." +"ST-Link is a range of in-circuit debuggers from ST Microelectronics, J-Link is a range " +"from SEGGER." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:21 msgid "" -"The Debug Access Port is usually either a 5-pin JTAG interface or 2-pin " -"Serial Wire Debug." +"The Debug Access Port is usually either a 5-pin JTAG interface or 2-pin Serial Wire " +"Debug." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:22 -msgid "" -"probe-rs is a library which you can integrate into your own tools if you " -"want to." +msgid "probe-rs is a library which you can integrate into your own tools if you want to." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:23 msgid "" -"The [Microsoft Debug Adapter Protocol](https://microsoft.github.io/debug-" -"adapter-protocol/) lets VSCode and other IDEs debug code running on any " -"supported microcontroller." +"The [Microsoft Debug Adapter Protocol](https://microsoft.github.io/debug-adapter-" +"protocol/) lets VSCode and other IDEs debug code running on any supported " +"microcontroller." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:25 @@ -13327,8 +12877,8 @@ msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:26 msgid "" -"RTT (Real Time Transfers) is a mechanism to transfer data between the debug " -"host and the target through a number of ringbuffers." +"RTT (Real Time Transfers) is a mechanism to transfer data between the debug host and " +"the target through a number of ringbuffers." msgstr "" #: src/bare-metal/microcontrollers/debugging.md:3 @@ -13364,8 +12914,8 @@ msgstr "" #: src/bare-metal/microcontrollers/debugging.md:21 msgid "" "```sh\n" -"gdb-multiarch target/thumbv7em-none-eabihf/debug/board_support --eval-" -"command=\"target remote :1337\"\n" +"gdb-multiarch target/thumbv7em-none-eabihf/debug/board_support --eval-command=\"target " +"remote :1337\"\n" "```" msgstr "" @@ -13399,8 +12949,7 @@ msgid "\"Real-Time Interrupt-driven Concurrency\"" msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:5 -msgid "" -"Shared resource management, message passing, task scheduling, timer queue" +msgid "Shared resource management, message passing, task scheduling, timer queue" msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:6 @@ -13417,8 +12966,7 @@ msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:9 msgid "" -"Security-focused RTOS with preemptive scheduling and Memory Protection Unit " -"support" +"Security-focused RTOS with preemptive scheduling and Memory Protection Unit support" msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:10 @@ -13427,8 +12975,8 @@ msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:11 msgid "" -"Microkernel RTOS from Oxide Computer Company with memory protection, " -"unprivileged drivers, IPC" +"Microkernel RTOS from Oxide Computer Company with memory protection, unprivileged " +"drivers, IPC" msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:12 @@ -13437,8 +12985,8 @@ msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:13 msgid "" -"Some platforms have `std` implementations, e.g. [esp-idf](https://esp-rs." -"github.io/book/overview/using-the-standard-library.html)." +"Some platforms have `std` implementations, e.g. [esp-idf](https://esp-rs.github.io/book/" +"overview/using-the-standard-library.html)." msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:18 @@ -13451,8 +12999,8 @@ msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:20 msgid "" -"It uses the Cortex-M NVIC (Nested Virtual Interrupt Controller) for " -"scheduling rather than a proper kernel." +"It uses the Cortex-M NVIC (Nested Virtual Interrupt Controller) for scheduling rather " +"than a proper kernel." msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:22 @@ -13460,27 +13008,23 @@ msgid "Cortex-M only." msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:23 -msgid "" -"Google uses TockOS on the Haven microcontroller for Titan security keys." +msgid "Google uses TockOS on the Haven microcontroller for Titan security keys." msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:24 msgid "" -"FreeRTOS is mostly written in C, but there are Rust bindings for writing " -"applications." +"FreeRTOS is mostly written in C, but there are Rust bindings for writing applications." msgstr "" #: src/exercises/bare-metal/morning.md:3 msgid "" -"We will read the direction from an I2C compass, and log the readings to a " -"serial port." +"We will read the direction from an I2C compass, and log the readings to a serial port." msgstr "" #: src/exercises/bare-metal/compass.md:3 msgid "" -"We will read the direction from an I2C compass, and log the readings to a " -"serial port. If you have time, try displaying it on the LEDs somehow too, or " -"use the buttons somehow." +"We will read the direction from an I2C compass, and log the readings to a serial port. " +"If you have time, try displaying it on the LEDs somehow too, or use the buttons somehow." msgstr "" #: src/exercises/bare-metal/compass.md:6 @@ -13489,46 +13033,42 @@ msgstr "" #: src/exercises/bare-metal/compass.md:8 msgid "" -"Check the documentation for the [`lsm303agr`](https://docs.rs/lsm303agr/" -"latest/lsm303agr/) and [`microbit-v2`](https://docs.rs/microbit-v2/latest/" -"microbit/) crates, as well as the [micro:bit hardware](https://tech.microbit." -"org/hardware/)." +"Check the documentation for the [`lsm303agr`](https://docs.rs/lsm303agr/latest/" +"lsm303agr/) and [`microbit-v2`](https://docs.rs/microbit-v2/latest/microbit/) crates, " +"as well as the [micro:bit hardware](https://tech.microbit.org/hardware/)." msgstr "" #: src/exercises/bare-metal/compass.md:11 -msgid "" -"The LSM303AGR Inertial Measurement Unit is connected to the internal I2C bus." +msgid "The LSM303AGR Inertial Measurement Unit is connected to the internal I2C bus." msgstr "" #: src/exercises/bare-metal/compass.md:12 -msgid "" -"TWI is another name for I2C, so the I2C master peripheral is called TWIM." +msgid "TWI is another name for I2C, so the I2C master peripheral is called TWIM." msgstr "" #: src/exercises/bare-metal/compass.md:13 msgid "" -"The LSM303AGR driver needs something implementing the `embedded_hal::" -"blocking::i2c::WriteRead` trait. The [`microbit::hal::Twim`](https://docs.rs/" -"microbit-v2/latest/microbit/hal/struct.Twim.html) struct implements this." +"The LSM303AGR driver needs something implementing the `embedded_hal::blocking::i2c::" +"WriteRead` trait. The [`microbit::hal::Twim`](https://docs.rs/microbit-v2/latest/" +"microbit/hal/struct.Twim.html) struct implements this." msgstr "" #: src/exercises/bare-metal/compass.md:17 msgid "" -"You have a [`microbit::Board`](https://docs.rs/microbit-v2/latest/microbit/" -"struct.Board.html) struct with fields for the various pins and peripherals." +"You have a [`microbit::Board`](https://docs.rs/microbit-v2/latest/microbit/struct.Board." +"html) struct with fields for the various pins and peripherals." msgstr "" #: src/exercises/bare-metal/compass.md:19 msgid "" -"You can also look at the [nRF52833 datasheet](https://infocenter.nordicsemi." -"com/pdf/nRF52833_PS_v1.5.pdf) if you want, but it shouldn't be necessary for " -"this exercise." +"You can also look at the [nRF52833 datasheet](https://infocenter.nordicsemi.com/pdf/" +"nRF52833_PS_v1.5.pdf) if you want, but it shouldn't be necessary for this exercise." msgstr "" #: src/exercises/bare-metal/compass.md:23 msgid "" -"Download the [exercise template](../../comprehensive-rust-exercises.zip) and " -"look in the `compass` directory for the following files." +"Download the [exercise template](../../comprehensive-rust-exercises.zip) and look in " +"the `compass` directory for the following files." msgstr "" #: src/exercises/bare-metal/compass.md:26 src/exercises/bare-metal/rtc.md:19 @@ -13641,8 +13181,7 @@ msgid "" msgstr "" #: src/exercises/bare-metal/compass.md:118 -msgid "" -"Or on Mac OS something like (the device name may be slightly different):" +msgid "Or on Mac OS something like (the device name may be slightly different):" msgstr "" #: src/exercises/bare-metal/compass.md:120 @@ -13662,29 +13201,26 @@ msgstr "" #: src/bare-metal/aps.md:3 msgid "" -"So far we've talked about microcontrollers, such as the Arm Cortex-M series. " -"Now let's try writing something for Cortex-A. For simplicity we'll just work " -"with QEMU's aarch64 ['virt'](https://qemu-project.gitlab.io/qemu/system/arm/" -"virt.html) board." +"So far we've talked about microcontrollers, such as the Arm Cortex-M series. Now let's " +"try writing something for Cortex-A. For simplicity we'll just work with QEMU's aarch64 " +"['virt'](https://qemu-project.gitlab.io/qemu/system/arm/virt.html) board." msgstr "" #: src/bare-metal/aps.md:9 msgid "" -"Broadly speaking, microcontrollers don't have an MMU or multiple levels of " -"privilege (exception levels on Arm CPUs, rings on x86), while application " -"processors do." +"Broadly speaking, microcontrollers don't have an MMU or multiple levels of privilege " +"(exception levels on Arm CPUs, rings on x86), while application processors do." msgstr "" #: src/bare-metal/aps.md:11 msgid "" "QEMU supports emulating various different machines or board models for each " -"architecture. The 'virt' board doesn't correspond to any particular real " -"hardware, but is designed purely for virtual machines." +"architecture. The 'virt' board doesn't correspond to any particular real hardware, but " +"is designed purely for virtual machines." msgstr "" #: src/bare-metal/aps/entry-point.md:3 -msgid "" -"Before we can start running Rust code, we need to do some initialisation." +msgid "Before we can start running Rust code, we need to do some initialisation." msgstr "" #: src/bare-metal/aps/entry-point.md:5 @@ -13694,8 +13230,7 @@ msgid "" ".global entry\n" "entry:\n" " /*\n" -" * Load and apply the memory management configuration, ready to enable " -"MMU and\n" +" * Load and apply the memory management configuration, ready to enable MMU and\n" " * caches.\n" " */\n" " adrp x30, idmap\n" @@ -13714,8 +13249,7 @@ msgid "" " mov_i x30, .Lsctlrval\n" "\n" " /*\n" -" * Ensure everything before this point has completed, then invalidate " -"any\n" +" * Ensure everything before this point has completed, then invalidate any\n" " * potentially stale local TLB entries before they start being used.\n" " */\n" " isb\n" @@ -13725,8 +13259,7 @@ msgid "" " isb\n" "\n" " /*\n" -" * Configure sctlr_el1 to enable MMU and cache and don't proceed until " -"this\n" +" * Configure sctlr_el1 to enable MMU and cache and don't proceed until this\n" " * has completed.\n" " */\n" " msr sctlr_el1, x30\n" @@ -13765,69 +13298,64 @@ msgstr "" #: src/bare-metal/aps/entry-point.md:77 msgid "" -"This is the same as it would be for C: initialising the processor state, " -"zeroing the BSS, and setting up the stack pointer." +"This is the same as it would be for C: initialising the processor state, zeroing the " +"BSS, and setting up the stack pointer." msgstr "" #: src/bare-metal/aps/entry-point.md:79 msgid "" -"The BSS (block starting symbol, for historical reasons) is the part of the " -"object file which containing statically allocated variables which are " -"initialised to zero. They are omitted from the image, to avoid wasting space " -"on zeroes. The compiler assumes that the loader will take care of zeroing " -"them." +"The BSS (block starting symbol, for historical reasons) is the part of the object file " +"which containing statically allocated variables which are initialised to zero. They are " +"omitted from the image, to avoid wasting space on zeroes. The compiler assumes that the " +"loader will take care of zeroing them." msgstr "" #: src/bare-metal/aps/entry-point.md:83 msgid "" -"The BSS may already be zeroed, depending on how memory is initialised and " -"the image is loaded, but we zero it to be sure." +"The BSS may already be zeroed, depending on how memory is initialised and the image is " +"loaded, but we zero it to be sure." msgstr "" #: src/bare-metal/aps/entry-point.md:85 msgid "" -"We need to enable the MMU and cache before reading or writing any memory. If " -"we don't:" +"We need to enable the MMU and cache before reading or writing any memory. If we don't:" msgstr "" #: src/bare-metal/aps/entry-point.md:86 msgid "" -"Unaligned accesses will fault. We build the Rust code for the `aarch64-" -"unknown-none` target which sets `+strict-align` to prevent the compiler " -"generating unaligned accesses, so it should be fine in this case, but this " -"is not necessarily the case in general." +"Unaligned accesses will fault. We build the Rust code for the `aarch64-unknown-none` " +"target which sets `+strict-align` to prevent the compiler generating unaligned " +"accesses, so it should be fine in this case, but this is not necessarily the case in " +"general." msgstr "" #: src/bare-metal/aps/entry-point.md:89 msgid "" -"If it were running in a VM, this can lead to cache coherency issues. The " -"problem is that the VM is accessing memory directly with the cache disabled, " -"while the host has cachable aliases to the same memory. Even if the host " -"doesn't explicitly access the memory, speculative accesses can lead to cache " -"fills, and then changes from one or the other will get lost when the cache " -"is cleaned or the VM enables the cache. (Cache is keyed by physical address, " -"not VA or IPA.)" +"If it were running in a VM, this can lead to cache coherency issues. The problem is " +"that the VM is accessing memory directly with the cache disabled, while the host has " +"cachable aliases to the same memory. Even if the host doesn't explicitly access the " +"memory, speculative accesses can lead to cache fills, and then changes from one or the " +"other will get lost when the cache is cleaned or the VM enables the cache. (Cache is " +"keyed by physical address, not VA or IPA.)" msgstr "" #: src/bare-metal/aps/entry-point.md:94 msgid "" -"For simplicity, we just use a hardcoded pagetable (see `idmap.S`) which " -"identity maps the first 1 GiB of address space for devices, the next 1 GiB " -"for DRAM, and another 1 GiB higher up for more devices. This matches the " -"memory layout that QEMU uses." +"For simplicity, we just use a hardcoded pagetable (see `idmap.S`) which identity maps " +"the first 1 GiB of address space for devices, the next 1 GiB for DRAM, and another 1 " +"GiB higher up for more devices. This matches the memory layout that QEMU uses." msgstr "" #: src/bare-metal/aps/entry-point.md:97 msgid "" -"We also set up the exception vector (`vbar_el1`), which we'll see more about " -"later." +"We also set up the exception vector (`vbar_el1`), which we'll see more about later." msgstr "" #: src/bare-metal/aps/entry-point.md:98 msgid "" -"All examples this afternoon assume we will be running at exception level 1 " -"(EL1). If you need to run at a different exception level you'll need to " -"modify `entry.S` accordingly." +"All examples this afternoon assume we will be running at exception level 1 (EL1). If " +"you need to run at a different exception level you'll need to modify `entry.S` " +"accordingly." msgstr "" #: src/bare-metal/aps/inline-assembly.md:1 @@ -13836,8 +13364,8 @@ msgstr "" #: src/bare-metal/aps/inline-assembly.md:3 msgid "" -"Sometimes we need to use assembly to do things that aren't possible with " -"Rust code. For example, to make an " +"Sometimes we need to use assembly to do things that aren't possible with Rust code. For " +"example, to make an " msgstr "" #: src/bare-metal/aps/inline-assembly.md:4 @@ -13886,45 +13414,41 @@ msgstr "" #: src/bare-metal/aps/inline-assembly.md:39 msgid "" -"(If you actually want to do this, use the [`smccc`](https://crates.io/crates/" -"smccc) crate which has wrappers for all these functions.)" +"(If you actually want to do this, use the [`smccc`](https://crates.io/crates/smccc) " +"crate which has wrappers for all these functions.)" msgstr "" #: src/bare-metal/aps/inline-assembly.md:43 msgid "" -"PSCI is the Arm Power State Coordination Interface, a standard set of " -"functions to manage system and CPU power states, among other things. It is " -"implemented by EL3 firmware and hypervisors on many systems." +"PSCI is the Arm Power State Coordination Interface, a standard set of functions to " +"manage system and CPU power states, among other things. It is implemented by EL3 " +"firmware and hypervisors on many systems." msgstr "" #: src/bare-metal/aps/inline-assembly.md:46 msgid "" -"The `0 => _` syntax means initialise the register to 0 before running the " -"inline assembly code, and ignore its contents afterwards. We need to use " -"`inout` rather than `in` because the call could potentially clobber the " -"contents of the registers." +"The `0 => _` syntax means initialise the register to 0 before running the inline " +"assembly code, and ignore its contents afterwards. We need to use `inout` rather than " +"`in` because the call could potentially clobber the contents of the registers." msgstr "" #: src/bare-metal/aps/inline-assembly.md:49 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 `#[no_mangle]` and `extern \"C\"` because it is called " +"from our entry point in `entry.S`." msgstr "" #: src/bare-metal/aps/inline-assembly.md:51 msgid "" -"`_x0`–`_x3` are the values of registers `x0`–`x3`, which are conventionally " -"used by the bootloader to pass things like a pointer to the device tree. " -"According to the standard aarch64 calling convention (which is what `extern " -"\"C\"` specifies to use), registers `x0`–`x7` are used for the first 8 " -"arguments passed to a function, so `entry.S` doesn't need to do anything " -"special except make sure it doesn't change these registers." +"`_x0`–`_x3` are the values of registers `x0`–`x3`, which are conventionally used by the " +"bootloader to pass things like a pointer to the device tree. According to the standard " +"aarch64 calling convention (which is what `extern \"C\"` specifies to use), registers " +"`x0`–`x7` are used for the first 8 arguments passed to a function, so `entry.S` doesn't " +"need to do anything special except make sure it doesn't change these registers." msgstr "" #: src/bare-metal/aps/inline-assembly.md:56 -msgid "" -"Run the example in QEMU with `make qemu_psci` under `src/bare-metal/aps/" -"examples`." +msgid "Run the example in QEMU with `make qemu_psci` under `src/bare-metal/aps/examples`." msgstr "" #: src/bare-metal/aps/mmio.md:1 @@ -13941,34 +13465,31 @@ msgstr "" #: src/bare-metal/aps/mmio.md:5 msgid "" -"`addr_of!` lets you get fields of structs without creating an intermediate " -"reference." +"`addr_of!` lets you get fields of structs without creating an intermediate reference." msgstr "" #: src/bare-metal/aps/mmio.md:9 msgid "" -"Volatile access: read or write operations may have side-effects, so prevent " -"the compiler or hardware from reordering, duplicating or eliding them." +"Volatile access: read or write operations may have side-effects, so prevent the " +"compiler or hardware from reordering, duplicating or eliding them." msgstr "" #: src/bare-metal/aps/mmio.md:11 msgid "" -"Usually if you write and then read, e.g. via a mutable reference, the " -"compiler may assume that the value read is the same as the value just " -"written, and not bother actually reading memory." +"Usually if you write and then read, e.g. via a mutable reference, the compiler may " +"assume that the value read is the same as the value just written, and not bother " +"actually reading memory." msgstr "" #: src/bare-metal/aps/mmio.md:13 msgid "" -"Some existing crates for volatile access to hardware do hold references, but " -"this is unsound. Whenever a reference exist, the compiler may choose to " -"dereference it." +"Some existing crates for volatile access to hardware do hold references, but this is " +"unsound. Whenever a reference exist, the compiler may choose to dereference it." msgstr "" #: src/bare-metal/aps/mmio.md:15 msgid "" -"Use the `addr_of!` macro to get struct field pointers from a pointer to the " -"struct." +"Use the `addr_of!` macro to get struct field pointers from a pointer to the struct." msgstr "" #: src/bare-metal/aps/uart.md:1 @@ -13977,8 +13498,8 @@ msgstr "" #: src/bare-metal/aps/uart.md:3 msgid "" -"The QEMU 'virt' machine has a [PL011](https://developer.arm.com/" -"documentation/ddi0183/g) UART, so let's write a driver for that." +"The QEMU 'virt' machine has a [PL011](https://developer.arm.com/documentation/ddi0183/" +"g) UART, so let's write a driver for that." msgstr "" #: src/bare-metal/aps/uart.md:5 @@ -13995,16 +13516,13 @@ msgid "" "}\n" "\n" "impl Uart {\n" -" /// Constructs a new instance of the UART driver for a PL011 device at " -"the\n" +" /// Constructs a new instance of the UART driver for a PL011 device at the\n" " /// given base address.\n" " ///\n" " /// # Safety\n" " ///\n" -" /// The given base address must point to the 8 MMIO control registers of " -"a\n" -" /// PL011 device, which must be mapped into the address space of the " -"process\n" +" /// The given base address must point to the 8 MMIO control registers of a\n" +" /// PL011 device, which must be mapped into the address space of the process\n" " /// as device memory and not have any other aliases.\n" " pub unsafe fn new(base_address: *mut u8) -> Self {\n" " Self { base_address }\n" @@ -14029,8 +13547,7 @@ msgid "" " fn read_flag_register(&self) -> u8 {\n" " // Safe because we know that the base address points to the control\n" " // registers of a PL011 device which is appropriately mapped.\n" -" unsafe { self.base_address.add(FLAG_REGISTER_OFFSET)." -"read_volatile() }\n" +" unsafe { self.base_address.add(FLAG_REGISTER_OFFSET).read_volatile() }\n" " }\n" "}\n" "```" @@ -14038,26 +13555,24 @@ msgstr "" #: src/bare-metal/aps/uart.md:55 msgid "" -"Note that `Uart::new` is unsafe while the other methods are safe. This is " -"because as long as the caller of `Uart::new` guarantees that its safety " -"requirements are met (i.e. that there is only ever one instance of the " -"driver for a given UART, and nothing else aliasing its address space), then " -"it is always safe to call `write_byte` later because we can assume the " -"necessary preconditions." +"Note that `Uart::new` is unsafe while the other methods are safe. This is because as " +"long as the caller of `Uart::new` guarantees that its safety requirements are met (i.e. " +"that there is only ever one instance of the driver for a given UART, and nothing else " +"aliasing its address space), then it is always safe to call `write_byte` later because " +"we can assume the necessary preconditions." msgstr "" #: src/bare-metal/aps/uart.md:60 msgid "" -"We could have done it the other way around (making `new` safe but " -"`write_byte` unsafe), but that would be much less convenient to use as every " -"place that calls `write_byte` would need to reason about the safety" +"We could have done it the other way around (making `new` safe but `write_byte` unsafe), " +"but that would be much less convenient to use as every place that calls `write_byte` " +"would need to reason about the safety" msgstr "" #: src/bare-metal/aps/uart.md:63 msgid "" -"This is a common pattern for writing safe wrappers of unsafe code: moving " -"the burden of proof for soundness from a large number of places to a smaller " -"number of places." +"This is a common pattern for writing safe wrappers of unsafe code: moving the burden of " +"proof for soundness from a large number of places to a smaller number of places." msgstr "" #: src/bare-metal/aps/uart/traits.md:1 @@ -14066,8 +13581,7 @@ msgstr "" #: src/bare-metal/aps/uart/traits.md:3 msgid "" -"We derived the `Debug` trait. It would be useful to implement a few more " -"traits too." +"We derived the `Debug` trait. It would be useful to implement a few more traits too." msgstr "" #: src/bare-metal/aps/uart/traits.md:5 @@ -14092,14 +13606,13 @@ msgstr "" #: src/bare-metal/aps/uart/traits.md:24 msgid "" -"Implementing `Write` lets us use the `write!` and `writeln!` macros with our " -"`Uart` type." +"Implementing `Write` lets us use the `write!` and `writeln!` macros with our `Uart` " +"type." msgstr "" #: src/bare-metal/aps/uart/traits.md:25 msgid "" -"Run the example in QEMU with `make qemu_minimal` under `src/bare-metal/aps/" -"examples`." +"Run the example in QEMU with `make qemu_minimal` under `src/bare-metal/aps/examples`." msgstr "" #: src/bare-metal/aps/better-uart.md:1 @@ -14108,11 +13621,10 @@ msgstr "" #: src/bare-metal/aps/better-uart.md:3 msgid "" -"The PL011 actually has [a bunch more registers](https://developer.arm.com/" -"documentation/ddi0183/g/programmers-model/summary-of-registers), and adding " -"offsets to construct pointers to access them is error-prone and hard to " -"read. Plus, some of them are bit fields which would be nice to access in a " -"structured way." +"The PL011 actually has [a bunch more registers](https://developer.arm.com/documentation/" +"ddi0183/g/programmers-model/summary-of-registers), and adding offsets to construct " +"pointers to access them is error-prone and hard to read. Plus, some of them are bit " +"fields which would be nice to access in a structured way." msgstr "" #: src/bare-metal/aps/better-uart.md:7 @@ -14278,8 +13790,8 @@ msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:3 msgid "" -"The [`bitflags`](https://crates.io/crates/bitflags) crate is useful for " -"working with bitflags." +"The [`bitflags`](https://crates.io/crates/bitflags) crate is useful for working with " +"bitflags." msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:5 @@ -14317,8 +13829,8 @@ msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:37 msgid "" -"The `bitflags!` macro creates a newtype something like `Flags(u16)`, along " -"with a bunch of method implementations to get and set flags." +"The `bitflags!` macro creates a newtype something like `Flags(u16)`, along with a bunch " +"of method implementations to get and set flags." msgstr "" #: src/bare-metal/aps/better-uart/registers.md:1 @@ -14326,8 +13838,7 @@ msgid "Multiple registers" msgstr "" #: src/bare-metal/aps/better-uart/registers.md:3 -msgid "" -"We can use a struct to represent the memory layout of the UART's registers." +msgid "We can use a struct to represent the memory layout of the UART's registers." msgstr "" #: src/bare-metal/aps/better-uart/registers.md:5 @@ -14370,10 +13881,10 @@ msgstr "" #: src/bare-metal/aps/better-uart/registers.md:41 msgid "" "[`#[repr(C)]`](https://doc.rust-lang.org/reference/type-layout.html#the-c-" -"representation) tells the compiler to lay the struct fields out in order, " -"following the same rules as C. This is necessary for our struct to have a " -"predictable layout, as default Rust representation allows the compiler to " -"(among other things) reorder fields however it sees fit." +"representation) tells the compiler to lay the struct fields out in order, following the " +"same rules as C. This is necessary for our struct to have a predictable layout, as " +"default Rust representation allows the compiler to (among other things) reorder fields " +"however it sees fit." msgstr "" #: src/bare-metal/aps/better-uart/driver.md:3 @@ -14390,16 +13901,13 @@ msgid "" "}\n" "\n" "impl Uart {\n" -" /// Constructs a new instance of the UART driver for a PL011 device at " -"the\n" +" /// Constructs a new instance of the UART driver for a PL011 device at the\n" " /// given base address.\n" " ///\n" " /// # Safety\n" " ///\n" -" /// The given base address must point to the 8 MMIO control registers of " -"a\n" -" /// PL011 device, which must be mapped into the address space of the " -"process\n" +" /// The given base address must point to the 8 MMIO control registers of a\n" +" /// PL011 device, which must be mapped into the address space of the process\n" " /// as device memory and not have any other aliases.\n" " pub unsafe fn new(base_address: *mut u32) -> Self {\n" " Self {\n" @@ -14423,14 +13931,12 @@ msgid "" " while self.read_flag_register().contains(Flags::BUSY) {}\n" " }\n" "\n" -" /// Reads and returns a pending byte, or `None` if nothing has been " -"received.\n" +" /// Reads and returns a pending byte, or `None` if nothing has been received.\n" " pub fn read_byte(&self) -> Option {\n" " if self.read_flag_register().contains(Flags::RXFE) {\n" " None\n" " } else {\n" -" let data = unsafe { addr_of!((*self.registers).dr)." -"read_volatile() };\n" +" let data = unsafe { addr_of!((*self.registers).dr).read_volatile() };\n" " // TODO: Check for error conditions in bits 8-11.\n" " Some(data as u8)\n" " }\n" @@ -14447,19 +13953,18 @@ msgstr "" #: src/bare-metal/aps/better-uart/driver.md:64 msgid "" -"Note the use of `addr_of!` / `addr_of_mut!` to get pointers to individual " -"fields without creating an intermediate reference, which would be unsound." +"Note the use of `addr_of!` / `addr_of_mut!` to get pointers to individual fields " +"without creating an intermediate reference, which would be unsound." msgstr "" -#: src/bare-metal/aps/better-uart/using.md:1 -#: src/bare-metal/aps/logging/using.md:1 +#: src/bare-metal/aps/better-uart/using.md:1 src/bare-metal/aps/logging/using.md:1 msgid "Using it" msgstr "" #: src/bare-metal/aps/better-uart/using.md:3 msgid "" -"Let's write a small program using our driver to write to the serial console, " -"and echo incoming bytes." +"Let's write a small program using our driver to write to the serial console, and echo " +"incoming bytes." msgstr "" #: src/bare-metal/aps/better-uart/using.md:6 @@ -14483,8 +13988,7 @@ msgid "" "\n" "#[no_mangle]\n" "extern \"C\" fn main(x0: u64, x1: u64, x2: u64, x3: u64) {\n" -" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 " -"device,\n" +" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 device,\n" " // and nothing else accesses that address range.\n" " let mut uart = unsafe { Uart::new(PL011_BASE_ADDRESS) };\n" "\n" @@ -14511,21 +14015,18 @@ msgstr "" #: src/bare-metal/aps/better-uart/using.md:51 msgid "" -"As in the [inline assembly](../inline-assembly.md) example, this `main` " -"function is called from our entry point code in `entry.S`. See the speaker " -"notes there for details." +"As in the [inline assembly](../inline-assembly.md) example, this `main` function is " +"called from our entry point code in `entry.S`. See the speaker notes there for details." msgstr "" #: src/bare-metal/aps/better-uart/using.md:53 -msgid "" -"Run the example in QEMU with `make qemu` under `src/bare-metal/aps/examples`." +msgid "Run the example in QEMU with `make qemu` under `src/bare-metal/aps/examples`." msgstr "" #: src/bare-metal/aps/logging.md:3 msgid "" -"It would be nice to be able to use the logging macros from the [`log`]" -"(https://crates.io/crates/log) crate. We can do this by implementing the " -"`Log` trait." +"It would be nice to be able to use the logging macros from the [`log`](https://crates." +"io/crates/log) crate. We can do this by implementing the `Log` trait." msgstr "" #: src/bare-metal/aps/logging.md:6 @@ -14563,8 +14064,7 @@ msgid "" "}\n" "\n" "/// Initialises UART logger.\n" -"pub fn init(uart: Uart, max_level: LevelFilter) -> Result<(), " -"SetLoggerError> {\n" +"pub fn init(uart: Uart, max_level: LevelFilter) -> Result<(), SetLoggerError> {\n" " LOGGER.uart.lock().replace(uart);\n" "\n" " log::set_logger(&LOGGER)?;\n" @@ -14576,8 +14076,7 @@ msgstr "" #: src/bare-metal/aps/logging.md:50 msgid "" -"The unwrap in `log` is safe because we initialise `LOGGER` before calling " -"`set_logger`." +"The unwrap in `log` is safe because we initialise `LOGGER` before calling `set_logger`." msgstr "" #: src/bare-metal/aps/logging/using.md:3 @@ -14605,8 +14104,7 @@ msgid "" "\n" "#[no_mangle]\n" "extern \"C\" fn main(x0: u64, x1: u64, x2: u64, x3: u64) {\n" -" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 " -"device,\n" +" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 device,\n" " // and nothing else accesses that address range.\n" " let uart = unsafe { Uart::new(PL011_BASE_ADDRESS) };\n" " logger::init(uart, LevelFilter::Trace).unwrap();\n" @@ -14633,17 +14131,15 @@ msgstr "" #: src/bare-metal/aps/logging/using.md:47 msgid "" -"Run the example in QEMU with `make qemu_logger` under `src/bare-metal/aps/" -"examples`." +"Run the example in QEMU with `make qemu_logger` under `src/bare-metal/aps/examples`." msgstr "" #: src/bare-metal/aps/exceptions.md:3 msgid "" -"AArch64 defines an exception vector table with 16 entries, for 4 types of " -"exceptions (synchronous, IRQ, FIQ, SError) from 4 states (current EL with " -"SP0, current EL with SPx, lower EL using AArch64, lower EL using AArch32). " -"We implement this in assembly to save volatile registers to the stack before " -"calling into Rust code:" +"AArch64 defines an exception vector table with 16 entries, for 4 types of exceptions " +"(synchronous, IRQ, FIQ, SError) from 4 states (current EL with SP0, current EL with " +"SPx, lower EL using AArch64, lower EL using AArch32). We implement this in assembly to " +"save volatile registers to the stack before calling into Rust code:" msgstr "" #: src/bare-metal/aps/exceptions.md:8 @@ -14709,24 +14205,24 @@ msgstr "" #: src/bare-metal/aps/exceptions.md:65 msgid "" -"For simplicity we aren't distinguishing between SP0 and SPx for the current " -"EL exceptions, or between AArch32 and AArch64 for the lower EL exceptions." +"For simplicity we aren't distinguishing between SP0 and SPx for the current EL " +"exceptions, or between AArch32 and AArch64 for the lower EL exceptions." msgstr "" #: src/bare-metal/aps/exceptions.md:67 msgid "" -"For this example we just log the exception and power down, as we don't " -"expect any of them to actually happen." +"For this example we just log the exception and power down, as we don't expect any of " +"them to actually happen." msgstr "" #: src/bare-metal/aps/exceptions.md:69 msgid "" -"We can think of exception handlers and our main execution context more or " -"less like different threads. [`Send` and `Sync`](../../concurrency/send-sync." -"md) will control what we can share between them, just like with threads. For " -"example, if we want to share some value between exception handlers and the " -"rest of the program, and it's `Send` but not `Sync`, then we'll need to wrap " -"it in something like a `Mutex` and put it in a static." +"We can think of exception handlers and our main execution context more or less like " +"different threads. [`Send` and `Sync`](../../concurrency/send-sync.md) will control " +"what we can share between them, just like with threads. For example, if we want to " +"share some value between exception handlers and the rest of the program, and it's " +"`Send` but not `Sync`, then we'll need to wrap it in something like a `Mutex` and put " +"it in a static." msgstr "" #: src/bare-metal/aps/other-projects.md:3 @@ -14747,20 +14243,20 @@ msgstr "" #: src/bare-metal/aps/other-projects.md:7 msgid "" -"[Rust RaspberryPi OS tutorial](https://github.com/rust-embedded/rust-" -"raspberrypi-OS-tutorials)" +"[Rust RaspberryPi OS tutorial](https://github.com/rust-embedded/rust-raspberrypi-OS-" +"tutorials)" msgstr "" #: src/bare-metal/aps/other-projects.md:8 msgid "" -"Initialisation, UART driver, simple bootloader, JTAG, exception levels, " -"exception handling, page tables" +"Initialisation, UART driver, simple bootloader, JTAG, exception levels, exception " +"handling, page tables" msgstr "" #: src/bare-metal/aps/other-projects.md:10 msgid "" -"Some dodginess around cache maintenance and initialisation in Rust, not " -"necessarily a good example to copy for production code." +"Some dodginess around cache maintenance and initialisation in Rust, not necessarily a " +"good example to copy for production code." msgstr "" #: src/bare-metal/aps/other-projects.md:12 @@ -14773,33 +14269,30 @@ msgstr "" #: src/bare-metal/aps/other-projects.md:17 msgid "" -"The RaspberryPi OS tutorial runs Rust code before the MMU and caches are " -"enabled. This will read and write memory (e.g. the stack). However:" +"The RaspberryPi OS tutorial runs Rust code before the MMU and caches are enabled. This " +"will read and write memory (e.g. the stack). However:" msgstr "" #: src/bare-metal/aps/other-projects.md:19 msgid "" -"Without the MMU and cache, unaligned accesses will fault. It builds with " -"`aarch64-unknown-none` which sets `+strict-align` to prevent the compiler " -"generating unaligned accesses so it should be alright, but this is not " -"necessarily the case in general." +"Without the MMU and cache, unaligned accesses will fault. It builds with `aarch64-" +"unknown-none` which sets `+strict-align` to prevent the compiler generating unaligned " +"accesses so it should be alright, but this is not necessarily the case in general." msgstr "" #: src/bare-metal/aps/other-projects.md:22 msgid "" -"If it were running in a VM, this can lead to cache coherency issues. The " -"problem is that the VM is accessing memory directly with the cache disabled, " -"while the host has cachable aliases to the same memory. Even if the host " -"doesn't explicitly access the memory, speculative accesses can lead to cache " -"fills, and then changes from one or the other will get lost. Again this is " -"alright in this particular case (running directly on the hardware with no " -"hypervisor), but isn't a good pattern in general." +"If it were running in a VM, this can lead to cache coherency issues. The problem is " +"that the VM is accessing memory directly with the cache disabled, while the host has " +"cachable aliases to the same memory. Even if the host doesn't explicitly access the " +"memory, speculative accesses can lead to cache fills, and then changes from one or the " +"other will get lost. Again this is alright in this particular case (running directly on " +"the hardware with no hypervisor), but isn't a good pattern in general." msgstr "" #: src/bare-metal/useful-crates.md:3 msgid "" -"We'll go over a few crates which solve some common problems in bare-metal " -"programming." +"We'll go over a few crates which solve some common problems in bare-metal programming." msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:1 @@ -14808,9 +14301,8 @@ msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:3 msgid "" -"The [`zerocopy`](https://docs.rs/zerocopy/) crate (from Fuchsia) provides " -"traits and macros for safely converting between byte sequences and other " -"types." +"The [`zerocopy`](https://docs.rs/zerocopy/) crate (from Fuchsia) provides traits and " +"macros for safely converting between byte sequences and other types." msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:6 @@ -14852,34 +14344,32 @@ msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:40 msgid "" -"This is not suitable for MMIO (as it doesn't use volatile reads and writes), " -"but can be useful for working with structures shared with hardware e.g. by " -"DMA, or sent over some external interface." +"This is not suitable for MMIO (as it doesn't use volatile reads and writes), but can be " +"useful for working with structures shared with hardware e.g. by DMA, or sent over some " +"external interface." msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:45 msgid "" -"`FromBytes` can be implemented for types for which any byte pattern is " -"valid, and so can safely be converted from an untrusted sequence of bytes." +"`FromBytes` can be implemented for types for which any byte pattern is valid, and so " +"can safely be converted from an untrusted sequence of bytes." msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:47 msgid "" -"Attempting to derive `FromBytes` for these types would fail, because " -"`RequestType` doesn't use all possible u32 values as discriminants, so not " -"all byte patterns are valid." +"Attempting to derive `FromBytes` for these types would fail, because `RequestType` " +"doesn't use all possible u32 values as discriminants, so not all byte patterns are " +"valid." msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:49 -msgid "" -"`zerocopy::byteorder` has types for byte-order aware numeric primitives." +msgid "`zerocopy::byteorder` has types for byte-order aware numeric primitives." msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:50 msgid "" -"Run the example with `cargo run` under `src/bare-metal/useful-crates/" -"zerocopy-example/`. (It won't run in the Playground because of the crate " -"dependency.)" +"Run the example with `cargo run` under `src/bare-metal/useful-crates/zerocopy-example/" +"`. (It won't run in the Playground because of the crate dependency.)" msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:1 @@ -14888,9 +14378,8 @@ msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:3 msgid "" -"The [`aarch64-paging`](https://crates.io/crates/aarch64-paging) crate lets " -"you create page tables according to the AArch64 Virtual Memory System " -"Architecture." +"The [`aarch64-paging`](https://crates.io/crates/aarch64-paging) crate lets you create " +"page tables according to the AArch64 Virtual Memory System Architecture." msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:6 @@ -14918,21 +14407,20 @@ msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:28 msgid "" -"For now it only supports EL1, but support for other exception levels should " -"be straightforward to add." +"For now it only supports EL1, but support for other exception levels should be " +"straightforward to add." msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:30 msgid "" -"This is used in Android for the [Protected VM Firmware](https://cs.android." -"com/android/platform/superproject/+/master:packages/modules/Virtualization/" -"pvmfw/)." +"This is used in Android for the [Protected VM Firmware](https://cs.android.com/android/" +"platform/superproject/+/master:packages/modules/Virtualization/pvmfw/)." msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:31 msgid "" -"There's no easy way to run this example, as it needs to run on real hardware " -"or under QEMU." +"There's no easy way to run this example, as it needs to run on real hardware or under " +"QEMU." msgstr "" #: src/bare-metal/useful-crates/buddy_system_allocator.md:1 @@ -14941,14 +14429,13 @@ msgstr "" #: src/bare-metal/useful-crates/buddy_system_allocator.md:3 msgid "" -"[`buddy_system_allocator`](https://crates.io/crates/buddy_system_allocator) " -"is a third-party crate implementing a basic buddy system allocator. It can " -"be used both for [`LockedHeap`](https://docs.rs/buddy_system_allocator/0.9.0/" -"buddy_system_allocator/struct.LockedHeap.html) implementing [`GlobalAlloc`]" -"(https://doc.rust-lang.org/core/alloc/trait.GlobalAlloc.html) so you can use " -"the standard `alloc` crate (as we saw [before](../alloc.md)), or for " -"allocating other address space. For example, we might want to allocate MMIO " -"space for PCI BARs:" +"[`buddy_system_allocator`](https://crates.io/crates/buddy_system_allocator) is a third-" +"party crate implementing a basic buddy system allocator. It can be used both for " +"[`LockedHeap`](https://docs.rs/buddy_system_allocator/0.9.0/buddy_system_allocator/" +"struct.LockedHeap.html) implementing [`GlobalAlloc`](https://doc.rust-lang.org/core/" +"alloc/trait.GlobalAlloc.html) so you can use the standard `alloc` crate (as we saw " +"[before](../alloc.md)), or for allocating other address space. For example, we might " +"want to allocate MMIO space for PCI BARs:" msgstr "" #: src/bare-metal/useful-crates/buddy_system_allocator.md:8 @@ -14976,9 +14463,8 @@ msgstr "" #: src/bare-metal/useful-crates/buddy_system_allocator.md:27 msgid "" -"Run the example with `cargo run` under `src/bare-metal/useful-crates/" -"allocator-example/`. (It won't run in the Playground because of the crate " -"dependency.)" +"Run the example with `cargo run` under `src/bare-metal/useful-crates/allocator-example/" +"`. (It won't run in the Playground because of the crate dependency.)" msgstr "" #: src/bare-metal/useful-crates/tinyvec.md:1 @@ -14987,11 +14473,11 @@ msgstr "" #: src/bare-metal/useful-crates/tinyvec.md:3 msgid "" -"Sometimes you want something which can be resized like a `Vec`, but without " -"heap allocation. [`tinyvec`](https://crates.io/crates/tinyvec) provides " -"this: a vector backed by an array or slice, which could be statically " -"allocated or on the stack, which keeps track of how many elements are used " -"and panics if you try to use more than are allocated." +"Sometimes you want something which can be resized like a `Vec`, but without heap " +"allocation. [`tinyvec`](https://crates.io/crates/tinyvec) provides this: a vector " +"backed by an array or slice, which could be statically allocated or on the stack, which " +"keeps track of how many elements are used and panics if you try to use more than are " +"allocated." msgstr "" #: src/bare-metal/useful-crates/tinyvec.md:8 @@ -15011,14 +14497,11 @@ msgid "" msgstr "" #: src/bare-metal/useful-crates/tinyvec.md:23 -msgid "" -"`tinyvec` requires that the element type implement `Default` for " -"initialisation." +msgid "`tinyvec` requires that the element type implement `Default` for initialisation." msgstr "" #: src/bare-metal/useful-crates/tinyvec.md:24 -msgid "" -"The Rust Playground includes `tinyvec`, so this example will run fine inline." +msgid "The Rust Playground includes `tinyvec`, so this example will run fine inline." msgstr "" #: src/bare-metal/useful-crates/spin.md:1 @@ -15027,15 +14510,15 @@ msgstr "" #: src/bare-metal/useful-crates/spin.md:3 msgid "" -"`std::sync::Mutex` and the other synchronisation primitives from `std::sync` " -"are not available in `core` or `alloc`. How can we manage synchronisation or " -"interior mutability, such as for sharing state between different CPUs?" +"`std::sync::Mutex` and the other synchronisation primitives from `std::sync` are not " +"available in `core` or `alloc`. How can we manage synchronisation or interior " +"mutability, such as for sharing state between different CPUs?" msgstr "" #: src/bare-metal/useful-crates/spin.md:7 msgid "" -"The [`spin`](https://crates.io/crates/spin) crate provides spinlock-based " -"equivalents of many of these primitives." +"The [`spin`](https://crates.io/crates/spin) crate provides spinlock-based equivalents " +"of many of these primitives." msgstr "" #: src/bare-metal/useful-crates/spin.md:9 @@ -15059,28 +14542,26 @@ msgstr "" #: src/bare-metal/useful-crates/spin.md:24 msgid "" -"`spin` also has a ticket lock mutex implementation; equivalents of `RwLock`, " -"`Barrier` and `Once` from `std::sync`; and `Lazy` for lazy initialisation." +"`spin` also has a ticket lock mutex implementation; equivalents of `RwLock`, `Barrier` " +"and `Once` from `std::sync`; and `Lazy` for lazy initialisation." msgstr "" #: src/bare-metal/useful-crates/spin.md:26 msgid "" -"The [`once_cell`](https://crates.io/crates/once_cell) crate also has some " -"useful types for late initialisation with a slightly different approach to " -"`spin::once::Once`." +"The [`once_cell`](https://crates.io/crates/once_cell) crate also has some useful types " +"for late initialisation with a slightly different approach to `spin::once::Once`." msgstr "" #: src/bare-metal/useful-crates/spin.md:28 -msgid "" -"The Rust Playground includes `spin`, so this example will run fine inline." +msgid "The Rust Playground includes `spin`, so this example will run fine inline." msgstr "" #: src/bare-metal/android.md:3 msgid "" -"To build a bare-metal Rust binary in AOSP, you need to use a " -"`rust_ffi_static` Soong rule to build your Rust code, then a `cc_binary` " -"with a linker script to produce the binary itself, and then a `raw_binary` " -"to convert the ELF to a raw binary ready to be run." +"To build a bare-metal Rust binary in AOSP, you need to use a `rust_ffi_static` Soong " +"rule to build your Rust code, then a `cc_binary` with a linker script to produce the " +"binary itself, and then a `raw_binary` to convert the ELF to a raw binary ready to be " +"run." msgstr "" #: src/bare-metal/android.md:7 @@ -15127,10 +14608,10 @@ msgstr "" #: src/bare-metal/android/vmbase.md:3 msgid "" -"For VMs running under crosvm on aarch64, the [vmbase](https://android." -"googlesource.com/platform/packages/modules/Virtualization/+/refs/heads/" -"master/vmbase/) library provides a linker script and useful defaults for the " -"build rules, along with an entry point, UART console logging and more." +"For VMs running under crosvm on aarch64, the [vmbase](https://android.googlesource.com/" +"platform/packages/modules/Virtualization/+/refs/heads/master/vmbase/) library provides " +"a linker script and useful defaults for the build rules, along with an entry point, " +"UART console logging and more." msgstr "" #: src/bare-metal/android/vmbase.md:6 @@ -15151,50 +14632,48 @@ msgstr "" #: src/bare-metal/android/vmbase.md:21 msgid "" -"The `main!` macro marks your main function, to be called from the `vmbase` " -"entry point." +"The `main!` macro marks your main function, to be called from the `vmbase` entry point." msgstr "" #: src/bare-metal/android/vmbase.md:22 msgid "" -"The `vmbase` entry point handles console initialisation, and issues a " -"PSCI_SYSTEM_OFF to shutdown the VM if your main function returns." +"The `vmbase` entry point handles console initialisation, and issues a PSCI_SYSTEM_OFF " +"to shutdown the VM if your main function returns." msgstr "" #: src/exercises/bare-metal/afternoon.md:3 msgid "We will write a driver for the PL031 real-time clock device." msgstr "" -#: src/exercises/bare-metal/rtc.md:1 -#: src/exercises/bare-metal/solutions-afternoon.md:3 +#: src/exercises/bare-metal/rtc.md:1 src/exercises/bare-metal/solutions-afternoon.md:3 msgid "RTC driver" msgstr "" #: src/exercises/bare-metal/rtc.md:3 msgid "" -"The QEMU aarch64 virt machine has a [PL031](https://developer.arm.com/" -"documentation/ddi0224/c) real-time clock at 0x9010000. For this exercise, " -"you should write a driver for it." +"The QEMU aarch64 virt machine has a [PL031](https://developer.arm.com/documentation/" +"ddi0224/c) real-time clock at 0x9010000. For this exercise, you should write a driver " +"for it." msgstr "" #: src/exercises/bare-metal/rtc.md:6 msgid "" -"Use it to print the current time to the serial console. You can use the " -"[`chrono`](https://crates.io/crates/chrono) crate for date/time formatting." +"Use it to print the current time to the serial console. You can use the [`chrono`]" +"(https://crates.io/crates/chrono) crate for date/time formatting." msgstr "" #: src/exercises/bare-metal/rtc.md:8 msgid "" -"Use the match register and raw interrupt status to busy-wait until a given " -"time, e.g. 3 seconds in the future. (Call [`core::hint::spin_loop`](https://" -"doc.rust-lang.org/core/hint/fn.spin_loop.html) inside the loop.)" +"Use the match register and raw interrupt status to busy-wait until a given time, e.g. 3 " +"seconds in the future. (Call [`core::hint::spin_loop`](https://doc.rust-lang.org/core/" +"hint/fn.spin_loop.html) inside the loop.)" msgstr "" #: src/exercises/bare-metal/rtc.md:10 msgid "" -"_Extension if you have time:_ Enable and handle the interrupt generated by " -"the RTC match. You can use the driver provided in the [`arm-gic`](https://" -"docs.rs/arm-gic/) crate to configure the Arm Generic Interrupt Controller." +"_Extension if you have time:_ Enable and handle the interrupt generated by the RTC " +"match. You can use the driver provided in the [`arm-gic`](https://docs.rs/arm-gic/) " +"crate to configure the Arm Generic Interrupt Controller." msgstr "" #: src/exercises/bare-metal/rtc.md:12 @@ -15203,14 +14682,14 @@ msgstr "" #: src/exercises/bare-metal/rtc.md:13 msgid "" -"Once the interrupt is enabled, you can put the core to sleep via `arm_gic::" -"wfi()`, which will cause the core to sleep until it receives an interrupt." +"Once the interrupt is enabled, you can put the core to sleep via `arm_gic::wfi()`, " +"which will cause the core to sleep until it receives an interrupt." msgstr "" #: src/exercises/bare-metal/rtc.md:16 msgid "" -"Download the [exercise template](../../comprehensive-rust-exercises.zip) and " -"look in the `rtc` directory for the following files." +"Download the [exercise template](../../comprehensive-rust-exercises.zip) and look in " +"the `rtc` directory for the following files." msgstr "" #: src/exercises/bare-metal/rtc.md:23 @@ -15239,20 +14718,17 @@ msgid "" "\n" "#[no_mangle]\n" "extern \"C\" fn main(x0: u64, x1: u64, x2: u64, x3: u64) {\n" -" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 " -"device,\n" +" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 device,\n" " // and nothing else accesses that address range.\n" " let uart = unsafe { Uart::new(PL011_BASE_ADDRESS) };\n" " logger::init(uart, LevelFilter::Trace).unwrap();\n" "\n" " info!(\"main({:#x}, {:#x}, {:#x}, {:#x})\", x0, x1, x2, x3);\n" "\n" -" // Safe because `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the " -"base\n" +" // Safe because `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the base\n" " // addresses of a GICv3 distributor and redistributor respectively, and\n" " // nothing else accesses those address ranges.\n" -" let mut gic = unsafe { GicV3::new(GICD_BASE_ADDRESS, " -"GICR_BASE_ADDRESS) };\n" +" let mut gic = unsafe { GicV3::new(GICD_BASE_ADDRESS, GICR_BASE_ADDRESS) };\n" " gic.setup();\n" "\n" " // TODO: Create instance of RTC driver and print current time.\n" @@ -15273,8 +14749,8 @@ msgstr "" #: src/exercises/bare-metal/rtc.md:75 msgid "" -"`src/exceptions.rs` (you should only need to change this for the 3rd part of " -"the exercise):" +"`src/exceptions.rs` (you should only need to change this for the 3rd part of the " +"exercise):" msgstr "" #: src/exercises/bare-metal/rtc.md:79 @@ -15405,8 +14881,7 @@ msgid "" "}\n" "\n" "/// Initialises UART logger.\n" -"pub fn init(uart: Uart, max_level: LevelFilter) -> Result<(), " -"SetLoggerError> {\n" +"pub fn init(uart: Uart, max_level: LevelFilter) -> Result<(), SetLoggerError> {\n" " LOGGER.uart.lock().replace(uart);\n" "\n" " log::set_logger(&LOGGER)?;\n" @@ -15530,16 +15005,13 @@ msgid "" "}\n" "\n" "impl Uart {\n" -" /// Constructs a new instance of the UART driver for a PL011 device at " -"the\n" +" /// Constructs a new instance of the UART driver for a PL011 device at the\n" " /// given base address.\n" " ///\n" " /// # Safety\n" " ///\n" -" /// The given base address must point to the MMIO control registers of " -"a\n" -" /// PL011 device, which must be mapped into the address space of the " -"process\n" +" /// The given base address must point to the MMIO control registers of a\n" +" /// PL011 device, which must be mapped into the address space of the process\n" " /// as device memory and not have any other aliases.\n" " pub unsafe fn new(base_address: *mut u32) -> Self {\n" " Self {\n" @@ -15563,14 +15035,12 @@ msgid "" " while self.read_flag_register().contains(Flags::BUSY) {}\n" " }\n" "\n" -" /// Reads and returns a pending byte, or `None` if nothing has been " -"received.\n" +" /// Reads and returns a pending byte, or `None` if nothing has been received.\n" " pub fn read_byte(&self) -> Option {\n" " if self.read_flag_register().contains(Flags::RXFE) {\n" " None\n" " } else {\n" -" let data = unsafe { addr_of!((*self.registers).dr)." -"read_volatile() };\n" +" let data = unsafe { addr_of!((*self.registers).dr).read_volatile() };\n" " // TODO: Check for error conditions in bits 8-11.\n" " Some(data as u8)\n" " }\n" @@ -15705,29 +15175,27 @@ msgid "" ".set .L_TCR_TG0_4KB, 0x0 << 14\n" "/* 4 KiB granule size for TTBR1_EL1. */\n" ".set .L_TCR_TG1_4KB, 0x2 << 30\n" -"/* Disable translation table walk for TTBR1_EL1, generating a translation " -"fault instead. */\n" +"/* Disable translation table walk for TTBR1_EL1, generating a translation fault " +"instead. */\n" ".set .L_TCR_EPD1, 0x1 << 23\n" "/* Translation table walks for TTBR0_EL1 are inner sharable. */\n" ".set .L_TCR_SH_INNER, 0x3 << 12\n" "/*\n" -" * Translation table walks for TTBR0_EL1 are outer write-back read-allocate " -"write-allocate\n" +" * Translation table walks for TTBR0_EL1 are outer write-back read-allocate write-" +"allocate\n" " * cacheable.\n" " */\n" ".set .L_TCR_RGN_OWB, 0x1 << 10\n" "/*\n" -" * Translation table walks for TTBR0_EL1 are inner write-back read-allocate " -"write-allocate\n" +" * Translation table walks for TTBR0_EL1 are inner write-back read-allocate write-" +"allocate\n" " * cacheable.\n" " */\n" ".set .L_TCR_RGN_IWB, 0x1 << 8\n" "/* Size offset for TTBR0_EL1 is 2**39 bytes (512 GiB). */\n" ".set .L_TCR_T0SZ_512, 64 - 39\n" -".set .Ltcrval, .L_TCR_TG0_4KB | .L_TCR_TG1_4KB | .L_TCR_EPD1 | ." -"L_TCR_RGN_OWB\n" -".set .Ltcrval, .Ltcrval | .L_TCR_RGN_IWB | .L_TCR_SH_INNER | ." -"L_TCR_T0SZ_512\n" +".set .Ltcrval, .L_TCR_TG0_4KB | .L_TCR_TG1_4KB | .L_TCR_EPD1 | .L_TCR_RGN_OWB\n" +".set .Ltcrval, .Ltcrval | .L_TCR_RGN_IWB | .L_TCR_SH_INNER | .L_TCR_T0SZ_512\n" "\n" "/* Stage 1 instruction access cacheability is unaffected. */\n" ".set .L_SCTLR_ELx_I, 0x1 << 12\n" @@ -15743,27 +15211,26 @@ msgid "" ".set .L_SCTLR_EL1_SED, 0x1 << 8\n" "/* Various IT instructions are disabled at EL0 in aarch32 mode. */\n" ".set .L_SCTLR_EL1_ITD, 0x1 << 7\n" -".set .L_SCTLR_EL1_RES1, (0x1 << 11) | (0x1 << 20) | (0x1 << 22) | (0x1 << " -"28) | (0x1 << 29)\n" -".set .Lsctlrval, .L_SCTLR_ELx_M | .L_SCTLR_ELx_C | .L_SCTLR_ELx_SA | ." -"L_SCTLR_EL1_ITD | .L_SCTLR_EL1_SED\n" -".set .Lsctlrval, .Lsctlrval | .L_SCTLR_ELx_I | .L_SCTLR_EL1_SPAN | ." -"L_SCTLR_EL1_RES1\n" +".set .L_SCTLR_EL1_RES1, (0x1 << 11) | (0x1 << 20) | (0x1 << 22) | (0x1 << 28) | (0x1 << " +"29)\n" +".set .Lsctlrval, .L_SCTLR_ELx_M | .L_SCTLR_ELx_C | .L_SCTLR_ELx_SA | .L_SCTLR_EL1_ITD " +"| .L_SCTLR_EL1_SED\n" +".set .Lsctlrval, .Lsctlrval | .L_SCTLR_ELx_I | .L_SCTLR_EL1_SPAN | .L_SCTLR_EL1_RES1\n" "\n" "/**\n" -" * This is a generic entry point for an image. It carries out the operations " -"required to prepare the\n" -" * loaded image to be run. Specifically, it zeroes the bss section using " -"registers x25 and above,\n" -" * prepares the stack, enables floating point, and sets up the exception " -"vector. It preserves x0-x3\n" +" * This is a generic entry point for an image. It carries out the operations required " +"to prepare the\n" +" * loaded image to be run. Specifically, it zeroes the bss section using registers x25 " +"and above,\n" +" * prepares the stack, enables floating point, and sets up the exception vector. It " +"preserves x0-x3\n" " * for the Rust entry point, as these may contain boot parameters.\n" " */\n" ".section .init.entry, \"ax\"\n" ".global entry\n" "entry:\n" -"\t/* Load and apply the memory management configuration, ready to enable MMU " -"and caches. */\n" +"\t/* Load and apply the memory management configuration, ready to enable MMU and " +"caches. */\n" "\tadrp x30, idmap\n" "\tmsr ttbr0_el1, x30\n" "\n" @@ -15780,8 +15247,8 @@ msgid "" "\tmov_i x30, .Lsctlrval\n" "\n" "\t/*\n" -"\t * Ensure everything before this point has completed, then invalidate any " -"potentially stale\n" +"\t * Ensure everything before this point has completed, then invalidate any potentially " +"stale\n" "\t * local TLB entries before they start being used.\n" "\t */\n" "\tisb\n" @@ -15791,8 +15258,8 @@ msgid "" "\tisb\n" "\n" "\t/*\n" -"\t * Configure sctlr_el1 to enable MMU and cache and don't proceed until " -"this has completed.\n" +"\t * Configure sctlr_el1 to enable MMU and cache and don't proceed until this has " +"completed.\n" "\t */\n" "\tmsr sctlr_el1, x30\n" "\tisb\n" @@ -15853,14 +15320,11 @@ msgid "" "\n" "/**\n" " * Saves the volatile registers onto the stack. This currently takes 14\n" -" * instructions, so it can be used in exception handlers with 18 " -"instructions\n" +" * instructions, so it can be used in exception handlers with 18 instructions\n" " * left.\n" " *\n" -" * On return, x0 and x1 are initialised to elr_el2 and spsr_el2 " -"respectively,\n" -" * which can be used as the first and second arguments of a subsequent " -"call.\n" +" * On return, x0 and x1 are initialised to elr_el2 and spsr_el2 respectively,\n" +" * which can be used as the first and second arguments of a subsequent call.\n" " */\n" ".macro save_volatile_to_stack\n" "\t/* Reserve stack space and save registers x0-x18, x29 & x30. */\n" @@ -15887,8 +15351,7 @@ msgid "" "\n" "/**\n" " * Restores the volatile registers from the stack. This currently takes 14\n" -" * instructions, so it can be used in exception handlers while still leaving " -"18\n" +" * instructions, so it can be used in exception handlers while still leaving 18\n" " * instructions left; if paired with save_volatile_to_stack, there are 4\n" " * instructions to spare.\n" " */\n" @@ -15915,15 +15378,12 @@ msgid "" ".endm\n" "\n" "/**\n" -" * This is a generic handler for exceptions taken at the current EL while " -"using\n" -" * SP0. It behaves similarly to the SPx case by first switching to SPx, " -"doing\n" +" * This is a generic handler for exceptions taken at the current EL while using\n" +" * SP0. It behaves similarly to the SPx case by first switching to SPx, doing\n" " * the work, then switching back to SP0 before returning.\n" " *\n" " * Switching to SPx and calling the Rust handler takes 16 instructions. To\n" -" * restore and return we need an additional 16 instructions, so we can " -"implement\n" +" * restore and return we need an additional 16 instructions, so we can implement\n" " * the whole handler within the allotted 32 instructions.\n" " */\n" ".macro current_exception_sp0 handler:req\n" @@ -15936,18 +15396,15 @@ msgid "" ".endm\n" "\n" "/**\n" -" * This is a generic handler for exceptions taken at the current EL while " -"using\n" -" * SPx. It saves volatile registers, calls the Rust handler, restores " -"volatile\n" +" * This is a generic handler for exceptions taken at the current EL while using\n" +" * SPx. It saves volatile registers, calls the Rust handler, restores volatile\n" " * registers, then returns.\n" " *\n" " * This also works for exceptions taken from EL0, if we don't care about\n" " * non-volatile registers.\n" " *\n" " * Saving state and jumping to the Rust handler takes 15 instructions, and\n" -" * restoring and returning also takes 15 instructions, so we can fit the " -"whole\n" +" * restoring and returning also takes 15 instructions, so we can fit the whole\n" " * handler in 30 instructions, under the limit of 32.\n" " */\n" ".macro current_exception_spx handler:req\n" @@ -16060,8 +15517,7 @@ msgid "" ".set .L_TT_XN, 0x3 << 53\n" "\n" ".set .L_TT_MT_DEV, 0x0 << 2\t\t\t// MAIR #0 (DEV_nGnRE)\n" -".set .L_TT_MT_MEM, (0x1 << 2) | (0x3 << 8)\t// MAIR #1 (MEM_WBWA), inner " -"shareable\n" +".set .L_TT_MT_MEM, (0x1 << 2) | (0x3 << 8)\t// MAIR #1 (MEM_WBWA), inner shareable\n" "\n" ".set .L_BLOCK_DEV, .L_TT_TYPE_BLOCK | .L_TT_MT_DEV | .L_TT_AF | .L_TT_XN\n" ".set .L_BLOCK_MEM, .L_TT_TYPE_BLOCK | .L_TT_MT_MEM | .L_TT_AF | .L_TT_NG\n" @@ -16103,8 +15559,7 @@ msgid "" " */\n" "\n" "/*\n" -" * Code will start running at this symbol which is placed at the start of " -"the\n" +" * Code will start running at this symbol which is placed at the start of the\n" " * image.\n" " */\n" "ENTRY(entry)\n" @@ -16234,8 +15689,8 @@ msgid "" "\t$(OBJCOPY) -O binary target/aarch64-unknown-none/debug/rtc $@\n" "\n" "qemu: rtc.bin\n" -"\tqemu-system-aarch64 -machine virt,gic-version=3 -cpu max -serial mon:stdio " -"-display none -kernel $< -s\n" +"\tqemu-system-aarch64 -machine virt,gic-version=3 -cpu max -serial mon:stdio -display " +"none -kernel $< -s\n" "\n" "clean:\n" "\tcargo clean\n" @@ -16261,16 +15716,14 @@ msgid "Welcome to Concurrency in Rust" msgstr "" #: src/concurrency.md:3 -msgid "" -"Rust has full support for concurrency using OS threads with mutexes and " -"channels." +msgid "Rust has full support for concurrency using OS threads with mutexes and channels." msgstr "" #: src/concurrency.md:6 msgid "" -"The Rust type system plays an important role in making many concurrency bugs " -"compile time bugs. This is often referred to as _fearless concurrency_ since " -"you can rely on the compiler to ensure correctness at runtime." +"The Rust type system plays an important role in making many concurrency bugs compile " +"time bugs. This is often referred to as _fearless concurrency_ since you can rely on " +"the compiler to ensure correctness at runtime." msgstr "" #: src/concurrency/threads.md:3 @@ -16313,14 +15766,13 @@ msgstr "" #: src/concurrency/threads.md:32 msgid "" -"Notice that the thread is stopped before it reaches 10 — the main thread is " -"not waiting." +"Notice that the thread is stopped before it reaches 10 — the main thread is not waiting." msgstr "" #: src/concurrency/threads.md:35 msgid "" -"Use `let handle = thread::spawn(...)` and later `handle.join()` to wait for " -"the thread to finish." +"Use `let handle = thread::spawn(...)` and later `handle.join()` to wait for the thread " +"to finish." msgstr "" #: src/concurrency/threads.md:38 @@ -16329,9 +15781,8 @@ msgstr "" #: src/concurrency/threads.md:40 msgid "" -"Use the `Result` return value from `handle.join()` to get access to the " -"panic payload. This is a good time to talk about [`Any`](https://doc.rust-" -"lang.org/std/any/index.html)." +"Use the `Result` return value from `handle.join()` to get access to the panic payload. " +"This is a good time to talk about [`Any`](https://doc.rust-lang.org/std/any/index.html)." msgstr "" #: src/concurrency/scoped-threads.md:3 @@ -16358,8 +15809,8 @@ msgstr "" #: src/concurrency/scoped-threads.md:20 msgid "" -"However, you can use a [scoped thread](https://doc.rust-lang.org/std/thread/" -"fn.scope.html) for this:" +"However, you can use a [scoped thread](https://doc.rust-lang.org/std/thread/fn.scope." +"html) for this:" msgstr "" #: src/concurrency/scoped-threads.md:22 @@ -16381,20 +15832,20 @@ msgstr "" #: src/concurrency/scoped-threads.md:40 msgid "" -"The reason for that is that when the `thread::scope` function completes, all " -"the threads are guaranteed to be joined, so they can return borrowed data." +"The reason for that is that when the `thread::scope` function completes, all the " +"threads are guaranteed to be joined, so they can return borrowed data." msgstr "" #: src/concurrency/scoped-threads.md:41 msgid "" -"Normal Rust borrowing rules apply: you can either borrow mutably by one " -"thread, or immutably by any number of threads." +"Normal Rust borrowing rules apply: you can either borrow mutably by one thread, or " +"immutably by any number of threads." msgstr "" #: src/concurrency/channels.md:3 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` and a `Receiver`. The two parts are " +"connected via the channel, but you only see the end-points." msgstr "" #: src/concurrency/channels.md:6 @@ -16421,15 +15872,14 @@ msgstr "" #: src/concurrency/channels.md:27 msgid "" -"`mpsc` stands for Multi-Producer, Single-Consumer. `Sender` and `SyncSender` " -"implement `Clone` (so you can make multiple producers) but `Receiver` does " -"not." +"`mpsc` stands for Multi-Producer, Single-Consumer. `Sender` and `SyncSender` implement " +"`Clone` (so you can make multiple producers) but `Receiver` does not." msgstr "" #: src/concurrency/channels.md:29 msgid "" -"`send()` and `recv()` return `Result`. If they return `Err`, it means the " -"counterpart `Sender` or `Receiver` is dropped and the channel is closed." +"`send()` and `recv()` return `Result`. If they return `Err`, it means the counterpart " +"`Sender` or `Receiver` is dropped and the channel is closed." msgstr "" #: src/concurrency/channels/unbounded.md:3 @@ -16464,8 +15914,7 @@ msgid "" msgstr "" #: src/concurrency/channels/bounded.md:3 -msgid "" -"With bounded (synchronous) channels, `send` can block the current thread:" +msgid "With bounded (synchronous) channels, `send` can block the current thread:" msgstr "" #: src/concurrency/channels/bounded.md:5 @@ -16497,21 +15946,21 @@ msgstr "" #: src/concurrency/channels/bounded.md:31 msgid "" -"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." +"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 "" #: src/concurrency/channels/bounded.md:32 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 "" #: src/concurrency/channels/bounded.md:33 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 `read`." +"A bounded channel with a size of zero is called a \"rendezvous channel\". Every send " +"will block the current thread until another thread calls `read`." msgstr "" #: src/concurrency/send-sync.md:1 @@ -16520,34 +15969,32 @@ msgstr "" #: src/concurrency/send-sync.md:3 msgid "" -"How does Rust know to forbid shared access across thread? The answer is in " -"two traits:" +"How does Rust know to forbid shared access across thread? The answer is in two traits:" msgstr "" #: src/concurrency/send-sync.md:5 msgid "" -"[`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html): a type `T` " -"is `Send` if it is safe to move a `T` across a thread boundary." +"[`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html): a type `T` is `Send` if " +"it is safe to move a `T` across a thread boundary." msgstr "" #: src/concurrency/send-sync.md:7 msgid "" -"[`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html): a type `T` " -"is `Sync` if it is safe to move a `&T` across a thread boundary." +"[`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html): a type `T` is `Sync` if " +"it is safe to move a `&T` across a thread boundary." msgstr "" #: src/concurrency/send-sync.md:10 msgid "" -"`Send` and `Sync` are [unsafe traits](../unsafe/unsafe-traits.md). The " -"compiler will automatically derive them for your types as long as they only " -"contain `Send` and `Sync` types. You can also implement them manually when " -"you know it is valid." +"`Send` and `Sync` are [unsafe traits](../unsafe/unsafe-traits.md). The compiler will " +"automatically derive them for your types as long as they only contain `Send` and `Sync` " +"types. You can also implement them manually when you know it is valid." msgstr "" #: src/concurrency/send-sync.md:20 msgid "" -"One can think of these traits as markers that the type has certain thread-" -"safety properties." +"One can think of these traits as markers that the type has certain thread-safety " +"properties." msgstr "" #: src/concurrency/send-sync.md:21 @@ -16560,21 +16007,21 @@ msgstr "" #: src/concurrency/send-sync/send.md:3 msgid "" -"A type `T` is [`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html) " -"if it is safe to move a `T` value to another thread." +"A type `T` is [`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html) if it is " +"safe to move a `T` value to another thread." msgstr "" #: src/concurrency/send-sync/send.md:5 msgid "" -"The effect of moving ownership to another thread is that _destructors_ will " -"run in that thread. So the question is when you can allocate a value in one " -"thread and deallocate it in another." +"The effect of moving ownership to another thread is that _destructors_ will run in that " +"thread. So the question is when you can allocate a value in one thread and deallocate " +"it in another." msgstr "" #: src/concurrency/send-sync/send.md:13 msgid "" -"As an example, a connection to the SQLite library must only be accessed from " -"a single thread." +"As an example, a connection to the SQLite library must only be accessed from a single " +"thread." msgstr "" #: src/concurrency/send-sync/sync.md:1 @@ -16583,8 +16030,8 @@ msgstr "" #: src/concurrency/send-sync/sync.md:3 msgid "" -"A type `T` is [`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html) " -"if it is safe to access a `T` value from multiple threads at the same time." +"A type `T` is [`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html) if it is " +"safe to access a `T` value from multiple threads at the same time." msgstr "" #: src/concurrency/send-sync/sync.md:6 @@ -16597,18 +16044,16 @@ msgstr "" #: src/concurrency/send-sync/sync.md:14 msgid "" -"This statement is essentially a shorthand way of saying that if a type is " -"thread-safe for shared use, it is also thread-safe to pass references of it " -"across threads." +"This statement is essentially a shorthand way of saying that if a type is thread-safe " +"for shared use, it is also thread-safe to pass references of it across threads." msgstr "" #: src/concurrency/send-sync/sync.md:16 msgid "" -"This is because if a type is Sync it means that it can be shared across " -"multiple threads without the risk of data races or other synchronization " -"issues, so it is safe to move it to another thread. A reference to the type " -"is also safe to move to another thread, because the data it references can " -"be accessed from any thread safely." +"This is because if a type is Sync it means that it can be shared across multiple " +"threads without the risk of data races or other synchronization issues, so it is safe " +"to move it to another thread. A reference to the type is also safe to move to another " +"thread, because the data it references can be accessed from any thread safely." msgstr "" #: src/concurrency/send-sync/examples.md:3 @@ -16645,8 +16090,8 @@ msgstr "" #: src/concurrency/send-sync/examples.md:14 msgid "" -"The generic types are typically `Send + Sync` when the type parameters are " -"`Send + Sync`." +"The generic types are typically `Send + Sync` when the type parameters are `Send + " +"Sync`." msgstr "" #: src/concurrency/send-sync/examples.md:17 @@ -16655,8 +16100,8 @@ msgstr "" #: src/concurrency/send-sync/examples.md:19 msgid "" -"These types can be moved to other threads, but they're not thread-safe. " -"Typically because of interior mutability:" +"These types can be moved to other threads, but they're not thread-safe. Typically " +"because of interior mutability:" msgstr "" #: src/concurrency/send-sync/examples.md:22 @@ -16680,14 +16125,13 @@ msgid "`!Send + Sync`" msgstr "" #: src/concurrency/send-sync/examples.md:29 -msgid "" -"These types are thread-safe, but they cannot be moved to another thread:" +msgid "These types are thread-safe, but they cannot be moved to another thread:" msgstr "" #: src/concurrency/send-sync/examples.md:31 msgid "" -"`MutexGuard`: Uses OS level primitives which must be deallocated on the " -"thread which created them." +"`MutexGuard`: Uses OS level primitives which must be deallocated on the thread which " +"created them." msgstr "" #: src/concurrency/send-sync/examples.md:34 @@ -16700,8 +16144,8 @@ msgstr "" #: src/concurrency/send-sync/examples.md:38 msgid "" -"`Rc`: each `Rc` has a reference to an `RcBox`, which contains a non-" -"atomic reference count." +"`Rc`: each `Rc` has a reference to an `RcBox`, which contains a non-atomic " +"reference count." msgstr "" #: src/concurrency/send-sync/examples.md:40 @@ -16712,21 +16156,21 @@ msgstr "" #: src/concurrency/shared_state.md:3 msgid "" -"Rust uses the type system to enforce synchronization of shared data. This is " -"primarily done via two types:" +"Rust uses the type system to enforce synchronization of shared data. This is primarily " +"done via two types:" msgstr "" #: src/concurrency/shared_state.md:6 msgid "" -"[`Arc`](https://doc.rust-lang.org/std/sync/struct.Arc.html), atomic " -"reference counted `T`: handles sharing between threads and takes care to " -"deallocate `T` when the last reference is dropped," +"[`Arc`](https://doc.rust-lang.org/std/sync/struct.Arc.html), atomic reference " +"counted `T`: handles sharing between threads and takes care to deallocate `T` when the " +"last reference is dropped," msgstr "" #: src/concurrency/shared_state.md:8 msgid "" -"[`Mutex`](https://doc.rust-lang.org/std/sync/struct.Mutex.html): ensures " -"mutually exclusive access to the `T` value." +"[`Mutex`](https://doc.rust-lang.org/std/sync/struct.Mutex.html): ensures mutually " +"exclusive access to the `T` value." msgstr "" #: src/concurrency/shared_state/arc.md:1 @@ -16735,8 +16179,8 @@ msgstr "" #: src/concurrency/shared_state/arc.md:3 msgid "" -"[`Arc`](https://doc.rust-lang.org/std/sync/struct.Arc.html) allows shared " -"read-only access via `Arc::clone`:" +"[`Arc`](https://doc.rust-lang.org/std/sync/struct.Arc.html) allows shared read-only " +"access via `Arc::clone`:" msgstr "" #: src/concurrency/shared_state/arc.md:5 @@ -16764,26 +16208,24 @@ msgstr "" #: src/concurrency/shared_state/arc.md:29 msgid "" -"`Arc` stands for \"Atomic Reference Counted\", a thread safe version of `Rc` " -"that uses atomic operations." +"`Arc` stands for \"Atomic Reference Counted\", a thread safe version of `Rc` that uses " +"atomic operations." msgstr "" #: src/concurrency/shared_state/arc.md:31 msgid "" -"`Arc` implements `Clone` whether or not `T` does. It implements `Send` " -"and `Sync` if and only if `T` implements them both." +"`Arc` implements `Clone` whether or not `T` does. It implements `Send` and `Sync` if " +"and only if `T` implements them both." msgstr "" #: src/concurrency/shared_state/arc.md:33 msgid "" -"`Arc::clone()` has the cost of atomic operations that get executed, but " -"after that the use of the `T` is free." +"`Arc::clone()` has the cost of atomic operations that get executed, but after that the " +"use of the `T` is free." msgstr "" #: src/concurrency/shared_state/arc.md:35 -msgid "" -"Beware of reference cycles, `Arc` does not use a garbage collector to detect " -"them." +msgid "Beware of reference cycles, `Arc` does not use a garbage collector to detect them." msgstr "" #: src/concurrency/shared_state/arc.md:36 @@ -16796,9 +16238,8 @@ msgstr "" #: src/concurrency/shared_state/mutex.md:3 msgid "" -"[`Mutex`](https://doc.rust-lang.org/std/sync/struct.Mutex.html) ensures " -"mutual exclusion _and_ allows mutable access to `T` behind a read-only " -"interface:" +"[`Mutex`](https://doc.rust-lang.org/std/sync/struct.Mutex.html) ensures mutual " +"exclusion _and_ allows mutable access to `T` behind a read-only interface:" msgstr "" #: src/concurrency/shared_state/mutex.md:6 @@ -16822,33 +16263,29 @@ msgstr "" #: src/concurrency/shared_state/mutex.md:22 msgid "" -"Notice how we have a [`impl Sync for Mutex`](https://doc.rust-" -"lang.org/std/sync/struct.Mutex.html#impl-Sync-for-Mutex%3CT%3E) blanket " -"implementation." +"Notice how we have a [`impl Sync for Mutex`](https://doc.rust-lang.org/std/" +"sync/struct.Mutex.html#impl-Sync-for-Mutex%3CT%3E) blanket implementation." msgstr "" #: src/concurrency/shared_state/mutex.md:31 msgid "" -"`Mutex` in Rust looks like a collection with just one element - the " -"protected data." +"`Mutex` in Rust looks like a collection with just one element - the protected data." msgstr "" #: src/concurrency/shared_state/mutex.md:32 msgid "" -"It is not possible to forget to acquire the mutex before accessing the " -"protected data." +"It is not possible to forget to acquire the mutex before accessing the protected data." msgstr "" #: src/concurrency/shared_state/mutex.md:33 msgid "" -"You can get an `&mut T` from an `&Mutex` by taking the lock. The " -"`MutexGuard` ensures that the `&mut T` doesn't outlive the lock being held." +"You can get an `&mut T` from an `&Mutex` by taking the lock. The `MutexGuard` " +"ensures that the `&mut T` doesn't outlive the lock being held." msgstr "" #: src/concurrency/shared_state/mutex.md:35 msgid "" -"`Mutex` implements both `Send` and `Sync` iff (if and only if) `T` " -"implements `Send`." +"`Mutex` implements both `Send` and `Sync` iff (if and only if) `T` implements `Send`." msgstr "" #: src/concurrency/shared_state/mutex.md:36 @@ -16861,11 +16298,11 @@ msgstr "" #: src/concurrency/shared_state/mutex.md:38 msgid "" -"If the thread that held the `Mutex` panicked, the `Mutex` becomes " -"\"poisoned\" to signal that the data it protected might be in an " -"inconsistent state. Calling `lock()` on a poisoned mutex fails with a " -"[`PoisonError`](https://doc.rust-lang.org/std/sync/struct.PoisonError.html). " -"You can call `into_inner()` on the error to recover the data regardless." +"If the thread that held the `Mutex` panicked, the `Mutex` becomes \"poisoned\" to " +"signal that the data it protected might be in an inconsistent state. Calling `lock()` " +"on a poisoned mutex fails with a [`PoisonError`](https://doc.rust-lang.org/std/sync/" +"struct.PoisonError.html). You can call `into_inner()` on the error to recover the data " +"regardless." msgstr "" #: src/concurrency/shared_state/example.md:3 @@ -16927,27 +16364,23 @@ msgid "Notable parts:" msgstr "" #: src/concurrency/shared_state/example.md:51 -msgid "" -"`v` is wrapped in both `Arc` and `Mutex`, because their concerns are " -"orthogonal." +msgid "`v` is wrapped in both `Arc` and `Mutex`, because their concerns are orthogonal." msgstr "" #: src/concurrency/shared_state/example.md:52 msgid "" -"Wrapping a `Mutex` in an `Arc` is a common pattern to share mutable state " -"between threads." +"Wrapping a `Mutex` in an `Arc` is a common pattern to share mutable state between " +"threads." msgstr "" #: src/concurrency/shared_state/example.md:53 msgid "" -"`v: Arc<_>` needs to be cloned as `v2` before it can be moved into another " -"thread. Note `move` was added to the lambda signature." +"`v: Arc<_>` needs to be cloned as `v2` before it can be moved into another thread. Note " +"`move` was added to the lambda signature." msgstr "" #: src/concurrency/shared_state/example.md:54 -msgid "" -"Blocks are introduced to narrow the scope of the `LockGuard` as much as " -"possible." +msgid "Blocks are introduced to narrow the scope of the `LockGuard` as much as possible." msgstr "" #: src/exercises/concurrency/morning.md:3 @@ -16960,8 +16393,8 @@ msgstr "" #: src/exercises/concurrency/morning.md:7 msgid "" -"Multi-threaded link checker: a larger project where you'll use Cargo to " -"download dependencies and then check links in parallel." +"Multi-threaded link checker: a larger project where you'll use Cargo to download " +"dependencies and then check links in parallel." msgstr "" #: src/exercises/concurrency/dining-philosophers.md:3 @@ -16970,21 +16403,20 @@ msgstr "" #: src/exercises/concurrency/dining-philosophers.md:5 msgid "" -"Five philosophers dine together at the same table. Each philosopher has " -"their own place at the table. There is a fork between each plate. The dish " -"served is a kind of spaghetti which has to be eaten with two forks. Each " -"philosopher can only alternately think and eat. Moreover, a philosopher can " -"only eat their spaghetti when they have both a left and right fork. Thus two " -"forks will only be available when their two nearest neighbors are thinking, " -"not eating. After an individual philosopher finishes eating, they will put " -"down both forks." +"Five philosophers dine together at the same table. Each philosopher has their own place " +"at the table. There is a fork between each plate. The dish served is a kind of " +"spaghetti which has to be eaten with two forks. Each philosopher can only alternately " +"think and eat. Moreover, a philosopher can only eat their spaghetti when they have both " +"a left and right fork. Thus two forks will only be available when their two nearest " +"neighbors are thinking, not eating. After an individual philosopher finishes eating, " +"they will put down both forks." msgstr "" #: src/exercises/concurrency/dining-philosophers.md:13 msgid "" -"You will need a local [Cargo installation](../../cargo/running-locally.md) " -"for this exercise. Copy the code below to a file called `src/main.rs`, fill " -"out the blanks, and test that `cargo run` does not deadlock:" +"You will need a local [Cargo installation](../../cargo/running-locally.md) for this " +"exercise. Copy the code below to a file called `src/main.rs`, fill out the blanks, and " +"test that `cargo run` does not deadlock:" msgstr "" #: src/exercises/concurrency/dining-philosophers.md:19 @@ -17048,16 +16480,15 @@ msgstr "" #: src/exercises/concurrency/link-checker.md:3 msgid "" -"Let us use our new knowledge to create a multi-threaded link checker. It " -"should start at a webpage and check that links on the page are valid. It " -"should recursively check other pages on the same domain and keep doing this " -"until all pages have been validated." +"Let us use our new knowledge to create a multi-threaded link checker. It should start " +"at a webpage and check that links on the page are valid. It should recursively check " +"other pages on the same domain and keep doing this until all pages have been validated." msgstr "" #: src/exercises/concurrency/link-checker.md:8 msgid "" -"For this, you will need an HTTP client such as [`reqwest`](https://docs.rs/" -"reqwest/). Create a new Cargo project and `reqwest` it as a dependency with:" +"For this, you will need an HTTP client such as [`reqwest`](https://docs.rs/reqwest/). " +"Create a new Cargo project and `reqwest` it as a dependency with:" msgstr "" #: src/exercises/concurrency/link-checker.md:11 @@ -17078,14 +16509,14 @@ msgstr "" #: src/exercises/concurrency/link-checker.md:17 msgid "" -"If `cargo add` fails with `error: no such subcommand`, then please edit the " -"`Cargo.toml` file by hand. Add the dependencies listed below." +"If `cargo add` fails with `error: no such subcommand`, then please edit the `Cargo." +"toml` file by hand. Add the dependencies listed below." msgstr "" #: src/exercises/concurrency/link-checker.md:20 msgid "" -"You will also need a way to find links. We can use [`scraper`](https://docs." -"rs/scraper/) for that:" +"You will also need a way to find links. We can use [`scraper`](https://docs.rs/" +"scraper/) for that:" msgstr "" #: src/exercises/concurrency/link-checker.md:22 @@ -17097,8 +16528,8 @@ msgstr "" #: src/exercises/concurrency/link-checker.md:26 msgid "" -"Finally, we'll need some way of handling errors. We use [`thiserror`]" -"(https://docs.rs/thiserror/) for that:" +"Finally, we'll need some way of handling errors. We use [`thiserror`](https://docs.rs/" +"thiserror/) for that:" msgstr "" #: src/exercises/concurrency/link-checker.md:29 @@ -17109,8 +16540,7 @@ msgid "" msgstr "" #: src/exercises/concurrency/link-checker.md:33 -msgid "" -"The `cargo add` calls will update the `Cargo.toml` file to look like this:" +msgid "The `cargo add` calls will update the `Cargo.toml` file to look like this:" msgstr "" #: src/exercises/concurrency/link-checker.md:37 @@ -17123,8 +16553,7 @@ msgid "" "publish = false\n" "\n" "[dependencies]\n" -"reqwest = { version = \"0.11.12\", features = [\"blocking\", \"rustls-" -"tls\"] }\n" +"reqwest = { version = \"0.11.12\", features = [\"blocking\", \"rustls-tls\"] }\n" "scraper = \"0.13.0\"\n" "thiserror = \"1.0.37\"\n" "```" @@ -17132,8 +16561,8 @@ msgstr "" #: src/exercises/concurrency/link-checker.md:50 msgid "" -"You can now download the start page. Try with a small site such as `https://" -"www.google.org/`." +"You can now download the start page. Try with a small site such as `https://www.google." +"org/`." msgstr "" #: src/exercises/concurrency/link-checker.md:53 @@ -17161,8 +16590,7 @@ msgid "" " extract_links: bool,\n" "}\n" "\n" -"fn visit_page(client: &Client, command: &CrawlCommand) -> Result, " -"Error> {\n" +"fn visit_page(client: &Client, command: &CrawlCommand) -> Result, Error> {\n" " println!(\"Checking {:#}\", command.url);\n" " let response = client.get(command.url.clone()).send()?;\n" " if !response.status().is_success() {\n" @@ -17188,8 +16616,7 @@ msgid "" " link_urls.push(link_url);\n" " }\n" " Err(err) => {\n" -" println!(\"On {base_url:#}: ignored unparsable {href:?}: " -"{err}\");\n" +" println!(\"On {base_url:#}: ignored unparsable {href:?}: {err}\");\n" " }\n" " }\n" " }\n" @@ -17199,8 +16626,7 @@ msgid "" "fn main() {\n" " let client = Client::new();\n" " let start_url = Url::parse(\"https://www.google.org\").unwrap();\n" -" let crawl_command = CrawlCommand{ url: start_url, extract_links: " -"true };\n" +" let crawl_command = CrawlCommand{ url: start_url, extract_links: true };\n" " match visit_page(&client, &crawl_command) {\n" " Ok(links) => println!(\"Links: {links:#?}\"),\n" " Err(err) => println!(\"Could not extract links: {err:#}\"),\n" @@ -17222,15 +16648,15 @@ msgstr "" #: src/exercises/concurrency/link-checker.md:128 msgid "" -"Use threads to check the links in parallel: send the URLs to be checked to a " -"channel and let a few threads check the URLs in parallel." +"Use threads to check the links in parallel: send the URLs to be checked to a channel " +"and let a few threads check the URLs in parallel." msgstr "" #: src/exercises/concurrency/link-checker.md:130 msgid "" -"Extend this to recursively extract links from all pages on the `www.google." -"org` domain. Put an upper limit of 100 pages or so so that you don't end up " -"being blocked by the site." +"Extend this to recursively extract links from all pages on the `www.google.org` domain. " +"Put an upper limit of 100 pages or so so that you don't end up being blocked by the " +"site." msgstr "" #: src/async.md:1 @@ -17239,25 +16665,23 @@ msgstr "" #: src/async.md:3 msgid "" -"\"Async\" is a concurrency model where multiple tasks are executed " -"concurrently by executing each task until it would block, then switching to " -"another task that is ready to make progress. The model allows running a " -"larger number of tasks on a limited number of threads. This is because the " -"per-task overhead is typically very low and operating systems provide " -"primitives for efficiently identifying I/O that is able to proceed." +"\"Async\" is a concurrency model where multiple tasks are executed concurrently by " +"executing each task until it would block, then switching to another task that is ready " +"to make progress. The model allows running a larger number of tasks on a limited number " +"of threads. This is because the per-task overhead is typically very low and operating " +"systems provide primitives for efficiently identifying I/O that is able to proceed." msgstr "" #: src/async.md:10 msgid "" -"Rust's asynchronous operation is based on \"futures\", which represent work " -"that may be completed in the future. Futures are \"polled\" until they " -"signal that they are complete." +"Rust's asynchronous operation is based on \"futures\", which represent work that may be " +"completed in the future. Futures are \"polled\" until they signal that they are " +"complete." msgstr "" #: src/async.md:14 msgid "" -"Futures are polled by an async runtime, and several different runtimes are " -"available." +"Futures are polled by an async runtime, and several different runtimes are available." msgstr "" #: src/async.md:17 @@ -17266,16 +16690,15 @@ msgstr "āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¸āĻŽā§‚āĻš" #: src/async.md:19 msgid "" -"Python has a similar model in its `asyncio`. However, its `Future` type is " -"callback-based, and not polled. Async Python programs require a \"loop\", " -"similar to a runtime in Rust." +"Python has a similar model in its `asyncio`. However, its `Future` type is callback-" +"based, and not polled. Async Python programs require a \"loop\", similar to a runtime " +"in Rust." msgstr "" #: src/async.md:23 msgid "" -"JavaScript's `Promise` is similar, but again callback-based. The language " -"runtime implements the event loop, so many of the details of Promise " -"resolution are hidden." +"JavaScript's `Promise` is similar, but again callback-based. The language runtime " +"implements the event loop, so many of the details of Promise resolution are hidden." msgstr "" #: src/async/async-await.md:1 @@ -17283,9 +16706,7 @@ msgid "`async`/`await`" msgstr "" #: src/async/async-await.md:3 -msgid "" -"At a high level, async Rust code looks very much like \"normal\" sequential " -"code:" +msgid "At a high level, async Rust code looks very much like \"normal\" sequential code:" msgstr "" #: src/async/async-await.md:5 @@ -17311,8 +16732,8 @@ msgstr "" #: src/async/async-await.md:27 msgid "" -"Note that this is a simplified example to show the syntax. There is no long " -"running operation or any real concurrency in it!" +"Note that this is a simplified example to show the syntax. There is no long running " +"operation or any real concurrency in it!" msgstr "" #: src/async/async-await.md:30 @@ -17325,40 +16746,40 @@ msgstr "" #: src/async/async-await.md:33 msgid "" -"The \"async\" keyword is syntactic sugar. The compiler replaces the return " -"type with a future. " +"The \"async\" keyword is syntactic sugar. The compiler replaces the return type with a " +"future. " msgstr "" #: src/async/async-await.md:36 msgid "" -"You cannot make `main` async, without additional instructions to the " -"compiler on how to use the returned future." +"You cannot make `main` async, without additional instructions to the compiler on how to " +"use the returned future." msgstr "" #: src/async/async-await.md:39 msgid "" -"You need an executor to run async code. `block_on` blocks the current thread " -"until the provided future has run to completion. " +"You need an executor to run async code. `block_on` blocks the current thread until the " +"provided future has run to completion. " msgstr "" #: src/async/async-await.md:42 msgid "" -"`.await` asynchronously waits for the completion of another operation. " -"Unlike `block_on`, `.await` doesn't block the current thread." +"`.await` asynchronously waits for the completion of another operation. Unlike " +"`block_on`, `.await` doesn't block the current thread." msgstr "" #: src/async/async-await.md:45 msgid "" -"`.await` can only be used inside an `async` function (or block; these are " -"introduced later). " +"`.await` can only be used inside an `async` function (or block; these are introduced " +"later). " msgstr "" #: src/async/futures.md:3 msgid "" -"[`Future`](https://doc.rust-lang.org/std/future/trait.Future.html) is a " -"trait, implemented by objects that represent an operation that may not be " -"complete yet. A future can be polled, and `poll` returns a [`Poll`](https://" -"doc.rust-lang.org/std/task/enum.Poll.html)." +"[`Future`](https://doc.rust-lang.org/std/future/trait.Future.html) is a trait, " +"implemented by objects that represent an operation that may not be complete yet. A " +"future can be polled, and `poll` returns a [`Poll`](https://doc.rust-lang.org/std/task/" +"enum.Poll.html)." msgstr "" #: src/async/futures.md:8 @@ -17369,8 +16790,7 @@ msgid "" "\n" "pub trait Future {\n" " type Output;\n" -" fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll;\n" +" fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll;\n" "}\n" "\n" "pub enum Poll {\n" @@ -17382,61 +16802,58 @@ msgstr "" #: src/async/futures.md:23 msgid "" -"An async function returns an `impl Future`. It's also possible (but " -"uncommon) to implement `Future` for your own types. For example, the " -"`JoinHandle` returned from `tokio::spawn` implements `Future` to allow " -"joining to it." +"An async function returns an `impl Future`. It's also possible (but uncommon) to " +"implement `Future` for your own types. For example, the `JoinHandle` returned from " +"`tokio::spawn` implements `Future` to allow joining to it." msgstr "" #: src/async/futures.md:27 msgid "" -"The `.await` keyword, applied to a Future, causes the current async function " -"to pause until that Future is ready, and then evaluates to its output." +"The `.await` keyword, applied to a Future, causes the current async function to pause " +"until that Future is ready, and then evaluates to its output." msgstr "" #: src/async/futures.md:32 msgid "" -"The `Future` and `Poll` types are implemented exactly as shown; click the " -"links to show the implementations in the docs." +"The `Future` and `Poll` types are implemented exactly as shown; click the links to show " +"the implementations in the docs." msgstr "" #: src/async/futures.md:35 msgid "" -"We will not get to `Pin` and `Context`, as we will focus on writing async " -"code, rather than building new async primitives. Briefly:" +"We will not get to `Pin` and `Context`, as we will focus on writing async code, rather " +"than building new async primitives. Briefly:" msgstr "" #: src/async/futures.md:38 msgid "" -"`Context` allows a Future to schedule itself to be polled again when an " -"event occurs." +"`Context` allows a Future to schedule itself to be polled again when an event occurs." msgstr "" #: src/async/futures.md:41 msgid "" -"`Pin` ensures that the Future isn't moved in memory, so that pointers into " -"that future remain valid. This is required to allow references to remain " -"valid after an `.await`." +"`Pin` ensures that the Future isn't moved in memory, so that pointers into that future " +"remain valid. This is required to allow references to remain valid after an `.await`." msgstr "" #: src/async/runtimes.md:3 msgid "" -"A _runtime_ provides support for performing operations asynchronously (a " -"_reactor_) and is responsible for executing futures (an _executor_). Rust " -"does not have a \"built-in\" runtime, but several options are available:" +"A _runtime_ provides support for performing operations asynchronously (a _reactor_) and " +"is responsible for executing futures (an _executor_). Rust does not have a \"built-in\" " +"runtime, but several options are available:" msgstr "" #: src/async/runtimes.md:7 msgid "" "[Tokio](https://tokio.rs/): performant, with a well-developed ecosystem of " -"functionality like [Hyper](https://hyper.rs/) for HTTP or [Tonic](https://" -"github.com/hyperium/tonic) for gRPC." +"functionality like [Hyper](https://hyper.rs/) for HTTP or [Tonic](https://github.com/" +"hyperium/tonic) for gRPC." msgstr "" #: src/async/runtimes.md:10 msgid "" -"[async-std](https://async.rs/): aims to be a \"std for async\", and includes " -"a basic runtime in `async::task`." +"[async-std](https://async.rs/): aims to be a \"std for async\", and includes a basic " +"runtime in `async::task`." msgstr "" #: src/async/runtimes.md:12 @@ -17445,24 +16862,23 @@ msgstr "" #: src/async/runtimes.md:14 msgid "" -"Several larger applications have their own runtimes. For example, [Fuchsia]" -"(https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/src/lib/fuchsia-" -"async/src/lib.rs) already has one." +"Several larger applications have their own runtimes. For example, [Fuchsia](https://" +"fuchsia.googlesource.com/fuchsia/+/refs/heads/main/src/lib/fuchsia-async/src/lib.rs) " +"already has one." msgstr "" #: src/async/runtimes.md:20 msgid "" -"Note that of the listed runtimes, only Tokio is supported in the Rust " -"playground. The playground also does not permit any I/O, so most interesting " -"async things can't run in the playground." +"Note that of the listed runtimes, only Tokio is supported in the Rust playground. The " +"playground also does not permit any I/O, so most interesting async things can't run in " +"the playground." msgstr "" #: src/async/runtimes.md:24 msgid "" -"Futures are \"inert\" in that they do not do anything (not even start an I/O " -"operation) unless there is an executor polling them. This differs from JS " -"Promises, for example, which will run to completion even if they are never " -"used." +"Futures are \"inert\" in that they do not do anything (not even start an I/O operation) " +"unless there is an executor polling them. This differs from JS Promises, for example, " +"which will run to completion even if they are never used." msgstr "" #: src/async/runtimes/tokio.md:4 @@ -17523,9 +16939,8 @@ msgstr "" #: src/async/runtimes/tokio.md:41 msgid "" -"Why does `count_to` not (usually) get to 10? This is an example of async " -"cancellation. `tokio::spawn` returns a handle which can be awaited to wait " -"until it finishes." +"Why does `count_to` not (usually) get to 10? This is an example of async cancellation. " +"`tokio::spawn` returns a handle which can be awaited to wait until it finishes." msgstr "" #: src/async/runtimes/tokio.md:45 @@ -17542,11 +16957,10 @@ msgstr "" #: src/async/tasks.md:5 msgid "" -"A task has a single top-level future which the executor polls to make " -"progress. That future may have one or more nested futures that its `poll` " -"method polls, corresponding loosely to a call stack. Concurrency within a " -"task is possible by polling multiple child futures, such as racing a timer " -"and an I/O operation." +"A task has a single top-level future which the executor polls to make progress. That " +"future may have one or more nested futures that its `poll` method polls, corresponding " +"loosely to a call stack. Concurrency within a task is possible by polling multiple " +"child futures, such as racing a timer and an I/O operation." msgstr "" #: src/async/tasks.md:10 @@ -17574,8 +16988,7 @@ msgid "" " let mut buf = vec![0; 1024];\n" " let reply = match socket.read(&mut buf).await {\n" " Ok(n) => {\n" -" let name = std::str::from_utf8(&buf[..n]).unwrap()." -"trim();\n" +" let name = std::str::from_utf8(&buf[..n]).unwrap().trim();\n" " format!(\"Thanks for dialing in, {name}!\\n\")\n" " }\n" " Err(e) => {\n" @@ -17594,32 +17007,28 @@ msgid "" msgstr "" #: src/async/tasks.md:52 src/async/control-flow/join.md:36 -msgid "" -"Copy this example into your prepared `src/main.rs` and run it from there." +msgid "Copy this example into your prepared `src/main.rs` and run it from there." msgstr "" #: src/async/tasks.md:54 msgid "" -"Ask students to visualize what the state of the example server would be with " -"a few connected clients. What tasks exist? What are their Futures?" +"Ask students to visualize what the state of the example server would be with a few " +"connected clients. What tasks exist? What are their Futures?" msgstr "" #: src/async/tasks.md:57 msgid "" -"This is the first time we've seen an `async` block. This is similar to a " -"closure, but does not take any arguments. Its return value is a Future, " -"similar to an `async fn`. " +"This is the first time we've seen an `async` block. This is similar to a closure, but " +"does not take any arguments. Its return value is a Future, similar to an `async fn`. " msgstr "" #: src/async/tasks.md:61 msgid "" -"Refactor the async block into a function, and improve the error handling " -"using `?`." +"Refactor the async block into a function, and improve the error handling using `?`." msgstr "" #: src/async/channels.md:3 -msgid "" -"Several crates have support for asynchronous channels. For instance `tokio`:" +msgid "Several crates have support for asynchronous channels. For instance `tokio`:" msgstr "" #: src/async/channels.md:5 @@ -17648,8 +17057,7 @@ msgid "" " }\n" "\n" " drop(sender);\n" -" ping_handler_task.await.expect(\"Something went wrong in ping handler " -"task.\");\n" +" ping_handler_task.await.expect(\"Something went wrong in ping handler task.\");\n" "}\n" "```" msgstr "" @@ -17660,8 +17068,8 @@ msgstr "" #: src/async/channels.md:37 msgid "" -"Overall, the interface is similar to the `sync` channels as seen in the " -"[morning class](concurrency/channels.md)." +"Overall, the interface is similar to the `sync` channels as seen in the [morning class]" +"(concurrency/channels.md)." msgstr "" #: src/async/channels.md:40 @@ -17670,16 +17078,15 @@ msgstr "" #: src/async/channels.md:42 msgid "" -"The [Flume](https://docs.rs/flume/latest/flume/) crate has channels that " -"implement both `sync` and `async` `send` and `recv`. This can be convenient " -"for complex applications with both IO and heavy CPU processing tasks." +"The [Flume](https://docs.rs/flume/latest/flume/) crate has channels that implement both " +"`sync` and `async` `send` and `recv`. This can be convenient for complex applications " +"with both IO and heavy CPU processing tasks." msgstr "" #: src/async/channels.md:46 msgid "" -"What makes working with `async` channels preferable is the ability to " -"combine them with other `future`s to combine them and create complex control " -"flow." +"What makes working with `async` channels preferable is the ability to combine them with " +"other `future`s to combine them and create complex control flow." msgstr "" #: src/async/control-flow.md:1 @@ -17688,9 +17095,8 @@ msgstr "" #: src/async/control-flow.md:3 msgid "" -"Futures can be combined together to produce concurrent compute flow graphs. " -"We have already seen tasks, that function as independent threads of " -"execution." +"Futures can be combined together to produce concurrent compute flow graphs. We have " +"already seen tasks, that function as independent threads of execution." msgstr "" #: src/async/control-flow.md:6 @@ -17703,9 +17109,9 @@ msgstr "" #: src/async/control-flow/join.md:3 msgid "" -"A join operation waits until all of a set of futures are ready, and returns " -"a collection of their results. This is similar to `Promise.all` in " -"JavaScript or `asyncio.gather` in Python." +"A join operation waits until all of a set of futures are ready, and returns a " +"collection of their results. This is similar to `Promise.all` in JavaScript or `asyncio." +"gather` in Python." msgstr "" #: src/async/control-flow/join.md:7 @@ -17740,40 +17146,37 @@ msgstr "" #: src/async/control-flow/join.md:38 msgid "" -"For multiple futures of disjoint types, you can use `std::future::join!` but " -"you must know how many futures you will have at compile time. This is " -"currently in the `futures` crate, soon to be stabilised in `std::future`." +"For multiple futures of disjoint types, you can use `std::future::join!` but you must " +"know how many futures you will have at compile time. This is currently in the `futures` " +"crate, soon to be stabilised in `std::future`." msgstr "" #: src/async/control-flow/join.md:42 msgid "" -"The risk of `join` is that one of the futures may never resolve, this would " -"cause your program to stall. " +"The risk of `join` is that one of the futures may never resolve, this would cause your " +"program to stall. " msgstr "" #: src/async/control-flow/join.md:45 msgid "" -"You can also combine `join_all` with `join!` for instance to join all " -"requests to an http service as well as a database query. Try adding a " -"`tokio::time::sleep` to the future, using `futures::join!`. This is not a " -"timeout (that requires `select!`, explained in the next chapter), but " -"demonstrates `join!`." +"You can also combine `join_all` with `join!` for instance to join all requests to an " +"http service as well as a database query. Try adding a `tokio::time::sleep` to the " +"future, using `futures::join!`. This is not a timeout (that requires `select!`, " +"explained in the next chapter), but demonstrates `join!`." msgstr "" #: src/async/control-flow/select.md:3 msgid "" -"A select operation waits until any of a set of futures is ready, and " -"responds to that future's result. In JavaScript, this is similar to `Promise." -"race`. In Python, it compares to `asyncio.wait(task_set, return_when=asyncio." -"FIRST_COMPLETED)`." +"A select operation waits until any of a set of futures is ready, and responds to that " +"future's result. In JavaScript, this is similar to `Promise.race`. In Python, it " +"compares to `asyncio.wait(task_set, return_when=asyncio.FIRST_COMPLETED)`." msgstr "" #: src/async/control-flow/select.md:8 msgid "" -"Similar to a match statement, the body of `select!` has a number of arms, " -"each of the form `pattern = future => statement`. When the `future` is " -"ready, the `statement` is executed with the variables in `pattern` bound to " -"the `future`'s result." +"Similar to a match statement, the body of `select!` has a number of arms, each of the " +"form `pattern = future => statement`. When the `future` is ready, the `statement` is " +"executed with the variables in `pattern` bound to the `future`'s result." msgstr "" #: src/async/control-flow/select.md:13 @@ -17828,34 +17231,32 @@ msgstr "" #: src/async/control-flow/select.md:62 msgid "" -"In this example, we have a race between a cat and a dog. " -"`first_animal_to_finish_race` listens to both channels and will pick " -"whichever arrives first. Since the dog takes 50ms, it wins against the cat " -"that take 500ms seconds." +"In this example, we have a race between a cat and a dog. `first_animal_to_finish_race` " +"listens to both channels and will pick whichever arrives first. Since the dog takes " +"50ms, it wins against the cat that take 500ms seconds." msgstr "" #: src/async/control-flow/select.md:67 msgid "" -"You can use `oneshot` channels in this example as the channels are supposed " -"to receive only one `send`." +"You can use `oneshot` channels in this example as the channels are supposed to receive " +"only one `send`." msgstr "" #: src/async/control-flow/select.md:70 msgid "" -"Try adding a deadline to the race, demonstrating selecting different sorts " -"of futures." +"Try adding a deadline to the race, demonstrating selecting different sorts of futures." msgstr "" #: src/async/control-flow/select.md:73 msgid "" -"Note that `select!` drops unmatched branches, which cancels their futures. " -"It is easiest to use when every execution of `select!` creates new futures." +"Note that `select!` drops unmatched branches, which cancels their futures. It is " +"easiest to use when every execution of `select!` creates new futures." msgstr "" #: src/async/control-flow/select.md:76 msgid "" -"An alternative is to pass `&mut future` instead of the future itself, but " -"this can lead to issues, further discussed in the pinning slide." +"An alternative is to pass `&mut future` instead of the future itself, but this can lead " +"to issues, further discussed in the pinning slide." msgstr "" #: src/async/pitfalls.md:1 @@ -17864,10 +17265,9 @@ msgstr "" #: src/async/pitfalls.md:3 msgid "" -"Async / await provides convenient and efficient abstraction for concurrent " -"asynchronous programming. However, the async/await model in Rust also comes " -"with its share of pitfalls and footguns. We illustrate some of them in this " -"chapter:" +"Async / await provides convenient and efficient abstraction for concurrent asynchronous " +"programming. However, the async/await model in Rust also comes with its share of " +"pitfalls and footguns. We illustrate some of them in this chapter:" msgstr "" #: src/async/pitfalls.md:5 @@ -17892,10 +17292,9 @@ msgstr "" #: src/async/pitfalls/blocking-executor.md:3 msgid "" -"Most async runtimes only allow IO tasks to run concurrently. This means that " -"CPU blocking tasks will block the executor and prevent other tasks from " -"being executed. An easy workaround is to use async equivalent methods where " -"possible." +"Most async runtimes only allow IO tasks to run concurrently. This means that CPU " +"blocking tasks will block the executor and prevent other tasks from being executed. An " +"easy workaround is to use async equivalent methods where possible." msgstr "" #: src/async/pitfalls/blocking-executor.md:7 @@ -17923,57 +17322,53 @@ msgstr "" #: src/async/pitfalls/blocking-executor.md:29 msgid "" -"Run the code and see that the sleeps happen consecutively rather than " -"concurrently." +"Run the code and see that the sleeps happen consecutively rather than concurrently." msgstr "" #: src/async/pitfalls/blocking-executor.md:32 msgid "" -"The `\"current_thread\"` flavor puts all tasks on a single thread. This " -"makes the effect more obvious, but the bug is still present in the multi-" -"threaded flavor." +"The `\"current_thread\"` flavor puts all tasks on a single thread. This makes the " +"effect more obvious, but the bug is still present in the multi-threaded flavor." msgstr "" #: src/async/pitfalls/blocking-executor.md:36 -msgid "" -"Switch the `std::thread::sleep` to `tokio::time::sleep` and await its result." +msgid "Switch the `std::thread::sleep` to `tokio::time::sleep` and await its result." msgstr "" #: src/async/pitfalls/blocking-executor.md:38 msgid "" -"Another fix would be to `tokio::task::spawn_blocking` which spawns an actual " -"thread and transforms its handle into a future without blocking the executor." +"Another fix would be to `tokio::task::spawn_blocking` which spawns an actual thread and " +"transforms its handle into a future without blocking the executor." msgstr "" #: src/async/pitfalls/blocking-executor.md:41 msgid "" -"You should not think of tasks as OS threads. They do not map 1 to 1 and most " -"executors will allow many tasks to run on a single OS thread. This is " -"particularly problematic when interacting with other libraries via FFI, " -"where that library might depend on thread-local storage or map to specific " -"OS threads (e.g., CUDA). Prefer `tokio::task::spawn_blocking` in such " -"situations." +"You should not think of tasks as OS threads. They do not map 1 to 1 and most executors " +"will allow many tasks to run on a single OS thread. This is particularly problematic " +"when interacting with other libraries via FFI, where that library might depend on " +"thread-local storage or map to specific OS threads (e.g., CUDA). Prefer `tokio::task::" +"spawn_blocking` in such situations." msgstr "" #: src/async/pitfalls/blocking-executor.md:47 msgid "" -"Use sync mutexes with care. Holding a mutex over an `.await` may cause " -"another task to block, and that task may be running on the same thread." +"Use sync mutexes with care. Holding a mutex over an `.await` may cause another task to " +"block, and that task may be running on the same thread." msgstr "" #: src/async/pitfalls/pin.md:3 msgid "" -"When you await a future, all local variables (that would ordinarily be " -"stored on a stack frame) are instead stored in the Future for the current " -"async block. If your future has pointers to data on the stack, those " -"pointers might get invalidated. This is unsafe." +"When you await a future, all local variables (that would ordinarily be stored on a " +"stack frame) are instead stored in the Future for the current async block. If your " +"future has pointers to data on the stack, those pointers might get invalidated. This is " +"unsafe." msgstr "" #: src/async/pitfalls/pin.md:8 msgid "" -"Therefore, you must guarantee that the addresses your future points to don't " -"change. That is why we need to `pin` futures. Using the same future " -"repeatedly in a `select!` often leads to issues with pinned values." +"Therefore, you must guarantee that the addresses your future points to don't change. " +"That is why we need to `pin` futures. Using the same future repeatedly in a `select!` " +"often leads to issues with pinned values." msgstr "" #: src/async/pitfalls/pin.md:12 @@ -18035,25 +17430,23 @@ msgstr "" #: src/async/pitfalls/pin.md:68 msgid "" -"You may recognize this as an example of the actor pattern. Actors typically " -"call `select!` in a loop." +"You may recognize this as an example of the actor pattern. Actors typically call " +"`select!` in a loop." msgstr "" #: src/async/pitfalls/pin.md:71 msgid "" -"This serves as a summation of a few of the previous lessons, so take your " -"time with it." +"This serves as a summation of a few of the previous lessons, so take your time with it." msgstr "" #: src/async/pitfalls/pin.md:74 msgid "" -"Naively add a `_ = sleep(Duration::from_millis(100)) => { println!(..) }` to " -"the `select!`. This will never execute. Why?" +"Naively add a `_ = sleep(Duration::from_millis(100)) => { println!(..) }` to the " +"`select!`. This will never execute. Why?" msgstr "" #: src/async/pitfalls/pin.md:77 -msgid "" -"Instead, add a `timeout_fut` containing that future outside of the `loop`:" +msgid "Instead, add a `timeout_fut` containing that future outside of the `loop`:" msgstr "" #: src/async/pitfalls/pin.md:79 @@ -18071,9 +17464,8 @@ msgstr "" #: src/async/pitfalls/pin.md:88 msgid "" -"This still doesn't work. Follow the compiler errors, adding `&mut` to the " -"`timeout_fut` in the `select!` to work around the move, then using `Box::" -"pin`:" +"This still doesn't work. Follow the compiler errors, adding `&mut` to the `timeout_fut` " +"in the `select!` to work around the move, then using `Box::pin`:" msgstr "" #: src/async/pitfalls/pin.md:92 @@ -18091,36 +17483,34 @@ msgstr "" #: src/async/pitfalls/pin.md:102 msgid "" -"This compiles, but once the timeout expires it is `Poll::Ready` on every " -"iteration (a fused future would help with this). Update to reset " -"`timeout_fut` every time it expires." +"This compiles, but once the timeout expires it is `Poll::Ready` on every iteration (a " +"fused future would help with this). Update to reset `timeout_fut` every time it expires." msgstr "" #: src/async/pitfalls/pin.md:106 msgid "" -"Box allocates on the heap. In some cases, `std::pin::pin!` (only recently " -"stabilized, with older code often using `tokio::pin!`) is also an option, " -"but that is difficult to use for a future that is reassigned." +"Box allocates on the heap. In some cases, `std::pin::pin!` (only recently stabilized, " +"with older code often using `tokio::pin!`) is also an option, but that is difficult to " +"use for a future that is reassigned." msgstr "" #: src/async/pitfalls/pin.md:110 msgid "" -"Another alternative is to not use `pin` at all but spawn another task that " -"will send to a `oneshot` channel every 100ms." +"Another alternative is to not use `pin` at all but spawn another task that will send to " +"a `oneshot` channel every 100ms." msgstr "" #: src/async/pitfalls/async-traits.md:3 msgid "" -"Async methods in traits are not yet supported in the stable channel ([An " -"experimental feature exists in nightly and should be stabilized in the mid " -"term.](https://blog.rust-lang.org/inside-rust/2022/11/17/async-fn-in-trait-" -"nightly.html))" +"Async methods in traits are not yet supported in the stable channel ([An experimental " +"feature exists in nightly and should be stabilized in the mid term.](https://blog.rust-" +"lang.org/inside-rust/2022/11/17/async-fn-in-trait-nightly.html))" msgstr "" #: src/async/pitfalls/async-traits.md:5 msgid "" -"The crate [async_trait](https://docs.rs/async-trait/latest/async_trait/) " -"provides a workaround through a macro:" +"The crate [async_trait](https://docs.rs/async-trait/latest/async_trait/) provides a " +"workaround through a macro:" msgstr "" #: src/async/pitfalls/async-traits.md:7 @@ -18146,8 +17536,8 @@ msgid "" " }\n" "}\n" "\n" -"async fn run_all_sleepers_multiple_times(sleepers: Vec>, " -"n_times: usize) {\n" +"async fn run_all_sleepers_multiple_times(sleepers: Vec>, n_times: " +"usize) {\n" " for _ in 0..n_times {\n" " println!(\"running all sleepers..\");\n" " for sleeper in &sleepers {\n" @@ -18171,31 +17561,30 @@ msgstr "" #: src/async/pitfalls/async-traits.md:51 msgid "" -"`async_trait` is easy to use, but note that it's using heap allocations to " -"achieve this. This heap allocation has performance overhead." +"`async_trait` is easy to use, but note that it's using heap allocations to achieve " +"this. This heap allocation has performance overhead." msgstr "" #: src/async/pitfalls/async-traits.md:54 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 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." msgstr "" #: src/async/pitfalls/async-traits.md:60 msgid "" -"Try creating a new sleeper struct that will sleep for a random amount of " -"time and adding it to the Vec." +"Try creating a new sleeper struct that will sleep for a random amount of time and " +"adding it to the Vec." msgstr "" #: src/async/pitfalls/cancellation.md:3 msgid "" -"Dropping a future implies it can never be polled again. This is called " -"_cancellation_ and it can occur at any `await` point. Care is needed to " -"ensure the system works correctly even when futures are cancelled. For " -"example, it shouldn't deadlock or lose data." +"Dropping a future implies it can never be polled again. This is called _cancellation_ " +"and it can occur at any `await` point. Care is needed to ensure the system works " +"correctly even when futures are cancelled. For example, it shouldn't deadlock or lose " +"data." msgstr "" #: src/async/pitfalls/cancellation.md:8 @@ -18227,14 +17616,12 @@ msgid "" " return Ok(None)\n" " }\n" " let s = String::from_utf8(bytes)\n" -" .map_err(|_| io::Error::new(ErrorKind::InvalidData, \"not " -"UTF-8\"))?;\n" +" .map_err(|_| io::Error::new(ErrorKind::InvalidData, \"not UTF-8\"))?;\n" " Ok(Some(s))\n" " }\n" "}\n" "\n" -"async fn slow_copy(source: String, mut dest: DuplexStream) -> std::io::" -"Result<()> {\n" +"async fn slow_copy(source: String, mut dest: DuplexStream) -> std::io::Result<()> {\n" " for b in source.bytes() {\n" " dest.write_u8(b).await?;\n" " tokio::time::sleep(Duration::from_millis(10)).await\n" @@ -18245,8 +17632,7 @@ msgid "" "#[tokio::main]\n" "async fn main() -> std::io::Result<()> {\n" " let (client, server) = tokio::io::duplex(5);\n" -" let handle = tokio::spawn(slow_copy(\"hi\\nthere\\n\".to_owned(), " -"client));\n" +" let handle = tokio::spawn(slow_copy(\"hi\\nthere\\n\".to_owned(), client));\n" "\n" " let mut lines = LinesReader::new(server);\n" " let mut interval = tokio::time::interval(Duration::from_millis(60));\n" @@ -18268,14 +17654,13 @@ msgstr "" #: src/async/pitfalls/cancellation.md:72 msgid "" -"The compiler doesn't help with cancellation-safety. You need to read API " -"documentation and consider what state your `async fn` holds." +"The compiler doesn't help with cancellation-safety. You need to read API documentation " +"and consider what state your `async fn` holds." msgstr "" #: src/async/pitfalls/cancellation.md:75 msgid "" -"Unlike `panic` and `?`, cancellation is part of normal control flow (vs " -"error-handling)." +"Unlike `panic` and `?`, cancellation is part of normal control flow (vs error-handling)." msgstr "" #: src/async/pitfalls/cancellation.md:78 @@ -18283,15 +17668,11 @@ msgid "The example loses parts of the string." msgstr "" #: src/async/pitfalls/cancellation.md:80 -msgid "" -"Whenever the `tick()` branch finishes first, `next()` and its `buf` are " -"dropped." +msgid "Whenever the `tick()` branch finishes first, `next()` and its `buf` are dropped." msgstr "" #: src/async/pitfalls/cancellation.md:82 -msgid "" -"`LinesReader` can be made cancellation-safe by makeing `buf` part of the " -"struct:" +msgid "`LinesReader` can be made cancellation-safe by makeing `buf` part of the struct:" msgstr "" #: src/async/pitfalls/cancellation.md:83 @@ -18320,16 +17701,15 @@ msgstr "" #: src/async/pitfalls/cancellation.md:104 msgid "" -"[`Interval::tick`](https://docs.rs/tokio/latest/tokio/time/struct.Interval." -"html#method.tick) is cancellation-safe because it keeps track of whether a " -"tick has been 'delivered'." +"[`Interval::tick`](https://docs.rs/tokio/latest/tokio/time/struct.Interval.html#method." +"tick) is cancellation-safe because it keeps track of whether a tick has been " +"'delivered'." msgstr "" #: src/async/pitfalls/cancellation.md:107 msgid "" -"[`AsyncReadExt::read`](https://docs.rs/tokio/latest/tokio/io/trait." -"AsyncReadExt.html#method.read) is cancellation-safe because it either " -"returns or doesn't read data." +"[`AsyncReadExt::read`](https://docs.rs/tokio/latest/tokio/io/trait.AsyncReadExt." +"html#method.read) is cancellation-safe because it either returns or doesn't read data." msgstr "" #: src/async/pitfalls/cancellation.md:110 @@ -18340,20 +17720,19 @@ msgid "" msgstr "" #: src/exercises/concurrency/afternoon.md:3 -msgid "" -"To practice your Async Rust skills, we have again two exercises for you:" +msgid "To practice your Async Rust skills, we have again two exercises for you:" msgstr "" #: src/exercises/concurrency/afternoon.md:5 msgid "" -"Dining philosophers: we already saw this problem in the morning. This time " -"you are going to implement it with Async Rust." +"Dining philosophers: we already saw this problem in the morning. This time you are " +"going to implement it with Async Rust." msgstr "" #: src/exercises/concurrency/afternoon.md:8 msgid "" -"A Broadcast Chat Application: this is a larger project that allows you " -"experiment with more advanced Async Rust features." +"A Broadcast Chat Application: this is a larger project that allows you experiment with " +"more advanced Async Rust features." msgstr "" #: src/exercises/concurrency/dining-philosophers-async.md:1 @@ -18363,15 +17742,14 @@ msgstr "" #: src/exercises/concurrency/dining-philosophers-async.md:3 msgid "" -"See [dining philosophers](dining-philosophers.md) for a description of the " -"problem." +"See [dining philosophers](dining-philosophers.md) for a description of the problem." msgstr "" #: src/exercises/concurrency/dining-philosophers-async.md:6 msgid "" -"As before, you will need a local [Cargo installation](../../cargo/running-" -"locally.md) for this exercise. Copy the code below to a file called `src/" -"main.rs`, fill out the blanks, and test that `cargo run` does not deadlock:" +"As before, you will need a local [Cargo installation](../../cargo/running-locally.md) " +"for this exercise. Copy the code below to a file called `src/main.rs`, fill out the " +"blanks, and test that `cargo run` does not deadlock:" msgstr "" #: src/exercises/concurrency/dining-philosophers-async.md:13 @@ -18394,8 +17772,7 @@ msgid "" "impl Philosopher {\n" " async fn think(&self) {\n" " self.thoughts\n" -" .send(format!(\"Eureka! {} has a new idea!\", &self.name))." -"await\n" +" .send(format!(\"Eureka! {} has a new idea!\", &self.name)).await\n" " .unwrap();\n" " }\n" "\n" @@ -18424,8 +17801,8 @@ msgstr "" #: src/exercises/concurrency/dining-philosophers-async.md:57 msgid "" -"Since this time you are using Async Rust, you'll need a `tokio` dependency. " -"You can use the following `Cargo.toml`:" +"Since this time you are using Async Rust, you'll need a `tokio` dependency. You can use " +"the following `Cargo.toml`:" msgstr "" #: src/exercises/concurrency/dining-philosophers-async.md:62 @@ -18437,15 +17814,15 @@ msgid "" "edition = \"2021\"\n" "\n" "[dependencies]\n" -"tokio = {version = \"1.26.0\", features = [\"sync\", \"time\", \"macros\", " -"\"rt-multi-thread\"]}\n" +"tokio = {version = \"1.26.0\", features = [\"sync\", \"time\", \"macros\", \"rt-multi-" +"thread\"]}\n" "```" msgstr "" #: src/exercises/concurrency/dining-philosophers-async.md:72 msgid "" -"Also note that this time you have to use the `Mutex` and the `mpsc` module " -"from the `tokio` crate." +"Also note that this time you have to use the `Mutex` and the `mpsc` module from the " +"`tokio` crate." msgstr "" #: src/exercises/concurrency/dining-philosophers-async.md:77 @@ -18454,19 +17831,18 @@ msgstr "" #: src/exercises/concurrency/chat-app.md:3 msgid "" -"In this exercise, we want to use our new knowledge to implement a broadcast " -"chat application. We have a chat server that the clients connect to and " -"publish their messages. The client reads user messages from the standard " -"input, and sends them to the server. The chat server broadcasts each message " -"that it receives to all the clients." +"In this exercise, we want to use our new knowledge to implement a broadcast chat " +"application. We have a chat server that the clients connect to and publish their " +"messages. The client reads user messages from the standard input, and sends them to the " +"server. The chat server broadcasts each message that it receives to all the clients." msgstr "" #: src/exercises/concurrency/chat-app.md:9 msgid "" -"For this, we use [a broadcast channel](https://docs.rs/tokio/latest/tokio/" -"sync/broadcast/fn.channel.html) on the server, and [`tokio_websockets`]" -"(https://docs.rs/tokio-websockets/0.3.2/tokio_websockets/) for the " -"communication between the client and the server." +"For this, we use [a broadcast channel](https://docs.rs/tokio/latest/tokio/sync/" +"broadcast/fn.channel.html) on the server, and [`tokio_websockets`](https://docs.rs/" +"tokio-websockets/0.3.2/tokio_websockets/) for the communication between the client and " +"the server." msgstr "" #: src/exercises/concurrency/chat-app.md:13 @@ -18499,37 +17875,35 @@ msgstr "" #: src/exercises/concurrency/chat-app.md:33 msgid "" -"You are going to need the following functions from `tokio` and " -"[`tokio_websockets`](https://docs.rs/tokio-websockets/0.3.2/" -"tokio_websockets/). Spend a few minutes to familiarize yourself with the " -"API. " +"You are going to need the following functions from `tokio` and [`tokio_websockets`]" +"(https://docs.rs/tokio-websockets/0.3.2/tokio_websockets/). Spend a few minutes to " +"familiarize yourself with the API. " msgstr "" #: src/exercises/concurrency/chat-app.md:37 msgid "" -"[WebsocketStream::next()](https://docs.rs/tokio-websockets/0.3.2/" -"tokio_websockets/proto/struct.WebsocketStream.html#method.next): for " -"asynchronously reading messages from a Websocket Stream." +"[WebsocketStream::next()](https://docs.rs/tokio-websockets/0.3.2/tokio_websockets/proto/" +"struct.WebsocketStream.html#method.next): for asynchronously reading messages from a " +"Websocket Stream." msgstr "" #: src/exercises/concurrency/chat-app.md:39 msgid "" -"[SinkExt::send()](https://docs.rs/futures-util/0.3.28/futures_util/sink/" -"trait.SinkExt.html#method.send) implemented by `WebsocketStream`: for " -"asynchronously sending messages on a Websocket Stream." +"[SinkExt::send()](https://docs.rs/futures-util/0.3.28/futures_util/sink/trait.SinkExt." +"html#method.send) implemented by `WebsocketStream`: for asynchronously sending messages " +"on a Websocket Stream." msgstr "" #: src/exercises/concurrency/chat-app.md:41 msgid "" -"[Lines::next_line()](https://docs.rs/tokio/latest/tokio/io/struct.Lines." -"html#method.next_line): for asynchronously reading user messages from the " -"standard input." +"[Lines::next_line()](https://docs.rs/tokio/latest/tokio/io/struct.Lines.html#method." +"next_line): for asynchronously reading user messages from the standard input." msgstr "" #: src/exercises/concurrency/chat-app.md:43 msgid "" -"[Sender::subscribe()](https://docs.rs/tokio/latest/tokio/sync/broadcast/" -"struct.Sender.html#method.subscribe): for subscribing to a broadcast channel." +"[Sender::subscribe()](https://docs.rs/tokio/latest/tokio/sync/broadcast/struct.Sender." +"html#method.subscribe): for subscribing to a broadcast channel." msgstr "" #: src/exercises/concurrency/chat-app.md:46 @@ -18538,20 +17912,18 @@ msgstr "" #: src/exercises/concurrency/chat-app.md:48 msgid "" -"Normally in a Cargo project, you can have only one binary, and one `src/main." -"rs` file. In this project, we need two binaries. One for the client, and one " -"for the server. You could potentially make them two separate Cargo projects, " -"but we are going to put them in a single Cargo project with two binaries. " -"For this to work, the client and the server code should go under `src/bin` " -"(see the [documentation](https://doc.rust-lang.org/cargo/reference/cargo-" -"targets.html#binaries)). " +"Normally in a Cargo project, you can have only one binary, and one `src/main.rs` file. " +"In this project, we need two binaries. One for the client, and one for the server. You " +"could potentially make them two separate Cargo projects, but we are going to put them " +"in a single Cargo project with two binaries. For this to work, the client and the " +"server code should go under `src/bin` (see the [documentation](https://doc.rust-lang." +"org/cargo/reference/cargo-targets.html#binaries)). " msgstr "" #: src/exercises/concurrency/chat-app.md:55 msgid "" -"Copy the following server and client code into `src/bin/server.rs` and `src/" -"bin/client.rs`, respectively. Your task is to complete these files as " -"described below. " +"Copy the following server and client code into `src/bin/server.rs` and `src/bin/client." +"rs`, respectively. Your task is to complete these files as described below. " msgstr "" #: src/exercises/concurrency/chat-app.md:59 @@ -18664,9 +18036,9 @@ msgstr "" #: src/exercises/concurrency/chat-app.md:143 msgid "" -"Hint: Use `tokio::select!` for concurrently performing two tasks in a " -"continuous loop. One task receives messages from the client and broadcasts " -"them. The other sends messages received by the server to the client." +"Hint: Use `tokio::select!` for concurrently performing two tasks in a continuous loop. " +"One task receives messages from the client and broadcasts them. The other sends " +"messages received by the server to the client." msgstr "" #: src/exercises/concurrency/chat-app.md:146 @@ -18675,32 +18047,31 @@ msgstr "" #: src/exercises/concurrency/chat-app.md:147 msgid "" -"Hint: As before, use `tokio::select!` in a continuous loop for concurrently " -"performing two tasks: (1) reading user messages from standard input and " -"sending them to the server, and (2) receiving messages from the server, and " -"displaying them for the user." +"Hint: As before, use `tokio::select!` in a continuous loop for concurrently performing " +"two tasks: (1) reading user messages from standard input and sending them to the " +"server, and (2) receiving messages from the server, and displaying them for the user." msgstr "" #: src/exercises/concurrency/chat-app.md:151 msgid "" -"Optional: Once you are done, change the code to broadcast messages to all " -"clients, but the sender of the message." +"Optional: Once you are done, change the code to broadcast messages to all clients, but " +"the sender of the message." msgstr "" #: src/thanks.md:3 msgid "" -"_Thank you for taking Comprehensive Rust đŸĻ€!_ We hope you enjoyed it and " -"that it was useful." +"_Thank you for taking Comprehensive Rust đŸĻ€!_ We hope you enjoyed it and that it was " +"useful." msgstr "" -"Comprehensive Rust đŸĻ€ āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ! āĻ†āĻŽāĻ°āĻž āĻ†āĻļāĻž āĻ•āĻ°āĻŋ āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋ " -"āĻ‰āĻĒāĻ­ā§‹āĻ— āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ‰āĻĒāĻ•āĻžāĻ°ā§€ āĻ›āĻŋāĻ˛ā§‹āĨ¤" +"Comprehensive Rust đŸĻ€ āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ! āĻ†āĻŽāĻ°āĻž āĻ†āĻļāĻž āĻ•āĻ°āĻŋ āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋ āĻ‰āĻĒāĻ­ā§‹āĻ— " +"āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ‰āĻĒāĻ•āĻžāĻ°ā§€ āĻ›āĻŋāĻ˛ā§‹āĨ¤" #: src/thanks.md:6 msgid "" -"We've had a lot of fun putting the course together. The course is not " -"perfect, so if you spotted any mistakes or have ideas for improvements, " -"please get in [contact with us on GitHub](https://github.com/google/" -"comprehensive-rust/discussions). We would love to hear from you." +"We've had a lot of fun putting the course together. The course is not perfect, so if " +"you spotted any mistakes or have ideas for improvements, please get in [contact with us " +"on GitHub](https://github.com/google/comprehensive-rust/discussions). We would love to " +"hear from you." msgstr "" #: src/other-resources.md:1 @@ -18708,9 +18079,7 @@ msgid "Other Rust Resources" msgstr "" #: src/other-resources.md:3 -msgid "" -"The Rust community has created a wealth of high-quality and free resources " -"online." +msgid "The Rust community has created a wealth of high-quality and free resources online." msgstr "" #: src/other-resources.md:6 @@ -18723,29 +18092,28 @@ msgstr "" #: src/other-resources.md:10 msgid "" -"[The Rust Programming Language](https://doc.rust-lang.org/book/): the " -"canonical free book about Rust. Covers the language in detail and includes a " -"few projects for people to build." +"[The Rust Programming Language](https://doc.rust-lang.org/book/): the canonical free " +"book about Rust. Covers the language in detail and includes a few projects for people " +"to build." msgstr "" #: src/other-resources.md:13 msgid "" -"[Rust By Example](https://doc.rust-lang.org/rust-by-example/): covers the " -"Rust syntax via a series of examples which showcase different constructs. " -"Sometimes includes small exercises where you are asked to expand on the code " -"in the examples." +"[Rust By Example](https://doc.rust-lang.org/rust-by-example/): covers the Rust syntax " +"via a series of examples which showcase different constructs. Sometimes includes small " +"exercises where you are asked to expand on the code in the examples." msgstr "" #: src/other-resources.md:17 msgid "" -"[Rust Standard Library](https://doc.rust-lang.org/std/): full documentation " -"of the standard library for Rust." +"[Rust Standard Library](https://doc.rust-lang.org/std/): full documentation of the " +"standard library for Rust." msgstr "" #: src/other-resources.md:19 msgid "" -"[The Rust Reference](https://doc.rust-lang.org/reference/): an incomplete " -"book which describes the Rust grammar and memory model." +"[The Rust Reference](https://doc.rust-lang.org/reference/): an incomplete book which " +"describes the Rust grammar and memory model." msgstr "" #: src/other-resources.md:22 @@ -18754,23 +18122,20 @@ msgstr "" #: src/other-resources.md:24 msgid "" -"[The Rustonomicon](https://doc.rust-lang.org/nomicon/): covers unsafe Rust, " -"including working with raw pointers and interfacing with other languages " -"(FFI)." +"[The Rustonomicon](https://doc.rust-lang.org/nomicon/): covers unsafe Rust, including " +"working with raw pointers and interfacing with other languages (FFI)." msgstr "" #: src/other-resources.md:27 msgid "" -"[Asynchronous Programming in Rust](https://rust-lang.github.io/async-book/): " -"covers the new asynchronous programming model which was introduced after the " -"Rust Book was written." +"[Asynchronous Programming in Rust](https://rust-lang.github.io/async-book/): covers the " +"new asynchronous programming model which was introduced after the Rust Book was written." msgstr "" #: src/other-resources.md:30 msgid "" -"[The Embedded Rust Book](https://doc.rust-lang.org/stable/embedded-book/): " -"an introduction to using Rust on embedded devices without an operating " -"system." +"[The Embedded Rust Book](https://doc.rust-lang.org/stable/embedded-book/): an " +"introduction to using Rust on embedded devices without an operating system." msgstr "" #: src/other-resources.md:33 @@ -18783,72 +18148,69 @@ msgstr "" #: src/other-resources.md:37 msgid "" -"[Learn Rust the Dangerous Way](http://cliffle.com/p/dangerust/): covers Rust " -"from the perspective of low-level C programmers." +"[Learn Rust the Dangerous Way](http://cliffle.com/p/dangerust/): covers Rust from the " +"perspective of low-level C programmers." msgstr "" #: src/other-resources.md:39 msgid "" -"[Rust for Embedded C Programmers](https://docs.opentitan.org/doc/ug/" -"rust_for_c/): covers Rust from the perspective of developers who write " -"firmware in C." +"[Rust for Embedded C Programmers](https://docs.opentitan.org/doc/ug/rust_for_c/): " +"covers Rust from the perspective of developers who write firmware in C." msgstr "" #: src/other-resources.md:42 msgid "" -"[Rust for professionals](https://overexact.com/rust-for-professionals/): " -"covers the syntax of Rust using side-by-side comparisons with other " -"languages such as C, C++, Java, JavaScript, and Python." +"[Rust for professionals](https://overexact.com/rust-for-professionals/): covers the " +"syntax of Rust using side-by-side comparisons with other languages such as C, C++, " +"Java, JavaScript, and Python." msgstr "" #: src/other-resources.md:45 msgid "" -"[Rust on Exercism](https://exercism.org/tracks/rust): 100+ exercises to help " -"you learn Rust." +"[Rust on Exercism](https://exercism.org/tracks/rust): 100+ exercises to help you learn " +"Rust." msgstr "" #: src/other-resources.md:47 msgid "" -"[Ferrous Teaching Material](https://ferrous-systems.github.io/teaching-" -"material/index.html): a series of small presentations covering both basic " -"and advanced part of the Rust language. Other topics such as WebAssembly, " -"and async/await are also covered." +"[Ferrous Teaching Material](https://ferrous-systems.github.io/teaching-material/index." +"html): a series of small presentations covering both basic and advanced part of the " +"Rust language. Other topics such as WebAssembly, and async/await are also covered." msgstr "" #: src/other-resources.md:52 msgid "" -"[Beginner's Series to Rust](https://docs.microsoft.com/en-us/shows/beginners-" -"series-to-rust/) and [Take your first steps with Rust](https://docs." -"microsoft.com/en-us/learn/paths/rust-first-steps/): two Rust guides aimed at " -"new developers. The first is a set of 35 videos and the second is a set of " -"11 modules which covers Rust syntax and basic constructs." +"[Beginner's Series to Rust](https://docs.microsoft.com/en-us/shows/beginners-series-to-" +"rust/) and [Take your first steps with Rust](https://docs.microsoft.com/en-us/learn/" +"paths/rust-first-steps/): two Rust guides aimed at new developers. The first is a set " +"of 35 videos and the second is a set of 11 modules which covers Rust syntax and basic " +"constructs." msgstr "" #: src/other-resources.md:58 msgid "" -"[Learn Rust With Entirely Too Many Linked Lists](https://rust-unofficial." -"github.io/too-many-lists/): in-depth exploration of Rust's memory management " -"rules, through implementing a few different types of list structures." +"[Learn Rust With Entirely Too Many Linked Lists](https://rust-unofficial.github.io/too-" +"many-lists/): in-depth exploration of Rust's memory management rules, through " +"implementing a few different types of list structures." msgstr "" #: src/other-resources.md:63 msgid "" -"Please see the [Little Book of Rust Books](https://lborb.github.io/book/) " -"for even more Rust books." +"Please see the [Little Book of Rust Books](https://lborb.github.io/book/) for even more " +"Rust books." msgstr "" #: src/credits.md:3 msgid "" -"The material here builds on top of the many great sources of Rust " -"documentation. See the page on [other resources](other-resources.md) for a " -"full list of useful resources." +"The material here builds on top of the many great sources of Rust documentation. See " +"the page on [other resources](other-resources.md) for a full list of useful resources." msgstr "" #: src/credits.md:7 msgid "" -"The material of Comprehensive Rust is licensed under the terms of the Apache " -"2.0 license, please see [`LICENSE`](https://github.com/google/comprehensive-" -"rust/blob/main/LICENSE) for details." +"The material of Comprehensive Rust is licensed under the terms of the Apache 2.0 " +"license, please see [`LICENSE`](https://github.com/google/comprehensive-rust/blob/main/" +"LICENSE) for details." msgstr "" #: src/credits.md:12 @@ -18857,10 +18219,9 @@ msgstr "āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ°āĻžāĻ¸ā§āĻŸ" #: src/credits.md:14 msgid "" -"Some examples and exercises have been copied and adapted from [Rust by " -"Example](https://doc.rust-lang.org/rust-by-example/). Please see the " -"`third_party/rust-by-example/` directory for details, including the license " -"terms." +"Some examples and exercises have been copied and adapted from [Rust by Example](https://" +"doc.rust-lang.org/rust-by-example/). Please see the `third_party/rust-by-example/` " +"directory for details, including the license terms." msgstr "" #: src/credits.md:19 @@ -18869,9 +18230,9 @@ msgstr "āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨ā§‡ āĻ°āĻžāĻ¸ā§āĻŸ" #: src/credits.md:21 msgid "" -"Some exercises have been copied and adapted from [Rust on Exercism](https://" -"exercism.org/tracks/rust). Please see the `third_party/rust-on-exercism/` " -"directory for details, including the license terms." +"Some exercises have been copied and adapted from [Rust on Exercism](https://exercism." +"org/tracks/rust). Please see the `third_party/rust-on-exercism/` directory for details, " +"including the license terms." msgstr "" #: src/credits.md:26 @@ -18880,9 +18241,9 @@ msgstr "CXX" #: src/credits.md:28 msgid "" -"The [Interoperability with C++](android/interoperability/cpp.md) section " -"uses an image from [CXX](https://cxx.rs/). Please see the `third_party/cxx/` " -"directory for details, including the license terms." +"The [Interoperability with C++](android/interoperability/cpp.md) section uses an image " +"from [CXX](https://cxx.rs/). Please see the `third_party/cxx/` directory for details, " +"including the license terms." msgstr "" #: src/exercises/solutions.md:3 @@ -18891,16 +18252,16 @@ msgstr "āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨ā§€āĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ‡ āĻĒ #: src/exercises/solutions.md:5 msgid "" -"Feel free to ask questions about the solutions [on GitHub](https://github." -"com/google/comprehensive-rust/discussions). Let us know if you have a " -"different or better solution than what is presented here." +"Feel free to ask questions about the solutions [on GitHub](https://github.com/google/" +"comprehensive-rust/discussions). Let us know if you have a different or better solution " +"than what is presented here." msgstr "" #: src/exercises/solutions.md:10 msgid "" -"**Note:** Please ignore the `// ANCHOR: label` and `// ANCHOR_END: label` " -"comments you see in the solutions. They are there to make it possible to re-" -"use parts of the solutions as the exercises." +"**Note:** Please ignore the `// ANCHOR: label` and `// ANCHOR_END: label` comments you " +"see in the solutions. They are there to make it possible to re-use parts of the " +"solutions as the exercises." msgstr "" #: src/exercises/day-1/solutions-morning.md:1 @@ -18992,24 +18353,24 @@ msgstr "" #: src/exercises/day-1/solutions-morning.md:80 msgid "" -"It requires more advanced concepts. It might seem that we could use a slice-" -"of-slices (`&[&[i32]]`) as the input type to transpose and thus make our " -"function handle any size of matrix. However, this quickly breaks down: the " -"return type cannot be `&[&[i32]]` since it needs to own the data you return." +"It requires more advanced concepts. It might seem that we could use a slice-of-slices " +"(`&[&[i32]]`) as the input type to transpose and thus make our function handle any size " +"of matrix. However, this quickly breaks down: the return type cannot be `&[&[i32]]` " +"since it needs to own the data you return." msgstr "" #: src/exercises/day-1/solutions-morning.md:82 msgid "" -"You can attempt to use something like `Vec>`, but this doesn't work " -"out-of-the-box either: it's hard to convert from `Vec>` to " -"`&[&[i32]]` so now you cannot easily use `pretty_print` either." +"You can attempt to use something like `Vec>`, but this doesn't work out-of-the-" +"box either: it's hard to convert from `Vec>` to `&[&[i32]]` so now you cannot " +"easily use `pretty_print` either." msgstr "" #: src/exercises/day-1/solutions-morning.md:84 msgid "" -"Once we get to traits and generics, we'll be able to use the [`std::convert::" -"AsRef`](https://doc.rust-lang.org/std/convert/trait.AsRef.html) trait to " -"abstract over anything that can be referenced as a slice." +"Once we get to traits and generics, we'll be able to use the [`std::convert::AsRef`]" +"(https://doc.rust-lang.org/std/convert/trait.AsRef.html) trait to abstract over " +"anything that can be referenced as a slice." msgstr "" #: src/exercises/day-1/solutions-morning.md:86 @@ -19044,8 +18405,8 @@ msgstr "" #: src/exercises/day-1/solutions-morning.md:113 msgid "" -"In addition, the type itself would not enforce that the child slices are of " -"the same length, so such variable could contain an invalid matrix." +"In addition, the type itself would not enforce that the child slices are of the same " +"length, so such variable could contain an invalid matrix." msgstr "" #: src/exercises/day-1/solutions-afternoon.md:1 @@ -19078,8 +18439,7 @@ msgid "" " // ANCHOR_END: luhn\n" " let mut digits_seen = 0;\n" " let mut sum = 0;\n" -" for (i, ch) in cc_number.chars().rev().filter(|&ch| ch != ' ')." -"enumerate() {\n" +" for (i, ch) in cc_number.chars().rev().filter(|&ch| ch != ' ').enumerate() {\n" " match ch.to_digit(10) {\n" " Some(d) => {\n" " sum += if i % 2 == 1 {\n" @@ -19252,8 +18612,7 @@ msgid "" "\n" " // ANCHOR: Library_print_books\n" " //fn print_books(self) {\n" -" // todo!(\"Iterate over `self.books` and each book's title and " -"year\")\n" +" // todo!(\"Iterate over `self.books` and each book's title and year\")\n" " //}\n" " // ANCHOR_END: Library_print_books\n" " fn print_books(&self) {\n" @@ -19295,11 +18654,10 @@ msgid "" "is_empty());\n" " //\n" " //library.add_book(Book::new(\"Lord of the Rings\", 1954));\n" -" //library.add_book(Book::new(\"Alice's Adventures in Wonderland\", " -"1865));\n" +" //library.add_book(Book::new(\"Alice's Adventures in Wonderland\", 1865));\n" " //\n" -" //println!(\"The library is no longer empty: library.is_empty() -> {}\", " -"library.is_empty());\n" +" //println!(\"The library is no longer empty: library.is_empty() -> {}\", library." +"is_empty());\n" " //\n" " //\n" " //library.print_books();\n" @@ -19321,8 +18679,7 @@ msgid "" " assert!(library.is_empty());\n" "\n" " library.add_book(Book::new(\"Lord of the Rings\", 1954));\n" -" library.add_book(Book::new(\"Alice's Adventures in Wonderland\", " -"1865));\n" +" library.add_book(Book::new(\"Alice's Adventures in Wonderland\", 1865));\n" " assert_eq!(library.len(), 2);\n" " assert!(!library.is_empty());\n" "}\n" @@ -19340,8 +18697,7 @@ msgid "" "fn test_library_print_books() {\n" " let mut library = Library::new();\n" " library.add_book(Book::new(\"Lord of the Rings\", 1954));\n" -" library.add_book(Book::new(\"Alice's Adventures in Wonderland\", " -"1865));\n" +" library.add_book(Book::new(\"Alice's Adventures in Wonderland\", 1865));\n" " // We could try and capture stdout, but let us just call the\n" " // method to start with.\n" " library.print_books();\n" @@ -19358,8 +18714,7 @@ msgid "" " Some(\"Lord of the Rings\")\n" " );\n" "\n" -" library.add_book(Book::new(\"Alice's Adventures in Wonderland\", " -"1865));\n" +" library.add_book(Book::new(\"Alice's Adventures in Wonderland\", 1865));\n" " assert_eq!(\n" " library.oldest_book().map(|b| b.title.as_str()),\n" " Some(\"Alice's Adventures in Wonderland\")\n" @@ -19409,16 +18764,11 @@ msgid "" " }\n" " true\n" "\n" -" // Alternatively, Iterator::zip() lets us iterate simultaneously over " -"prefix\n" -" // and request segments. The zip() iterator is finished as soon as one " -"of\n" -" // the source iterators is finished, but we need to iterate over all " -"request\n" -" // segments. A neat trick that makes zip() work is to use map() and " -"chain()\n" -" // to produce an iterator that returns Some(str) for each pattern " -"segments,\n" +" // Alternatively, Iterator::zip() lets us iterate simultaneously over prefix\n" +" // and request segments. The zip() iterator is finished as soon as one of\n" +" // the source iterators is finished, but we need to iterate over all request\n" +" // segments. A neat trick that makes zip() work is to use map() and chain()\n" +" // to produce an iterator that returns Some(str) for each pattern segments,\n" " // and then returns None indefinitely.\n" "}\n" "\n" @@ -19426,15 +18776,12 @@ msgid "" "#[test]\n" "fn test_matches_without_wildcard() {\n" " assert!(prefix_matches(\"/v1/publishers\", \"/v1/publishers\"));\n" -" assert!(prefix_matches(\"/v1/publishers\", \"/v1/publishers/" -"abc-123\"));\n" -" assert!(prefix_matches(\"/v1/publishers\", \"/v1/publishers/abc/" -"books\"));\n" +" assert!(prefix_matches(\"/v1/publishers\", \"/v1/publishers/abc-123\"));\n" +" assert!(prefix_matches(\"/v1/publishers\", \"/v1/publishers/abc/books\"));\n" "\n" " assert!(!prefix_matches(\"/v1/publishers\", \"/v1\"));\n" " assert!(!prefix_matches(\"/v1/publishers\", \"/v1/publishersBooks\"));\n" -" assert!(!prefix_matches(\"/v1/publishers\", \"/v1/parent/" -"publishers\"));\n" +" assert!(!prefix_matches(\"/v1/publishers\", \"/v1/parent/publishers\"));\n" "}\n" "\n" "#[test]\n" @@ -19452,8 +18799,7 @@ msgid "" " \"/v1/publishers/foo/books/book1\"\n" " ));\n" "\n" -" assert!(!prefix_matches(\"/v1/publishers/*/books\", \"/v1/" -"publishers\"));\n" +" assert!(!prefix_matches(\"/v1/publishers/*/books\", \"/v1/publishers\"));\n" " assert!(!prefix_matches(\n" " \"/v1/publishers/*/books\",\n" " \"/v1/publishers/foo/booksByAuthor\"\n" @@ -19633,8 +18979,7 @@ msgid "" "// ANCHOR: main\n" "fn main() {\n" " let mut window = Window::new(\"Rust GUI Demo 1.23\");\n" -" window.add_widget(Box::new(Label::new(\"This is a small text GUI demo." -"\")));\n" +" window.add_widget(Box::new(Label::new(\"This is a small text GUI demo.\")));\n" " window.add_widget(Box::new(Button::new(\n" " \"Click me!\",\n" " Box::new(|| println!(\"You clicked the button!\")),\n" @@ -19750,16 +19095,13 @@ msgid "" " }\n" " result += last_point.dist(self.points[0]);\n" " result\n" -" // Alternatively, Iterator::zip() lets us iterate over the points as " -"pairs\n" -" // but we need to pair each point with the next one, and the last " -"point\n" -" // with the first point. The zip() iterator is finished as soon as " -"one of \n" -" // the source iterators is finished, a neat trick is to combine " -"Iterator::cycle\n" -" // with Iterator::skip to create the second iterator for the zip and " -"using map \n" +" // Alternatively, Iterator::zip() lets us iterate over the points as pairs\n" +" // but we need to pair each point with the next one, and the last point\n" +" // with the first point. The zip() iterator is finished as soon as one of \n" +" // the source iterators is finished, a neat trick is to combine Iterator::" +"cycle\n" +" // with Iterator::skip to create the second iterator for the zip and using " +"map \n" " // and sum to calculate the total length.\n" " }\n" "}\n" @@ -19927,12 +19269,10 @@ msgid "" " #[repr(C)]\n" " pub struct DIR {\n" " _data: [u8; 0],\n" -" _marker: core::marker::PhantomData<(*mut u8, core::marker::" -"PhantomPinned)>,\n" +" _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,\n" " }\n" "\n" -" // Layout according to the Linux man page for readdir(3), where ino_t " -"and\n" +" // Layout according to the Linux man page for readdir(3), where ino_t and\n" " // off_t are resolved according to the definitions in\n" " // /usr/include/x86_64-linux-gnu/{sys/types.h, bits/typesizes.h}.\n" " #[cfg(not(target_os = \"macos\"))]\n" @@ -19963,14 +19303,11 @@ msgid "" " #[cfg(not(all(target_os = \"macos\", target_arch = \"x86_64\")))]\n" " pub fn readdir(s: *mut DIR) -> *const dirent;\n" "\n" -" // See https://github.com/rust-lang/libc/issues/414 and the section " -"on\n" +" // See https://github.com/rust-lang/libc/issues/414 and the section on\n" " // _DARWIN_FEATURE_64_BIT_INODE in the macOS man page for stat(2).\n" " //\n" -" // \"Platforms that existed before these updates were available\" " -"refers\n" -" // to macOS (as opposed to iOS / wearOS / etc.) on Intel and " -"PowerPC.\n" +" // \"Platforms that existed before these updates were available\" refers\n" +" // to macOS (as opposed to iOS / wearOS / etc.) on Intel and PowerPC.\n" " #[cfg(all(target_os = \"macos\", target_arch = \"x86_64\"))]\n" " #[link_name = \"readdir$INODE64\"]\n" " pub fn readdir(s: *mut DIR) -> *const dirent;\n" @@ -20075,8 +19412,7 @@ msgid "" " #[test]\n" " fn test_nonempty_directory() -> Result<(), Box> {\n" " let tmp = tempfile::TempDir::new()?;\n" -" std::fs::write(tmp.path().join(\"foo.txt\"), \"The Foo " -"Diaries\\n\")?;\n" +" std::fs::write(tmp.path().join(\"foo.txt\"), \"The Foo Diaries\\n\")?;\n" " std::fs::write(tmp.path().join(\"bar.png\"), \"\\n\")?;\n" " std::fs::write(tmp.path().join(\"crab.rs\"), \"//! Crab\\n\")?;\n" " let iter = DirectoryIterator::new(\n" @@ -20084,8 +19420,7 @@ msgid "" " )?;\n" " let mut entries = iter.collect::>();\n" " entries.sort();\n" -" assert_eq!(entries, &[\".\", \"..\", \"bar.png\", \"crab.rs\", \"foo." -"txt\"]);\n" +" assert_eq!(entries, &[\".\", \"..\", \"bar.png\", \"crab.rs\", \"foo.txt\"]);\n" " Ok(())\n" " }\n" "}\n" @@ -20155,8 +19490,7 @@ msgid "" " // Set up the I2C controller and Inertial Measurement Unit.\n" " // ANCHOR_END: main\n" " writeln!(serial, \"Setting up IMU...\").unwrap();\n" -" let i2c = Twim::new(board.TWIM0, board.i2c_internal.into(), FREQUENCY_A::" -"K100);\n" +" let i2c = Twim::new(board.TWIM0, board.i2c_internal.into(), FREQUENCY_A::K100);\n" " let mut imu = Lsm303agr::new_with_i2c(i2c);\n" " imu.init().unwrap();\n" " imu.set_mag_odr(MagOutputDataRate::Hz50).unwrap();\n" @@ -20196,10 +19530,10 @@ msgid "" " let mut image = [[0; 5]; 5];\n" " let (x, y) = match mode {\n" " Mode::Compass => (\n" -" scale(-compass_reading.x, -COMPASS_SCALE, COMPASS_SCALE, 0, " -"4) as usize,\n" -" scale(compass_reading.y, -COMPASS_SCALE, COMPASS_SCALE, 0, " -"4) as usize,\n" +" scale(-compass_reading.x, -COMPASS_SCALE, COMPASS_SCALE, 0, 4) as " +"usize,\n" +" scale(compass_reading.y, -COMPASS_SCALE, COMPASS_SCALE, 0, 4) as " +"usize,\n" " ),\n" " Mode::Accelerometer => (\n" " scale(\n" @@ -20221,8 +19555,8 @@ msgid "" " image[y][x] = 255;\n" " display.show(&mut timer, image, 100);\n" "\n" -" // If button A is pressed, switch to the next mode and briefly blink " -"all LEDs on.\n" +" // If button A is pressed, switch to the next mode and briefly blink all LEDs " +"on.\n" " if board.buttons.button_a.is_low().unwrap() {\n" " if !button_pressed {\n" " mode = mode.next();\n" @@ -20250,8 +19584,7 @@ msgid "" " }\n" "}\n" "\n" -"fn scale(value: i32, min_in: i32, max_in: i32, min_out: i32, max_out: i32) -" -"> i32 {\n" +"fn scale(value: i32, min_in: i32, max_in: i32, min_out: i32, max_out: i32) -> i32 {\n" " let range_in = max_in - min_in;\n" " let range_out = max_out - min_out;\n" " cap(\n" @@ -20331,25 +19664,21 @@ msgid "" "// ANCHOR: main\n" "#[no_mangle]\n" "extern \"C\" fn main(x0: u64, x1: u64, x2: u64, x3: u64) {\n" -" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 " -"device,\n" +" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 device,\n" " // and nothing else accesses that address range.\n" " let uart = unsafe { Uart::new(PL011_BASE_ADDRESS) };\n" " logger::init(uart, LevelFilter::Trace).unwrap();\n" "\n" " info!(\"main({:#x}, {:#x}, {:#x}, {:#x})\", x0, x1, x2, x3);\n" "\n" -" // Safe because `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the " -"base\n" +" // Safe because `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the base\n" " // addresses of a GICv3 distributor and redistributor respectively, and\n" " // nothing else accesses those address ranges.\n" -" let mut gic = unsafe { GicV3::new(GICD_BASE_ADDRESS, " -"GICR_BASE_ADDRESS) };\n" +" let mut gic = unsafe { GicV3::new(GICD_BASE_ADDRESS, GICR_BASE_ADDRESS) };\n" " gic.setup();\n" " // ANCHOR_END: main\n" "\n" -" // Safe because `PL031_BASE_ADDRESS` is the base address of a PL031 " -"device,\n" +" // Safe because `PL031_BASE_ADDRESS` is the base address of a PL031 device,\n" " // and nothing else accesses that address range.\n" " let mut rtc = unsafe { Rtc::new(PL031_BASE_ADDRESS) };\n" " let timestamp = rtc.read();\n" @@ -20477,16 +19806,13 @@ msgid "" "}\n" "\n" "impl Rtc {\n" -" /// Constructs a new instance of the RTC driver for a PL031 device at " -"the\n" +" /// Constructs a new instance of the RTC driver for a PL031 device at the\n" " /// given base address.\n" " ///\n" " /// # Safety\n" " ///\n" -" /// The given base address must point to the MMIO control registers of " -"a\n" -" /// PL031 device, which must be mapped into the address space of the " -"process\n" +" /// The given base address must point to the MMIO control registers of a\n" +" /// PL031 device, which must be mapped into the address space of the process\n" " /// as device memory and not have any other aliases.\n" " pub unsafe fn new(base_address: *mut u32) -> Self {\n" " Self {\n" @@ -20501,8 +19827,7 @@ msgid "" " unsafe { addr_of!((*self.registers).dr).read_volatile() }\n" " }\n" "\n" -" /// Writes a match value. When the RTC value matches this then an " -"interrupt\n" +" /// Writes a match value. When the RTC value matches this then an interrupt\n" " /// will be generated (if it is enabled).\n" " pub fn set_match(&mut self, value: u32) {\n" " // Safe because we know that self.registers points to the control\n" @@ -20510,14 +19835,12 @@ msgid "" " unsafe { addr_of_mut!((*self.registers).mr).write_volatile(value) }\n" " }\n" "\n" -" /// Returns whether the match register matches the RTC value, whether or " -"not\n" +" /// Returns whether the match register matches the RTC value, whether or not\n" " /// the interrupt is enabled.\n" " pub fn matched(&self) -> bool {\n" " // Safe because we know that self.registers points to the control\n" " // registers of a PL031 device which is appropriately mapped.\n" -" let ris = unsafe { addr_of!((*self.registers).ris)." -"read_volatile() };\n" +" let ris = unsafe { addr_of!((*self.registers).ris).read_volatile() };\n" " (ris & 0x01) != 0\n" " }\n" "\n" @@ -20528,22 +19851,19 @@ msgid "" " pub fn interrupt_pending(&self) -> bool {\n" " // Safe because we know that self.registers points to the control\n" " // registers of a PL031 device which is appropriately mapped.\n" -" let ris = unsafe { addr_of!((*self.registers).mis)." -"read_volatile() };\n" +" let ris = unsafe { addr_of!((*self.registers).mis).read_volatile() };\n" " (ris & 0x01) != 0\n" " }\n" "\n" " /// Sets or clears the interrupt mask.\n" " ///\n" -" /// When the mask is true the interrupt is enabled; when it is false " -"the\n" +" /// When the mask is true the interrupt is enabled; when it is false the\n" " /// interrupt is disabled.\n" " pub fn enable_interrupt(&mut self, mask: bool) {\n" " let imsc = if mask { 0x01 } else { 0x00 };\n" " // Safe because we know that self.registers points to the control\n" " // registers of a PL031 device which is appropriately mapped.\n" -" unsafe { addr_of_mut!((*self.registers).imsc)." -"write_volatile(imsc) }\n" +" unsafe { addr_of_mut!((*self.registers).imsc).write_volatile(imsc) }\n" " }\n" "\n" " /// Clears a pending interrupt, if any.\n" @@ -20717,8 +20037,7 @@ msgid "" " extract_links: bool,\n" "}\n" "\n" -"fn visit_page(client: &Client, command: &CrawlCommand) -> Result, " -"Error> {\n" +"fn visit_page(client: &Client, command: &CrawlCommand) -> Result, Error> {\n" " println!(\"Checking {:#}\", command.url);\n" " let response = client.get(command.url.clone()).send()?;\n" " if !response.status().is_success() {\n" @@ -20744,8 +20063,7 @@ msgid "" " link_urls.push(link_url);\n" " }\n" " Err(err) => {\n" -" println!(\"On {base_url:#}: ignored unparsable {href:?}: " -"{err}\");\n" +" println!(\"On {base_url:#}: ignored unparsable {href:?}: {err}\");\n" " }\n" " }\n" " }\n" @@ -20805,8 +20123,7 @@ msgid "" " // The sender got dropped. No more commands coming in.\n" " break;\n" " };\n" -" let crawl_result = match visit_page(&client, &crawl_command) " -"{\n" +" let crawl_result = match visit_page(&client, &crawl_command) {\n" " Ok(link_urls) => Ok(link_urls),\n" " Err(error) => Err((crawl_command.url, error)),\n" " };\n" @@ -20822,8 +20139,7 @@ msgid "" " result_receiver: mpsc::Receiver,\n" ") -> Vec {\n" " let mut crawl_state = CrawlState::new(&start_url);\n" -" let start_command = CrawlCommand { url: start_url, extract_links: " -"true };\n" +" let start_command = CrawlCommand { url: start_url, extract_links: true };\n" " command_sender.send(start_command).unwrap();\n" " let mut pending_urls = 1;\n" "\n" @@ -20836,10 +20152,8 @@ msgid "" " Ok(link_urls) => {\n" " for url in link_urls {\n" " if crawl_state.mark_visited(&url) {\n" -" let extract_links = crawl_state." -"should_extract_links(&url);\n" -" let crawl_command = CrawlCommand { url, " -"extract_links };\n" +" let extract_links = crawl_state.should_extract_links(&url);\n" +" let crawl_command = CrawlCommand { url, extract_links };\n" " command_sender.send(crawl_command).unwrap();\n" " pending_urls += 1;\n" " }\n" @@ -20857,15 +20171,13 @@ msgid "" "\n" "fn check_links(start_url: Url) -> Vec {\n" " let (result_sender, result_receiver) = mpsc::channel::();\n" -" let (command_sender, command_receiver) = mpsc::channel::" -"();\n" +" let (command_sender, command_receiver) = mpsc::channel::();\n" " spawn_crawler_threads(command_receiver, result_sender, 16);\n" " control_crawl(start_url, command_sender, result_receiver)\n" "}\n" "\n" "fn main() {\n" -" let start_url = reqwest::Url::parse(\"https://www.google.org\")." -"unwrap();\n" +" let start_url = reqwest::Url::parse(\"https://www.google.org\").unwrap();\n" " let bad_urls = check_links(start_url);\n" " println!(\"Bad URLs: {:#?}\", bad_urls);\n" "}\n" @@ -20917,8 +20229,7 @@ msgid "" "impl Philosopher {\n" " async fn think(&self) {\n" " self.thoughts\n" -" .send(format!(\"Eureka! {} has a new idea!\", &self.name))." -"await\n" +" .send(format!(\"Eureka! {} has a new idea!\", &self.name)).await\n" " .unwrap();\n" " }\n" " // ANCHOR_END: Philosopher-think\n" @@ -20928,8 +20239,7 @@ msgid "" " // Pick up forks...\n" " // ANCHOR_END: Philosopher-eat\n" " let _first_lock = self.left_fork.lock().await;\n" -" // Add a delay before picking the second fork to allow the " -"execution\n" +" // Add a delay before picking the second fork to allow the execution\n" " // to transfer to another task\n" " time::sleep(time::Duration::from_millis(1)).await;\n" " let _second_lock = self.right_fork.lock().await;\n" @@ -20952,8 +20262,7 @@ msgid "" " // ANCHOR_END: Philosopher-eat-end\n" " // Create forks\n" " let mut forks = vec![];\n" -" (0..PHILOSOPHERS.len()).for_each(|_| forks.push(Arc::new(Mutex::" -"new(Fork))));\n" +" (0..PHILOSOPHERS.len()).for_each(|_| forks.push(Arc::new(Mutex::new(Fork))));\n" "\n" " // Create philosophers\n" " let (philosophers, mut rx) = {\n" @@ -20961,8 +20270,7 @@ msgid "" " let (tx, rx) = mpsc::channel(10);\n" " for (i, name) in PHILOSOPHERS.iter().enumerate() {\n" " let left_fork = Arc::clone(&forks[i]);\n" -" let right_fork = Arc::clone(&forks[(i + 1) % PHILOSOPHERS." -"len()]);\n" +" let right_fork = Arc::clone(&forks[(i + 1) % PHILOSOPHERS.len()]);\n" " // To avoid a deadlock, we have to break the symmetry\n" " // somewhere. This will swap the forks without deinitializing\n" " // either of them.\n" @@ -21042,8 +20350,7 @@ msgid "" " .await?;\n" " let mut bcast_rx = bcast_tx.subscribe();\n" "\n" -" // A continuous loop for concurrently performing two tasks: (1) " -"receiving\n" +" // A continuous loop for concurrently performing two tasks: (1) receiving\n" " // messages from `ws_stream` and broadcasting them, and (2) receiving\n" " // messages on `bcast_rx` and sending them to the client.\n" " loop {\n" @@ -21129,8 +20436,7 @@ msgid "" " tokio::select! {\n" " incoming = ws_stream.next() => {\n" " match incoming {\n" -" Some(Ok(msg)) => println!(\"From server: {}\", msg." -"as_text()?),\n" +" Some(Ok(msg)) => println!(\"From server: {}\", msg.as_text()?),\n" " Some(Err(err)) => return Err(err.into()),\n" " None => return Ok(()),\n" " }\n" @@ -21138,8 +20444,8 @@ msgid "" " res = stdin.next_line() => {\n" " match res {\n" " Ok(None) => return Ok(()),\n" -" Ok(Some(line)) => ws_stream.send(Message::text(line." -"to_string())).await?,\n" +" Ok(Some(line)) => ws_stream.send(Message::text(line.to_string()))." +"await?,\n" " Err(err) => return Err(err.into()),\n" " }\n" " }\n" @@ -21154,13 +20460,13 @@ msgstr "" #~ msgstr "āĻ˛āĻŋāĻĢāĻŸ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨" #~ msgid "" -#~ "[![Build workflow](https://img.shields.io/github/actions/workflow/status/" -#~ "google/comprehensive-rust/build.yml?style=flat-square)](https://github." -#~ "com/google/comprehensive-rust/actions/workflows/build.yml)" +#~ "[![Build workflow](https://img.shields.io/github/actions/workflow/status/google/" +#~ "comprehensive-rust/build.yml?style=flat-square)](https://github.com/google/" +#~ "comprehensive-rust/actions/workflows/build.yml)" #~ msgstr "" -#~ "[![Build workflow](https://img.shields.io/github/actions/workflow/status/" -#~ "google/comprehensive-rust/build.yml?style=flat-square)](https://github." -#~ "com/google/comprehensive-rust/actions/workflows/build.yml)" +#~ "[![Build workflow](https://img.shields.io/github/actions/workflow/status/google/" +#~ "comprehensive-rust/build.yml?style=flat-square)](https://github.com/google/" +#~ "comprehensive-rust/actions/workflows/build.yml)" #~ msgid "Build workflow" #~ msgstr "āĻ•āĻ°ā§āĻŽāĻĒā§āĻ°āĻŦāĻžāĻš āĻ¤ā§ˆāĻ°āĻŋ" @@ -21170,28 +20476,26 @@ msgstr "" #~ msgid "" #~ "[![GitHub contributors](https://img.shields.io/github/contributors/google/" -#~ "comprehensive-rust?style=flat-square)](https://github.com/google/" -#~ "comprehensive-rust/graphs/contributors) [![GitHub stars](https://img." -#~ "shields.io/github/stars/google/comprehensive-rust?style=flat-square)]" -#~ "(https://github.com/google/comprehensive-rust/stargazers)" +#~ "comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/" +#~ "graphs/contributors) [![GitHub stars](https://img.shields.io/github/stars/google/" +#~ "comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/" +#~ "stargazers)" #~ msgstr "" #~ "[![GitHub contributors](https://img.shields.io/github/contributors/google/" -#~ "comprehensive-rust?style=flat-square)](https://github.com/google/" -#~ "comprehensive-rust/graphs/contributors) [![GitHub stars](https://img." -#~ "shields.io/github/stars/google/comprehensive-rust?style=flat-square)]" -#~ "(https://github.com/google/comprehensive-rust/stargazers)" +#~ "comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/" +#~ "graphs/contributors) [![GitHub stars](https://img.shields.io/github/stars/google/" +#~ "comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/" +#~ "stargazers)" #~ msgid "GitHub stars" #~ msgstr "GitHub stars" #~ msgid "" -#~ "[![GitHub stars](https://img.shields.io/github/stars/google/comprehensive-" -#~ "rust?style=flat-square)](https://github.com/google/comprehensive-rust/" -#~ "stargazers)" +#~ "[![GitHub stars](https://img.shields.io/github/stars/google/comprehensive-rust?" +#~ "style=flat-square)](https://github.com/google/comprehensive-rust/stargazers)" #~ msgstr "" -#~ "[![GitHub stars](https://img.shields.io/github/stars/google/comprehensive-" -#~ "rust?style=flat-square)](https://github.com/google/comprehensive-rust/" -#~ "stargazers)" +#~ "[![GitHub stars](https://img.shields.io/github/stars/google/comprehensive-rust?" +#~ "style=flat-square)](https://github.com/google/comprehensive-rust/stargazers)" #~ msgid "Day 1: Basic Rust, ownership and the borrow checker." #~ msgstr "āĻĒā§āĻ°āĻĨāĻŽ āĻĻāĻŋāĻ¨āĻƒ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻ°āĻžāĻ¸ā§āĻŸ, āĻŽāĻžāĻ˛āĻŋāĻ•āĻžāĻ¨āĻž āĻāĻŦāĻ‚ āĻ§āĻžāĻ° āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻ•āĨ¤" @@ -21203,13 +20507,13 @@ msgstr "" #~ msgstr "Rustup (āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦāĻŋāĻ¤)" #~ msgid "" -#~ "You can follow the instructions to install cargo and rust compiler, among " -#~ "other standard ecosystem tools with the [rustup](https://rust-analyzer." -#~ "github.io/) tool, which is maintained by the Rust Foundation." +#~ "You can follow the instructions to install cargo and rust compiler, among other " +#~ "standard ecosystem tools with the [rustup](https://rust-analyzer.github.io/) tool, " +#~ "which is maintained by the Rust Foundation." #~ msgstr "" -#~ "āĻ°āĻžāĻ¸ā§āĻŸ āĻĢāĻžāĻ‰āĻ¨ā§āĻĄā§‡āĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ°āĻ•ā§āĻˇāĻŖāĻžāĻŦā§‡āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻž [rustup](https://rust-analyzer.github." -#~ "io/) āĻŸā§āĻ˛ āĻ¸āĻš āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ‡āĻ•ā§‹āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻŸā§āĻ˛ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ Cargo āĻāĻŦāĻ‚ āĻ°āĻžāĻ¸ā§āĻŸ " -#~ "āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤" +#~ "āĻ°āĻžāĻ¸ā§āĻŸ āĻĢāĻžāĻ‰āĻ¨ā§āĻĄā§‡āĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ°āĻ•ā§āĻˇāĻŖāĻžāĻŦā§‡āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻž [rustup](https://rust-analyzer.github.io/) āĻŸā§āĻ˛ āĻ¸āĻš " +#~ "āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ‡āĻ•ā§‹āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻŸā§āĻ˛ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ Cargo āĻāĻŦāĻ‚ āĻ°āĻžāĻ¸ā§āĻŸ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° " +#~ "āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤" #~ msgid "Package Managers" #~ msgstr "āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻžāĻ°"