From cf9243228975b7c3375fb6d8c9e027adcc41a602 Mon Sep 17 00:00:00 2001 From: javad-jafari Date: Wed, 18 Oct 2023 17:32:06 -0400 Subject: [PATCH] feat:add farsi translation --- po/fa.po | 3466 +++++++++++++++++++++++++++++------------------------- 1 file changed, 1853 insertions(+), 1613 deletions(-) diff --git a/po/fa.po b/po/fa.po index cc900c6b53b..9f21bacea43 100644 --- a/po/fa.po +++ b/po/fa.po @@ -134,7 +134,8 @@ 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 +1025,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 +1039,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 +1054,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,17 +1071,19 @@ 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 اولیه تا موضوعات " @@ -1088,11 +1091,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." @@ -1101,8 +1104,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." @@ -1115,7 +1118,8 @@ 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 @@ -1124,12 +1128,13 @@ 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 "" @@ -1142,7 +1147,8 @@ 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 @@ -1151,8 +1157,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 زبان بزرگی است و تا چند روز دیگر نمی‌توانیم همه آن را پوشش دهیم. برخی از " "اهداف غیر از این دوره عبارتند از:" @@ -1173,9 +1179,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" @@ -1193,8 +1199,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 @@ -1203,8 +1209,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 @@ -1213,71 +1219,72 @@ 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/google/" -"comprehensive-rust/discussions/100)!" -msgstr "" -"لطفاً [بازخورد خود را ارائه دهید](https://github.com/google/comprehensive-rust/" -"discussions/86) تا در آینده بتوانیم به بهبود دوره ادامه دهیم. ما دوست داریم " -"بشنویم چه چیزی برای شما خوب بوده و چه چیزی می تواند بهتر شود. همینطور شما " -"دانش‌آموزان نیز بسیار خوش آمدید [برای ما بازخورد ارسال کنید] (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)!" #: src/running-the-course/course-structure.md:5 msgid "The course is fast paced and covers a lot of ground:" @@ -1304,42 +1311,45 @@ 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" @@ -1357,14 +1367,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" @@ -1372,22 +1382,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 "" @@ -1414,8 +1424,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:" @@ -1437,7 +1447,6 @@ msgstr "Arrow-Right" msgid ": Navigate to the next page." msgstr "به صفحه بعدی هدایت می کند" - #: src/running-the-course/keyboard-shortcuts.md:7 src/cargo/code-samples.md:19 msgid "Ctrl + Enter" msgstr "Ctrl + Enter" @@ -1446,7 +1455,6 @@ msgstr "Ctrl + Enter" msgid ": Execute the code sample that has focus." msgstr "اجرای نمونه کدی که بر روی آن قرار گرفته است." - #: src/running-the-course/keyboard-shortcuts.md:8 msgid "s" msgstr "s" @@ -1460,19 +1468,20 @@ 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 "" @@ -1507,18 +1516,24 @@ msgid "" "[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol]" "(https://github.com/raselmandol)." msgstr "" +"[Bengali](https://google.github.io/comprehensive-rust/bn/) توسط " +"[@raselmandol](https://github.com/raselmandol)." #: 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 "" +"[French](https://google.github.io/comprehensive-rust/fr/) توسط [@KookaS]" +"(https://github.com/KookaS) و [@vcaen](https://github.com/vcaen)." #: 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 "" +"[German](https://google.github.io/comprehensive-rust/de/) توسط [@Throvn]" +"(https://github.com/Throvn) و [@ronaldfw](https://github.com/ronaldfw)." #: src/running-the-course/translations.md:19 msgid "" @@ -1526,13 +1541,16 @@ msgid "" "(https://github.com/CoinEZ) and [@momotaro1105](https://github.com/" "momotaro1105)." msgstr "" +"[Japanese](https://google.github.io/comprehensive-rust/ja/) توسط [@CoinEZ-" +"JPN](https://github.com/CoinEZ) و [@momotaro1105](https://github.com/" +"momotaro1105)." #: src/running-the-course/translations.md:21 msgid "" "If you want to help with this effort, please see [our instructions](https://" -"github.com/google/comprehensive-rust/blob/main/TRANSLATIONS.md) for how to get " -"going. Translations are coordinated on the [issue tracker](https://github.com/" -"google/comprehensive-rust/issues/282)." +"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/" @@ -1540,16 +1558,17 @@ 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" @@ -1562,24 +1581,25 @@ msgstr "**لطفا دستورالعمل را اجرا کنید , 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 " @@ -1681,13 +1700,13 @@ msgstr "" #: src/error-handling/converting-error-types-example.md:50 #: src/concurrency/threads.md:30 src/async/async-await.md:25 msgid "Key points:" -msgstr "" +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 یک برنامه سریع برای انتشار نسخه‌های جدید دارد و هر شش هفته یک نسخه جدید " "منتشر می شود. نسخه‌های جدید سازگاری با نسخه‌های قدیمی را حفظ می‌کنند --- به " @@ -1696,13 +1715,12 @@ msgstr "" #: src/cargo/rust-ecosystem.md:27 msgid "" "There are three release channels: \"stable\", \"beta\", and \"nightly\"." - 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\" می شود." @@ -1717,8 +1735,8 @@ msgstr "" #: src/cargo/rust-ecosystem.md:34 msgid "" -"Rust also has [editions](https://doc.rust-lang.org/edition-guide/): the current " -"edition is Rust 2021. Previous editions were Rust 2015 and Rust 2018." +"Rust also has [editions](https://doc.rust-lang.org/edition-guide/): the " +"current edition is Rust 2021. Previous editions were Rust 2015 and Rust 2018." msgstr "" "Rust همچنین نسخه [editions](https://doc.rust-lang.org/edition-guide/) دارد: " "نسخه فعلی Rust 2021 است. نسخه های قبلی Rust 2015 و Rust 2018 بودند." @@ -1732,8 +1750,8 @@ msgstr "نسخه ها مجاز به ایجاد تغییرات backwards incompat #: 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» انتخاب می‌کنید." @@ -1758,8 +1776,8 @@ msgstr "" #: src/cargo/rust-ecosystem.md:48 msgid "" "It might be worth alluding that Cargo itself is an extremely powerful and " -"comprehensive tool. It is capable of many advanced features including but not " -"limited to: " +"comprehensive tool. It is capable of many advanced features including but " +"not limited to: " msgstr "" "شاید لازم به ذکر باشد که Cargo خود یک ابزار بسیار قدرتمند و جامع است. این " "قابلیت دارای بسیاری از ویژگی های پیشرفته زیر است و محدود به همین موارد " @@ -1780,7 +1798,8 @@ msgstr "وابستگی های Dev و وابستگی‌های Runtime Manageme #: src/cargo/rust-ecosystem.md:52 msgid "" -"[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts.html)" +"[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)" @@ -1795,14 +1814,13 @@ msgstr "" #: src/cargo/rust-ecosystem.md:54 msgid "" -"It is also extensible with sub command plugins as well (such as [cargo clippy]" -"(https://github.com/rust-lang/rust-clippy))." +"It is also extensible with sub command plugins as well (such as [cargo " +"clippy](https://github.com/rust-lang/rust-clippy))." msgstr "" "همچنین با 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 "" @@ -1824,9 +1842,9 @@ msgstr "" #: src/cargo/code-samples.md:7 msgid "" -"Installing Cargo is still encouraged: it will make it easier for you to do the " -"exercises. On the last day, we will do a larger exercise which shows you how to " -"work with dependencies and for that you need Cargo." +"Installing Cargo is still encouraged: it will make it easier for you to do " +"the exercises. On the last day, we will do a larger exercise which shows you " +"how to work with dependencies and for that you need Cargo." msgstr "" "نصب Cargo همچنان پیشنهاد می شود: چونکه انجام تمرینات را برای شما آسان تر می " "کند. در روز آخر، تمرین بزرگتری را انجام خواهیم داد که به شما نشان می دهد " @@ -1876,9 +1894,9 @@ msgstr "" #: src/cargo/code-samples.md:30 msgid "" -"The embedded playgrounds lose their state the moment you navigate away from the " -"page! This is the reason that the students should solve the exercises using a " -"local Rust installation or via the Playground." +"The embedded playgrounds lose their state the moment you navigate away from " +"the page! This is the reason that the students should solve the exercises " +"using a local Rust installation or via the Playground." msgstr "" "در واقع embedded playgrounds در لحظه ای که از صفحه دور می شوید حالت پایدار " "خود را از دست می دهند! به همین دلیل است که دانش آموزان باید تمرینات را با " @@ -1890,11 +1908,11 @@ 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-" @@ -1920,13 +1938,12 @@ msgstr "" #: 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 "" @@ -1958,7 +1975,6 @@ msgstr "" "به «exercise/» بروید و از «cargo run» برای ساخت و اجرای باینری خود استفاده " "کنید:" - #: src/cargo/running-locally.md:29 msgid "" "```shell\n" @@ -1981,8 +1997,8 @@ msgstr "" #: 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» را شبیه به آن کنید." @@ -2025,10 +2041,10 @@ msgstr "" #: 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» برای کامپایل آن بدون اجرای آن استفاده کنید. خروجی را در " @@ -2037,8 +2053,8 @@ msgstr "" #: 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» می‌توانید وابستگی‌هایی برای پروژه خود اضافه کنید. " @@ -2061,7 +2077,8 @@ 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 است. ما امروز زمینه های زیادی را پوشش " "خواهیم داد:" @@ -2076,8 +2093,8 @@ msgstr "" #: 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." @@ -2085,7 +2102,6 @@ msgstr "" #: src/welcome-day-1.md:12 msgid "" "Ownership: move semantics, copying and cloning, borrowing, and lifetimes." - msgstr "Ownership: حرکت semantics،copying و cloning, borrowing و lifetimes." #: src/welcome-day-1.md:16 @@ -2093,7 +2109,8 @@ msgid "Please remind the students that:" msgstr "لطفا به دانش آموزان یادآوری کنید:" #: src/welcome-day-1.md:18 -msgid "They should ask questions when they get them, don't save them to the end." +msgid "" +"They should ask questions when they get them, don't save them to the end." msgstr "" "آنها باید سؤالاتی را که به دست آوردند بپرسند، آنها را تا انتها ذخیره نکنید." @@ -2105,10 +2122,11 @@ 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 در مقابل برخی زبان‌های دیگر را حفظ " @@ -2124,8 +2142,9 @@ 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 "" "این اصلاً اشکالی ندارد! تکرار بخش مهمی از یادگیری است. به یاد داشته باشید که " "اسلایدها فقط یک پشتیبان هستند و شما می توانید هر طور که دوست دارید از آنها " @@ -2133,10 +2152,14 @@ 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 "" +"ایده روز اول این است که _به اندازه کافی_ از Rust نشان داده شود تا بتوانیتا " +"بتوانید در مورد borrow checker .راهی که رااست برای مدیریت حافظه انجام می " +"دهد یک معروف صحبت کنیدمزیت بزرگی است و ما باید این را فوراً به دانش آموزان " +"نشان دهیم." #: src/welcome-day-1.md:33 msgid "" @@ -2154,14 +2177,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 @@ -2177,18 +2200,20 @@ msgid "" "Rust supports many [platforms and architectures](https://doc.rust-lang.org/" "nightly/rustc/platform-support.html):" msgstr "" +" رااست از بسیاری از [بسترها و معماری ها](https://doc.rust-lang.org/nightly/" +"rustc/platform-support.html) پشتیبانی می کند :" #: src/welcome-day-1/what-is-rust.md:9 msgid "x86, ARM, WebAssembly, ..." -msgstr "" +msgstr "x86, ARM, WebAssembly, ..." #: src/welcome-day-1/what-is-rust.md:10 msgid "Linux, Mac, Windows, ..." -msgstr "" +msgstr "Linux, Mac, Windows, ..." #: src/welcome-day-1/what-is-rust.md:11 msgid "Rust is used for a wide range of devices:" -msgstr "" +msgstr ":رااست برای طیف گسترده ای از دستگاه ها استفاده می شود" #: src/welcome-day-1/what-is-rust.md:12 msgid "firmware and boot loaders," @@ -2223,7 +2248,8 @@ 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 @@ -2275,8 +2301,9 @@ 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 @@ -2297,9 +2324,10 @@ 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 @@ -2335,15 +2363,16 @@ 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 @@ -2364,9 +2393,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 @@ -2393,24 +2422,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 @@ -2450,7 +2479,8 @@ 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 @@ -2463,14 +2493,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 @@ -2499,18 +2529,20 @@ 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 @@ -2559,10 +2591,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 @@ -2574,17 +2606,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 @@ -2601,24 +2633,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 @@ -2637,8 +2669,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 @@ -2756,9 +2788,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 @@ -2788,8 +2820,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 @@ -2852,9 +2884,10 @@ 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 @@ -2864,9 +2897,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 @@ -2889,16 +2922,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 @@ -2929,13 +2962,14 @@ 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 @@ -2947,8 +2981,9 @@ 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 @@ -3018,7 +3053,8 @@ 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 @@ -3028,14 +3064,15 @@ 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 @@ -3049,9 +3086,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 @@ -3095,21 +3132,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 @@ -3177,14 +3214,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 @@ -3195,25 +3232,28 @@ 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 "" @@ -3222,8 +3262,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 @@ -3234,27 +3274,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 @@ -3286,7 +3326,8 @@ 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 @@ -3304,10 +3345,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 @@ -3396,8 +3437,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 @@ -3413,7 +3454,8 @@ 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." @@ -3421,9 +3463,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 @@ -3444,26 +3486,27 @@ msgstr "" #: src/exercises/day-1/implicit-conversions.md:19 msgid "" -"The Rust integer types all implement the [`From`](https://doc.rust-lang.org/" -"std/convert/trait.From.html) and [`Into`](https://doc.rust-lang.org/std/" -"convert/trait.Into.html) traits to let us convert between them. The `From` " -"trait has a single `from()` method and similarly, the `Into` trait has a " -"single `into()` method. Implementing these traits is how a type expresses that " -"it can be converted into another type." +"The Rust integer types all implement the [`From`](https://doc.rust-lang." +"org/std/convert/trait.From.html) and [`Into`](https://doc.rust-lang.org/" +"std/convert/trait.Into.html) traits to let us convert between them. The " +"`From` trait has a single `from()` method and similarly, the `Into` " +"trait has a single `into()` method. Implementing these traits is how a type " +"expresses that it can be converted into another type." msgstr "" #: src/exercises/day-1/implicit-conversions.md:25 msgid "" -"The standard library has an implementation of `From for i16`, which means " -"that we can convert a variable `x` of type `i8` to an `i16` by calling `i16::" -"from(x)`. Or, simpler, with `x.into()`, because `From for i16` " -"implementation automatically create an implementation of `Into for i8`." +"The standard library has an implementation of `From for i16`, which " +"means that we can convert a variable `x` of type `i8` to an `i16` by " +"calling `i16::from(x)`. Or, simpler, with `x.into()`, because `From for " +"i16` implementation automatically create an implementation of `Into for " +"i8`." msgstr "" #: src/exercises/day-1/implicit-conversions.md:30 msgid "" -"The same applies for your own `From` implementations for your own types, so it " -"is sufficient to only implement `From` to get a respective `Into` " +"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 "" @@ -3477,14 +3520,15 @@ 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 "" @@ -3501,7 +3545,8 @@ 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 @@ -3622,8 +3667,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 @@ -3640,8 +3685,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 @@ -3678,23 +3723,24 @@ 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 @@ -3715,10 +3761,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 @@ -3727,8 +3773,9 @@ 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 @@ -3737,8 +3784,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 @@ -3750,7 +3797,8 @@ 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" @@ -3764,14 +3812,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 @@ -3797,22 +3845,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 @@ -3827,14 +3875,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 @@ -3861,8 +3909,10 @@ 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 "" @@ -3874,7 +3924,8 @@ 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 "" @@ -3901,8 +3952,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 @@ -3927,9 +3978,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 @@ -4071,8 +4122,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 @@ -4085,8 +4136,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 @@ -4097,7 +4148,8 @@ 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::" @@ -4141,27 +4193,28 @@ 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 @@ -4192,7 +4245,8 @@ 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 @@ -4209,8 +4263,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 @@ -4219,7 +4273,8 @@ 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 @@ -4253,8 +4308,9 @@ 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 @@ -4263,8 +4319,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 @@ -4274,17 +4330,18 @@ msgstr "" #: src/memory-management/rust.md:14 msgid "" "If asked how at this point, you can mention that in Rust this is usually " -"handled by RAII wrapper types such as [Box](https://doc.rust-lang.org/std/boxed/" -"struct.Box.html), [Vec](https://doc.rust-lang.org/std/vec/struct.Vec.html), [Rc]" -"(https://doc.rust-lang.org/std/rc/struct.Rc.html), or [Arc](https://doc.rust-" -"lang.org/std/sync/struct.Arc.html). These encapsulate ownership and memory " -"allocation via various means, and prevent the potential errors in C." +"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 @@ -4312,11 +4369,13 @@ 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 "" @@ -4382,8 +4441,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 @@ -4402,7 +4461,8 @@ 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 @@ -4447,19 +4507,20 @@ 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 @@ -4643,8 +4704,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 @@ -4660,7 +4721,8 @@ 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 @@ -4717,7 +4779,8 @@ 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 @@ -4736,8 +4799,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 @@ -4752,9 +4815,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 @@ -4799,9 +4862,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 @@ -4876,15 +4939,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 @@ -4913,20 +4976,21 @@ 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 @@ -4957,13 +5021,14 @@ 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 @@ -4995,8 +5060,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 @@ -5016,13 +5081,14 @@ 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 @@ -5036,7 +5102,8 @@ 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" @@ -5055,15 +5122,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 @@ -5074,8 +5141,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 @@ -5096,8 +5163,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 @@ -5117,8 +5184,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 @@ -5167,7 +5234,8 @@ 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" @@ -5186,7 +5254,8 @@ 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" @@ -5224,7 +5293,8 @@ 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 @@ -5284,7 +5354,8 @@ 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 @@ -5301,8 +5372,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 @@ -5327,7 +5398,8 @@ 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" @@ -5342,16 +5414,17 @@ 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" @@ -5401,8 +5474,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 @@ -5460,7 +5533,8 @@ 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 @@ -5471,22 +5545,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 @@ -5533,8 +5607,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 @@ -5543,8 +5617,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 @@ -5555,8 +5629,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 @@ -5659,12 +5733,13 @@ 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 @@ -5708,8 +5783,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 @@ -5718,8 +5793,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 @@ -5729,14 +5804,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 @@ -5772,26 +5847,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 @@ -5818,14 +5893,15 @@ 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 @@ -5852,7 +5928,8 @@ 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 @@ -5886,7 +5963,8 @@ 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 @@ -5922,15 +6000,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 @@ -5992,7 +6070,8 @@ 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" @@ -6010,7 +6089,8 @@ 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" @@ -6031,8 +6111,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 @@ -6073,8 +6153,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 @@ -6083,14 +6163,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 @@ -6101,8 +6181,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 @@ -6111,8 +6191,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 @@ -6147,17 +6227,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 @@ -6174,8 +6254,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" @@ -6212,8 +6292,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 @@ -6223,22 +6303,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 @@ -6299,15 +6379,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 @@ -6339,14 +6419,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 @@ -6374,8 +6454,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" "```" @@ -6453,7 +6533,8 @@ 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 @@ -6462,8 +6543,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 @@ -6485,16 +6566,17 @@ 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 @@ -6525,15 +6607,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 @@ -6597,8 +6679,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" @@ -6652,8 +6734,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 @@ -6780,28 +6862,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 @@ -6828,7 +6910,8 @@ 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 @@ -6852,7 +6935,8 @@ 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 @@ -6867,8 +6951,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 @@ -6908,8 +6992,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 @@ -6941,14 +7025,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 @@ -6963,9 +7047,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 @@ -6991,8 +7075,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 @@ -7040,8 +7124,9 @@ 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 @@ -7052,9 +7137,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 @@ -7230,8 +7315,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 @@ -7256,14 +7341,15 @@ 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 @@ -7272,8 +7358,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 @@ -7296,19 +7382,20 @@ 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 @@ -7318,7 +7405,8 @@ 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 @@ -7353,8 +7441,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 @@ -7400,27 +7488,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 "" @@ -7438,8 +7526,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 @@ -7459,14 +7547,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 @@ -7515,22 +7603,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 @@ -7542,8 +7630,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 @@ -7561,7 +7649,8 @@ 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" @@ -7570,8 +7659,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" @@ -7579,8 +7668,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" @@ -7599,8 +7688,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 @@ -7621,10 +7710,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 @@ -7639,21 +7728,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 @@ -7694,15 +7783,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 @@ -7724,8 +7813,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 @@ -7733,7 +7822,8 @@ 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 @@ -7746,8 +7836,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" "```" @@ -7757,8 +7847,8 @@ msgstr "" msgid "" "```bob\n" " Stack Heap\n" -".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - - " -"-.\n" +".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - " +"- -.\n" ": : : :\n" ": " "list : : :\n" @@ -7770,8 +7860,8 @@ msgid "" "+ :\n" ": : : :\n" ": : : :\n" -"'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - - " -"-'\n" +"'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - " +"- -'\n" "```" msgstr "" @@ -7784,8 +7874,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 @@ -7829,9 +7919,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 @@ -7851,15 +7941,16 @@ 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 @@ -7870,8 +7961,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 @@ -7880,9 +7971,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 @@ -7898,14 +7989,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 @@ -7971,14 +8062,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 @@ -7999,8 +8090,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 @@ -8039,8 +8130,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 @@ -8059,8 +8150,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 @@ -8093,8 +8184,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 @@ -8106,7 +8197,8 @@ 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 @@ -8118,9 +8210,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 @@ -8137,8 +8229,9 @@ 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 @@ -8168,8 +8261,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 @@ -8189,7 +8282,8 @@ 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 @@ -8202,8 +8296,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 @@ -8216,9 +8310,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 @@ -8227,8 +8321,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 @@ -8305,10 +8399,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 @@ -8330,12 +8424,15 @@ 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" @@ -8353,7 +8450,8 @@ 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" @@ -8372,7 +8470,8 @@ 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 @@ -8457,13 +8556,14 @@ 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 @@ -8520,8 +8620,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 @@ -8550,7 +8650,8 @@ 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" @@ -8570,7 +8671,8 @@ 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 @@ -8594,7 +8696,8 @@ 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" @@ -8618,8 +8721,8 @@ msgstr "" msgid "" "```bob\n" " Stack Heap\n" -".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - " -"-.\n" +".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - " +"- -.\n" ": : : :\n" ": " "pets : : :\n" @@ -8660,8 +8763,8 @@ msgid "" " : +----------------------" "+ :\n" " : :\n" -" '- - - - - - - - - - - - - - - - - - - - - - " -"-'\n" +" '- - - - - - - - - - - - - - - - - - - - - " +"- -'\n" "\n" "```" msgstr "" @@ -8681,9 +8784,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 @@ -8765,9 +8868,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 @@ -8810,8 +8913,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 @@ -8878,8 +8981,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 @@ -8913,7 +9016,8 @@ 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 @@ -8931,27 +9035,29 @@ 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 @@ -8964,7 +9070,8 @@ 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 @@ -8975,20 +9082,21 @@ 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 @@ -9031,25 +9139,26 @@ 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 @@ -9083,8 +9192,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 "" @@ -9104,8 +9213,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 @@ -9123,15 +9232,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 "" @@ -9141,9 +9250,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 @@ -9304,8 +9413,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 @@ -9314,8 +9423,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 @@ -9324,15 +9433,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 @@ -9341,8 +9450,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 @@ -9388,13 +9497,14 @@ 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 @@ -9403,10 +9513,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 @@ -9438,8 +9548,9 @@ 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 @@ -9456,9 +9567,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 @@ -9469,8 +9580,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 @@ -9664,10 +9775,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 @@ -9683,7 +9794,8 @@ 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 @@ -9735,7 +9847,8 @@ 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 @@ -9744,7 +9857,8 @@ 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 @@ -9811,16 +9925,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 @@ -9829,8 +9943,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 @@ -9900,18 +10014,20 @@ 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 @@ -9967,8 +10083,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" @@ -10000,21 +10116,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 @@ -10064,9 +10180,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 @@ -10102,17 +10218,18 @@ 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 @@ -10150,9 +10267,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 @@ -10162,8 +10279,9 @@ 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 @@ -10322,8 +10440,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 @@ -10332,7 +10450,8 @@ 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 @@ -10345,13 +10464,14 @@ 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 @@ -10387,15 +10507,16 @@ msgstr "" #: src/unsafe.md:22 msgid "" "We will briefly cover unsafe capabilities next. For full details, please see " -"[Chapter 19.1 in the Rust Book](https://doc.rust-lang.org/book/ch19-01-unsafe-" -"rust.html) and the [Rustonomicon](https://doc.rust-lang.org/nomicon/)." +"[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 @@ -10412,7 +10533,8 @@ 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" @@ -10427,9 +10549,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 @@ -10444,8 +10566,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 @@ -10458,8 +10580,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 @@ -10506,9 +10628,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 @@ -10534,22 +10656,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 @@ -10558,7 +10680,8 @@ 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" @@ -10617,15 +10740,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 @@ -10657,14 +10780,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 @@ -10710,7 +10833,8 @@ 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 @@ -10811,8 +10935,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 @@ -10829,7 +10953,8 @@ 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 @@ -10891,7 +11016,8 @@ 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" @@ -10922,12 +11048,14 @@ 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" @@ -10982,23 +11110,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 @@ -11050,8 +11178,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 @@ -11060,7 +11188,8 @@ 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 @@ -11085,8 +11214,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 @@ -11109,8 +11238,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 @@ -11248,8 +11377,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 "" @@ -11285,7 +11414,8 @@ 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 @@ -11356,7 +11486,8 @@ 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" @@ -11446,7 +11577,8 @@ 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 "" @@ -11534,7 +11666,8 @@ 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" @@ -11570,7 +11703,8 @@ 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 "" @@ -11584,8 +11718,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 @@ -11603,8 +11737,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 @@ -11662,7 +11796,8 @@ 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 "" @@ -11682,8 +11817,10 @@ 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 "" @@ -11758,8 +11895,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 @@ -11899,8 +12036,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 "" @@ -12037,22 +12174,23 @@ 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 @@ -12108,7 +12246,8 @@ 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 "" @@ -12177,8 +12316,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 @@ -12191,8 +12330,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 @@ -12201,10 +12340,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 @@ -12233,13 +12372,14 @@ 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 @@ -12255,14 +12395,15 @@ 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" "```" @@ -12432,15 +12573,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 @@ -12462,7 +12603,8 @@ 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" @@ -12480,14 +12622,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 @@ -12540,8 +12682,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 @@ -12585,8 +12727,10 @@ 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" @@ -12619,8 +12763,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 @@ -12693,8 +12837,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 @@ -12705,8 +12849,9 @@ 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 @@ -12715,8 +12860,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 @@ -12778,8 +12923,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 @@ -12795,8 +12940,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 @@ -12825,8 +12970,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 @@ -12866,15 +13011,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" @@ -12885,29 +13030,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 @@ -12950,21 +13095,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 @@ -12973,8 +13118,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 @@ -13017,28 +13162,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 @@ -13091,8 +13236,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 "" @@ -13126,7 +13271,8 @@ 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 @@ -13163,8 +13309,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 @@ -13177,8 +13323,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 @@ -13186,7 +13332,8 @@ 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 @@ -13214,10 +13361,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 @@ -13226,14 +13373,15 @@ 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 @@ -13244,9 +13392,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 @@ -13365,7 +13513,8 @@ 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 @@ -13406,7 +13555,8 @@ 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 @@ -13416,8 +13566,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" @@ -13436,7 +13586,8 @@ 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" @@ -13494,28 +13645,29 @@ 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 @@ -13524,17 +13676,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 @@ -13546,8 +13698,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 @@ -13556,8 +13708,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 @@ -13612,9 +13764,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 @@ -13627,18 +13779,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 @@ -13667,15 +13819,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 @@ -13697,8 +13849,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 @@ -13715,12 +13867,14 @@ 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" @@ -13747,7 +13901,8 @@ 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" "```" @@ -13757,24 +13912,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 @@ -13783,8 +13938,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 @@ -13827,9 +13982,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 @@ -13995,8 +14150,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 @@ -14034,8 +14189,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 @@ -14107,12 +14262,14 @@ 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" @@ -14166,7 +14323,8 @@ 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 "" @@ -14237,8 +14395,9 @@ 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 +14435,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 +14512,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 +14581,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,7 +14681,8 @@ msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:3 msgid "" "The [`zerocopy`](https://docs.rs/zerocopy/) crate (from Fuchsia) provides " -"traits and macros for safely converting between byte sequences and other types." +"traits and macros for safely converting between byte sequences and other " +"types." msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:6 @@ -14565,31 +14725,33 @@ 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 @@ -14598,8 +14760,9 @@ 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 @@ -14627,20 +14790,21 @@ 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 @@ -14649,14 +14813,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 @@ -14684,8 +14848,9 @@ 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 @@ -14695,10 +14860,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 @@ -14719,7 +14884,8 @@ 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 @@ -14777,15 +14943,16 @@ 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 @@ -14833,9 +15000,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 @@ -14878,8 +15045,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 @@ -14891,15 +15058,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 @@ -14952,10 +15119,12 @@ 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" @@ -15108,8 +15277,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" @@ -15233,12 +15402,14 @@ 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" @@ -15406,8 +15577,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" @@ -15425,8 +15596,10 @@ 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" @@ -15442,8 +15615,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 | ." @@ -15490,8 +15663,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" @@ -15552,11 +15725,14 @@ 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" @@ -15613,7 +15789,8 @@ 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" @@ -15633,14 +15810,16 @@ 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" @@ -15796,7 +15975,8 @@ 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" @@ -15926,8 +16106,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" @@ -16005,14 +16185,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 @@ -16021,9 +16201,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 @@ -16050,8 +16230,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 @@ -16079,14 +16259,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 @@ -16114,7 +16294,8 @@ 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 @@ -16155,7 +16336,8 @@ 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 @@ -16188,20 +16370,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 @@ -16210,28 +16392,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 @@ -16250,21 +16432,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 @@ -16273,8 +16455,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 @@ -16296,9 +16478,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 @@ -16370,7 +16552,8 @@ 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 @@ -16459,14 +16642,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 @@ -16511,15 +16694,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 @@ -16550,11 +16733,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 @@ -16617,7 +16800,8 @@ 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 @@ -16658,20 +16842,21 @@ 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 @@ -16735,10 +16920,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 @@ -16764,8 +16949,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 @@ -16777,8 +16962,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 @@ -16789,7 +16974,8 @@ 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 @@ -16802,7 +16988,8 @@ 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" "```" @@ -16810,8 +16997,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 @@ -16877,7 +17064,8 @@ 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" @@ -16905,9 +17093,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 @@ -16916,19 +17104,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 @@ -16951,8 +17139,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 @@ -17002,14 +17190,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 @@ -17020,8 +17208,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 @@ -17032,10 +17220,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 @@ -17046,7 +17234,8 @@ 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" @@ -17058,47 +17247,48 @@ 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 @@ -17110,8 +17300,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 @@ -17136,7 +17326,8 @@ 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 @@ -17216,10 +17407,11 @@ 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 @@ -17247,7 +17439,8 @@ 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" @@ -17266,26 +17459,27 @@ 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 @@ -17319,8 +17513,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 "" @@ -17342,14 +17536,15 @@ msgstr "" #: src/async/channels.md:42 msgid "" "The [Flume](https://docs.rs/flume/latest/flume/) crate has channels that " -"implement both `sync` and `async` `send` and `recv`. This can be convenient for " -"complex applications with both IO and heavy CPU processing tasks." +"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 @@ -17358,8 +17553,9 @@ 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 @@ -17372,9 +17568,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 @@ -17410,8 +17606,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 @@ -17422,26 +17618,27 @@ 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 @@ -17497,33 +17694,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 @@ -17561,8 +17758,9 @@ msgstr "" #: src/async/pitfalls/blocking-executor.md:3 msgid "" "Most async runtimes only allow IO tasks to run concurrently. This means that " -"CPU blocking tasks will block the executor and prevent other tasks from being " -"executed. An easy workaround is to use async equivalent methods where possible." +"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 @@ -17596,9 +17794,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 @@ -17616,30 +17814,31 @@ 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 @@ -17707,8 +17906,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 @@ -17718,7 +17917,8 @@ 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 @@ -17737,7 +17937,8 @@ msgstr "" #: src/async/pitfalls/pin.md:88 msgid "" "This still doesn't work. Follow the compiler errors, adding `&mut` to the " -"`timeout_fut` in the `select!` to work around the move, then using `Box::pin`:" +"`timeout_fut` in the `select!` to work around the move, then using `Box::" +"pin`:" msgstr "" #: src/async/pitfalls/pin.md:92 @@ -17756,21 +17957,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 @@ -17841,24 +18042,25 @@ 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 @@ -17937,8 +18139,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 @@ -17947,12 +18149,14 @@ 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 @@ -17982,15 +18186,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 @@ -18001,13 +18205,14 @@ 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 @@ -18030,8 +18235,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 @@ -18054,7 +18259,8 @@ 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" @@ -18083,8 +18289,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 @@ -18096,15 +18302,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 @@ -18114,18 +18320,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 @@ -18159,8 +18365,9 @@ 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 @@ -18172,9 +18379,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 @@ -18186,8 +18393,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 @@ -18199,17 +18406,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 @@ -18333,9 +18540,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 @@ -18346,16 +18553,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 @@ -18378,29 +18585,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 @@ -18410,7 +18617,8 @@ 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 @@ -18422,8 +18630,9 @@ 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 @@ -18443,15 +18652,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 @@ -18462,39 +18671,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 @@ -18510,9 +18719,10 @@ 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 @@ -18532,8 +18742,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 "" @@ -18543,16 +18753,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 @@ -18644,17 +18854,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 @@ -18696,8 +18906,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 @@ -18793,7 +19003,8 @@ 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" @@ -18835,7 +19046,8 @@ 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" @@ -18860,7 +19072,8 @@ 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" @@ -18878,7 +19091,8 @@ 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" @@ -18895,7 +19109,8 @@ 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" @@ -19017,8 +19232,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 " @@ -19185,8 +19400,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" @@ -19296,7 +19511,8 @@ 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 " @@ -19310,12 +19526,15 @@ 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" @@ -19333,7 +19552,8 @@ 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" @@ -19564,7 +19784,8 @@ 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" @@ -19595,12 +19816,14 @@ 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" @@ -19705,7 +19928,8 @@ 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" @@ -19713,8 +19937,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" @@ -19825,10 +20049,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" @@ -19879,8 +20103,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" @@ -19968,10 +20192,12 @@ 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" @@ -20104,12 +20330,14 @@ 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" @@ -20141,7 +20369,8 @@ 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" @@ -20152,19 +20381,22 @@ 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" @@ -20425,7 +20657,8 @@ 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" @@ -20441,7 +20674,8 @@ 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" @@ -20475,13 +20709,15 @@ 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" @@ -20533,7 +20769,8 @@ 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" @@ -20543,7 +20780,8 @@ 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" @@ -20575,7 +20813,8 @@ 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" @@ -20655,7 +20894,8 @@ 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"