diff --git a/po/fa.po b/po/fa.po index 70c803c0bef..cc900c6b53b 100644 --- a/po/fa.po +++ b/po/fa.po @@ -5,11 +5,12 @@ msgstr "" "PO-Revision-Date: 2023-08-08 21:41+0330\n" "Last-Translator: danny \n" "Language-Team: Persian\n" +"Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fa\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 3.3.2\n" #: src/SUMMARY.md:4 src/index.md:1 msgid "Welcome to Comprehensive Rust 🦀" @@ -133,8 +134,7 @@ msgstr "سربارگذاری" #: src/SUMMARY.md:149 src/SUMMARY.md:178 src/SUMMARY.md:205 src/SUMMARY.md:226 #: src/SUMMARY.md:254 src/SUMMARY.md:276 src/SUMMARY.md:297 #: 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 "تمرین‌ها" @@ -1024,13 +1024,13 @@ msgstr "همزمانی: عصر" #: src/index.md:3 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)" +"[![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)" 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?query=branch%3Amain)" +"[![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)" #: src/index.md:3 msgid "Build workflow" @@ -1038,12 +1038,12 @@ msgstr "ساخت workflow" #: src/index.md:3 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)" +"[![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)" msgstr "" #: src/index.md:4 @@ -1053,16 +1053,16 @@ msgstr "مشارکت کنندگان GitHub" #: src/index.md:4 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)" #: src/index.md:5 msgid "GitHub stars" @@ -1070,19 +1070,17 @@ msgstr "ستاره های GitHub" #: src/index.md:5 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)" #: src/index.md:7 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، از syntax اولیه تا موضوعات " @@ -1090,11 +1088,11 @@ msgstr "" #: 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 "" -"هدف از این دوره آموزش Rust به شماست. ما فرض می کنیم شما چیزی از درباره Rust " -"نمی دانید امید به یادگیری:" +"هدف از این دوره آموزش Rust به شماست. ما فرض می کنیم شما چیزی از درباره Rust نمی " +"دانید امید به یادگیری:" #: src/index.md:14 msgid "Give you a comprehensive understanding of the Rust syntax and language." @@ -1103,8 +1101,8 @@ msgstr "درک جامعی از syntax و زبان Rust به شما می دهد." #: src/index.md:15 msgid "Enable you to modify existing programs and write new programs in Rust." msgstr "" -"شما را قادر می سازد تا برنامه های موجود را تغییر دهید و برنامه های جدید را " -"در Rust بنویسید." +"شما را قادر می سازد تا برنامه های موجود را تغییر دهید و برنامه های جدید را در " +"Rust بنویسید." #: src/index.md:16 msgid "Show you common Rust idioms." @@ -1117,8 +1115,7 @@ msgstr "ما سه روز اول دوره را Rust Fundamentals می نامیم. #: src/index.md:20 msgid "" "Building on this, you're invited to dive into one or more specialized topics:" -msgstr "" -"با تکیه بر این، از شما دعوت می شود تا به یک یا چند موضوع تخصصی بپردازید:" +msgstr "با تکیه بر این، از شما دعوت می شود تا به یک یا چند موضوع تخصصی بپردازید:" #: src/index.md:22 #, fuzzy @@ -1127,13 +1124,12 @@ msgid "" "development (AOSP). This includes interoperability with C, C++, and Java." msgstr "" "ه [Android](android.md): دوره نیم روزه استفاده از Rust برای پلتفرم اندروید " -"توسعه (AOSP). این شامل قابلیت همکاری با C، C++ و جاوا می شود. ه \\[Bare-" -"metal\\] (bare-metal.md): یک کلاس تمام روز در مورد استفاده از Rust برای bare-" -"metal می‌شود توسعه (embedded). هم میکروکنترلرها و هم پردازنده های کاربردی " -"تحت پوشش آموزشی هستند ه [Concurrency](concurrency.md): یک کلاس تمام روز در " -"مورد همزمانی در Rust. ما هر دو همزمانی کلاسیک (برنامه ریزی پیشگیرانه با " -"استفاده از نخ ها و موتکس) و همزمانی async/wait (همکاری چندوظیفه ای با " -"استفاده از حالت futures)." +"توسعه (AOSP). این شامل قابلیت همکاری با C، C++ و جاوا می شود. ه \\[Bare-metal" +"\\] (bare-metal.md): یک کلاس تمام روز در مورد استفاده از Rust برای bare-metal " +"می‌شود توسعه (embedded). هم میکروکنترلرها و هم پردازنده های کاربردی تحت پوشش " +"آموزشی هستند ه [Concurrency](concurrency.md): یک کلاس تمام روز در مورد همزمانی " +"در Rust. ما هر دو همزمانی کلاسیک (برنامه ریزی پیشگیرانه با استفاده از نخ ها و " +"موتکس) و همزمانی async/wait (همکاری چندوظیفه ای با استفاده از حالت futures)." #: src/index.md:24 msgid "" @@ -1146,8 +1142,7 @@ msgstr "" 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)." +"mutexes) and async/await concurrency (cooperative multitasking using futures)." msgstr "" #: src/index.md:33 @@ -1156,8 +1151,8 @@ 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 "" "Rust زبان بزرگی است و تا چند روز دیگر نمی‌توانیم همه آن را پوشش دهیم. برخی از " "اهداف غیر از این دوره عبارتند از:" @@ -1178,9 +1173,9 @@ msgstr "فرضیه ها" #: src/index.md:44 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 یک زبان استاتیک تایپ " "است \n" @@ -1198,8 +1193,8 @@ 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." +"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 "" #: src/running-the-course.md:3 src/running-the-course/course-structure.md:3 @@ -1208,8 +1203,8 @@ 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 @@ -1218,67 +1213,71 @@ 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." +"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 "" #: 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 "" #: 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 " -"information in the standard library." +"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 "" #: 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/" +"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 "" +"لطفاً [بازخورد خود را ارائه دهید](https://github.com/google/comprehensive-rust/" +"discussions/86) تا در آینده بتوانیم به بهبود دوره ادامه دهیم. ما دوست داریم " +"بشنویم چه چیزی برای شما خوب بوده و چه چیزی می تواند بهتر شود. همینطور شما " +"دانش‌آموزان نیز بسیار خوش آمدید [برای ما بازخورد ارسال کنید] (https://github.com/" "google/comprehensive-rust/discussions/100)!" -msgstr "" #: src/running-the-course/course-structure.md:5 msgid "The course is fast paced and covers a lot of ground:" @@ -1286,7 +1285,7 @@ msgstr "یاد گیری این دوره کوتاه است و مبحث‌های #: src/running-the-course/course-structure.md:7 msgid "Day 1: Basic Rust, ownership and the borrow checker." -msgstr "" +msgstr "روز 1: زنگ اولیه، مالکیت و چک کننده قرض." #: src/running-the-course/course-structure.md:8 msgid "Day 2: Compound data types, pattern matching, the standard library." @@ -1305,45 +1304,42 @@ msgid "" "In addition to the 3-day class on Rust Fundamentals, we cover some more " "specialized topics:" msgstr "" -"علاوه بر کلاس 3 روزه Rust Fundamentals، موضوعات تخصصی تری را نیز پوشش می " -"دهیم:" +"علاوه بر کلاس 3 روزه Rust Fundamentals، موضوعات تخصصی تری را نیز پوشش می دهیم:" #: src/running-the-course/course-structure.md:18 msgid "" -"The [Android Deep Dive](../android.md) is a half-day course on using Rust " -"for Android platform development. This includes interoperability with C, C+" -"+, and Java." +"The [Android Deep Dive](../android.md) 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++ و جاوا " -"می شود." +"در [Android Deep Dive](../android.md) یک دوره نیم روزه در مورد استفاده از Rust " +"برای توسعه پلتفرم اندروید است. این شامل قابلیت تعامل با C، C++ و جاوا می شود." #: src/running-the-course/course-structure.md:22 #, fuzzy 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 Checkout](https://source.android.com/docs/setup/download/" "downloading) نیاز دارید. یک checkout از \\[course repository\\] [2](https://" "github.com/google/comprehensive-rust) در همان دستگاه انجام دهید و دایرکتوری " -"`src/android/` را به root صورت AOSP checkout خود منتقل کنید. این اطمینان " -"حاصل می کند که سیستم ساخت اندروید فایل های «Android.bp» را در «src/android/» " -"می بیند." +"`src/android/` را به root صورت AOSP checkout خود منتقل کنید. این اطمینان حاصل " +"می کند که سیستم ساخت اندروید فایل های «Android.bp» را در «src/android/» می بیند." #: 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." +"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 sync» با شبیه‌ساز یا دستگاه واقعی شما کار می‌کند و " -"همه نمونه‌های Android را با استفاده از «src/android/build_all.sh» از قبل " -"بسازید. اسکریپت را بخوانید تا دستوراتی را که اجرا می‌کند ببینید و مطمئن شوید " -"که وقتی آنها را اجرا می‌کنید به درستی کار می‌کنند." +"اطمینان حاصل کنید که «adb sync» با شبیه‌ساز یا دستگاه واقعی شما کار می‌کند و همه " +"نمونه‌های Android را با استفاده از «src/android/build_all.sh» از قبل بسازید. " +"اسکریپت را بخوانید تا دستوراتی را که اجرا می‌کند ببینید و مطمئن شوید که وقتی " +"آنها را اجرا می‌کنید به درستی کار می‌کنند." #: src/running-the-course/course-structure.md:34 msgid "Bare-Metal" @@ -1361,14 +1357,14 @@ msgstr "" #: 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 "" -"برای قسمت میکروکنترلر، باید برد توسعه [BBCmicro:bit](https://microbit.org/) " -"v2 را خریداری کنید. همه باید تعدادی بسته را همانطور که در \\[welcome " -"page\\] (../bare-metal.md) توضیح داده شده نصب کنند." +"برای قسمت میکروکنترلر، باید برد توسعه [BBCmicro:bit](https://microbit.org/) v2 " +"را خریداری کنید. همه باید تعدادی بسته را همانطور که در \\[welcome page\\] (../" +"bare-metal.md) توضیح داده شده نصب کنند." #: src/running-the-course/course-structure.md:45 msgid "Concurrency" @@ -1376,22 +1372,22 @@ msgstr "همزمانی" #: src/running-the-course/course-structure.md:47 msgid "" -"The [Concurrency Deep Dive](../concurrency.md) is a full day class on " -"classical as well as `async`/`await` concurrency." +"The [Concurrency Deep Dive](../concurrency.md) is a full day class on classical " +"as well as `async`/`await` concurrency." msgstr "" -"این \\[Concurrency Deep Dive\\] (../concurrency.md) به اصطلاح یک کلاس یک " -"روزه است و همچنین همزمانی `async`/`await` اینگونه است." +"این \\[Concurrency Deep Dive\\] (../concurrency.md) به اصطلاح یک کلاس یک روزه " +"است و همچنین همزمانی `async`/`await` اینگونه است." #: src/running-the-course/course-structure.md:50 #, fuzzy 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 "" -"شما به یک جعبه(crate) جدید نیاز برای وابستگی ها دانلود شده که آماده کار " -"هستند نیاز دارید. سپس می‌توانید مثال‌ها را در «src/main.rs» به راحتی copy/" -"paste کنید و با آنها آزمایش کنید:" +"شما به یک جعبه(crate) جدید نیاز برای وابستگی ها دانلود شده که آماده کار هستند " +"نیاز دارید. سپس می‌توانید مثال‌ها را در «src/main.rs» به راحتی copy/paste کنید و " +"با آنها آزمایش کنید:" #: src/running-the-course/course-structure.md:54 msgid "" @@ -1418,8 +1414,8 @@ msgid "" "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:" @@ -1427,55 +1423,56 @@ msgstr "چندین میانبر صفحه کلید مفید در mdBook وجود #: src/running-the-course/keyboard-shortcuts.md:5 msgid "Arrow-Left" -msgstr "" +msgstr "Arrow-Left" #: src/running-the-course/keyboard-shortcuts.md:5 msgid ": Navigate to the previous page." -msgstr "" +msgstr ": به صفحه قبلی هدایت می کند" #: src/running-the-course/keyboard-shortcuts.md:6 msgid "Arrow-Right" -msgstr "" +msgstr "Arrow-Right" #: src/running-the-course/keyboard-shortcuts.md:6 msgid ": Navigate to the next page." -msgstr "" +msgstr "به صفحه بعدی هدایت می کند" + #: src/running-the-course/keyboard-shortcuts.md:7 src/cargo/code-samples.md:19 msgid "Ctrl + Enter" -msgstr "" +msgstr "Ctrl + Enter" #: src/running-the-course/keyboard-shortcuts.md:7 msgid ": Execute the code sample that has focus." -msgstr "" +msgstr "اجرای نمونه کدی که بر روی آن قرار گرفته است." + #: src/running-the-course/keyboard-shortcuts.md:8 msgid "s" -msgstr "" +msgstr "s" #: src/running-the-course/keyboard-shortcuts.md:8 msgid ": Activate the search bar." -msgstr "" +msgstr "نوار جستجو را فعال می کند." #: src/running-the-course/translations.md:3 msgid "" "The course has been translated into other languages by a set of wonderful " "volunteers:" msgstr "" -"این دوره توسط مجموعه ای از داوطلبان فوق العاده به زبان های دیگر ترجمه شده " -"است:" +"این دوره توسط مجموعه ای از داوطلبان فوق العاده به زبان های دیگر ترجمه شده است:" #: src/running-the-course/translations.md:6 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 "" -"[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)." #: src/running-the-course/translations.md:7 msgid "" @@ -1513,14 +1510,14 @@ msgstr "" #: src/running-the-course/translations.md:17 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 "" #: src/running-the-course/translations.md:18 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 "" #: src/running-the-course/translations.md:19 @@ -1533,9 +1530,9 @@ msgstr "" #: 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)." +"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 "" "اگر می‌خواهید به این کار کمک کنید، لطفاً \\[دستورالعمل‌های ما\\] را برای چگونگی " "ادامه کار ببینید. ترجمه ها در [issue tracker](https://github.com/google/" @@ -1543,17 +1540,16 @@ 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 می کنید، خیلی سریع با Cargo\\](https://doc." -"rust-lang.org/cargo/)\\] ، ابزار استانداردی که در اکوسیستم Rust برای ساخت و " -"اجرای برنامه های Rust استفاده می شود، آشنا خواهید شد. در اینجا می‌خواهیم یک " -"مرور مختصر از در مورد کارگو و نحوه انطباق آن با اکوسیستم رراست و برنامه‌های " -"آن را در این آموزش ارائه دهیم." +"وقتی شروع به خواندن درباره Rust می کنید، خیلی سریع با Cargo\\](https://doc.rust-" +"lang.org/cargo/)\\] ، ابزار استانداردی که در اکوسیستم Rust برای ساخت و اجرای " +"برنامه های Rust استفاده می شود، آشنا خواهید شد. در اینجا می‌خواهیم یک مرور مختصر " +"از در مورد کارگو و نحوه انطباق آن با اکوسیستم رراست و برنامه‌های آن را در این " +"آموزش ارائه دهیم." #: src/cargo.md:8 msgid "Installation" @@ -1566,25 +1562,24 @@ msgstr "**لطفا دستورالعمل را اجرا کنید " +"میزبانی می شوند دانلود کند و هنگام ساخت پروژه آنها را به \"rustc\" منتقل می " +"کند. Cargo همچنین دارای یک دستگاه تست داخلی است که برای اجرای unit testها " +"استفاده می شود.\n" + +"* `rustup`: که در واقع toolchain installer و ابزار به روز رسانی در Rust است. " +"این ابزار برای نصب و به‌روزرسانی «rustc» و «cargo» هنگام انتشار نسخه‌های جدید " +"Rust استفاده می‌شود. علاوه بر این، «rustup» همچنین می‌تواند مستندات standard " +"library را دانلود کند. همینطور می‌توانید چندین نسخه Rust را به‌طور هم‌زمان نصب " +"کنید و «rustup» به شمcا امکان می‌دهد در صورت نیاز بین آنها جابجا شوید." #: src/cargo/rust-ecosystem.md:8 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." +"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 و build tool آن است. Cargo می داند که چگونه " +"وابستگی ها را که معمولاً در میزبانی می شوند دانلود کند و " +"هنگام ساخت پروژه آنها را به \"rustc\" منتقل می‌کند. Cargo همچنین دارای یک " +"دستگاه تست داخلی است که برای اجرای unit test استفاده می شود." + #: 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." +"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»: نصب‌کننده و به‌روزرسانی‌کننده toolchain مربوط به Rust است. این ابزار " +"برای نصب و به‌روزرسانی «rustc» و «cargo» هنگام انتشار نسخه‌های جدید Rust " +"استفاده می‌شود. علاوه بر این، «rustup» می‌تواند مستندات کتابخانه استاندارد " +"Rust را دانلود کند. همچنین می‌توانید چندین نسخه Rust را به‌طور هم‌زمان نصب " +"کنید و «rustup» به شما امکان می‌دهد در صورت نیاز بین آنها جابجا شوید." #: src/cargo/rust-ecosystem.md:21 src/hello-world.md:25 #: src/hello-world/small-example.md:27 src/why-rust/runtime.md:10 @@ -1668,102 +1686,131 @@ 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." +"weeks. New releases maintain backwards compatibility with old releases --- plus " +"they enable new functionality." msgstr "" +"Rust یک برنامه سریع برای انتشار نسخه‌های جدید دارد و هر شش هفته یک نسخه جدید " +"منتشر می شود. نسخه‌های جدید سازگاری با نسخه‌های قدیمی را حفظ می‌کنند --- به " +"علاوه قابلیت‌های جدید را فعال می‌کنند." #: src/cargo/rust-ecosystem.md:27 msgid "" "There are three release channels: \"stable\", \"beta\", and \"nightly\"." -msgstr "" + +msgstr "سه کانال انتشار وجود دارد: \"stable\"، \"beta\"، و \"nightly\"." #: 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 "" +"ویژگی های جدید در \"nightly\" آزمایش می شوند ، \"beta\" چیزی است که هر شش " +"هفته \"stable\" می شود." #: 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." msgstr "" +"همچنین می‌توان وابستگی‌ها را از [registries](https://doc.rust-lang.org/cargo/" +"reference/registries.html)، پوشه‌ها و git و موارد دیگر برطرف کرد." #: 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 "" +"Rust همچنین نسخه [editions](https://doc.rust-lang.org/edition-guide/) دارد: " +"نسخه فعلی Rust 2021 است. نسخه های قبلی Rust 2015 و Rust 2018 بودند." #: src/cargo/rust-ecosystem.md:37 msgid "" "The editions are allowed to make backwards incompatible changes to the " "language." -msgstr "" +msgstr "نسخه ها مجاز به ایجاد تغییرات backwards incompatible در زبان هستند." #: src/cargo/rust-ecosystem.md:40 +#, fuzzy 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 "" +"برای جلوگیری از breaking code، نسخه‌هایی انتخاب می‌شوند که: شما نسخه‌ مورد نظر " +"برای crate خود از طریق فایل «Cargo.toml» انتخاب می‌کنید." #: src/cargo/rust-ecosystem.md:43 +#, fuzzy msgid "" "To avoid splitting the ecosystem, Rust compilers can mix code written for " "different editions." msgstr "" +"برای جلوگیری از شکاف در اکوسیستم، کامپایلرهای Rust می توانند کدهای نوشته شده " +"برای نسخه های مختلف را ترکیب کنند." #: 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)." msgstr "" +"لازم به ذکر است که استفاده از کامپایلر به طور مستقیم و نه از طریق \"cargo\" " +"بسیار غیرمعمول است (اکثر کاربران هرگز این کار را نمی کنند)." #: 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: " +"comprehensive tool. It is capable of many advanced features including but not " +"limited to: " msgstr "" +"شاید لازم به ذکر باشد که Cargo خود یک ابزار بسیار قدرتمند و جامع است. این " +"قابلیت دارای بسیاری از ویژگی های پیشرفته زیر است و محدود به همین موارد " +"نمی‌شود:" #: src/cargo/rust-ecosystem.md:49 msgid "Project/package structure" -msgstr "" +msgstr "Project/package structure" #: src/cargo/rust-ecosystem.md:50 msgid "[workspaces](https://doc.rust-lang.org/cargo/reference/workspaces.html)" msgstr "" +"[workspaces](https://doc.rust-lang.org/cargo/reference/workspaces.html)" #: src/cargo/rust-ecosystem.md:51 msgid "Dev Dependencies and Runtime Dependency management/caching" -msgstr "" +msgstr "وابستگی های Dev و وابستگی‌های Runtime Management/Caching." #: src/cargo/rust-ecosystem.md:52 msgid "" +"[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts.html)" +msgstr "" "[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)" msgstr "" +"[global installation](https://doc.rust-lang.org/cargo/commands/cargo-install." +"html)" #: 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 "" +"همچنین با command plugin فرعی (مانند [cargo clippy](https://github.com/rust-" +"lang/rust-clippy)) قابل توسعه است." #: src/cargo/rust-ecosystem.md:55 + msgid "" "Read more from the [official Cargo Book](https://doc.rust-lang.org/cargo/)" msgstr "" +"از [official Cargo Book](https://doc.rust-lang.org/cargo/) بیشتر بخوانید." #: src/cargo/code-samples.md:1 msgid "Code Samples in This Training" -msgstr "" +msgstr "نمونه کد در این آموزش" #: src/cargo/code-samples.md:3 msgid "" @@ -1771,17 +1818,23 @@ msgid "" "which can be executed through your browser. This makes the setup much easier " "and ensures a consistent experience for everyone." msgstr "" +"برای این آموزش، بیشتر زبان Rust را از طریق مثال هایی که می توان از طریق " +"مرورگر شما اجرا کرد، بررسی می کنیم. این کار راه اندازی را بسیار ساده تر می " +"کند و تجربه ای ثابت را برای همه تضمین می کند." #: 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 "" +"نصب Cargo همچنان پیشنهاد می شود: چونکه انجام تمرینات را برای شما آسان تر می " +"کند. در روز آخر، تمرین بزرگتری را انجام خواهیم داد که به شما نشان می دهد " +"چگونه با وابستگی ها کار کنید و برای این کار شما به Cargo نیاز دارید." #: src/cargo/code-samples.md:11 msgid "The code blocks in this course are fully interactive:" -msgstr "" +msgstr "بلوک های کد در این دوره کاملاً تعاملی(interactive) هستند:" #: src/cargo/code-samples.md:13 msgid "" @@ -1791,46 +1844,63 @@ msgid "" "}\n" "```" msgstr "" +"```rust,editable\n" +"fn main() {\n" +" println!(\"Edit me!\");\n" +"}\n" +"```" #: src/cargo/code-samples.md:19 msgid "You can use " -msgstr "" +msgstr "همان طور که مشاهده می‌کنید" #: src/cargo/code-samples.md:19 msgid " to execute the code when focus is in the text box." -msgstr "" +msgstr "برای اجرای کد زمانی که focus در text box است." #: 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:" 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." msgstr "" +"همینطورembedded playground نمی توانند unit tests را اجرا کنند. کد را کپی " +"کنید و آن را در Playground واقعی باز کنید تا unit tests د را نشان دهید." #: 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 "" +"در واقع embedded playgrounds در لحظه ای که از صفحه دور می شوید حالت پایدار " +"خود را از دست می دهند! به همین دلیل است که دانش آموزان باید تمرینات را با " +"استفاده از local Rust installation یا از طریق زPlayground حل کنند." #: src/cargo/running-locally.md:1 msgid "Running Code Locally with Cargo" -msgstr "" +msgstr "اجرای کد به صورت Locally با 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 "" +"اگر می خواهید کد را روی سیستم خود آزمایش کنید، ابتدا باید Rust را نصب کنید. " +"این کار را با دنبال کردن [instructions in the Rust Book](https://doc.rust-" +"lang.org/book/ch01-01-installation.html) انجام دهید. این باید به شما یک " +"«rustc» و «cargo» کاربردی بدهد. در زمان نگارش، آخرین نسخه پایدار Rust دارای " +"این version numberها است:" #: src/cargo/running-locally.md:8 msgid "" @@ -1841,21 +1911,33 @@ msgid "" "cargo 1.69.0 (6e9a83356 2023-04-12)\n" "```" msgstr "" +"```shell\n" +"% rustc --version\n" +"rustc 1.69.0 (84c898d65 2023-04-16)\n" +"% cargo --version\n" +"cargo 1.69.0 (6e9a83356 2023-04-12)\n" +"```" #: src/cargo/running-locally.md:15 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 بسازید:" + #: src/cargo/running-locally.md:18 msgid "Click the \"Copy to clipboard\" button on the example you want to copy." msgstr "" +"روی دکمه \"کپی در کلیپ بورد\" در نمونه ای که می خواهید کپی کنید؛ کلیک کنید." #: src/cargo/running-locally.md:20 msgid "" "Use `cargo new exercise` to create a new `exercise/` directory for your code:" msgstr "" +"از «cargo new exercise» برای ایجاد دایرکتوری «excerise/» جدید برای کد خود " +"استفاده کنید:" #: src/cargo/running-locally.md:22 msgid "" @@ -1864,11 +1946,18 @@ msgid "" " Created binary (application) `exercise` package\n" "```" msgstr "" +"```shell\n" +"$ cargo new exercise\n" +" Created binary (application) `exercise` package\n" +"```" #: src/cargo/running-locally.md:27 msgid "" "Navigate into `exercise/` and use `cargo run` to build and run your binary:" msgstr "" +"به «exercise/» بروید و از «cargo run» برای ساخت و اجرای باینری خود استفاده " +"کنید:" + #: src/cargo/running-locally.md:29 msgid "" @@ -1881,12 +1970,22 @@ msgid "" "Hello, world!\n" "```" msgstr "" +"```shell\n" +"$ cd exercise\n" +"$ cargo run\n" +" Compiling exercise v0.1.0 (/home/mgeisler/tmp/exercise)\n" +" Finished dev [unoptimized + debuginfo] target(s) in 0.75s\n" +" Running `target/debug/exercise`\n" +"Hello, world!\n" +"```" #: src/cargo/running-locally.md:38 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/main.rs` با کد خود جایگزین کنید. برای مثال، با " +"استفاده از مثال در صفحه قبل، «src/main.rs» را شبیه به آن کنید." #: src/cargo/running-locally.md:41 msgid "" @@ -1896,10 +1995,15 @@ msgid "" "}\n" "```" msgstr "" +"```rust\n" +"fn main() {\n" +" println!(\"Edit me!\");\n" +"}\n" +"```" #: src/cargo/running-locally.md:47 msgid "Use `cargo run` to build and run your updated binary:" -msgstr "" +msgstr "برای ساختن و اجرای باینری به روز شده خود از «Cargo Run» استفاده کنید:" #: src/cargo/running-locally.md:49 msgid "" @@ -1911,21 +2015,35 @@ msgid "" "Edit me!\n" "```" msgstr "" +"```shell\n" +"$ cargo run\n" +" Compiling exercise v0.1.0 (/home/mgeisler/tmp/exercise)\n" +" Finished dev [unoptimized + debuginfo] target(s) in 0.24s\n" +" Running `target/debug/exercise`\n" +"Edit me!\n" +"```" #: src/cargo/running-locally.md:57 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 "" +"از «cargo check» برای بررسی سریع پروژه خود برای خطاها استفاده کنید، از " +"«cargo build» برای کامپایل آن بدون اجرای آن استفاده کنید. خروجی را در " +"«target/debug/» برای ساخت اشکال زدایی معمولی خواهید یافت. برای تولید نسخه " +"بهینه سازی شده در «target/release/» از «cargo build --release» استفاده کنید." #: src/cargo/running-locally.md:62 msgid "" -"You can add dependencies for your project by editing `Cargo.toml`. When you " -"run `cargo` commands, it will automatically download and compile missing " +"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 "" +"با ویرایش «Cargo.toml» می‌توانید وابستگی‌هایی برای پروژه خود اضافه کنید. " +"هنگامی که دستورات \"cargo\" را اجرا می کنید، به طور خودکار وابستگی های گم " +"شده را برای شما دانلود و کامپایل می کند." #: src/cargo/running-locally.md:70 msgid "" @@ -1933,75 +2051,91 @@ msgid "" "editor. It will make their life easier since they will have a normal " "development environment." msgstr "" +"سعی کنید شرکت کنندگان کلاس را تشویق کنید تا Cargo را نصب کنند و از یک " +"ویرایشگر محلی استفاده کنند. این زندگی آنها را آسان تر می کند زیرا آنها یک " +"محیط توسعه عادی خواهند داشت." #: src/welcome-day-1.md:1 msgid "Welcome to Day 1" -msgstr "" +msgstr "به روز 1 خوش آمدید" #: src/welcome-day-1.md:3 msgid "" -"This is the first day of Rust Fundamentals. We will cover a lot of ground " -"today:" +"This is the first day of Rust Fundamentals. We will cover a lot of ground today:" msgstr "" +"این اولین روز از Rust Fundamentals است. ما امروز زمینه های زیادی را پوشش " +"خواهیم داد:" #: src/welcome-day-1.md:6 msgid "" "Basic Rust syntax: variables, scalar and compound types, enums, structs, " "references, functions, and methods." msgstr "" +"Basic Rust syntax: variables, scalar و compound types, enums, structs, " +"references, functions, and methods." #: src/welcome-day-1.md:9 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 "" +"Memory management: stack vs heap, manual memory management, scope-based " +"memory management, و garbage collection." #: src/welcome-day-1.md:12 msgid "" "Ownership: move semantics, copying and cloning, borrowing, and lifetimes." -msgstr "" + +msgstr "Ownership: حرکت semantics،copying و cloning, borrowing و lifetimes." #: src/welcome-day-1.md:16 msgid "Please remind the students that:" -msgstr "" +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!" -msgstr "" +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 "" +"به‌عنوان یک مربی، باید سعی کنید بحث‌ها را مرتبط نگه دارید، به عنوان مثال، " +"بحث‌های مرتبط با نحوه انجام کارها توسط Rust در مقابل برخی زبان‌های دیگر را حفظ " +"کنید. پیدا کردن تعادل مناسب می تواند سخت باشد، اما در مورد اجازه دادن به بحث " +"اشتباه کنید، زیرا آنها بیشتر از ارتباط یک طرفه افراد را درگیر می کنند." #: src/welcome-day-1.md:24 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 @@ -2020,14 +2154,14 @@ 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):" +"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 "" #: src/welcome-day-1/what-is-rust.md:5 @@ -2089,8 +2223,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 @@ -2142,9 +2275,8 @@ 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 four 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 four days so we start small with something familiar." msgstr "" #: src/hello-world.md:27 @@ -2165,10 +2297,9 @@ 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 @@ -2204,16 +2335,15 @@ 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 @@ -2234,9 +2364,9 @@ 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 @@ -2263,24 +2393,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 " +"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 @@ -2320,8 +2450,7 @@ 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 @@ -2334,14 +2463,14 @@ 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)." +"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 @@ -2370,20 +2499,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." +"call functions such as `slice::get_unchecked` which does not do bounds checking." msgstr "" #: src/why-rust/modern.md:3 @@ -2432,10 +2559,10 @@ 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 @@ -2447,17 +2574,17 @@ 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 @@ -2474,24 +2601,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 @@ -2510,8 +2637,8 @@ msgstr "" #: src/basic-syntax.md:6 msgid "" -"Line comments are started with `//`, block comments are delimited by `/* ... " -"*/`." +"Line comments are started with `//`, block comments are delimited by `/* ... */" +"`." msgstr "" #: src/basic-syntax.md:8 @@ -2629,9 +2756,9 @@ 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 "" #: src/basic-syntax/scalar-types.md:27 @@ -2661,8 +2788,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`." +"`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 @@ -2725,10 +2852,9 @@ msgstr "" #: 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 @@ -2738,9 +2864,9 @@ 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." +"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 @@ -2763,16 +2889,16 @@ 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 @@ -2803,14 +2929,13 @@ msgstr "" #: src/basic-syntax/references.md:16 msgid "" -"We must dereference `ref_x` when assigning to it, similar to C and C++ " -"pointers." +"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 @@ -2822,9 +2947,8 @@ 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." +"&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 @@ -2894,8 +3018,7 @@ 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." +"starting index, meaning that `&a[0..a.len()]` and `&a[..a.len()]` are identical." msgstr "" #: src/basic-syntax/slices.md:25 @@ -2905,15 +3028,14 @@ msgid "" 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 @@ -2927,9 +3049,9 @@ 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." +"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 @@ -2973,21 +3095,21 @@ 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." +"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." +"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 @@ -3055,14 +3177,14 @@ 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 @@ -3073,28 +3195,25 @@ 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 "" @@ -3103,8 +3222,8 @@ msgstr "" 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." +"(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 @@ -3115,27 +3234,27 @@ 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)." +"`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 @@ -3167,8 +3286,7 @@ msgstr "" #: src/basic-syntax/methods.md:30 msgid "" -"We will look much more at methods in today's exercise and in tomorrow's " -"class." +"We will look much more at methods in today's exercise and in tomorrow's class." msgstr "" #: src/basic-syntax/methods.md:34 @@ -3186,10 +3304,10 @@ 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 @@ -3278,8 +3396,8 @@ 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." +"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 @@ -3295,8 +3413,7 @@ msgstr "" #: src/exercises/day-1/morning.md:22 src/exercises/day-1/afternoon.md:11 #: src/exercises/day-2/morning.md:11 src/exercises/day-2/afternoon.md:7 #: src/exercises/day-3/morning.md:7 src/exercises/bare-metal/morning.md:7 -#: src/exercises/bare-metal/afternoon.md:7 -#: src/exercises/concurrency/morning.md:12 +#: src/exercises/bare-metal/afternoon.md:7 src/exercises/concurrency/morning.md:12 #: src/exercises/concurrency/afternoon.md:13 msgid "" "After looking at the exercises, you can look at the \\[solutions\\] provided." @@ -3304,9 +3421,9 @@ 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 @@ -3327,27 +3444,26 @@ 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` " +"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 "" @@ -3361,15 +3477,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 "" @@ -3386,8 +3501,7 @@ msgstr "" #: src/exercises/day-1/for-loops.md:9 msgid "" -"You can print such an array by asking for its debug representation with `{:?}" -"`:" +"You can print such an array by asking for its debug representation with `{:?}`:" msgstr "" #: src/exercises/day-1/for-loops.md:11 @@ -3508,8 +3622,8 @@ 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 @@ -3526,8 +3640,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/variables.md:18 @@ -3564,24 +3678,23 @@ 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 @@ -3602,10 +3715,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." +"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 @@ -3614,9 +3727,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 @@ -3625,8 +3737,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 @@ -3638,8 +3750,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" @@ -3653,14 +3764,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 @@ -3686,22 +3797,22 @@ 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 @@ -3716,14 +3827,14 @@ 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 @@ -3750,10 +3861,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 "" @@ -3765,8 +3874,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 "" @@ -3793,8 +3901,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 @@ -3819,9 +3927,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 @@ -3963,8 +4071,8 @@ 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 @@ -3977,8 +4085,8 @@ 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 @@ -3989,8 +4097,7 @@ 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::" @@ -4034,28 +4141,27 @@ 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 " +"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." +"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 @@ -4086,8 +4192,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 @@ -4104,8 +4209,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 @@ -4114,8 +4219,7 @@ msgstr "" #: src/memory-management/garbage-collection.md:7 msgid "" -"A garbage collector finds unused memory and deallocates it for the " -"programmer." +"A garbage collector finds unused memory and deallocates it for the programmer." msgstr "" #: src/memory-management/garbage-collection.md:9 @@ -4149,9 +4253,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 @@ -4160,8 +4263,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 @@ -4171,18 +4274,17 @@ 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." +"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 @@ -4210,13 +4312,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 "" @@ -4282,8 +4382,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 @@ -4302,8 +4402,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 @@ -4348,20 +4447,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 @@ -4545,8 +4643,8 @@ 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 @@ -4562,8 +4660,7 @@ msgid "" 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 @@ -4620,8 +4717,7 @@ msgid "" 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 @@ -4640,8 +4736,8 @@ 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 @@ -4656,9 +4752,9 @@ 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 @@ -4703,9 +4799,9 @@ 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:" +"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 @@ -4780,15 +4876,15 @@ 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 @@ -4817,21 +4913,20 @@ 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:" +"In addition to borrowing its arguments, a function can return a borrowed value:" msgstr "" #: src/ownership/lifetimes-function-calls.md:5 @@ -4862,14 +4957,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 @@ -4901,8 +4995,8 @@ 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." +"'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 @@ -4922,14 +5016,13 @@ 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 @@ -4943,8 +5036,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" @@ -4963,15 +5055,15 @@ 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 @@ -4982,8 +5074,8 @@ msgstr "" 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." +"relationships between the references themselves, in addition to the lifetime of " +"the struct itself. Those are very advanced use cases." msgstr "" #: src/exercises/day-1/afternoon.md:1 @@ -5004,8 +5096,8 @@ msgstr "" #: src/exercises/day-1/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-1/book-library.md:6 @@ -5025,8 +5117,8 @@ msgstr "" #: src/exercises/day-1/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-1/book-library.md:21 @@ -5075,8 +5167,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" @@ -5095,8 +5186,7 @@ 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" @@ -5134,8 +5224,7 @@ msgstr "" #: src/exercises/day-1/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:" +"`Iterator` trait simply says that you can call `next` until you get `None` back:" msgstr "" #: src/exercises/day-1/iterators-and-ownership.md:13 @@ -5195,8 +5284,7 @@ msgstr "" #: src/exercises/day-1/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:" +"iterator. The related trait `IntoIterator` tells you how to create the iterator:" msgstr "" #: src/exercises/day-1/iterators-and-ownership.md:53 @@ -5213,8 +5301,8 @@ msgstr "" #: src/exercises/day-1/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-1/iterators-and-ownership.md:65 @@ -5239,8 +5327,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" @@ -5255,17 +5342,16 @@ msgstr "" #: src/exercises/day-1/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-1/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" @@ -5315,8 +5401,8 @@ msgstr "" #: 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 @@ -5374,8 +5460,7 @@ msgstr "" #: src/structs.md:36 msgid "" -"Methods are defined in an `impl` block, which we will see in following " -"slides." +"Methods are defined in an `impl` block, which we will see in following slides." msgstr "" #: src/structs.md:37 @@ -5386,22 +5471,22 @@ 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 @@ -5448,8 +5533,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 @@ -5458,8 +5543,8 @@ 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 @@ -5470,8 +5555,8 @@ 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 @@ -5574,13 +5659,12 @@ 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/enums.md:3 @@ -5624,8 +5708,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 @@ -5634,8 +5718,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 @@ -5645,14 +5729,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. " +"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 @@ -5688,26 +5772,26 @@ 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 `=>`." +"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 @@ -5734,15 +5818,14 @@ 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:" +"Rust enums are packed tightly, taking constraints due to alignment into account:" msgstr "" #: src/enums/sizes.md:5 @@ -5769,8 +5852,7 @@ msgstr "" #: src/enums/sizes.md:24 msgid "" -"See the [Rust Reference](https://doc.rust-lang.org/reference/type-layout." -"html)." +"See the [Rust Reference](https://doc.rust-lang.org/reference/type-layout.html)." msgstr "" #: src/enums/sizes.md:30 @@ -5804,8 +5886,7 @@ msgstr "" #: src/enums/sizes.md:49 msgid "" -"Without `repr`, the discriminant type takes 2 bytes, because 10001 fits 2 " -"bytes." +"Without `repr`, the discriminant type takes 2 bytes, because 10001 fits 2 bytes." msgstr "" #: src/enums/sizes.md:53 @@ -5841,15 +5922,15 @@ 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::>()`." +"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 @@ -5911,8 +5992,7 @@ msgid "" " };\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" @@ -5930,8 +6010,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" @@ -5952,8 +6031,8 @@ 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 @@ -5994,8 +6073,8 @@ 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." +"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 @@ -6004,14 +6083,14 @@ 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 @@ -6022,8 +6101,8 @@ 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 @@ -6032,8 +6111,8 @@ 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 @@ -6068,17 +6147,17 @@ 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 @@ -6095,8 +6174,8 @@ 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" @@ -6133,8 +6212,8 @@ 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 @@ -6144,22 +6223,22 @@ 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/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 @@ -6220,15 +6299,15 @@ 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:" +"how you inspect the structure of your types. Let us start with a simple `enum` " +"type:" msgstr "" #: src/pattern-matching/destructuring-enums.md:6 @@ -6260,14 +6339,14 @@ 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." +"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 @@ -6295,8 +6374,8 @@ 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" "```" @@ -6374,8 +6453,7 @@ msgstr "" #: src/pattern-matching/destructuring-arrays.md:43 msgid "" -"Point out that how `..` will expand to account for different number of " -"elements." +"Point out that how `..` will expand to account for different number of elements." msgstr "" #: src/pattern-matching/destructuring-arrays.md:44 @@ -6384,8 +6462,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 @@ -6407,17 +6485,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 @@ -6448,15 +6525,15 @@ 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 @@ -6520,8 +6597,8 @@ 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" @@ -6575,8 +6652,8 @@ msgstr "" #: src/exercises/day-2/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:" +"below to and fill in the missing methods to make " +"the tests pass:" msgstr "" #: src/exercises/day-2/points-polygons.md:7 @@ -6703,28 +6780,28 @@ msgstr "" #: src/exercises/day-2/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-2/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/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." +"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 @@ -6751,8 +6828,7 @@ msgstr "" #: src/control-flow/blocks.md:26 msgid "" -"If the last expression ends with `;`, then the resulting value and type is " -"`()`." +"If the last expression ends with `;`, then the resulting value and type is `()`." msgstr "" #: src/control-flow/blocks.md:28 @@ -6776,8 +6852,7 @@ 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. " +"The point of this slide is to show that blocks have a type and value in Rust. " msgstr "" #: src/control-flow/blocks.md:45 @@ -6792,8 +6867,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 @@ -6833,8 +6908,8 @@ 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." +"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/if-let-expressions.md:1 @@ -6866,14 +6941,14 @@ msgstr "" #: 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 @@ -6888,9 +6963,9 @@ 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`):" +"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 @@ -6916,8 +6991,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 @@ -6965,9 +7040,8 @@ 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." +"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 @@ -6978,9 +7052,9 @@ 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/for-expressions.md:1 @@ -7156,8 +7230,8 @@ 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 @@ -7182,15 +7256,14 @@ 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/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 @@ -7199,8 +7272,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 @@ -7223,20 +7296,19 @@ msgstr "" #: src/std.md:21 msgid "" -"[`Rc`](std/rc.md): a shared reference-counted pointer for heap-allocated " -"data." +"[`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 @@ -7246,8 +7318,7 @@ msgid "" 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 @@ -7282,8 +7353,8 @@ msgstr "" #: src/std/option-result.md:20 msgid "" -"`Result` is the standard type to implement error handling as we will see on " -"Day 3." +"`Result` is the standard type to implement error handling as we will see on Day " +"3." msgstr "" #: src/std/option-result.md:21 @@ -7329,27 +7400,27 @@ 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/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/" +"`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 "" @@ -7367,8 +7438,8 @@ 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 @@ -7388,14 +7459,14 @@ 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 @@ -7444,22 +7515,22 @@ 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 @@ -7471,8 +7542,8 @@ 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 @@ -7490,8 +7561,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" @@ -7500,8 +7570,8 @@ 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" @@ -7509,8 +7579,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" +" 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" @@ -7529,8 +7599,8 @@ 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." +"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 @@ -7551,10 +7621,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 @@ -7569,21 +7639,21 @@ 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." +"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/box.md:1 @@ -7624,15 +7694,15 @@ 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 @@ -7654,8 +7724,8 @@ 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." +"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 @@ -7663,8 +7733,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 @@ -7677,8 +7746,8 @@ 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" "```" @@ -7688,8 +7757,8 @@ msgstr "" msgid "" "```bob\n" " Stack Heap\n" -".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - " -"- -.\n" +".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - - " +"-.\n" ": : : :\n" ": " "list : : :\n" @@ -7701,8 +7770,8 @@ msgid "" "+ :\n" ": : : :\n" ": : : :\n" -"'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - " -"- -'\n" +"'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - - " +"-'\n" "```" msgstr "" @@ -7715,8 +7784,8 @@ 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 @@ -7760,9 +7829,9 @@ 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 @@ -7782,16 +7851,15 @@ msgstr "" #: src/std/rc.md:18 msgid "" -"If you need to mutate the data inside an `Rc`, you will need to wrap the " -"data in a type such as [`Cell` or `RefCell`](../concurrency/shared_state/arc." -"md)." +"If you need to mutate the data inside an `Rc`, you will need to wrap the data " +"in a type such as [`Cell` or `RefCell`](../concurrency/shared_state/arc.md)." msgstr "" #: src/std/rc.md:20 msgid "" -"See [`Arc`](https://doc.rust-lang.org/std/sync/struct.Mutex.html) and " -"[`Mutex`](https://doc.rust-lang.org/std/rc/struct.Weak.html) if you are in a " -"multi-threaded context." +"See [`Arc`](https://doc.rust-lang.org/std/sync/struct.Mutex.html) and [`Mutex`]" +"(https://doc.rust-lang.org/std/rc/struct.Weak.html) if you are in a multi-" +"threaded context." msgstr "" #: src/std/rc.md:21 @@ -7802,8 +7870,8 @@ msgstr "" #: src/std/rc.md:32 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:33 @@ -7812,9 +7880,9 @@ msgstr "" #: src/std/rc.md:34 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:35 @@ -7830,14 +7898,14 @@ msgstr "" #: src/std/rc.md:37 msgid "" "Compare the different datatypes mentioned. `Box` enables (im)mutable borrows " -"that are enforced at compile time. `RefCell` enables (im)mutable borrows " -"that are enforced at run time and will panic if it fails at runtime." +"that are enforced at compile time. `RefCell` enables (im)mutable borrows that " +"are enforced at run time and will panic if it fails at runtime." msgstr "" #: src/std/rc.md:38 msgid "" -"`Rc::downgrade` gives you a _weakly reference-counted_ object to create " -"cycles that will be dropped properly (likely in combination with `RefCell`)." +"`Rc::downgrade` gives you a _weakly reference-counted_ object to create cycles " +"that will be dropped properly (likely in combination with `RefCell`)." msgstr "" #: src/std/rc.md:42 @@ -7903,14 +7971,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 @@ -7931,8 +7999,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 @@ -7971,8 +8039,8 @@ 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 @@ -7991,8 +8059,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 @@ -8025,8 +8093,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 @@ -8038,8 +8106,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 @@ -8051,9 +8118,9 @@ 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 @@ -8070,9 +8137,8 @@ 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 @@ -8102,8 +8168,8 @@ 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 @@ -8123,8 +8189,7 @@ msgstr "" #: src/modules/filesystem.md:52 msgid "" -"The place rust will look for modules can be changed with a compiler " -"directive:" +"The place rust will look for modules can be changed with a compiler directive:" msgstr "" #: src/modules/filesystem.md:54 @@ -8137,8 +8202,8 @@ 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/afternoon.md:1 @@ -8151,9 +8216,9 @@ msgstr "" #: src/exercises/day-2/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-2/luhn.md:7 @@ -8162,8 +8227,8 @@ msgstr "" #: src/exercises/day-2/luhn.md:9 msgid "" -"Moving from right to left, double every second digit: for the number `1234`, " -"we double `3` and `1`." +"Moving from right to left, double every second digit: for the number `1234`, we " +"double `3` and `1`." msgstr "" #: src/exercises/day-2/luhn.md:12 @@ -8240,10 +8305,10 @@ 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 @@ -8265,15 +8330,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" @@ -8291,8 +8353,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" @@ -8311,8 +8372,7 @@ msgstr "" #: src/welcome-day-3.md:5 msgid "" -"Traits: deriving traits, default methods, and important standard library " -"traits." +"Traits: deriving traits, default methods, and important standard library traits." msgstr "" #: src/welcome-day-3.md:8 @@ -8397,14 +8457,13 @@ msgstr "" #: src/generics/methods.md:25 msgid "" -"_Q:_ Why `T` is specified twice in `impl Point {}`? Isn't that " -"redundant?" +"_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 @@ -8461,8 +8520,8 @@ 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 @@ -8491,8 +8550,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" @@ -8512,8 +8570,7 @@ msgstr "" #: src/traits/trait-objects.md:3 msgid "" -"Trait objects allow for values of different types, for instance in a " -"collection:" +"Trait objects allow for values of different types, for instance in a collection:" msgstr "" #: src/traits/trait-objects.md:5 @@ -8537,8 +8594,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" @@ -8562,8 +8618,8 @@ msgstr "" msgid "" "```bob\n" " Stack Heap\n" -".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - " -"- -.\n" +".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - " +"-.\n" ": : : :\n" ": " "pets : : :\n" @@ -8604,8 +8660,8 @@ msgid "" " : +----------------------" "+ :\n" " : :\n" -" '- - - - - - - - - - - - - - - - - - - - - " -"- -'\n" +" '- - - - - - - - - - - - - - - - - - - - - - " +"-'\n" "\n" "```" msgstr "" @@ -8625,9 +8681,9 @@ 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." +"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 @@ -8709,9 +8765,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 @@ -8754,8 +8810,8 @@ 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 @@ -8822,8 +8878,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 @@ -8857,8 +8913,7 @@ 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 @@ -8876,29 +8931,27 @@ 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." +"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:" +"We will now look at some of the most common traits of the Rust standard library:" msgstr "" #: src/traits/important-traits.md:5 @@ -8911,8 +8964,7 @@ 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," +"(https://doc.rust-lang.org/std/convert/trait.Into.html) used to convert values," msgstr "" #: src/traits/important-traits.md:7 @@ -8923,21 +8975,20 @@ 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 @@ -8980,26 +9031,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." +"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)." +"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 @@ -9033,8 +9083,8 @@ 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 " +"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 "" @@ -9054,8 +9104,8 @@ 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:" +"automatically implemented when [`From`](https://doc.rust-lang.org/std/convert/" +"trait.From.html) is implemented:" msgstr "" #: src/traits/from-into.md:17 @@ -9073,15 +9123,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_ " +"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 "" @@ -9091,9 +9141,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 @@ -9254,8 +9304,8 @@ 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 @@ -9264,8 +9314,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 @@ -9274,15 +9324,15 @@ 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 @@ -9291,8 +9341,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 @@ -9338,14 +9388,13 @@ 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." +"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 @@ -9354,10 +9403,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 @@ -9389,9 +9438,8 @@ 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 @@ -9408,9 +9456,9 @@ 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 @@ -9421,8 +9469,8 @@ 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 @@ -9616,10 +9664,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 @@ -9635,8 +9683,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 @@ -9688,8 +9735,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 @@ -9698,8 +9744,7 @@ msgstr "" #: src/error-handling/panic-unwind.md:3 msgid "" -"By default, a panic will cause the stack to unwind. The unwinding can be " -"caught:" +"By default, a panic will cause the stack to unwind. The unwinding can be caught:" msgstr "" #: src/error-handling/panic-unwind.md:5 @@ -9766,16 +9811,16 @@ 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." +"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 @@ -9784,8 +9829,8 @@ 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 @@ -9855,20 +9900,18 @@ 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 a `Result` or an `Option`. 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 a `Result` or an " +"`Option`. 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 @@ -9924,8 +9967,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" @@ -9957,21 +10000,21 @@ msgstr "" 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." +"`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." +"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 @@ -10021,9 +10064,9 @@ 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 @@ -10059,18 +10102,17 @@ 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:" +"contextual information to your errors and allows you to have fewer custom error " +"types:" msgstr "" #: src/error-handling/error-contexts.md:7 @@ -10108,9 +10150,9 @@ 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 @@ -10120,9 +10162,8 @@ 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 @@ -10281,8 +10322,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 @@ -10291,8 +10332,7 @@ msgstr "" #: src/testing/useful-crates.md:9 msgid "" -"[rstest](https://docs.rs/rstest): Support for fixtures and parameterised " -"tests." +"[rstest](https://docs.rs/rstest): Support for fixtures and parameterised tests." msgstr "" #: src/unsafe.md:3 @@ -10305,14 +10345,13 @@ msgstr "" #: src/unsafe.md:6 msgid "" -"**Unsafe Rust:** can trigger undefined behavior if preconditions are " -"violated." +"**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 @@ -10348,16 +10387,15 @@ 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/)." +"[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 @@ -10374,8 +10412,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" @@ -10390,9 +10427,9 @@ 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 @@ -10407,8 +10444,8 @@ 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 @@ -10421,8 +10458,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 @@ -10469,9 +10506,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 @@ -10497,22 +10534,22 @@ 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." +"[`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 @@ -10521,8 +10558,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" @@ -10581,15 +10617,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 @@ -10621,14 +10657,14 @@ 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." +"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 @@ -10674,8 +10710,7 @@ msgstr "" #: src/unsafe/unsafe-traits.md:33 msgid "" -"The actual safety section for `AsBytes` is rather longer and more " -"complicated." +"The actual safety section for `AsBytes` is rather longer and more complicated." msgstr "" #: src/unsafe/unsafe-traits.md:35 @@ -10776,8 +10811,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 @@ -10794,8 +10829,7 @@ msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:24 msgid "" -"`&str` to `CString`: you need to allocate space for a trailing `\\0` " -"character," +"`&str` to `CString`: you need to allocate space for a trailing `\\0` character," msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:25 @@ -10857,8 +10891,7 @@ msgid "" "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" @@ -10889,14 +10922,12 @@ 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" +" // 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" @@ -10951,23 +10982,23 @@ 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." +"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 @@ -11019,8 +11050,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 @@ -11029,8 +11060,7 @@ msgstr "" #: src/android/build-rules.md:10 msgid "" -"Produces a `proc-macro` Rust library. These are analogous to compiler " -"plugins." +"Produces a `proc-macro` Rust library. These are analogous to compiler plugins." msgstr "" #: src/android/build-rules.md:11 @@ -11055,8 +11085,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 @@ -11079,8 +11109,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 @@ -11218,8 +11248,8 @@ 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 "" @@ -11255,8 +11285,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 @@ -11327,8 +11356,7 @@ msgid "" " 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" @@ -11418,8 +11446,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 "" @@ -11507,8 +11534,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" @@ -11544,8 +11570,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 "" @@ -11559,8 +11584,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 @@ -11578,8 +11603,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 @@ -11637,8 +11662,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 "" @@ -11658,10 +11682,8 @@ 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 "" @@ -11736,8 +11758,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 @@ -11877,8 +11899,8 @@ 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 "" @@ -12015,23 +12037,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 @@ -12087,8 +12108,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 "" @@ -12157,8 +12177,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 @@ -12171,8 +12191,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 @@ -12181,10 +12201,10 @@ 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 @@ -12213,14 +12233,13 @@ msgstr "" 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." +"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 @@ -12236,15 +12255,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" "```" @@ -12414,15 +12432,15 @@ 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 @@ -12444,8 +12462,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" @@ -12463,14 +12480,14 @@ 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." +"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 @@ -12523,8 +12540,8 @@ 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 @@ -12568,10 +12585,8 @@ 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" +" 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" @@ -12604,8 +12619,8 @@ 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 @@ -12678,8 +12693,8 @@ 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 @@ -12690,9 +12705,8 @@ 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 @@ -12701,8 +12715,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 @@ -12764,8 +12778,8 @@ 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 @@ -12781,8 +12795,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 @@ -12811,8 +12825,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 @@ -12852,15 +12866,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" +" .into_open_drain_output(OpenDrainConfig::Disconnect0Standard1, Level::" +"Low);\n" " let _pin3: P0_03> = gpio0.p0_03." "into_push_pull_output(Level::Low);\n" "\n" @@ -12871,29 +12885,29 @@ 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 @@ -12936,21 +12950,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 @@ -12959,8 +12973,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 @@ -13003,28 +13017,28 @@ 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." +"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 @@ -13077,8 +13091,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 "" @@ -13112,8 +13126,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 @@ -13150,8 +13163,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 @@ -13164,8 +13177,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 @@ -13173,8 +13186,7 @@ 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 @@ -13202,10 +13214,10 @@ 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 @@ -13214,15 +13226,14 @@ msgid "" 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 @@ -13233,9 +13244,9 @@ 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 @@ -13354,8 +13365,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 @@ -13396,8 +13406,7 @@ msgid "" 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 @@ -13407,8 +13416,8 @@ 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" @@ -13427,8 +13436,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" @@ -13486,29 +13494,28 @@ msgstr "" 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." +"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 @@ -13517,17 +13524,17 @@ msgid "" "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.)" +"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." +"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 @@ -13539,8 +13546,8 @@ 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." +"(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 @@ -13549,8 +13556,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 @@ -13605,9 +13612,9 @@ 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 @@ -13620,18 +13627,18 @@ 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." +"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 @@ -13660,15 +13667,15 @@ 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 @@ -13690,8 +13697,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 @@ -13708,14 +13715,12 @@ 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" +" /// 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" @@ -13742,8 +13747,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" "```" @@ -13753,24 +13757,24 @@ msgstr "" 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." +"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 @@ -13779,8 +13783,8 @@ 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 @@ -13823,9 +13827,9 @@ msgstr "" 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." +"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 @@ -13991,8 +13995,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 @@ -14030,8 +14034,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 @@ -14103,14 +14107,12 @@ 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" +" /// 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" @@ -14164,8 +14166,7 @@ msgid "" "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 "" @@ -14236,9 +14237,8 @@ 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 @@ -14276,8 +14276,8 @@ 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" @@ -14353,9 +14353,9 @@ 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 " +"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 "" @@ -14422,24 +14422,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 @@ -14522,8 +14522,7 @@ 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." +"traits and macros for safely converting between byte sequences and other types." msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:6 @@ -14566,33 +14565,31 @@ 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." +"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." +"`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 @@ -14601,9 +14598,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 @@ -14631,21 +14627,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 @@ -14654,14 +14649,14 @@ 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`](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:" +"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 @@ -14689,9 +14684,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 @@ -14701,10 +14695,10 @@ 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." +"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 @@ -14725,8 +14719,7 @@ msgstr "" #: src/bare-metal/useful-crates/tinyvec.md:23 msgid "" -"`tinyvec` requires that the element type implement `Default` for " -"initialisation." +"`tinyvec` requires that the element type implement `Default` for initialisation." msgstr "" #: src/bare-metal/useful-crates/tinyvec.md:24 @@ -14784,16 +14777,15 @@ msgid "" 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 @@ -14841,9 +14833,9 @@ 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." +"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 @@ -14886,8 +14878,8 @@ 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." +"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 @@ -14899,15 +14891,15 @@ 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.)" +"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 @@ -14960,12 +14952,10 @@ msgid "" "\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" @@ -15118,8 +15108,8 @@ 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" @@ -15243,14 +15233,12 @@ 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" +" /// 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" @@ -15418,8 +15406,8 @@ 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" @@ -15437,10 +15425,8 @@ msgid "" ".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" @@ -15456,8 +15442,8 @@ 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 .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 | ." @@ -15504,8 +15490,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" @@ -15566,14 +15552,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" @@ -15630,8 +15613,7 @@ msgid "" "/**\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" +" * 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" @@ -15651,16 +15633,14 @@ msgid "" "/**\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" +" * 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" @@ -15816,8 +15796,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" @@ -15947,8 +15926,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" @@ -16026,14 +16005,14 @@ 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 @@ -16042,9 +16021,9 @@ 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 @@ -16071,8 +16050,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 @@ -16100,14 +16079,14 @@ 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 @@ -16135,8 +16114,7 @@ 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." +"implement `Clone` (so you can make multiple producers) but `Receiver` does not." msgstr "" #: src/concurrency/channels.md:29 @@ -16177,8 +16155,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 @@ -16211,20 +16188,20 @@ 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." +"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 @@ -16233,28 +16210,28 @@ 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 @@ -16273,21 +16250,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 @@ -16296,8 +16273,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 @@ -16319,9 +16296,9 @@ msgstr "" 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." +"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 @@ -16393,8 +16370,7 @@ 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 @@ -16483,14 +16459,14 @@ msgstr "" #: src/concurrency/shared_state/arc.md:31 msgid "" -"`Arc` implements `Clone` whether or not `T` does. It implements `Send` " -"and `Sync` iff `T` implements them both." +"`Arc` implements `Clone` whether or not `T` does. It implements `Send` and " +"`Sync` iff `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 @@ -16535,15 +16511,15 @@ 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 " +"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 @@ -16574,11 +16550,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 @@ -16641,8 +16617,7 @@ msgstr "" #: src/concurrency/shared_state/example.md:51 msgid "" -"`v` is wrapped in both `Arc` and `Mutex`, because their concerns are " -"orthogonal." +"`v` is wrapped in both `Arc` and `Mutex`, because their concerns are orthogonal." msgstr "" #: src/concurrency/shared_state/example.md:52 @@ -16683,21 +16658,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 @@ -16761,10 +16735,10 @@ 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 @@ -16790,8 +16764,8 @@ 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 @@ -16803,8 +16777,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 @@ -16815,8 +16789,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 @@ -16829,8 +16802,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" "```" @@ -16838,8 +16810,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 @@ -16905,8 +16877,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" @@ -16934,9 +16905,9 @@ 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 @@ -16945,19 +16916,19 @@ 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." +"that may be completed in the future. Futures are \"polled\" until they signal " +"that they are complete." msgstr "" #: src/async.md:14 @@ -16980,8 +16951,8 @@ 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." +"runtime implements the event loop, so many of the details of Promise resolution " +"are hidden." msgstr "" #: src/async/async-await.md:1 @@ -17031,14 +17002,14 @@ 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 @@ -17049,8 +17020,8 @@ 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 @@ -17061,10 +17032,10 @@ 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 @@ -17075,8 +17046,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" @@ -17088,48 +17058,47 @@ 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:" +"_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 @@ -17141,8 +17110,8 @@ 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 @@ -17167,8 +17136,7 @@ msgstr "" 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." +"Promises, for example, which will run to completion even if they are never used." msgstr "" #: src/async/runtimes/tokio.md:4 @@ -17248,11 +17216,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 @@ -17280,8 +17247,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" @@ -17300,27 +17266,26 @@ 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`. " +"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 @@ -17354,8 +17319,8 @@ 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 "" @@ -17377,15 +17342,14 @@ 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." +"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 @@ -17394,9 +17358,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 @@ -17409,9 +17372,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 @@ -17447,8 +17410,8 @@ 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`." +"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 @@ -17459,27 +17422,26 @@ 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." +"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 @@ -17535,33 +17497,33 @@ 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." +"`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 @@ -17599,9 +17561,8 @@ 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." +"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 @@ -17635,9 +17596,9 @@ 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 @@ -17655,31 +17616,30 @@ msgstr "" 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." +"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." +"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 @@ -17747,8 +17707,8 @@ 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 @@ -17758,8 +17718,7 @@ msgid "" 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 @@ -17778,8 +17737,7 @@ 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`:" +"`timeout_fut` in the `select!` to work around the move, then using `Box::pin`:" msgstr "" #: src/async/pitfalls/pin.md:92 @@ -17798,21 +17756,21 @@ 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." +"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." +"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 @@ -17883,25 +17841,24 @@ 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." +"_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 @@ -17980,8 +17937,8 @@ 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 @@ -17990,14 +17947,12 @@ msgstr "" #: src/async/pitfalls/cancellation.md:80 msgid "" -"Whenever the `tick()` branch finishes first, `next()` and its `buf` are " -"dropped." +"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:" +"`LinesReader` can be made cancellation-safe by makeing `buf` part of the struct:" msgstr "" #: src/async/pitfalls/cancellation.md:83 @@ -18027,15 +17982,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'." +"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 @@ -18046,14 +18001,13 @@ 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 @@ -18076,8 +18030,8 @@ 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:" +"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 @@ -18100,8 +18054,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" @@ -18130,8 +18083,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 @@ -18143,15 +18096,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 @@ -18161,18 +18114,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." +"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 @@ -18206,9 +18159,8 @@ 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. " +"[`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 @@ -18220,9 +18172,9 @@ 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 @@ -18234,8 +18186,8 @@ 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 @@ -18247,17 +18199,17 @@ 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)). " +"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 @@ -18381,9 +18333,9 @@ 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." +"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 @@ -18394,16 +18346,16 @@ 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 "" #: 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 @@ -18426,29 +18378,29 @@ 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 @@ -18458,8 +18410,7 @@ 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)." +"including working with raw pointers and interfacing with other languages (FFI)." msgstr "" #: src/other-resources.md:27 @@ -18471,9 +18422,8 @@ 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 @@ -18493,15 +18443,15 @@ 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_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 @@ -18512,39 +18462,39 @@ 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." +"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." +"documentation. See the page on [other resources](other-resources.md) for a full " +"list of useful resources." msgstr "" #: src/credits.md:7 @@ -18560,10 +18510,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 @@ -18583,8 +18532,8 @@ msgstr "" #: 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/` " +"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 "" @@ -18594,16 +18543,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." +"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 @@ -18695,17 +18644,17 @@ 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." +"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 @@ -18747,8 +18696,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 @@ -18844,8 +18793,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" @@ -18887,8 +18835,7 @@ 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" @@ -18913,8 +18860,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" @@ -18932,8 +18878,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" @@ -18950,8 +18895,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" @@ -19073,8 +19017,8 @@ msgid "" "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" +" // 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 " @@ -19241,8 +19185,8 @@ 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" @@ -19352,8 +19296,7 @@ msgid "" "\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" +" // 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 " @@ -19367,15 +19310,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" @@ -19393,8 +19333,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" @@ -19625,8 +19564,7 @@ msgid "" "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" @@ -19657,14 +19595,12 @@ 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" +" // 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" @@ -19769,8 +19705,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" @@ -19778,8 +19713,8 @@ 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" @@ -19890,10 +19825,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" @@ -19944,8 +19879,8 @@ 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" @@ -20033,12 +19968,10 @@ msgid "" "\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" @@ -20171,14 +20104,12 @@ 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" +" /// 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" @@ -20210,8 +20141,7 @@ msgid "" " 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" @@ -20222,22 +20152,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" @@ -20498,8 +20425,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" @@ -20515,8 +20441,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" @@ -20550,15 +20475,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" @@ -20610,8 +20533,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" @@ -20621,8 +20543,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" @@ -20654,8 +20575,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" @@ -20735,8 +20655,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"