From 31de4e3deaf6d63f3c59218323b66f2db8567282 Mon Sep 17 00:00:00 2001 From: Martin Geisler Date: Tue, 11 Jul 2023 19:03:12 +0200 Subject: [PATCH] de: normalize line width to 79 columns (#954) This was done using msgcat --width 79 -o po/de.po po/de.po This is done to get a clean diff for the changes in #828, see also the discussion in #800. --- po/de.po | 8319 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 5078 insertions(+), 3241 deletions(-) diff --git a/po/de.po b/po/de.po index 61b1fd26..3d195440 100644 --- a/po/de.po +++ b/po/de.po @@ -52,8 +52,8 @@ msgstr "Cargo lokal ausführen" msgid "Day 1: Morning" msgstr "Tag 1: Morgens" -#: src/SUMMARY.md:18 src/SUMMARY.md:75 src/SUMMARY.md:128 src/SUMMARY.md:185 src/SUMMARY.md:211 -#: src/SUMMARY.md:259 +#: src/SUMMARY.md:18 src/SUMMARY.md:75 src/SUMMARY.md:128 src/SUMMARY.md:185 +#: src/SUMMARY.md:211 src/SUMMARY.md:259 msgid "Welcome" msgstr "Willkommen" @@ -129,9 +129,9 @@ msgstr "Methoden" msgid "Overloading" msgstr "Überladen" -#: src/SUMMARY.md:37 src/SUMMARY.md:66 src/SUMMARY.md:90 src/SUMMARY.md:119 src/SUMMARY.md:148 -#: src/SUMMARY.md:177 src/SUMMARY.md:204 src/SUMMARY.md:225 src/SUMMARY.md:251 src/SUMMARY.md:273 -#: src/SUMMARY.md:293 +#: src/SUMMARY.md:37 src/SUMMARY.md:66 src/SUMMARY.md:90 src/SUMMARY.md:119 +#: src/SUMMARY.md:148 src/SUMMARY.md:177 src/SUMMARY.md:204 src/SUMMARY.md:225 +#: src/SUMMARY.md:251 src/SUMMARY.md:273 src/SUMMARY.md:293 msgid "Exercises" msgstr "Übungen" @@ -997,9 +997,9 @@ msgstr "# Willkommen bei Comprehensive Rust 🦀" #: src/welcome.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 "" #: src/welcome.md:3 @@ -1008,11 +1008,12 @@ msgstr "" #: src/welcome.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)\n" -"[![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)\n" +"[![GitHub contributors](https://img.shields.io/github/contributors/google/" +"comprehensive-rust?style=flat-square)](https://github.com/google/" +"comprehensive-rust/graphs/contributors)" msgstr "" #: src/welcome.md:4 @@ -1021,10 +1022,12 @@ msgstr "Github Beiträger" #: src/welcome.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)\n" -"[![GitHub stars](https://img.shields.io/github/stars/google/comprehensive-rust?style=flat-square)]" -"(https://github.com/google/comprehensive-rust/stargazers)" +"[![GitHub contributors](https://img.shields.io/github/contributors/google/" +"comprehensive-rust?style=flat-square)](https://github.com/google/" +"comprehensive-rust/graphs/contributors)\n" +"[![GitHub stars](https://img.shields.io/github/stars/google/comprehensive-" +"rust?style=flat-square)](https://github.com/google/comprehensive-rust/" +"stargazers)" msgstr "" #: src/welcome.md:5 @@ -1033,28 +1036,35 @@ msgstr "Github Sterne" #: src/welcome.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 "" #: src/welcome.md:7 msgid "" -"This is a three day Rust course developed by the Android team. The course covers\n" -"the full spectrum of Rust, from basic syntax to advanced topics like generics\n" -"and error handling. It also includes Android-specific content on the last day." +"This is a three day Rust course developed by the Android team. The course " +"covers\n" +"the full spectrum of Rust, from basic syntax to advanced topics like " +"generics\n" +"and error handling. It also includes Android-specific content on the last " +"day." msgstr "" -"Dies ist ein dreitägiger Rust-Kurs, der vom Android-Team entwickelt wurde. Der Kurs umfasst\n" -"das gesamte Spektrum von Rust, von grundlegender Syntax bis hin zu fortgeschrittenen Themen wie " -"generischen Methoden und Datentypen\n" -"sowie Fehlerbehandlung. Am letzten Tag werden auch Android-spezifische Inhalte behandelt." +"Dies ist ein dreitägiger Rust-Kurs, der vom Android-Team entwickelt wurde. " +"Der Kurs umfasst\n" +"das gesamte Spektrum von Rust, von grundlegender Syntax bis hin zu " +"fortgeschrittenen Themen wie generischen Methoden und Datentypen\n" +"sowie Fehlerbehandlung. Am letzten Tag werden auch Android-spezifische " +"Inhalte behandelt." #: src/welcome.md:11 msgid "" -"The goal of the course is to teach you Rust. We assume you don't know anything\n" +"The goal of the course is to teach you Rust. We assume you don't know " +"anything\n" "about Rust and hope to:" msgstr "" -"Das Ziel des Kurses ist es, Dir Rust beizubringen. Wie setzen keine Vorkenntnisse über Rust " -"voraus, und hoffen das Folgende zu erreichen:" +"Das Ziel des Kurses ist es, Dir Rust beizubringen. Wie setzen keine " +"Vorkenntnisse über Rust voraus, und hoffen das Folgende zu erreichen:" #: src/welcome.md:14 msgid "" @@ -1062,38 +1072,52 @@ msgid "" "* Enable you to modify existing programs and write new programs in Rust.\n" "* Show you common Rust idioms." msgstr "" -"* Dir ein umfassendes Verständnis der Rust-Syntax und -Sprache zu vermitteln.\n" -"* Es dir ermöglichen, bestehende Programme zu modifizieren und neue Programme in Rust zu " -"schreiben.\n" +"* Dir ein umfassendes Verständnis der Rust-Syntax und -Sprache zu " +"vermitteln.\n" +"* Es dir ermöglichen, bestehende Programme zu modifizieren und neue " +"Programme in Rust zu schreiben.\n" "* Dir gängige Rust-Idiome zu zeigen." #: src/welcome.md:18 msgid "" -"The first three days show you the fundamentals of Rust. Following this, you're\n" +"The first three days show you the fundamentals of Rust. Following this, " +"you're\n" "invited to dive into one or more specialized topics:" msgstr "" -"In den ersten drei Tagen zeigen wir die Grundlagen von Rust. Danach, laden wir dich ein\n" +"In den ersten drei Tagen zeigen wir die Grundlagen von Rust. Danach, laden " +"wir dich ein\n" "sich mit einem oder mehreren Spezialthemen zu befassen:" #: src/welcome.md:21 msgid "" -"* [Android](android.md): a half-day course on using Rust for Android platform\n" +"* [Android](android.md): a half-day course on using Rust for Android " +"platform\n" " development (AOSP). This includes interoperability with C, C++, and Java.\n" -"* [Bare-metal](bare-metal.md): a full day class on using Rust for bare-metal\n" -" (embedded) development. Both microcontrollers and application processors are\n" +"* [Bare-metal](bare-metal.md): a full day class on using Rust for bare-" +"metal\n" +" (embedded) development. Both microcontrollers and application processors " +"are\n" " covered.\n" -"* [Concurrency](concurrency.md): a full day class on concurrency in Rust. We\n" -" cover both classical concurrency (preemptively scheduling using threads and\n" +"* [Concurrency](concurrency.md): a full day class on concurrency in Rust. " +"We\n" +" cover both classical concurrency (preemptively scheduling using threads " +"and\n" " mutexes) and async/await concurrency (cooperative multitasking using\n" " futures)." msgstr "" -"* [Android](android.md): ein halbtägiger Kurs zur Verwendung von Rust für die Android-Plattform\n" -" Entwicklung (AOSP). Dazu gehört die Interoperabilität mit C, C++ und Java.\n" -"* [Bare-Metal](bare-metal.md): ein ganztägiger Kurs über die Verwendung von Rust für Bare-Metal\n" -" (eingebettete) Entwicklung. Sowohl Mikrocontroller als auch Anwendungsprozessoren\n" +"* [Android](android.md): ein halbtägiger Kurs zur Verwendung von Rust für " +"die Android-Plattform\n" +" Entwicklung (AOSP). Dazu gehört die Interoperabilität mit C, C++ und " +"Java.\n" +"* [Bare-Metal](bare-metal.md): ein ganztägiger Kurs über die Verwendung von " +"Rust für Bare-Metal\n" +" (eingebettete) Entwicklung. Sowohl Mikrocontroller als auch " +"Anwendungsprozessoren\n" " bedeckt.\n" -"* [Concurrency](concurrency.md): ein ganztägiger Kurs zum Thema Parallelität in Rust. Wir\n" -" decken sowohl die klassische Parallelität ab (präventive Planung mithilfe von Threads als auch\n" +"* [Concurrency](concurrency.md): ein ganztägiger Kurs zum Thema Parallelität " +"in Rust. Wir\n" +" decken sowohl die klassische Parallelität ab (präventive Planung mithilfe " +"von Threads als auch\n" " Mutexe) und Async/Await-Parallelität (kooperatives Multitasking mit\n" " Futures)." @@ -1103,11 +1127,12 @@ msgstr "## Nicht-Ziele" #: src/welcome.md:34 msgid "" -"Rust is a large language and we won't be able to cover all of it in a few days.\n" +"Rust is a large language and we won't be able to cover all of it in a few " +"days.\n" "Some non-goals of this course are:" msgstr "" -"Rust ist eine große Sprache und wir werden sie in ein paar Tagen nicht vollständig abdecken " -"können.\n" +"Rust ist eine große Sprache und wir werden sie in ein paar Tagen nicht " +"vollständig abdecken können.\n" "Einige Nicht-Ziele dieses Kurses sind:" #: src/welcome.md:37 @@ -1126,88 +1151,119 @@ msgstr "## Annahmen" #: src/welcome.md:43 msgid "" -"The course assumes that you already know how to program. Rust is a statically\n" -"typed language and we will sometimes make comparisons with C and C++ to better\n" +"The course assumes that you already know how to program. Rust is a " +"statically\n" +"typed language and we will sometimes make comparisons with C and C++ to " +"better\n" "explain or contrast the Rust approach." msgstr "" -"Der Kurs setzt voraus, dass du bereits Programmierkenntnisse besitzt. Rust ist eine statisch\n" -"typisierte Sprache und wir werden manchmal Vergleiche mit C und C++ machen, um besser den Rust-" -"Ansatz zu erklären oder gegenüberzustellen." +"Der Kurs setzt voraus, dass du bereits Programmierkenntnisse besitzt. Rust " +"ist eine statisch\n" +"typisierte Sprache und wir werden manchmal Vergleiche mit C und C++ machen, " +"um besser den Rust-Ansatz zu erklären oder gegenüberzustellen." #: src/welcome.md:47 msgid "" -"If you know how to program in a dynamically typed language such as Python or\n" +"If you know how to program in a dynamically typed language such as Python " +"or\n" "JavaScript, then you will be able to follow along just fine too." msgstr "" -"Aber auch wenn du Vorwissen in einer dynamisch typisierten Sprache wie Python oder\n" +"Aber auch wenn du Vorwissen in einer dynamisch typisierten Sprache wie " +"Python oder\n" "JavaScript hast, wirst du problemlos folgen können." -#: src/welcome.md:50 src/cargo/rust-ecosystem.md:19 src/cargo/code-samples.md:22 -#: src/cargo/running-locally.md:68 src/welcome-day-1.md:14 src/welcome-day-1/what-is-rust.md:19 +#: src/welcome.md:50 src/cargo/rust-ecosystem.md:19 +#: src/cargo/code-samples.md:22 src/cargo/running-locally.md:68 +#: src/welcome-day-1.md:14 src/welcome-day-1/what-is-rust.md:19 #: src/hello-world.md:20 src/hello-world/small-example.md:21 src/why-rust.md:9 -#: src/why-rust/compile-time.md:14 src/why-rust/runtime.md:8 src/why-rust/modern.md:19 -#: src/basic-syntax/scalar-types.md:19 src/basic-syntax/compound-types.md:28 -#: src/basic-syntax/references.md:21 src/basic-syntax/slices.md:18 -#: src/basic-syntax/string-slices.md:25 src/basic-syntax/functions.md:33 -#: src/basic-syntax/rustdoc.md:22 src/basic-syntax/methods.md:32 -#: src/basic-syntax/functions-interlude.md:25 src/exercises/day-1/morning.md:9 -#: src/exercises/day-1/for-loops.md:90 src/basic-syntax/variables.md:15 -#: src/basic-syntax/type-inference.md:24 src/basic-syntax/static-and-const.md:46 +#: src/why-rust/compile-time.md:14 src/why-rust/runtime.md:8 +#: src/why-rust/modern.md:19 src/basic-syntax/scalar-types.md:19 +#: src/basic-syntax/compound-types.md:28 src/basic-syntax/references.md:21 +#: src/basic-syntax/slices.md:18 src/basic-syntax/string-slices.md:25 +#: src/basic-syntax/functions.md:33 src/basic-syntax/rustdoc.md:22 +#: src/basic-syntax/methods.md:32 src/basic-syntax/functions-interlude.md:25 +#: src/exercises/day-1/morning.md:9 src/exercises/day-1/for-loops.md:90 +#: src/basic-syntax/variables.md:15 src/basic-syntax/type-inference.md:24 +#: src/basic-syntax/static-and-const.md:46 #: src/basic-syntax/scopes-shadowing.md:23 src/memory-management/stack.md:26 #: src/memory-management/rust.md:12 src/ownership/move-semantics.md:20 #: src/ownership/moves-function-calls.md:18 src/ownership/copy-clone.md:33 #: src/ownership/borrowing.md:25 src/ownership/shared-unique-borrows.md:23 -#: src/ownership/lifetimes-function-calls.md:27 src/ownership/lifetimes-data-structures.md:23 -#: src/exercises/day-1/afternoon.md:9 src/exercises/day-1/book-library.md:100 src/structs.md:29 -#: src/structs/tuple-structs.md:35 src/structs/field-shorthand.md:25 src/enums.md:32 +#: src/ownership/lifetimes-function-calls.md:27 +#: src/ownership/lifetimes-data-structures.md:23 +#: src/exercises/day-1/afternoon.md:9 src/exercises/day-1/book-library.md:100 +#: src/structs.md:29 src/structs/tuple-structs.md:35 +#: src/structs/field-shorthand.md:25 src/enums.md:32 #: src/enums/variant-payloads.md:33 src/enums/sizes.md:27 src/methods.md:28 -#: src/methods/receiver.md:22 src/methods/example.md:44 src/pattern-matching.md:23 -#: src/pattern-matching/destructuring-enums.md:33 src/pattern-matching/destructuring-structs.md:21 -#: src/pattern-matching/destructuring-arrays.md:19 src/pattern-matching/match-guards.md:20 -#: src/exercises/day-2/morning.md:9 src/exercises/day-2/points-polygons.md:115 -#: src/control-flow/blocks.md:40 src/control-flow/if-expressions.md:33 -#: src/control-flow/if-let-expressions.md:21 src/control-flow/while-let-expressions.md:24 -#: src/control-flow/for-expressions.md:23 src/control-flow/loop-expressions.md:25 -#: src/control-flow/match-expressions.md:26 src/std.md:23 src/std/option-result.md:16 -#: src/std/string.md:28 src/std/vec.md:35 src/std/hashmap.md:36 src/std/box.md:32 -#: src/std/box-recursive.md:31 src/std/rc.md:29 src/modules.md:26 src/modules/visibility.md:37 -#: src/modules/filesystem.md:42 src/exercises/day-2/afternoon.md:5 src/generics/data-types.md:19 -#: src/generics/methods.md:23 src/traits/trait-objects.md:70 src/traits/default-methods.md:30 -#: src/traits/trait-bounds.md:33 src/traits/impl-trait.md:21 src/traits/iterator.md:30 -#: src/traits/from-iterator.md:15 src/traits/from-into.md:27 src/traits/drop.md:32 -#: src/traits/default.md:38 src/traits/operators.md:24 src/traits/closures.md:23 +#: src/methods/receiver.md:22 src/methods/example.md:44 +#: src/pattern-matching.md:23 src/pattern-matching/destructuring-enums.md:33 +#: src/pattern-matching/destructuring-structs.md:21 +#: src/pattern-matching/destructuring-arrays.md:19 +#: src/pattern-matching/match-guards.md:20 src/exercises/day-2/morning.md:9 +#: src/exercises/day-2/points-polygons.md:115 src/control-flow/blocks.md:40 +#: src/control-flow/if-expressions.md:33 +#: src/control-flow/if-let-expressions.md:21 +#: src/control-flow/while-let-expressions.md:24 +#: src/control-flow/for-expressions.md:23 +#: src/control-flow/loop-expressions.md:25 +#: src/control-flow/match-expressions.md:26 src/std.md:23 +#: src/std/option-result.md:16 src/std/string.md:28 src/std/vec.md:35 +#: src/std/hashmap.md:36 src/std/box.md:32 src/std/box-recursive.md:31 +#: src/std/rc.md:29 src/modules.md:26 src/modules/visibility.md:37 +#: src/modules/filesystem.md:42 src/exercises/day-2/afternoon.md:5 +#: src/generics/data-types.md:19 src/generics/methods.md:23 +#: src/traits/trait-objects.md:70 src/traits/default-methods.md:30 +#: src/traits/trait-bounds.md:33 src/traits/impl-trait.md:21 +#: src/traits/iterator.md:30 src/traits/from-iterator.md:15 +#: src/traits/from-into.md:27 src/traits/drop.md:32 src/traits/default.md:38 +#: src/traits/operators.md:24 src/traits/closures.md:23 #: src/exercises/day-3/morning.md:5 src/error-handling/result.md:25 -#: src/error-handling/try-operator.md:46 src/error-handling/converting-error-types-example.md:48 -#: src/error-handling/deriving-error-enums.md:37 src/error-handling/dynamic-errors.md:34 -#: src/error-handling/error-contexts.md:33 src/unsafe.md:26 src/unsafe/raw-pointers.md:25 -#: src/unsafe/mutable-static-variables.md:30 src/unsafe/unions.md:19 -#: src/unsafe/writing-unsafe-functions.md:31 src/unsafe/extern-functions.md:19 -#: src/unsafe/unsafe-traits.md:28 src/exercises/day-3/afternoon.md:5 -#: src/android/interoperability/with-c/rust.md:81 src/exercises/android/morning.md:10 -#: src/bare-metal/minimal.md:15 src/bare-metal/alloc.md:37 src/bare-metal/microcontrollers.md:23 -#: src/bare-metal/microcontrollers/mmio.md:62 src/bare-metal/microcontrollers/pacs.md:47 -#: src/bare-metal/microcontrollers/hals.md:37 src/bare-metal/microcontrollers/board-support.md:26 +#: src/error-handling/try-operator.md:46 +#: src/error-handling/converting-error-types-example.md:48 +#: src/error-handling/deriving-error-enums.md:37 +#: src/error-handling/dynamic-errors.md:34 +#: src/error-handling/error-contexts.md:33 src/unsafe.md:26 +#: src/unsafe/raw-pointers.md:25 src/unsafe/mutable-static-variables.md:30 +#: src/unsafe/unions.md:19 src/unsafe/writing-unsafe-functions.md:31 +#: src/unsafe/extern-functions.md:19 src/unsafe/unsafe-traits.md:28 +#: src/exercises/day-3/afternoon.md:5 +#: src/android/interoperability/with-c/rust.md:81 +#: src/exercises/android/morning.md:10 src/bare-metal/minimal.md:15 +#: src/bare-metal/alloc.md:37 src/bare-metal/microcontrollers.md:23 +#: src/bare-metal/microcontrollers/mmio.md:62 +#: src/bare-metal/microcontrollers/pacs.md:47 +#: src/bare-metal/microcontrollers/hals.md:37 +#: src/bare-metal/microcontrollers/board-support.md:26 #: src/bare-metal/microcontrollers/type-state.md:30 -#: src/bare-metal/microcontrollers/embedded-hal.md:17 src/bare-metal/microcontrollers/probe-rs.md:14 +#: src/bare-metal/microcontrollers/embedded-hal.md:17 +#: src/bare-metal/microcontrollers/probe-rs.md:14 #: src/bare-metal/microcontrollers/debugging.md:25 -#: src/bare-metal/microcontrollers/other-projects.md:16 src/exercises/bare-metal/morning.md:5 -#: src/bare-metal/aps.md:7 src/bare-metal/aps/inline-assembly.md:41 src/bare-metal/aps/mmio.md:7 +#: src/bare-metal/microcontrollers/other-projects.md:16 +#: src/exercises/bare-metal/morning.md:5 src/bare-metal/aps.md:7 +#: src/bare-metal/aps/inline-assembly.md:41 src/bare-metal/aps/mmio.md:7 #: src/bare-metal/aps/uart.md:53 src/bare-metal/aps/uart/traits.md:22 -#: src/bare-metal/aps/better-uart.md:24 src/bare-metal/aps/better-uart/bitflags.md:35 -#: src/bare-metal/aps/better-uart/registers.md:39 src/bare-metal/aps/better-uart/driver.md:62 +#: src/bare-metal/aps/better-uart.md:24 +#: src/bare-metal/aps/better-uart/bitflags.md:35 +#: src/bare-metal/aps/better-uart/registers.md:39 +#: src/bare-metal/aps/better-uart/driver.md:62 #: src/bare-metal/aps/better-uart/using.md:49 src/bare-metal/aps/logging.md:48 -#: src/bare-metal/aps/logging/using.md:44 src/bare-metal/useful-crates/zerocopy.md:43 +#: src/bare-metal/aps/logging/using.md:44 +#: src/bare-metal/useful-crates/zerocopy.md:43 #: src/bare-metal/useful-crates/aarch64-paging.md:26 #: src/bare-metal/useful-crates/buddy_system_allocator.md:24 -#: src/bare-metal/useful-crates/tinyvec.md:21 src/bare-metal/useful-crates/spin.md:21 -#: src/bare-metal/android/vmbase.md:19 src/exercises/bare-metal/afternoon.md:5 -#: src/concurrency/threads.md:28 src/concurrency/scoped-threads.md:35 src/concurrency/channels.md:25 +#: src/bare-metal/useful-crates/tinyvec.md:21 +#: src/bare-metal/useful-crates/spin.md:21 src/bare-metal/android/vmbase.md:19 +#: src/exercises/bare-metal/afternoon.md:5 src/concurrency/threads.md:28 +#: src/concurrency/scoped-threads.md:35 src/concurrency/channels.md:25 #: src/concurrency/send-sync.md:18 src/concurrency/send-sync/send.md:11 #: src/concurrency/send-sync/sync.md:12 src/concurrency/shared_state/arc.md:27 -#: src/concurrency/shared_state/mutex.md:29 src/concurrency/shared_state/example.md:21 -#: src/exercises/concurrency/morning.md:10 src/async/async-await.md:23 src/async/futures.md:30 -#: src/async/runtimes.md:18 src/async/runtimes/tokio.md:31 src/async/tasks.md:51 -#: src/async/channels.md:33 src/async/control-flow/join.md:34 src/async/control-flow/select.md:59 +#: src/concurrency/shared_state/mutex.md:29 +#: src/concurrency/shared_state/example.md:21 +#: src/exercises/concurrency/morning.md:10 src/async/async-await.md:23 +#: src/async/futures.md:30 src/async/runtimes.md:18 +#: src/async/runtimes/tokio.md:31 src/async/tasks.md:51 +#: src/async/channels.md:33 src/async/control-flow/join.md:34 +#: src/async/control-flow/select.md:59 #: src/async/pitfalls/blocking-executor.md:27 src/async/pitfalls/pin.md:66 #: src/exercises/concurrency/afternoon.md:11 #: src/exercises/concurrency/dining-philosophers-async.md:75 @@ -1217,82 +1273,113 @@ msgstr "
" #: src/welcome.md:52 msgid "" "This is an example of a _speaker note_. We will use these to add additional\n" -"information to the slides. This could be key points which the instructor should\n" +"information to the slides. This could be key points which the instructor " +"should\n" "cover as well as answers to typical questions which come up in class." msgstr "" -"Dies ist ein Beispiel für eine _Sprechernotiz_, welche wir verwenden, um weitere \n" -"Informationen zu den Folien hinzuzufügen. Sprechernotizen können wichtige Punkte \n" -"beinhalten, die vom Kursleiter erwähnt werden sollten, oder auch Antworten auf \n" +"Dies ist ein Beispiel für eine _Sprechernotiz_, welche wir verwenden, um " +"weitere \n" +"Informationen zu den Folien hinzuzufügen. Sprechernotizen können wichtige " +"Punkte \n" +"beinhalten, die vom Kursleiter erwähnt werden sollten, oder auch Antworten " +"auf \n" "Fragen, die typischerweise im Kurs vorkommen." -#: src/welcome.md:56 src/cargo/rust-ecosystem.md:67 src/cargo/code-samples.md:35 -#: src/cargo/running-locally.md:74 src/welcome-day-1.md:42 src/welcome-day-1/what-is-rust.md:29 +#: src/welcome.md:56 src/cargo/rust-ecosystem.md:67 +#: src/cargo/code-samples.md:35 src/cargo/running-locally.md:74 +#: src/welcome-day-1.md:42 src/welcome-day-1/what-is-rust.md:29 #: src/hello-world.md:40 src/hello-world/small-example.md:44 src/why-rust.md:24 -#: src/why-rust/compile-time.md:35 src/why-rust/runtime.md:22 src/why-rust/modern.md:66 -#: src/basic-syntax/scalar-types.md:43 src/basic-syntax/compound-types.md:62 -#: src/basic-syntax/references.md:29 src/basic-syntax/slices.md:36 -#: src/basic-syntax/string-slices.md:44 src/basic-syntax/functions.md:41 -#: src/basic-syntax/rustdoc.md:33 src/basic-syntax/methods.md:45 -#: src/basic-syntax/functions-interlude.md:30 src/exercises/day-1/morning.md:28 -#: src/exercises/day-1/for-loops.md:95 src/basic-syntax/variables.md:20 -#: src/basic-syntax/type-inference.md:48 src/basic-syntax/static-and-const.md:52 +#: src/why-rust/compile-time.md:35 src/why-rust/runtime.md:22 +#: src/why-rust/modern.md:66 src/basic-syntax/scalar-types.md:43 +#: src/basic-syntax/compound-types.md:62 src/basic-syntax/references.md:29 +#: src/basic-syntax/slices.md:36 src/basic-syntax/string-slices.md:44 +#: src/basic-syntax/functions.md:41 src/basic-syntax/rustdoc.md:33 +#: src/basic-syntax/methods.md:45 src/basic-syntax/functions-interlude.md:30 +#: src/exercises/day-1/morning.md:28 src/exercises/day-1/for-loops.md:95 +#: src/basic-syntax/variables.md:20 src/basic-syntax/type-inference.md:48 +#: src/basic-syntax/static-and-const.md:52 #: src/basic-syntax/scopes-shadowing.md:39 src/memory-management/stack.md:49 #: src/memory-management/rust.md:18 src/ownership/move-semantics.md:26 #: src/ownership/moves-function-calls.md:26 src/ownership/copy-clone.md:51 #: src/ownership/borrowing.md:51 src/ownership/shared-unique-borrows.md:29 -#: src/ownership/lifetimes-function-calls.md:60 src/ownership/lifetimes-data-structures.md:30 -#: src/exercises/day-1/afternoon.md:15 src/exercises/day-1/book-library.md:104 src/structs.md:42 -#: src/structs/tuple-structs.md:43 src/structs/field-shorthand.md:72 src/enums.md:42 +#: src/ownership/lifetimes-function-calls.md:60 +#: src/ownership/lifetimes-data-structures.md:30 +#: src/exercises/day-1/afternoon.md:15 src/exercises/day-1/book-library.md:104 +#: src/structs.md:42 src/structs/tuple-structs.md:43 +#: src/structs/field-shorthand.md:72 src/enums.md:42 #: src/enums/variant-payloads.md:45 src/enums/sizes.md:155 src/methods.md:41 -#: src/methods/receiver.md:28 src/methods/example.md:53 src/pattern-matching.md:35 -#: src/pattern-matching/destructuring-enums.md:39 src/pattern-matching/destructuring-structs.md:29 -#: src/pattern-matching/destructuring-arrays.md:46 src/pattern-matching/match-guards.md:28 -#: src/exercises/day-2/morning.md:15 src/exercises/day-2/points-polygons.md:125 -#: src/control-flow/blocks.md:46 src/control-flow/if-expressions.md:37 -#: src/control-flow/if-let-expressions.md:41 src/control-flow/while-let-expressions.md:29 -#: src/control-flow/for-expressions.md:30 src/control-flow/loop-expressions.md:32 -#: src/control-flow/match-expressions.md:33 src/std.md:31 src/std/option-result.md:25 -#: src/std/string.md:42 src/std/vec.md:49 src/std/hashmap.md:66 src/std/box.md:39 -#: src/std/box-recursive.md:41 src/std/rc.md:69 src/modules.md:32 src/modules/visibility.md:48 -#: src/modules/filesystem.md:71 src/exercises/day-2/afternoon.md:11 src/generics/data-types.md:25 -#: src/generics/methods.md:31 src/traits/trait-objects.md:83 src/traits/default-methods.md:60 -#: src/traits/trait-bounds.md:50 src/traits/impl-trait.md:44 src/traits/iterator.md:42 -#: src/traits/from-iterator.md:26 src/traits/from-into.md:33 src/traits/drop.md:42 -#: src/traits/default.md:47 src/traits/operators.md:40 src/traits/closures.md:38 +#: src/methods/receiver.md:28 src/methods/example.md:53 +#: src/pattern-matching.md:35 src/pattern-matching/destructuring-enums.md:39 +#: src/pattern-matching/destructuring-structs.md:29 +#: src/pattern-matching/destructuring-arrays.md:46 +#: src/pattern-matching/match-guards.md:28 src/exercises/day-2/morning.md:15 +#: src/exercises/day-2/points-polygons.md:125 src/control-flow/blocks.md:46 +#: src/control-flow/if-expressions.md:37 +#: src/control-flow/if-let-expressions.md:41 +#: src/control-flow/while-let-expressions.md:29 +#: src/control-flow/for-expressions.md:30 +#: src/control-flow/loop-expressions.md:32 +#: src/control-flow/match-expressions.md:33 src/std.md:31 +#: src/std/option-result.md:25 src/std/string.md:42 src/std/vec.md:49 +#: src/std/hashmap.md:66 src/std/box.md:39 src/std/box-recursive.md:41 +#: src/std/rc.md:69 src/modules.md:32 src/modules/visibility.md:48 +#: src/modules/filesystem.md:71 src/exercises/day-2/afternoon.md:11 +#: src/generics/data-types.md:25 src/generics/methods.md:31 +#: src/traits/trait-objects.md:83 src/traits/default-methods.md:60 +#: src/traits/trait-bounds.md:50 src/traits/impl-trait.md:44 +#: src/traits/iterator.md:42 src/traits/from-iterator.md:26 +#: src/traits/from-into.md:33 src/traits/drop.md:42 src/traits/default.md:47 +#: src/traits/operators.md:40 src/traits/closures.md:38 #: src/exercises/day-3/morning.md:11 src/error-handling/result.md:33 -#: src/error-handling/try-operator.md:53 src/error-handling/converting-error-types-example.md:60 -#: src/error-handling/deriving-error-enums.md:45 src/error-handling/dynamic-errors.md:41 -#: src/error-handling/error-contexts.md:42 src/unsafe.md:32 src/unsafe/raw-pointers.md:43 -#: src/unsafe/mutable-static-variables.md:35 src/unsafe/unions.md:28 -#: src/unsafe/writing-unsafe-functions.md:38 src/unsafe/extern-functions.md:28 -#: src/unsafe/unsafe-traits.md:37 src/exercises/day-3/afternoon.md:11 -#: src/android/interoperability/with-c/rust.md:86 src/exercises/android/morning.md:15 -#: src/bare-metal/no_std.md:65 src/bare-metal/minimal.md:26 src/bare-metal/alloc.md:49 -#: src/bare-metal/microcontrollers.md:29 src/bare-metal/microcontrollers/mmio.md:72 -#: src/bare-metal/microcontrollers/pacs.md:65 src/bare-metal/microcontrollers/hals.md:49 +#: src/error-handling/try-operator.md:53 +#: src/error-handling/converting-error-types-example.md:60 +#: src/error-handling/deriving-error-enums.md:45 +#: src/error-handling/dynamic-errors.md:41 +#: src/error-handling/error-contexts.md:42 src/unsafe.md:32 +#: src/unsafe/raw-pointers.md:43 src/unsafe/mutable-static-variables.md:35 +#: src/unsafe/unions.md:28 src/unsafe/writing-unsafe-functions.md:38 +#: src/unsafe/extern-functions.md:28 src/unsafe/unsafe-traits.md:37 +#: src/exercises/day-3/afternoon.md:11 +#: src/android/interoperability/with-c/rust.md:86 +#: src/exercises/android/morning.md:15 src/bare-metal/no_std.md:65 +#: src/bare-metal/minimal.md:26 src/bare-metal/alloc.md:49 +#: src/bare-metal/microcontrollers.md:29 +#: src/bare-metal/microcontrollers/mmio.md:72 +#: src/bare-metal/microcontrollers/pacs.md:65 +#: src/bare-metal/microcontrollers/hals.md:49 #: src/bare-metal/microcontrollers/board-support.md:40 #: src/bare-metal/microcontrollers/type-state.md:43 -#: src/bare-metal/microcontrollers/embedded-hal.md:23 src/bare-metal/microcontrollers/probe-rs.md:29 +#: src/bare-metal/microcontrollers/embedded-hal.md:23 +#: src/bare-metal/microcontrollers/probe-rs.md:29 #: src/bare-metal/microcontrollers/debugging.md:38 -#: src/bare-metal/microcontrollers/other-projects.md:26 src/exercises/bare-metal/morning.md:11 -#: src/bare-metal/aps.md:15 src/bare-metal/aps/inline-assembly.md:58 src/bare-metal/aps/mmio.md:17 +#: src/bare-metal/microcontrollers/other-projects.md:26 +#: src/exercises/bare-metal/morning.md:11 src/bare-metal/aps.md:15 +#: src/bare-metal/aps/inline-assembly.md:58 src/bare-metal/aps/mmio.md:17 #: src/bare-metal/aps/uart/traits.md:27 src/bare-metal/aps/better-uart.md:28 -#: src/bare-metal/aps/better-uart/bitflags.md:40 src/bare-metal/aps/better-uart/registers.md:46 -#: src/bare-metal/aps/better-uart/driver.md:67 src/bare-metal/aps/better-uart/using.md:55 -#: src/bare-metal/aps/logging.md:52 src/bare-metal/aps/logging/using.md:49 -#: src/bare-metal/useful-crates/zerocopy.md:53 src/bare-metal/useful-crates/aarch64-paging.md:33 +#: src/bare-metal/aps/better-uart/bitflags.md:40 +#: src/bare-metal/aps/better-uart/registers.md:46 +#: src/bare-metal/aps/better-uart/driver.md:67 +#: src/bare-metal/aps/better-uart/using.md:55 src/bare-metal/aps/logging.md:52 +#: src/bare-metal/aps/logging/using.md:49 +#: src/bare-metal/useful-crates/zerocopy.md:53 +#: src/bare-metal/useful-crates/aarch64-paging.md:33 #: src/bare-metal/useful-crates/buddy_system_allocator.md:30 -#: src/bare-metal/useful-crates/tinyvec.md:26 src/bare-metal/useful-crates/spin.md:30 -#: src/bare-metal/android/vmbase.md:25 src/exercises/bare-metal/afternoon.md:11 -#: src/concurrency/threads.md:45 src/concurrency/scoped-threads.md:40 src/concurrency/channels.md:32 +#: src/bare-metal/useful-crates/tinyvec.md:26 +#: src/bare-metal/useful-crates/spin.md:30 src/bare-metal/android/vmbase.md:25 +#: src/exercises/bare-metal/afternoon.md:11 src/concurrency/threads.md:45 +#: src/concurrency/scoped-threads.md:40 src/concurrency/channels.md:32 #: src/concurrency/send-sync.md:23 src/concurrency/send-sync/send.md:16 #: src/concurrency/send-sync/sync.md:18 src/concurrency/shared_state/arc.md:38 -#: src/concurrency/shared_state/mutex.md:45 src/concurrency/shared_state/example.md:56 -#: src/exercises/concurrency/morning.md:16 src/async/async-await.md:48 src/async/futures.md:45 -#: src/async/runtimes.md:29 src/async/runtimes/tokio.md:49 src/async/tasks.md:64 -#: src/async/channels.md:49 src/async/control-flow/join.md:50 src/async/control-flow/select.md:77 +#: src/concurrency/shared_state/mutex.md:45 +#: src/concurrency/shared_state/example.md:56 +#: src/exercises/concurrency/morning.md:16 src/async/async-await.md:48 +#: src/async/futures.md:45 src/async/runtimes.md:29 +#: src/async/runtimes/tokio.md:49 src/async/tasks.md:64 +#: src/async/channels.md:49 src/async/control-flow/join.md:50 +#: src/async/control-flow/select.md:77 #: src/async/pitfalls/blocking-executor.md:50 src/async/pitfalls/pin.md:112 -#: src/async/pitfalls/async-traits.md:63 src/exercises/concurrency/afternoon.md:17 +#: src/async/pitfalls/async-traits.md:63 +#: src/exercises/concurrency/afternoon.md:17 #: src/exercises/concurrency/dining-philosophers-async.md:79 msgid "
" msgstr "" @@ -1307,10 +1394,12 @@ msgstr "> Diese Seite ist für den Kursleiter." #: src/running-the-course.md:5 msgid "" -"Here is a bit of background information about how we've been running the course\n" +"Here is a bit of background information about how we've been running the " +"course\n" "internally at Google." msgstr "" -"Hier ein paar Hintergrundinformationen darüber, wie wir den Kurs intern bei Google \n" +"Hier ein paar Hintergrundinformationen darüber, wie wir den Kurs intern bei " +"Google \n" "durchführen." #: src/running-the-course.md:8 @@ -1320,72 +1409,96 @@ msgstr "Bevor du den Kurs vorstellst solltest du:" #: src/running-the-course.md:10 #, fuzzy msgid "" -"1. Make yourself familiar with the course material. We've included speaker notes\n" -" to help highlight the key points (please help us by contributing more speaker\n" -" notes!). When presenting, you should make sure to open the speaker notes in a\n" -" popup (click the link with a little arrow next to \"Speaker Notes\"). This way\n" +"1. Make yourself familiar with the course material. We've included speaker " +"notes\n" +" to help highlight the key points (please help us by contributing more " +"speaker\n" +" notes!). When presenting, you should make sure to open the speaker notes " +"in a\n" +" popup (click the link with a little arrow next to \"Speaker Notes\"). " +"This way\n" " you have a clean screen to present to the class.\n" "\n" -"1. Decide on the dates. Since the course takes at least three full days, we recommend that you\n" +"1. Decide on the dates. Since the course takes at least three full days, we " +"recommend that you\n" " schedule the days over two weeks. Course participants have said that\n" -" they find it helpful to have a gap in the course since it helps them process\n" +" they find it helpful to have a gap in the course since it helps them " +"process\n" " all the information we give them.\n" "\n" "1. Find a room large enough for your in-person participants. We recommend a\n" -" class size of 15-25 people. That's small enough that people are comfortable\n" -" asking questions --- it's also small enough that one instructor will have\n" -" time to answer the questions. Make sure the room has _desks_ for yourself and for the\n" -" students: you will all need to be able to sit and work with your laptops.\n" -" In particular, you will be doing a lot of live-coding as an instructor, so a lectern won't\n" +" class size of 15-25 people. That's small enough that people are " +"comfortable\n" +" asking questions --- it's also small enough that one instructor will " +"have\n" +" time to answer the questions. Make sure the room has _desks_ for yourself " +"and for the\n" +" students: you will all need to be able to sit and work with your " +"laptops.\n" +" In particular, you will be doing a lot of live-coding as an instructor, " +"so a lectern won't\n" " be very helpful for you.\n" "\n" -"1. On the day of your course, show up to the room a little early to set things\n" -" up. We recommend presenting directly using `mdbook serve` running on your\n" -" laptop (see the [installation instructions][3]). This ensures optimal performance with no lag " -"as you change pages.\n" +"1. On the day of your course, show up to the room a little early to set " +"things\n" +" up. We recommend presenting directly using `mdbook serve` running on " +"your\n" +" laptop (see the [installation instructions][3]). This ensures optimal " +"performance with no lag as you change pages.\n" " Using your laptop will also allow you to fix typos as you or the course\n" " participants spot them.\n" "\n" "1. Let people solve the exercises by themselves or in small groups.\n" -" We typically spend 30-45 minutes on exercises in the morning and in the afternoon (including " -"time to review the solutions).\n" +" We typically spend 30-45 minutes on exercises in the morning and in the " +"afternoon (including time to review the solutions).\n" " Make sure to\n" -" ask people if they're stuck or if there is anything you can help with. When\n" -" you see that several people have the same problem, call it out to the class\n" +" ask people if they're stuck or if there is anything you can help with. " +"When\n" +" you see that several people have the same problem, call it out to the " +"class\n" " and offer a solution, e.g., by showing people where to find the relevant\n" " information in the standard library." msgstr "" -"1. Setze dich mit dem Kursmaterial auseinander. Wir haben Sprechernotizen hinzugefügt, um " -"Schlüsselpunkte hervorzuheben (gerne kannst du uns helfen weitere Sprechernotizen hinzuzufügen!). " -"Beim Vorstellen kannst du die Sprechernotizen in einem Seitenfenster öffnen (klick dazu auf den " -"kleinen Pfeil neben \"Speaker Notes\"). Dadurch hast du eine übersichtliche Oberfläche wenn du den " -"Kurs vorstellst.\n" -"1. Am Nachmittag des vierten Tages kannst du ein Thema frei wählen. Du kannst entweder ein Thema " -"nach Schwierigkeitsgrad wählen, oder aber ein Thema was zu deiner Zuhörerschaft passt.\n" -"1. Lege im Vorhinein die Kurszeiten fest. Der Kurs ist umfangreich, daher empfehlen wir vier Tage " -"in einem Zeitraum von zwei Wochen. Kursteilnehmer meinten, dass Pausen zwischen den Tagen sinnvoll " -"seien um die Menge an Informationen zu verarbeiten.\n" -"1. Finde einen Raum der groß genug für alle anwesenden Teilnehmer ist. Wir empfehlen eine " -"Teilnehmeranzahl von 15 bis 20 Leuten. Das schafft ein gutes Klima, um Fragen zu stellen, und es " -"ist möglich alle Fragen zeitnah zu beantworten. Stelle auch sicher, dass der Raum _Tische_ mit " -"Stühlen für die Teilnehmer und dich hat. Ihr werdet nämlich eure Laptops benötigen. Um genau zu " -"sein wirst du viel vorprogrammieren.\n" -"1. Sei schon etwas vor dem ersten Termin da, um alles vorzubereiten. Wir schlagen vor, dass du " -"`mdbook serve` direkt präsentierst (siehe [Installationsanleitung][3]). Somit entstehen keine " -"Störungen oder Unklarheiten bei dem Wechseln von Seiten und falls du oder die Teilnehmer " +"1. Setze dich mit dem Kursmaterial auseinander. Wir haben Sprechernotizen " +"hinzugefügt, um Schlüsselpunkte hervorzuheben (gerne kannst du uns helfen " +"weitere Sprechernotizen hinzuzufügen!). Beim Vorstellen kannst du die " +"Sprechernotizen in einem Seitenfenster öffnen (klick dazu auf den kleinen " +"Pfeil neben \"Speaker Notes\"). Dadurch hast du eine übersichtliche " +"Oberfläche wenn du den Kurs vorstellst.\n" +"1. Am Nachmittag des vierten Tages kannst du ein Thema frei wählen. Du " +"kannst entweder ein Thema nach Schwierigkeitsgrad wählen, oder aber ein " +"Thema was zu deiner Zuhörerschaft passt.\n" +"1. Lege im Vorhinein die Kurszeiten fest. Der Kurs ist umfangreich, daher " +"empfehlen wir vier Tage in einem Zeitraum von zwei Wochen. Kursteilnehmer " +"meinten, dass Pausen zwischen den Tagen sinnvoll seien um die Menge an " +"Informationen zu verarbeiten.\n" +"1. Finde einen Raum der groß genug für alle anwesenden Teilnehmer ist. Wir " +"empfehlen eine Teilnehmeranzahl von 15 bis 20 Leuten. Das schafft ein gutes " +"Klima, um Fragen zu stellen, und es ist möglich alle Fragen zeitnah zu " +"beantworten. Stelle auch sicher, dass der Raum _Tische_ mit Stühlen für die " +"Teilnehmer und dich hat. Ihr werdet nämlich eure Laptops benötigen. Um genau " +"zu sein wirst du viel vorprogrammieren.\n" +"1. Sei schon etwas vor dem ersten Termin da, um alles vorzubereiten. Wir " +"schlagen vor, dass du `mdbook serve` direkt präsentierst (siehe " +"[Installationsanleitung][3]). Somit entstehen keine Störungen oder " +"Unklarheiten bei dem Wechseln von Seiten und falls du oder die Teilnehmer " "Rechtschreibfehler finden können diese sofort behoben werden.\n" -"1. Gib den Kursteilnehmern Zeit die Aufgaben selbst oder in kleinen Gruppen zu lösen. Vergiss " -"nicht ab und an zu fragen ob jemand Hilfe benötigt. Wenn mehrere Teilnehmer das gleiche Problem " -"haben, spreche es vor allen Teilnehmern an und zeige einen möglichen Lösungsweg auf. Z. B. " -"könntest du zeigen wo man die relevante Information in der Standardbibliothek findet.\n" -"1. Bereite alles vor was du am Nachmittag des vierten Tages behandeln möchtest." +"1. Gib den Kursteilnehmern Zeit die Aufgaben selbst oder in kleinen Gruppen " +"zu lösen. Vergiss nicht ab und an zu fragen ob jemand Hilfe benötigt. Wenn " +"mehrere Teilnehmer das gleiche Problem haben, spreche es vor allen " +"Teilnehmern an und zeige einen möglichen Lösungsweg auf. Z. B. könntest du " +"zeigen wo man die relevante Information in der Standardbibliothek findet.\n" +"1. Bereite alles vor was du am Nachmittag des vierten Tages behandeln " +"möchtest." #: src/running-the-course.md:43 msgid "" -"That is all, good luck running the course! We hope it will be as much fun for\n" +"That is all, good luck running the course! We hope it will be as much fun " +"for\n" "you as it has been for us!" msgstr "" -"Das ist alles, viel Glück bei der Durchführung des Kurses! Wir hoffen, dass es dir \n" +"Das ist alles, viel Glück bei der Durchführung des Kurses! Wir hoffen, dass " +"es dir \n" "genauso viel Spaß machen wird wie uns!" #: src/running-the-course.md:46 @@ -1394,10 +1507,12 @@ msgid "" "course. We would love to hear what worked well for you and what can be made\n" "better. Your students are also very welcome to [send us feedback][2]!" msgstr "" -"Bitte [gib anschließend Rückmeldung][1], damit wir den Kurs weiter verbessern können. \n" -"Was uns besonders interessieren würde ist was gut funktioniert hat aber auch was wir verbessern " -"könnten.\n" -"Deine Teilnehmer sind natürlich auch herzlich eingeladen, [uns Rückmeldung zu geben][2]!" +"Bitte [gib anschließend Rückmeldung][1], damit wir den Kurs weiter " +"verbessern können. \n" +"Was uns besonders interessieren würde ist was gut funktioniert hat aber auch " +"was wir verbessern könnten.\n" +"Deine Teilnehmer sind natürlich auch herzlich eingeladen, [uns Rückmeldung " +"zu geben][2]!" #: src/running-the-course/course-structure.md:1 msgid "# Course Structure" @@ -1413,8 +1528,10 @@ msgid "" "* Day 2: Compound data types, pattern matching, the standard library.\n" "* Day 3: Traits and generics, error handling, testing, unsafe Rust." msgstr "" -"* Tag 1: Rust Grundlagen, Eigentümerschaft (ownership) und der Ausleihenprüfer (borrow checker).\n" -"* Tag 2: Zusammengesetzte Datentypen, Musterabgleich, die Standardbibliothek.\n" +"* Tag 1: Rust Grundlagen, Eigentümerschaft (ownership) und der " +"Ausleihenprüfer (borrow checker).\n" +"* Tag 2: Zusammengesetzte Datentypen, Musterabgleich, die " +"Standardbibliothek.\n" "* Tag 3: Merkmale und Generika, Fehlerbehandlung, Testen, unsicheres Rust." #: src/running-the-course/course-structure.md:11 @@ -1435,20 +1552,26 @@ msgstr "### Android" #: src/running-the-course/course-structure.md:18 msgid "" -"The [Android Deep Dive](../android.md) is a half-day course on using Rust for\n" -"Android platform development. This includes interoperability with C, C++, and\n" +"The [Android Deep Dive](../android.md) is a half-day course on using Rust " +"for\n" +"Android platform development. This includes interoperability with C, C++, " +"and\n" "Java." msgstr "" -"Der [Android Deep Dive](../android.md) ist ein halbtägiger Kurs zur Verwendung von Rust für\n" -"Entwicklung der Android-Plattform. Dazu gehört die Interoperabilität mit C, C++ und\n" +"Der [Android Deep Dive](../android.md) ist ein halbtägiger Kurs zur " +"Verwendung von Rust für\n" +"Entwicklung der Android-Plattform. Dazu gehört die Interoperabilität mit C, " +"C++ und\n" "Java." #: src/running-the-course/course-structure.md:22 #, fuzzy msgid "" "You will need an [AOSP checkout][1]. Make a checkout of the [course\n" -"repository][2] on the same machine and move the `src/android/` directory into\n" -"the root of your AOSP checkout. This will ensure that the Android build system\n" +"repository][2] on the same machine and move the `src/android/` directory " +"into\n" +"the root of your AOSP checkout. This will ensure that the Android build " +"system\n" "sees the `Android.bp` files in `src/android/`." msgstr "" "Für die Android-spezifischen Teile an Tag 4 benötigst du eine lokale \n" @@ -1460,13 +1583,18 @@ msgstr "" #: src/running-the-course/course-structure.md:27 msgid "" -"Ensure that `adb sync` works with your emulator or real device and pre-build all\n" -"Android examples using `src/android/build_all.sh`. Read the script to see the\n" +"Ensure that `adb sync` works with your emulator or real device and pre-build " +"all\n" +"Android examples using `src/android/build_all.sh`. Read the script to see " +"the\n" "commands it runs and make sure they work when you run them by hand." msgstr "" -"Stelle sicher, dass `adb sync` auf deinem Emulator oder Rechner funktioniert.\n" -"Erstelle bereits vor dem Kurs alle Android-Beispiele mit `src/android/build_all.sh`. \n" -"Schaue auch in das Skript rein und probiere aus, ob alle Befehle, die es ausführt\n" +"Stelle sicher, dass `adb sync` auf deinem Emulator oder Rechner " +"funktioniert.\n" +"Erstelle bereits vor dem Kurs alle Android-Beispiele mit `src/android/" +"build_all.sh`. \n" +"Schaue auch in das Skript rein und probiere aus, ob alle Befehle, die es " +"ausführt\n" "auch von Hand ausgeführt funktionieren." #: src/running-the-course/course-structure.md:34 @@ -1475,24 +1603,28 @@ msgstr "### Bare-Metal" #: src/running-the-course/course-structure.md:36 msgid "" -"The [Bare-Metal Deep Dive](../bare-metal.md): a full day class on using Rust for\n" +"The [Bare-Metal Deep Dive](../bare-metal.md): a full day class on using Rust " +"for\n" "bare-metal (embedded) development. Both microcontrollers and application\n" "processors are covered." msgstr "" -"Der [Bare-Metal Deep Dive](../bare-metal.md): ein ganztägiger Kurs über die Verwendung von Rust " -"für\n" -"Bare-Metal-Entwicklung (eingebettet). Sowohl Mikrocontroller als auch Anwendungen\n" +"Der [Bare-Metal Deep Dive](../bare-metal.md): ein ganztägiger Kurs über die " +"Verwendung von Rust für\n" +"Bare-Metal-Entwicklung (eingebettet). Sowohl Mikrocontroller als auch " +"Anwendungen\n" "Prozessoren sind abgedeckt." #: src/running-the-course/course-structure.md:40 msgid "" "For the microcontroller part, you will need to buy the [BBC\n" -"micro:bit](https://microbit.org/) v2 development board ahead of time. Everybody\n" +"micro:bit](https://microbit.org/) v2 development board ahead of time. " +"Everybody\n" "will need to install a number of packages as described on the [welcome\n" "page](../bare-metal.md)." msgstr "" "Für den Mikrocontroller-Teil solltest Du das [BBC\n" -"micro:bit](https://microbit.org/) v2-Entwicklungsboard im Voraus kaufen. Alle\n" +"micro:bit](https://microbit.org/) v2-Entwicklungsboard im Voraus kaufen. " +"Alle\n" "müssen eine Reihe von Paketen installieren, wie auf der [Willkommens \n" "Seite](../bare-metal.md) beschrieben." @@ -1502,21 +1634,26 @@ msgstr "### Nebenläufigkeit" #: src/running-the-course/course-structure.md:47 msgid "" -"The [Concurrency Deep Dive](../concurrency.md) is a full day class on classical\n" +"The [Concurrency Deep Dive](../concurrency.md) is a full day class on " +"classical\n" "as well as `async`/`await` concurrency." msgstr "" -"Der [Nebensläufgkeitsvertiefung](../concurrency.md) ist ein ganztägiger Kurs zur klassischen \n" +"Der [Nebensläufgkeitsvertiefung](../concurrency.md) ist ein ganztägiger Kurs " +"zur klassischen \n" "sowie „async“/„await“-Parallelität." #: src/running-the-course/course-structure.md:50 msgid "" -"You will need a fresh crate set up and the dependencies downloaded and ready to\n" -"go. You can then copy/paste the examples into `src/main.rs` to experiment with\n" +"You will need a fresh crate set up and the dependencies downloaded and ready " +"to\n" +"go. You can then copy/paste the examples into `src/main.rs` to experiment " +"with\n" "them:" msgstr "" -"Du solltest eine neue Kiste (crate) einrichten und die Abhängigkeiten (dependencies) herunterladen " -"und einsatzbereit machen. Anschließend kannst Du die Beispiele kopieren und in `src/main.rs` " -"einfügen, um damit zu experimentieren:" +"Du solltest eine neue Kiste (crate) einrichten und die Abhängigkeiten " +"(dependencies) herunterladen und einsatzbereit machen. Anschließend kannst " +"Du die Beispiele kopieren und in `src/main.rs` einfügen, um damit zu " +"experimentieren:" #: src/running-the-course/course-structure.md:54 msgid "" @@ -1557,7 +1694,8 @@ msgid "" msgstr "" "* Pfeil-links: Zur vorherigen Seite navigieren.\n" "* Pfeil-rechts: Zur nächsten Seite navigieren.\n" -"* Strg + Eingabe: Führe das Codebeispiel aus, das aktuell den Fokus hat.\n" +"* Strg + Eingabe: Führe das Codebeispiel aus, das aktuell den " +"Fokus hat.\n" "* s: Suchleiste aktivieren." #: src/running-the-course/translations.md:1 @@ -1575,11 +1713,13 @@ msgid "" "* [Brazilian Portuguese][pt-BR] by [@rastringer] and [@hugojacob].\n" "* [Korean][ko] by [@keispace], [@jiyongp] and [@jooyunghan]." msgstr "" -"* [Brasilianisches Portugiesisch][pt-BR] von [@rastringer] und [@hugojacob].\n" +"* [Brasilianisches Portugiesisch][pt-BR] von [@rastringer] und " +"[@hugojacob].\n" "* [Koreanisch][ko] von [@keispace], [@jiyongp] und [@jooyunghan]." #: src/running-the-course/translations.md:9 -msgid "Use the language picker in the top-right corner to switch between languages." +msgid "" +"Use the language picker in the top-right corner to switch between languages." msgstr "Benutze die Sprachenauswahl oben rechts, um die Sprache zu wechseln." #: src/running-the-course/translations.md:11 @@ -1601,11 +1741,12 @@ msgstr "" #: src/running-the-course/translations.md:20 msgid "" -"If you want to help with this effort, please see [our instructions] for how to\n" +"If you want to help with this effort, please see [our instructions] for how " +"to\n" "get going. Translations are coordinated on the [issue tracker]." msgstr "" -"Wenn du uns hierbei unterstützen möchtest, lies dir bitte [unsere Anweisungen][our instructions] " -"durch.\n" +"Wenn du uns hierbei unterstützen möchtest, lies dir bitte [unsere " +"Anweisungen][our instructions] durch.\n" "Übersetzungen werden mit dem [Issue-Tracker][issue tracker] koordiniert." #: src/cargo.md:1 @@ -1614,17 +1755,20 @@ msgstr "# Cargo verwenden" #: 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\n" -"used in the Rust ecosystem to build and run Rust applications. Here we want to\n" -"give a brief overview of what Cargo is and how it fits into the wider ecosystem\n" +"When you start reading about Rust, you will soon meet [Cargo](https://doc." +"rust-lang.org/cargo/), the standard tool\n" +"used in the Rust ecosystem to build and run Rust applications. Here we want " +"to\n" +"give a brief overview of what Cargo is and how it fits into the wider " +"ecosystem\n" "and how it fits into this training." msgstr "" -"Wenn du anfängst über Rust zu lesen, wirst du sehr bald [Cargo](https://doc.rust-lang.org/" -"cargo/), \n" -"ein Standardwerkzeug, welches im Rust-Ökosystem verwendet wird, um Rust-Anwendungen zu erstellen \n" -"und auszuführen, kennenlernen. Hier wollen wir einen kurzen Überblick geben, was Cargo ist und wie " -"es\n" +"Wenn du anfängst über Rust zu lesen, wirst du sehr bald [Cargo](https://doc." +"rust-lang.org/cargo/), \n" +"ein Standardwerkzeug, welches im Rust-Ökosystem verwendet wird, um Rust-" +"Anwendungen zu erstellen \n" +"und auszuführen, kennenlernen. Hier wollen wir einen kurzen Überblick geben, " +"was Cargo ist und wie es\n" "in das breitere Ökosystem und in dieses Training passt." #: src/cargo.md:8 @@ -1637,19 +1781,23 @@ msgstr "### Rustup (empfohlen)" #: src/cargo.md:12 msgid "" -"You can follow the instructions to install cargo and rust compiler, among other standard ecosystem " -"tools with the [rustup][3] tool, which is maintained by the Rust Foundation." +"You can follow the instructions to install cargo and rust compiler, among " +"other standard ecosystem tools with the [rustup][3] tool, which is " +"maintained by the Rust Foundation." msgstr "" -"Du kannst den Anweisungen zur Installation von Cargo und des Rust-Compilers sowie anderer Standard-" -"Ökosystem-Tools mit dem Tool [rustup][3] folgen, das von der Rust Foundation verwaltet wird." +"Du kannst den Anweisungen zur Installation von Cargo und des Rust-Compilers " +"sowie anderer Standard-Ökosystem-Tools mit dem Tool [rustup][3] folgen, das " +"von der Rust Foundation verwaltet wird." #: src/cargo.md:14 msgid "" -"Along with cargo and rustc, Rustup will install itself as a command line utility that you can use " -"to install/switch toolchains, setup cross compilation, etc." +"Along with cargo and rustc, Rustup will install itself as a command line " +"utility that you can use to install/switch toolchains, setup cross " +"compilation, etc." msgstr "" -"Neben cargo und rustc installiert sich rustup selbst als Befehlszeilenprogramm, mit welchem du " -"Toolchains installieren/wechseln, oder cross-Kompilierung einrichten kannst." +"Neben cargo und rustc installiert sich rustup selbst als " +"Befehlszeilenprogramm, mit welchem du Toolchains installieren/wechseln, oder " +"cross-Kompilierung einrichten kannst." #: src/cargo.md:16 msgid "### Package Managers" @@ -1660,8 +1808,12 @@ msgid "#### Debian" msgstr "#### Debian" #: src/cargo.md:20 -msgid "On Debian/Ubuntu, you can install Cargo, the Rust source and the [Rust formatter][6] with" -msgstr "Auf Debian/Ubuntu kannst du Cargo und den Rust Quellcode wie folgt installieren" +msgid "" +"On Debian/Ubuntu, you can install Cargo, the Rust source and the [Rust " +"formatter][6] with" +msgstr "" +"Auf Debian/Ubuntu kannst du Cargo und den Rust Quellcode wie folgt " +"installieren" #: src/cargo.md:22 msgid "" @@ -1672,63 +1824,77 @@ msgstr "" #: src/cargo.md:26 msgid "" -"This will allow [rust-analyzer][1] to jump to the definitions. We suggest using\n" +"This will allow [rust-analyzer][1] to jump to the definitions. We suggest " +"using\n" "[VS Code][2] to edit the code (but any LSP compatible editor works)." msgstr "" -"Dadurch kann [rust-analyzer][1] zu den Definitionen springen. Wir empfehlen die Verwendung\n" -"von [VS Code][2], um Code zu bearbeiten (aber jeder LSP-kompatible Editor funktioniert auch)." +"Dadurch kann [rust-analyzer][1] zu den Definitionen springen. Wir empfehlen " +"die Verwendung\n" +"von [VS Code][2], um Code zu bearbeiten (aber jeder LSP-kompatible Editor " +"funktioniert auch)." #: src/cargo.md:29 msgid "" -"Some folks also like to use the [JetBrains][4] family of IDEs, which do their own analysis but " -"have their own tradeoffs. If you prefer them, you can install the [Rust Plugin][5]. Please take " -"note that as of January 2023 debugging only works on the CLion version of the JetBrains IDEA suite." +"Some folks also like to use the [JetBrains][4] family of IDEs, which do " +"their own analysis but have their own tradeoffs. If you prefer them, you can " +"install the [Rust Plugin][5]. Please take note that as of January 2023 " +"debugging only works on the CLion version of the JetBrains IDEA suite." msgstr "" -"Einige Leute verwenden auch gerne die [JetBrains][4]-Familie von IDEs, die eigene Code-Analysen " -"durchführen, aber auch eigene Einschränkungen haben. Wenn du diese IDEs bevorzugst, kannst du das " -"[Rust-Plugin] [5] installieren. Bitte beachte, dass das Debuggen seit Januar 2023 nur auf der " -"CLion-Version funktioniert, welche Teil der JetBrains IDEA-Suite ist." +"Einige Leute verwenden auch gerne die [JetBrains][4]-Familie von IDEs, die " +"eigene Code-Analysen durchführen, aber auch eigene Einschränkungen haben. " +"Wenn du diese IDEs bevorzugst, kannst du das [Rust-Plugin] [5] installieren. " +"Bitte beachte, dass das Debuggen seit Januar 2023 nur auf der CLion-Version " +"funktioniert, welche Teil der JetBrains IDEA-Suite ist." #: src/cargo/rust-ecosystem.md:1 msgid "# The Rust Ecosystem" msgstr "# Das Rust-Ökosystem" #: src/cargo/rust-ecosystem.md:3 -msgid "The Rust ecosystem consists of a number of tools, of which the main ones are:" +msgid "" +"The Rust ecosystem consists of a number of tools, of which the main ones are:" msgstr "" -"Das Rust-Ökosystem besteht aus einer Reihe von Werkzeugen, von denen die wichtigsten die Folgenden " -"sind:" +"Das Rust-Ökosystem besteht aus einer Reihe von Werkzeugen, von denen die " +"wichtigsten die Folgenden sind:" #: src/cargo/rust-ecosystem.md:5 msgid "" -"* `rustc`: the Rust compiler which turns `.rs` files into binaries and other\n" +"* `rustc`: the Rust compiler which turns `.rs` files into binaries and " +"other\n" " intermediate formats.\n" "\n" "* `cargo`: the Rust dependency manager and build tool. Cargo knows how to\n" -" download dependencies hosted on and it will pass them to\n" +" download dependencies hosted on and it will pass them " +"to\n" " `rustc` when building your project. Cargo also comes with a built-in test\n" " runner which is used to execute unit tests.\n" "\n" "* `rustup`: the Rust toolchain installer and updater. This tool is used to\n" -" install and update `rustc` and `cargo` when new versions of Rust is released.\n" +" install and update `rustc` and `cargo` when new versions of Rust is " +"released.\n" " In addition, `rustup` can also download documentation for the standard\n" -" library. You can have multiple versions of Rust installed at once and `rustup`\n" +" library. You can have multiple versions of Rust installed at once and " +"`rustup`\n" " will let you switch between them as needed." msgstr "" -"* `rustc`: der Rust-Compiler, der `.rs`-Dateien in Binärdateien und andere Zwischenformate " -"umwandelt\n" +"* `rustc`: der Rust-Compiler, der `.rs`-Dateien in Binärdateien und andere " +"Zwischenformate umwandelt\n" "\n" -"* `cargo`: der Rust-Abhängigkeitsmanager (Dependency manager) und das Bauwerkzeug (Build-Tool). " -"Cargo weiß, wie die Abhängigkeiten heruntergeladen werden müssen, die auf " -"gehostet werden, und übergibt sie an\n" -" `rustc` beim Erstellen Ihres Projekts. Cargo verfügt außerdem über einen integrierten " -"Testausführer, \n" +"* `cargo`: der Rust-Abhängigkeitsmanager (Dependency manager) und das " +"Bauwerkzeug (Build-Tool). Cargo weiß, wie die Abhängigkeiten heruntergeladen " +"werden müssen, die auf gehostet werden, und übergibt sie " +"an\n" +" `rustc` beim Erstellen Ihres Projekts. Cargo verfügt außerdem über einen " +"integrierten Testausführer, \n" " der zum Ausführen von Unit-Tests verwendet wird." -#: src/cargo/rust-ecosystem.md:21 src/hello-world.md:25 src/hello-world/small-example.md:27 -#: src/why-rust/runtime.md:10 src/why-rust/modern.md:21 src/basic-syntax/compound-types.md:30 -#: src/basic-syntax/references.md:23 src/pattern-matching/destructuring-enums.md:35 -#: src/error-handling/try-operator.md:48 src/error-handling/converting-error-types-example.md:50 +#: src/cargo/rust-ecosystem.md:21 src/hello-world.md:25 +#: src/hello-world/small-example.md:27 src/why-rust/runtime.md:10 +#: src/why-rust/modern.md:21 src/basic-syntax/compound-types.md:30 +#: src/basic-syntax/references.md:23 +#: src/pattern-matching/destructuring-enums.md:35 +#: src/error-handling/try-operator.md:48 +#: src/error-handling/converting-error-types-example.md:50 #: src/concurrency/threads.md:30 src/async/async-await.md:25 msgid "Key points:" msgstr "Schlüsselpunkte:" @@ -1756,22 +1922,24 @@ msgid "" " * To avoid splitting the ecosystem, Rust compilers can mix code\n" " written for different editions.\n" "\n" -" * Mention that it is quite rare to ever use the compiler directly not through `cargo` (most " -"users never do).\n" +" * Mention that it is quite rare to ever use the compiler directly not " +"through `cargo` (most users never do).\n" "\n" -" * 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: \n" +" * 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: \n" " * Project/package structure\n" " * [workspaces]\n" " * Dev Dependencies and Runtime Dependency management/caching\n" " * [build scripting]\n" " * [global installation]\n" -" * It is also extensible with sub command plugins as well (such as [cargo clippy]).\n" +" * It is also extensible with sub command plugins as well (such as " +"[cargo clippy]).\n" " * Read more from the [official Cargo Book]" msgstr "" -"* Rust hat einen schnellen Veröffentlichungsplan. Alle sechs Wochen wird eine neue Version " -"veröffentlicht. Neue Versionen bleiben rückwärtskompatibel mit älteren Versionen und fügen neue " -"Funktionen hinzu.\n" +"* Rust hat einen schnellen Veröffentlichungsplan. Alle sechs Wochen wird " +"eine neue Version veröffentlicht. Neue Versionen bleiben rückwärtskompatibel " +"mit älteren Versionen und fügen neue Funktionen hinzu.\n" "\n" "* Es gibt drei Veröffentlichungskanäle: „stable“, „beta“ und „nightly“.\n" "\n" @@ -1783,23 +1951,27 @@ msgstr "" "\n" " * Editionen dürfen rückwärtsinkompatible Änderungen vornehmen.\n" "\n" -" * Um zu verhindern, dass Code nicht kaputt geht, sind Editionen optional: Du wählst ihre " -"Edition für deine Kiste (crate) in der Datei `Cargo.toml`\n" +" * Um zu verhindern, dass Code nicht kaputt geht, sind Editionen optional: " +"Du wählst ihre Edition für deine Kiste (crate) in der Datei `Cargo.toml`\n" "\n" -" * Um eine Aufspaltung des Ökosystems zu vermeiden, können Rust-Compiler Code der für " -"verschiedene Editionen geschrieben wurde vermischen.\n" +" * Um eine Aufspaltung des Ökosystems zu vermeiden, können Rust-Compiler " +"Code der für verschiedene Editionen geschrieben wurde vermischen.\n" "\n" -" * Erwähne, dass es ziemlich selten vorkommt, dass der Compiler jemals direkt und nicht über " -"`cargo` verwendet wird (die meisten Benutzer tun dies nie).\n" +" * Erwähne, dass es ziemlich selten vorkommt, dass der Compiler jemals " +"direkt und nicht über `cargo` verwendet wird (die meisten Benutzer tun dies " +"nie).\n" "\n" -" * Es könnte erwähnenswert sein, dass Cargo selbst ein äußerst leistungsstarkes und umfassendes " -"Tool ist. Es verfügt über viele erweiterte Funktionen, einschließlich, aber nicht beschränkt auf:\n" +" * Es könnte erwähnenswert sein, dass Cargo selbst ein äußerst " +"leistungsstarkes und umfassendes Tool ist. Es verfügt über viele erweiterte " +"Funktionen, einschließlich, aber nicht beschränkt auf:\n" " * Projekt-/Paketstruktur\n" " * [Arbeitsbereiche]\n" -" * Verwaltung/Caching von Entwicklungsabhängigkeiten und Laufzeitabhängigkeiten\n" +" * Verwaltung/Caching von Entwicklungsabhängigkeiten und " +"Laufzeitabhängigkeiten\n" " * [Build-Skripting]\n" " * [globale Installation]\n" -" * Es ist auch mit Unterbefehls-Plugins erweiterbar (z. B. [cargo clippy]).\n" +" * Es ist auch mit Unterbefehls-Plugins erweiterbar (z. B. [cargo " +"clippy]).\n" " * Lese mehr aus dem [offiziellen Cargo Buch]" #: src/cargo/code-samples.md:1 @@ -1808,22 +1980,28 @@ msgstr "# Codebeispiele in diesem Training" #: src/cargo/code-samples.md:3 msgid "" -"For this training, we will mostly explore the Rust language through examples\n" -"which can be executed through your browser. This makes the setup much easier and\n" +"For this training, we will mostly explore the Rust language through " +"examples\n" +"which can be executed through your browser. This makes the setup much easier " +"and\n" "ensures a consistent experience for everyone." msgstr "" -"In diesem Training werden wir die Rust-Sprache hauptsächlich anhand von Beispielen erkunden\n" -"die über Ihren Browser ausgeführt werden können. Dies erleichtert die Einrichtung erheblich und\n" +"In diesem Training werden wir die Rust-Sprache hauptsächlich anhand von " +"Beispielen erkunden\n" +"die über Ihren Browser ausgeführt werden können. Dies erleichtert die " +"Einrichtung erheblich und\n" "sorgt für ein konsistentes Erlebnis." #: src/cargo/code-samples.md:7 msgid "" -"Installing Cargo is still encouraged: it will make it easier for you to do the\n" -"exercises. On the last day, we will do a larger exercise which shows you how to\n" +"Installing Cargo is still encouraged: it will make it easier for you to do " +"the\n" +"exercises. On the last day, we will do a larger exercise which shows you how " +"to\n" "work with dependencies and for that you need Cargo." msgstr "" -"Die Installation von Cargo wird dennoch empfohlen: Es wird Dir die Bearbeitung der Übungen " -"erleichtern.\n" +"Die Installation von Cargo wird dennoch empfohlen: Es wird Dir die " +"Bearbeitung der Übungen erleichtern.\n" "Am letzten Tag werden wir eine größere Übung machen, die zeigt, wie\n" "Du mit Abhängigkeiten (dependencies) arbeitest und dafür benötigst Du Cargo." @@ -1842,18 +2020,20 @@ msgstr "" #: src/cargo/code-samples.md:19 msgid "" -"You can use Ctrl + Enter to execute the code when focus is in the\n" +"You can use Ctrl + Enter to execute the code when focus is in " +"the\n" "text box." msgstr "" -"Du kannst Strg + Eingabe verwenden, um den Code auszuführen, wenn der Fokus auf dem " -"Textfeld ist." +"Du kannst Strg + Eingabe verwenden, um den Code auszuführen, wenn " +"der Fokus auf dem Textfeld ist." #: src/cargo/code-samples.md:24 msgid "" "Most code samples are editable like shown above. A few code samples\n" "are not editable for various reasons:" msgstr "" -"Die meisten Codebeispiele können wie oben gezeigt bearbeitet werden. Ein paar Codebeispiele\n" +"Die meisten Codebeispiele können wie oben gezeigt bearbeitet werden. Ein " +"paar Codebeispiele\n" "sind aus verschiedenen Gründen nicht editierbar:" #: src/cargo/code-samples.md:27 @@ -1866,14 +2046,14 @@ msgid "" " solve the exercises using a local Rust installation or via the\n" " Playground." msgstr "" -"* Die eingebetteten Testumgebungen (embedded Playgrounds) können keine Unit-Tests durchführen. " -"Kopiere die Datei und füge \n" +"* Die eingebetteten Testumgebungen (embedded Playgrounds) können keine Unit-" +"Tests durchführen. Kopiere die Datei und füge \n" " den Code in der echten Testumgebung ein, um Unit-Tests zu demonstrieren.\n" "\n" -"* Die eingebetteten Testumgebungen verlieren ihren Zustand, sobald Du von der Seite weg " -"navigierst!\n" -" Aus diesem Grund sollten die Schüler die Übungen mit einer lokalen Rust-Installation oder in " -"der\n" +"* Die eingebetteten Testumgebungen verlieren ihren Zustand, sobald Du von " +"der Seite weg navigierst!\n" +" Aus diesem Grund sollten die Schüler die Übungen mit einer lokalen Rust-" +"Installation oder in der\n" " lokalen Testumgebung lösen." #: src/cargo/running-locally.md:1 @@ -1882,15 +2062,18 @@ msgstr "# Code lokal mit Cargo ausführen" #: src/cargo/running-locally.md:3 msgid "" -"If you want to experiment with the code on your own system, then you will need\n" +"If you want to experiment with the code on your own system, then you will " +"need\n" "to first install Rust. Do this by following the [instructions in the Rust\n" -"Book][1]. This should give you a working `rustc` and `cargo`. At the time of\n" +"Book][1]. This should give you a working `rustc` and `cargo`. At the time " +"of\n" "writing, the latest stable Rust release has these version numbers:" msgstr "" -"Wenn Du mit dem Code auf Deinem eigenen System experimentieren möchten, solltest Du\n" +"Wenn Du mit dem Code auf Deinem eigenen System experimentieren möchten, " +"solltest Du\n" "zuerst Rust installieren. Befolge dazu die [Anweisungen in dem Rust\n" -"Buch 1]. Dies sollte ein funktionierendes `rustc` und `cargo` hervorbringen. Zum " -"Verfassungszeitpunkt\n" +"Buch 1]. Dies sollte ein funktionierendes `rustc` und `cargo` hervorbringen. " +"Zum Verfassungszeitpunkt\n" "hat die neueste stabile Rust-Version folgende Versionsnummer:" #: src/cargo/running-locally.md:8 @@ -1908,21 +2091,23 @@ msgid "" "With this in place, follow these steps to build a Rust binary from one\n" "of the examples in this training:" msgstr "" -"Wenn dies vorhanden ist, befolge die folgenden Schritte, um eine Rust-Binärdatei aus einem " -"Beispiel zu erstellen:" +"Wenn dies vorhanden ist, befolge die folgenden Schritte, um eine Rust-" +"Binärdatei aus einem Beispiel zu erstellen:" #: src/cargo/running-locally.md:18 msgid "" "1. Click the \"Copy to clipboard\" button on the example you want to copy.\n" "\n" -"2. Use `cargo new exercise` to create a new `exercise/` directory for your code:\n" +"2. Use `cargo new exercise` to create a new `exercise/` directory for your " +"code:\n" "\n" " ```shell\n" " $ cargo new exercise\n" " Created binary (application) `exercise` package\n" " ```\n" "\n" -"3. Navigate into `exercise/` and use `cargo run` to build and run your binary:\n" +"3. Navigate into `exercise/` and use `cargo run` to build and run your " +"binary:\n" "\n" " ```shell\n" " $ cd exercise\n" @@ -1934,7 +2119,8 @@ msgid "" " ```\n" "\n" "4. Replace the boiler-plate code in `src/main.rs` with your own code. For\n" -" example, using the example on the previous page, make `src/main.rs` look like\n" +" example, using the example on the previous page, make `src/main.rs` look " +"like\n" "\n" " ```rust\n" " fn main() {\n" @@ -1952,25 +2138,29 @@ msgid "" " Edit me!\n" " ```\n" "\n" -"6. Use `cargo check` to quickly check your project for errors, use `cargo build`\n" -" to compile it without running it. You will find the output in `target/debug/`\n" -" for a normal debug build. Use `cargo build --release` to produce an optimized\n" +"6. Use `cargo check` to quickly check your project for errors, use `cargo " +"build`\n" +" to compile it without running it. You will find the output in `target/" +"debug/`\n" +" for a normal debug build. Use `cargo build --release` to produce an " +"optimized\n" " release build in `target/release/`.\n" "\n" -"7. You can add dependencies for your project by editing `Cargo.toml`. When you\n" +"7. You can add dependencies for your project by editing `Cargo.toml`. When " +"you\n" " run `cargo` commands, it will automatically download and compile missing\n" " dependencies for you." msgstr "" -"1. Klicke bei dem Beispiel, dass Du kopieren möchtest, auf die Schaltfläche „In die Zwischenablage " -"kopieren“.\n" -"2. Verwende `cargo new exercise`, um ein neues `exercise/`-Verzeichnis für Deinen Code zu " -"erstellen:\n" +"1. Klicke bei dem Beispiel, dass Du kopieren möchtest, auf die Schaltfläche " +"„In die Zwischenablage kopieren“.\n" +"2. Verwende `cargo new exercise`, um ein neues `exercise/`-Verzeichnis für " +"Deinen Code zu erstellen:\n" " ```shell\n" " $ cargo new exercise\n" " Created binary (application) `exercise` package\n" " ```\n" -"3. Navigiere zu `exercise/` und verwende `cargo run, um eine Binärdatei zu erstellen und " -"auszuführen:\n" +"3. Navigiere zu `exercise/` und verwende `cargo run, um eine Binärdatei zu " +"erstellen und auszuführen:\n" " ```shell\n" " $ cd exercise\n" " $ cargo run\n" @@ -1979,14 +2169,16 @@ msgstr "" " Running `target/debug/exercise`\n" " Hello, world!\n" " ```\n" -"4. Ersetze den Platzhalter-Code in `src/main.rs` durch eigenen Code. Verwende beispielsweise das " -"Beispiel auf der vorherigen Seite und lasse `src/main.rs` so aussehen:\n" +"4. Ersetze den Platzhalter-Code in `src/main.rs` durch eigenen Code. " +"Verwende beispielsweise das Beispiel auf der vorherigen Seite und lasse `src/" +"main.rs` so aussehen:\n" " ```rust\n" " fn main() {\n" " println!(\"Edit me!\");\n" " }\n" " ```\n" -"5. Verwende `cargo run`, um die neue Binärdatei zu erstellen und auszuführen:\n" +"5. Verwende `cargo run`, um die neue Binärdatei zu erstellen und " +"auszuführen:\n" " ```shell\n" " $ cargo run\n" " Compiling exercise v0.1.0 (/home/mgeisler/tmp/exercise)\n" @@ -1994,13 +2186,14 @@ msgstr "" " Running `target/debug/exercise`\n" " Edit me!\n" " ```\n" -"6. Verwende `cargo check`, um Dein Projekt schnell auf Fehler zu überprüfen, und verwende `cargo " -"build`, um es zu kompilieren, ohne es auszuführen. Du findest die Ausgabe in `target/debug/` für " -"einen normalen Debug-Build. Verwende `cargo build --release`, um einen optimierten Release-Build " -"in `target/release/` zu erstellen.\n" -"7. Du kannst Abhängigkeiten (dependencies) zu Deinem Projekt hinzufügen, indem Du `Cargo.toml` " -"bearbeitest. Wenn Du `cargo`-Befehle ausführst, werden fehlende Abhängigkeiten automatisch " -"heruntergeladen und für Dich kompiliert." +"6. Verwende `cargo check`, um Dein Projekt schnell auf Fehler zu überprüfen, " +"und verwende `cargo build`, um es zu kompilieren, ohne es auszuführen. Du " +"findest die Ausgabe in `target/debug/` für einen normalen Debug-Build. " +"Verwende `cargo build --release`, um einen optimierten Release-Build in " +"`target/release/` zu erstellen.\n" +"7. Du kannst Abhängigkeiten (dependencies) zu Deinem Projekt hinzufügen, " +"indem Du `Cargo.toml` bearbeitest. Wenn Du `cargo`-Befehle ausführst, werden " +"fehlende Abhängigkeiten automatisch heruntergeladen und für Dich kompiliert." #: src/cargo/running-locally.md:70 msgid "" @@ -2008,9 +2201,10 @@ msgid "" "local editor. It will make their life easier since they will have a\n" "normal development environment." msgstr "" -"Versuche, die Kursteilnehmer zu ermutigen, Cargo zu installieren und einen lokalen Texteditor zu " -"verwenden\n" -"Es wird Dein Leben einfacher machen, wenn alle eine lokale Entwicklungsumgebung haben." +"Versuche, die Kursteilnehmer zu ermutigen, Cargo zu installieren und einen " +"lokalen Texteditor zu verwenden\n" +"Es wird Dein Leben einfacher machen, wenn alle eine lokale " +"Entwicklungsumgebung haben." #: src/welcome-day-1.md:1 msgid "# Welcome to Day 1" @@ -2020,27 +2214,31 @@ msgstr "# Willkommen zu Tag 1" msgid "" "This is the first day of Comprehensive Rust. We will cover a lot of ground\n" "today:" -msgstr "Dies ist der erste Tag von Comprehensive Rust. Heute werden wir viel behandeln:" +msgstr "" +"Dies ist der erste Tag von Comprehensive Rust. Heute werden wir viel " +"behandeln:" #: src/welcome-day-1.md:6 msgid "" "* Basic Rust syntax: variables, scalar and compound types, enums, structs,\n" " references, functions, and methods.\n" "\n" -"* Memory management: stack vs heap, manual memory management, scope-based memory\n" +"* Memory management: stack vs heap, manual memory management, scope-based " +"memory\n" " management, and garbage collection.\n" "\n" "* Ownership: move semantics, copying and cloning, borrowing, and lifetimes." msgstr "" -"* Grundlegende Rust-Syntax: Variablen, Skalar- und zusammengesetzte Typen (scalar-types, union-" -"types) , Aufzählungen (enums), Strukturen (structs),\n" +"* Grundlegende Rust-Syntax: Variablen, Skalar- und zusammengesetzte Typen " +"(scalar-types, union-types) , Aufzählungen (enums), Strukturen (structs),\n" " Referenzen (references), Funktionen (functions) und Methoden (methods).\n" "\n" -"* Speicherverwaltung: Stack vs. Heap, manuelle Speicherverwaltung, bereichsbasierte " -"Speicherverwaltung und Speicherbereinigung (garbage collection).\n" +"* Speicherverwaltung: Stack vs. Heap, manuelle Speicherverwaltung, " +"bereichsbasierte Speicherverwaltung und Speicherbereinigung (garbage " +"collection).\n" "\n" -"* Eigentum (ownership): Bewegungssemantik (move semantics), Kopieren und Klonen (copy and " -"cloning), Ausleihen (borrowing) und Lebensdauer (lifetimes)." +"* Eigentum (ownership): Bewegungssemantik (move semantics), Kopieren und " +"Klonen (copy and cloning), Ausleihen (borrowing) und Lebensdauer (lifetimes)." #: src/welcome-day-1.md:16 msgid "Please remind the students that:" @@ -2049,36 +2247,49 @@ msgstr "Bitte erinnere die Kursteilnehmer daran:" #: src/welcome-day-1.md:18 msgid "" "* They should ask questions when they get them, don't save them to the end.\n" -"* The class is meant to be interactive and discussions are very much encouraged!\n" -" * As an instructor, you should try to keep the discussions relevant, i.e.,\n" -" keep the discussions related to how Rust does things vs some other language. \n" -" It can be hard to find the right balance, but err on the side of allowing \n" -" discussions since they engage people much more than one-way communication.\n" -"* The questions will likely mean that we talk about things ahead of the slides.\n" -" * This is perfectly okay! Repetition is an important part of learning. Remember\n" +"* The class is meant to be interactive and discussions are very much " +"encouraged!\n" +" * As an instructor, you should try to keep the discussions relevant, i." +"e.,\n" +" keep the discussions related to how Rust does things vs some other " +"language. \n" +" It can be hard to find the right balance, but err on the side of " +"allowing \n" +" discussions since they engage people much more than one-way " +"communication.\n" +"* The questions will likely mean that we talk about things ahead of the " +"slides.\n" +" * This is perfectly okay! Repetition is an important part of learning. " +"Remember\n" " that the slides are just a support and you are free to skip them as you\n" " like." msgstr "" -"* Sie sollten Fragen stellen, sobald ihnen welche einfallen, und nicht bis zum Ende warten.\n" +"* Sie sollten Fragen stellen, sobald ihnen welche einfallen, und nicht bis " +"zum Ende warten.\n" "* Der Unterricht soll interaktiv sein und Diskussionen sind erwünscht!\n" -" * Als Dozent sollten Sie versuchen, die Diskussionen relevant zu halten, d. h.\n" -" Behalten Sie den Bezug dazu bei, wie Rust Dinge im Vergleich zu einer anderen Sprache tut. Es " -"kann schwer sein,\n" +" * Als Dozent sollten Sie versuchen, die Diskussionen relevant zu halten, " +"d. h.\n" +" Behalten Sie den Bezug dazu bei, wie Rust Dinge im Vergleich zu einer " +"anderen Sprache tut. Es kann schwer sein,\n" " die richtige Balance zu finden, aber lassen Sie lieber Diskussionen zu,\n" " um Kursteilnehmer einzubeziehen und lange Monologe zu vermeiden.\n" -"* Bei Fragen wird es wahrscheinlich dazu kommen, dass wir über die Dinge vor den eigentlichen " -"Folien sprechen.\n" -" * Das ist vollkommen in Ordnung! Wiederholung ist ein wichtiger Teil des Lernens.\n" -" Die Folien sind nur eine Unterstützung und Sie können sie nach Belieben überspringen." +"* Bei Fragen wird es wahrscheinlich dazu kommen, dass wir über die Dinge vor " +"den eigentlichen Folien sprechen.\n" +" * Das ist vollkommen in Ordnung! Wiederholung ist ein wichtiger Teil des " +"Lernens.\n" +" Die Folien sind nur eine Unterstützung und Sie können sie nach Belieben " +"überspringen." #: 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\n" -"about the famous borrow checker. The way Rust handles memory is a major feature\n" +"The idea for the first day is to show _just enough_ of Rust to be able to " +"speak\n" +"about the famous borrow checker. The way Rust handles memory is a major " +"feature\n" "and we should show students this right away." msgstr "" -"Die Idee für den ersten Tag ist, Rust _gerade genug_ zu zeigen, um über den berühmten " -"Ausleihenprüfer (borrow checker) sprechen zu können.\n" +"Die Idee für den ersten Tag ist, Rust _gerade genug_ zu zeigen, um über den " +"berühmten Ausleihenprüfer (borrow checker) sprechen zu können.\n" "Die Art und Weise, wie Rust mit Speicher umgeht, ist ein wichtiges Merkmal\n" "und das solltest Du den Kursteilnehmern direkt zeigen." @@ -2087,8 +2298,8 @@ msgid "" "If you're teaching this in a classroom, this is a good place to go over the\n" "schedule. We suggest splitting the day into two parts (following the slides):" msgstr "" -"Wenn Du in einem Klassenzimmer unterrichtest, ist dies ein guter Ort, um über den Zeitplan zu " -"gehen.\n" +"Wenn Du in einem Klassenzimmer unterrichtest, ist dies ein guter Ort, um " +"über den Zeitplan zu gehen.\n" "Wir empfehlen, den Tag in zwei Teile aufzuteilen (nach den Folien):" #: src/welcome-day-1.md:36 @@ -2101,10 +2312,12 @@ msgstr "" #: src/welcome-day-1.md:39 msgid "" -"You can of course adjust this as necessary. Please make sure to include breaks,\n" +"You can of course adjust this as necessary. Please make sure to include " +"breaks,\n" "we recommend a break every hour!" msgstr "" -"Dies kannst Du natürlich bei Bedarf anpassen. Bitte achte darauf, Pausen einzuplanen.\n" +"Dies kannst Du natürlich bei Bedarf anpassen. Bitte achte darauf, Pausen " +"einzuplanen.\n" "Wir empfehlen jede Stunde eine Pause!" #: src/welcome-day-1/what-is-rust.md:1 @@ -2112,15 +2325,18 @@ msgid "# What is Rust?" msgstr "# Was ist Rust?" #: src/welcome-day-1/what-is-rust.md:3 -msgid "Rust is a new programming language which had its [1.0 release in 2015][1]:" -msgstr "Rust ist eine neue Programmiersprache, die 2015 ihre Version 1.0 hatte:" +msgid "" +"Rust is a new programming language which had its [1.0 release in 2015][1]:" +msgstr "" +"Rust ist eine neue Programmiersprache, die 2015 ihre Version 1.0 hatte:" #: src/welcome-day-1/what-is-rust.md:5 msgid "" "* Rust is a statically compiled language in a similar role as C++\n" " * `rustc` uses LLVM as its backend.\n" "* Rust supports many [platforms and\n" -" architectures](https://doc.rust-lang.org/nightly/rustc/platform-support.html):\n" +" architectures](https://doc.rust-lang.org/nightly/rustc/platform-support." +"html):\n" " * x86, ARM, WebAssembly, ...\n" " * Linux, Mac, Windows, ...\n" "* Rust is used for a wide range of devices:\n" @@ -2130,10 +2346,12 @@ msgid "" " * desktops,\n" " * servers." msgstr "" -"* Rust ist eine statisch kompilierte Sprache in einer ähnlichen Rolle wie C++\n" +"* Rust ist eine statisch kompilierte Sprache in einer ähnlichen Rolle wie C+" +"+\n" " * `rustc` verwendet LLVM als Backend.\n" "* Rust unterstützt viele [Plattformen und\n" -" Architekturen] (https://doc.rust-lang.org/nightly/rustc/platform-support.html):\n" +" Architekturen] (https://doc.rust-lang.org/nightly/rustc/platform-support." +"html):\n" " * x86, ARM, WebAssembly, ...\n" " * Linux, Mac, Windows, ...\n" "* Rust wird für eine Vielzahl von Geräten verwendet:\n" @@ -2157,9 +2375,11 @@ msgid "" msgstr "" "* Hohe Flexibilität.\n" "* Hohes Maß an Kontrolle.\n" -"* Kann auf sehr eingeschränkte Geräte wie Mobiltelefone herunterskaliert werden.\n" +"* Kann auf sehr eingeschränkte Geräte wie Mobiltelefone herunterskaliert " +"werden.\n" "* Hat keine Laufzeit oder Speicherbereinigung (garbage collection).\n" -"* Konzentriert sich auf Zuverlässigkeit und Sicherheit ohne Leistungseinbußen." +"* Konzentriert sich auf Zuverlässigkeit und Sicherheit ohne " +"Leistungseinbußen." #: src/hello-world.md:1 msgid "# Hello World!" @@ -2170,7 +2390,8 @@ msgid "" "Let us jump into the simplest possible Rust program, a classic Hello World\n" "program:" msgstr "" -"Lasst uns in das einfachste Rust-Programm einsteigen, ein klassisches Hallo Welt\n" +"Lasst uns in das einfachste Rust-Programm einsteigen, ein klassisches Hallo " +"Welt\n" "Programm:" #: src/hello-world.md:6 @@ -2197,16 +2418,22 @@ msgstr "" "* Funktionen beginnen mit `fn`.\n" "* Blöcke werden wie in C und C++ durch geschweifte Klammern getrennt.\n" "* Die `main`-Funktion ist der Einstiegspunkt des Programms.\n" -"* Rust hat hygienische (hygienic) Makros, `println!` ist ein Beispiel dafür.\n" -"* Rust-Strings sind UTF-8-codiert und können beliebige Unicode-Zeichen enthalten." +"* Rust hat hygienische (hygienic) Makros, `println!` ist ein Beispiel " +"dafür.\n" +"* Rust-Strings sind UTF-8-codiert und können beliebige Unicode-Zeichen " +"enthalten." #: src/hello-world.md:22 msgid "" -"This slide tries to make the students comfortable with Rust code. They will see\n" -"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\n" +"a ton of it over the next four days so we start small with something " +"familiar." msgstr "" -"Diese Folie versucht, die Schüler mit Rust-Code vertraut zu machen. Sie werden viel\n" -"davon in den nächsten vier Tagen sehen, also fangen wir klein und mit etwas Vertrautem an." +"Diese Folie versucht, die Schüler mit Rust-Code vertraut zu machen. Sie " +"werden viel\n" +"davon in den nächsten vier Tagen sehen, also fangen wir klein und mit etwas " +"Vertrautem an." #: src/hello-world.md:27 msgid "" @@ -2216,28 +2443,35 @@ msgid "" "\n" "* Rust is modern with full support for things like Unicode.\n" "\n" -"* Rust uses macros for situations where you want to have a variable number of\n" -" arguments (no function [overloading](basic-syntax/functions-interlude.md)).\n" +"* Rust uses macros for situations where you want to have a variable number " +"of\n" +" arguments (no function [overloading](basic-syntax/functions-interlude." +"md)).\n" "\n" -"* Macros being 'hygienic' means they don't accidentally capture identifiers from\n" +"* Macros being 'hygienic' means they don't accidentally capture identifiers " +"from\n" " the scope they are used in. Rust macros are actually only\n" -" [partially hygienic](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene.html)." +" [partially hygienic](https://veykril.github.io/tlborm/decl-macros/minutiae/" +"hygiene.html)." msgstr "" -"* Rust ist anderen Sprachen in der C/C++/Java-Tradition sehr ähnlich. Es ist\n" -" Imperativ (nicht funktional) und es wird nicht versucht, Dinge neu zu erfinden, es sei denn es " +"* Rust ist anderen Sprachen in der C/C++/Java-Tradition sehr ähnlich. Es " "ist\n" +" Imperativ (nicht funktional) und es wird nicht versucht, Dinge neu zu " +"erfinden, es sei denn es ist\n" " absolut notwendig.\n" "\n" "* Rust ist modern und unterstützt Dinge wie Unicode vollständig.\n" "\n" -"* Rust verwendet Makros für Situationen, in denen Du eine variable Anzahl von Argumenten haben " -"möchtest\n" +"* Rust verwendet Makros für Situationen, in denen Du eine variable Anzahl " +"von Argumenten haben möchtest\n" " (keine [Funktionüberladung](basic-syntax/functions-interlude.md)).\n" "\n" -"* Makros sind „hygienisch“, was bedeutet, dass sie nicht versehentlich Identifikatoren in ihrem " -"Umfang (scope) in dem sie verwendet werden erfassen\n" +"* Makros sind „hygienisch“, was bedeutet, dass sie nicht versehentlich " +"Identifikatoren in ihrem Umfang (scope) in dem sie verwendet werden " +"erfassen\n" " Rust-Makros sind eigentlich nur\n" -" [teilweise hygienisch](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene.html)." +" [teilweise hygienisch](https://veykril.github.io/tlborm/decl-macros/" +"minutiae/hygiene.html)." #: src/hello-world/small-example.md:1 msgid "# Small Example" @@ -2268,47 +2502,58 @@ msgstr "" #: src/hello-world/small-example.md:23 msgid "" -"The code implements the Collatz conjecture: it is believed that the loop will\n" -"always end, but this is not yet proved. Edit the code and play with different\n" +"The code implements the Collatz conjecture: it is believed that the loop " +"will\n" +"always end, but this is not yet proved. Edit the code and play with " +"different\n" "inputs." msgstr "" -"Der Code implementiert die Collatz-Vermutung: Es wird angenommen, dass die Schleife immer enden " -"wird, allerdings ist das noch nicht bewiesen. Ändere den Code und spiele mit verschiedenen Eingaben." +"Der Code implementiert die Collatz-Vermutung: Es wird angenommen, dass die " +"Schleife immer enden wird, allerdings ist das noch nicht bewiesen. Ändere " +"den Code und spiele mit verschiedenen Eingaben." #: src/hello-world/small-example.md:29 msgid "" -"* Explain that all variables are statically typed. Try removing `i32` to trigger\n" -" type inference. Try with `i8` instead and trigger a runtime integer overflow.\n" +"* Explain that all variables are statically typed. Try removing `i32` to " +"trigger\n" +" type inference. Try with `i8` instead and trigger a runtime integer " +"overflow.\n" "\n" "* Change `let mut x` to `let x`, discuss the compiler error.\n" "\n" -"* Show how `print!` gives a compilation error if the arguments don't match the\n" +"* Show how `print!` gives a compilation error if the arguments don't match " +"the\n" " format string.\n" "\n" "* Show how you need to use `{}` as a placeholder if you want to print an\n" " expression which is more complex than just a single variable.\n" "\n" -"* Show the students the standard library, show them how to search for `std::fmt`\n" -" which has the rules of the formatting mini-language. It's important that the\n" +"* Show the students the standard library, show them how to search for `std::" +"fmt`\n" +" which has the rules of the formatting mini-language. It's important that " +"the\n" " students become familiar with searching in the standard library." msgstr "" -"* Erkläre, dass alle Variablen statisch typisiert sind. Versuche, `i32` zu entfernen um " -"Typinferenz (type inference) auszulösen. Versuche es stattdessen mit `i8` und löse dadurch einen " -"Ganzzahlüberlauf zur Laufzeit aus.\n" +"* Erkläre, dass alle Variablen statisch typisiert sind. Versuche, `i32` zu " +"entfernen um Typinferenz (type inference) auszulösen. Versuche es " +"stattdessen mit `i8` und löse dadurch einen Ganzzahlüberlauf zur Laufzeit " +"aus.\n" "\n" "* Ändere `let mut x` in `let x`, und bespreche den Compilerfehler.\n" "\n" -"* Zeige, wie `print!` einen Kompilierungsfehler ausgibt, wenn die Argumente nicht mit dem Format-" -"String übereinstimmen.\n" +"* Zeige, wie `print!` einen Kompilierungsfehler ausgibt, wenn die Argumente " +"nicht mit dem Format-String übereinstimmen.\n" "\n" -"* Zeige, wie Du `{}` als Platzhalter verwenden musst, wenn Du einen Ausdruck (Expression) drucken " -"möchtest,\n" +"* Zeige, wie Du `{}` als Platzhalter verwenden musst, wenn Du einen Ausdruck " +"(Expression) drucken möchtest,\n" " der komplexer als nur eine einzelne Variable ist.\n" "\n" -"* Zeige den Kursteilnehmern die Standardbibliothek (standard library) und zeige ihnen, wie sie nach `std::" -"fmt` suchen\n" -" welches die Regeln der Formatierungs-Minisprache enthält. Es ist wichtig, dass die\n" -" Kursteilnehmer mit der Suche in der Standardbibliothek vertraut gemacht werden." +"* Zeige den Kursteilnehmern die Standardbibliothek (standard library) und " +"zeige ihnen, wie sie nach `std::fmt` suchen\n" +" welches die Regeln der Formatierungs-Minisprache enthält. Es ist wichtig, " +"dass die\n" +" Kursteilnehmer mit der Suche in der Standardbibliothek vertraut gemacht " +"werden." #: src/why-rust.md:1 msgid "# Why Rust?" @@ -2330,37 +2575,46 @@ msgstr "" #: src/why-rust.md:11 msgid "" -"Make sure to ask the class which languages they have experience with. Depending\n" +"Make sure to ask the class which languages they have experience with. " +"Depending\n" "on the answer you can highlight different features of Rust:" msgstr "" -"Frage den Kurs unbedingt, mit welchen Programmiersprachen sie Erfahrung haben. Abhängig\n" +"Frage den Kurs unbedingt, mit welchen Programmiersprachen sie Erfahrung " +"haben. Abhängig\n" "von der Antwort kannst Du verschiedene Funktionen von Rust hervorheben:" #: src/why-rust.md:14 msgid "" -"* Experience with C or C++: Rust eliminates a whole class of _runtime errors_\n" -" via the borrow checker. You get performance like in C and C++, but you don't\n" -" have the memory unsafety issues. In addition, you get a modern language with\n" +"* Experience with C or C++: Rust eliminates a whole class of _runtime " +"errors_\n" +" via the borrow checker. You get performance like in C and C++, but you " +"don't\n" +" have the memory unsafety issues. In addition, you get a modern language " +"with\n" " constructs like pattern matching and built-in dependency management.\n" "\n" -"* Experience with Java, Go, Python, JavaScript...: You get the same memory safety\n" -" as in those languages, plus a similar high-level language feeling. In addition\n" -" you get fast and predictable performance like C and C++ (no garbage collector)\n" +"* Experience with Java, Go, Python, JavaScript...: You get the same memory " +"safety\n" +" as in those languages, plus a similar high-level language feeling. In " +"addition\n" +" you get fast and predictable performance like C and C++ (no garbage " +"collector)\n" " as well as access to low-level hardware (should you need it)" msgstr "" -"* Erfahrung mit C oder C++: Rust eliminiert eine ganze Klasse von _Laufzeitfehlern (runtime " -"Errors)_\n" -" über den Ausleihenprüfer (borrow checker). Du erhältst eine ähnliche Leistung wie in C und C++, " -"aber hast\n" -" keine Probleme mit der Speicherunsicherheit. Darüber hinaus erhältst Du eine moderne Sprache " -"mit\n" -" Konstrukten wie Mustervergleich (Pattern matching) und integriertes Abhängigkeitsmanagement " -"(dependency management).\n" +"* Erfahrung mit C oder C++: Rust eliminiert eine ganze Klasse von " +"_Laufzeitfehlern (runtime Errors)_\n" +" über den Ausleihenprüfer (borrow checker). Du erhältst eine ähnliche " +"Leistung wie in C und C++, aber hast\n" +" keine Probleme mit der Speicherunsicherheit. Darüber hinaus erhältst Du " +"eine moderne Sprache mit\n" +" Konstrukten wie Mustervergleich (Pattern matching) und integriertes " +"Abhängigkeitsmanagement (dependency management).\n" "\n" -"* Erfahrung mit Java, Go, Python, JavaScript...: Du erhältst die gleiche Speichersicherheit\n" +"* Erfahrung mit Java, Go, Python, JavaScript...: Du erhältst die gleiche " +"Speichersicherheit\n" " wie in diesen Sprachen, dazu ein ähnlich hohes Sprachgefühl. Zusätzlich\n" -" erhältst Du eine schnelle und vorhersehbare Leistung wie in C und C++ (keine " -"Speicherbereinigung (garbage collector))\n" +" erhältst Du eine schnelle und vorhersehbare Leistung wie in C und C++ " +"(keine Speicherbereinigung (garbage collector))\n" " sowie Zugriff auf Low-Level-Hardware (falls benötigt)." #: src/why-rust/compile-time.md:1 @@ -2395,7 +2649,9 @@ msgstr "" msgid "" "It is possible to produce memory leaks in (safe) Rust. Some examples\n" "are:" -msgstr "Es ist möglich, Speicherlecks in (sicherem) Rust zu erzeugen. Einige Beispiele sind:" +msgstr "" +"Es ist möglich, Speicherlecks in (sicherem) Rust zu erzeugen. Einige " +"Beispiele sind:" #: src/why-rust/compile-time.md:19 msgid "" @@ -2408,12 +2664,17 @@ msgid "" "* In fact, some will consider infinitely populating a collection a memory\n" " leak and Rust does not protect from those." msgstr "" -"* Du kannst [`Box::leak`] verwenden, um einen Zeiger zu verlieren. Eine Nutzung dieser könnte\n" -" sein, um zur Laufzeit initialisierte statische Variablen in Laufzeitgröße zu erhalten\n" -"* Du kannst [`std::mem::forget`] verwenden, um den Compiler einen Wert \"vergessen\" zu lassen\n" +"* Du kannst [`Box::leak`] verwenden, um einen Zeiger zu verlieren. Eine " +"Nutzung dieser könnte\n" +" sein, um zur Laufzeit initialisierte statische Variablen in Laufzeitgröße " +"zu erhalten\n" +"* Du kannst [`std::mem::forget`] verwenden, um den Compiler einen Wert " +"\"vergessen\" zu lassen\n" " (was bedeutet, dass der Destruktor niemals ausgeführt wird).\n" -"* Du kannst auch versehentlich einen [Referenzzyklus] mit `Rc` oder `Arc` erstellen\n" -"* In der Tat werden einige in Betracht ziehen, eine Sammlung (Collection) unendlich zu befüllen\n" +"* Du kannst auch versehentlich einen [Referenzzyklus] mit `Rc` oder `Arc` " +"erstellen\n" +"* In der Tat werden einige in Betracht ziehen, eine Sammlung (Collection) " +"unendlich zu befüllen\n" " Rust schützt nicht vor sowelchen Speicherlecks (memory leaks)." #: src/why-rust/compile-time.md:28 @@ -2452,16 +2713,18 @@ msgid "" " `unsafe` allows you to call functions such as `slice::get_unchecked`\n" " which does not do bounds checking." msgstr "" -"* Ganzzahlüberlauf (integer overflow) wird über ein Flag zur Kompilierzeit definiert. Die Optionen " -"sind\n" -" entweder ein kontrollierter Abbruch des Programms (panic) oder eine Wrap-Around\n" -" Semantik. Standardmäßig erhältst Du einen Abbruch (panic) im Debug-Modus (`cargo build`)\n" +"* Ganzzahlüberlauf (integer overflow) wird über ein Flag zur Kompilierzeit " +"definiert. Die Optionen sind\n" +" entweder ein kontrollierter Abbruch des Programms (panic) oder eine Wrap-" +"Around\n" +" Semantik. Standardmäßig erhältst Du einen Abbruch (panic) im Debug-Modus " +"(`cargo build`)\n" " und ein Wrap-Around im Release-Modus (`cargo build --release`).\n" "\n" -"* Die Grenzüberprüfung (bounds checking) kann nicht mit einem Compiler-Flag deaktiviert werden. Es " -"kann auch\n" -" nicht direkt mit dem Schlüsselwort „unsafe“ deaktiviert werden. Jedoch kannst Du Funktionen " -"wie\n" +"* Die Grenzüberprüfung (bounds checking) kann nicht mit einem Compiler-Flag " +"deaktiviert werden. Es kann auch\n" +" nicht direkt mit dem Schlüsselwort „unsafe“ deaktiviert werden. Jedoch " +"kannst Du Funktionen wie\n" " `slice::get_unchecked` mit `unsafe` aufrufen\n" " was keine Grenzenprüfung durchführt." @@ -2507,80 +2770,95 @@ msgstr "" #: src/why-rust/modern.md:23 msgid "" -"* Zero-cost abstractions, similar to C++, means that you don't have to 'pay'\n" +"* Zero-cost abstractions, similar to C++, means that you don't have to " +"'pay'\n" " for higher-level programming constructs with memory or CPU. For example,\n" " writing a loop using `for` should result in roughly the same low level\n" " instructions as using the `.iter().fold()` construct.\n" "\n" -"* It may be worth mentioning that Rust enums are 'Algebraic Data Types', also\n" +"* It may be worth mentioning that Rust enums are 'Algebraic Data Types', " +"also\n" " known as 'sum types', which allow the type system to express things like\n" " `Option` and `Result`.\n" "\n" "* Remind people to read the errors --- many developers have gotten used to\n" " ignore lengthy compiler output. The Rust compiler is significantly more\n" -" talkative than other compilers. It will often provide you with _actionable_\n" +" talkative than other compilers. It will often provide you with " +"_actionable_\n" " feedback, ready to copy-paste into your code.\n" "\n" -"* The Rust standard library is small compared to languages like Java, Python,\n" -" and Go. Rust does not come with several things you might consider standard and\n" +"* The Rust standard library is small compared to languages like Java, " +"Python,\n" +" and Go. Rust does not come with several things you might consider standard " +"and\n" " essential:\n" "\n" " * a random number generator, but see [rand].\n" " * support for SSL or TLS, but see [rusttls].\n" " * support for JSON, but see [serde_json].\n" "\n" -" The reasoning behind this is that functionality in the standard library cannot\n" +" The reasoning behind this is that functionality in the standard library " +"cannot\n" " go away, so it has to be very stable. For the examples above, the Rust\n" -" community is still working on finding the best solution --- and perhaps there\n" +" community is still working on finding the best solution --- and perhaps " +"there\n" " isn't a single \"best solution\" for some of these things.\n" "\n" -" Rust comes with a built-in package manager in the form of Cargo and this makes\n" -" it trivial to download and compile third-party crates. A consequence of this\n" +" Rust comes with a built-in package manager in the form of Cargo and this " +"makes\n" +" it trivial to download and compile third-party crates. A consequence of " +"this\n" " is that the standard library can be smaller.\n" "\n" " Discovering good third-party crates can be a problem. Sites like\n" -" help with this by letting you compare health metrics for\n" +" help with this by letting you compare health metrics " +"for\n" " crates to find a good and trusted one.\n" " \n" "* [rust-analyzer] is a well supported LSP implementation used in major\n" " IDEs and text editors." msgstr "" -"* Kostenfreie Abstraktionen, ähnlich wie bei C++, bedeuten, dass Du für Programmierkonstrukte auf " -"höherer Ebene nicht mit Speicher oder CPU „bezahlen“ musst. Beispielsweise sollte das Schreiben " -"einer Schleife mit `for` ungefähr zu denselben Low-Level-Anweisungen führen wie die Verwendung des " -"Konstrukts `.iter().fold()`.\n" +"* Kostenfreie Abstraktionen, ähnlich wie bei C++, bedeuten, dass Du für " +"Programmierkonstrukte auf höherer Ebene nicht mit Speicher oder CPU " +"„bezahlen“ musst. Beispielsweise sollte das Schreiben einer Schleife mit " +"`for` ungefähr zu denselben Low-Level-Anweisungen führen wie die Verwendung " +"des Konstrukts `.iter().fold()`.\n" "\n" -"* Es kann erwähnenswert sein, dass Rust-Enums „algebraische Datentypen“ sind, auch bekannt als " -"„Summentypen“, die es dem Typsystem ermöglichen, Dinge wie `Option` und `Result` " -"auszudrücken.\n" +"* Es kann erwähnenswert sein, dass Rust-Enums „algebraische Datentypen“ " +"sind, auch bekannt als „Summentypen“, die es dem Typsystem ermöglichen, " +"Dinge wie `Option` und `Result` auszudrücken.\n" "\n" -"* Erinnere die Teilnehmer daran, die Fehler zu lesen – viele Entwickler haben sich daran gewöhnt, " -"lange Compiler-Ausgaben zu ignorieren. Der Rust-Compiler ist deutlich gesprächiger als andere " -"Compiler. Es liefert Ihnen oft _umsetzbares_ Feedback, das Sie in Ihren Code einfach übernehmen " -"können.\n" +"* Erinnere die Teilnehmer daran, die Fehler zu lesen – viele Entwickler " +"haben sich daran gewöhnt, lange Compiler-Ausgaben zu ignorieren. Der Rust-" +"Compiler ist deutlich gesprächiger als andere Compiler. Es liefert Ihnen oft " +"_umsetzbares_ Feedback, das Sie in Ihren Code einfach übernehmen können.\n" "\n" -"* Die Rust-Standardbibliothek ist im Vergleich zu Sprachen wie Java, Python und Go klein. Rust " -"bringt einige Dinge nicht mit, die Sie als normal betrachten könnten:\n" +"* Die Rust-Standardbibliothek ist im Vergleich zu Sprachen wie Java, Python " +"und Go klein. Rust bringt einige Dinge nicht mit, die Sie als normal " +"betrachten könnten:\n" "\n" " * ein Zufallszahlengenerator, siehe aber [rand].\n" " * Unterstützung für SSL oder TLS, siehe jedoch [rusttls].\n" " * Unterstützung für JSON, siehe jedoch [serde_json].\n" "\n" -"Der Grund dafür ist, dass die Funktionalität in der Standardbibliothek nicht herausgenommen werden " -"dürfen und daher sehr stabil sein muss. Für die obigen Beispiele arbeitet die Rust-Gemeinschaft " -"immer noch daran, die beste Lösung zu finden – und vielleicht gibt es für einige dieser Dinge " -"keine einzige „beste Lösung“.\n" +"Der Grund dafür ist, dass die Funktionalität in der Standardbibliothek nicht " +"herausgenommen werden dürfen und daher sehr stabil sein muss. Für die obigen " +"Beispiele arbeitet die Rust-Gemeinschaft immer noch daran, die beste Lösung " +"zu finden – und vielleicht gibt es für einige dieser Dinge keine einzige " +"„beste Lösung“.\n" "\n" -" Rust verfügt über einen integrierten Paketmanager in Form von Cargo, der das Herunterladen und " -"Kompilieren von Crates von Drittanbietern vereinfacht. Dies hat zur Folge, dass die " -"Standardbibliothek kleiner sein kann.\n" +" Rust verfügt über einen integrierten Paketmanager in Form von Cargo, der " +"das Herunterladen und Kompilieren von Crates von Drittanbietern vereinfacht. " +"Dies hat zur Folge, dass die Standardbibliothek kleiner sein kann.\n" "\n" -" Das Auffinden guter Kisten von Drittanbietern kann ein Problem sein. Websites wie\n" -" hilft Dir dabei, indem es Dir ermöglicht, Gesundheitsmetriken für Kisten zu " -"vergleichen, um eine gute und vertrauenswürdige zu finden.\n" +" Das Auffinden guter Kisten von Drittanbietern kann ein Problem sein. " +"Websites wie\n" +" hilft Dir dabei, indem es Dir ermöglicht, " +"Gesundheitsmetriken für Kisten zu vergleichen, um eine gute und " +"vertrauenswürdige zu finden.\n" " \n" -"* [rust-analyzer] ist eine gut unterstützte LSP-Implementierung, die in wichtigen IDEs und " -"Texteditoren verwendet wird." +"* [rust-analyzer] ist eine gut unterstützte LSP-Implementierung, die in " +"wichtigen IDEs und Texteditoren verwendet wird." #: src/basic-syntax.md:1 msgid "# Basic Syntax" @@ -2593,13 +2871,15 @@ msgstr "Ein Großteil der Rust-Syntax wird Ihnen aus C oder C++ bekannt sein:" #: src/basic-syntax.md:5 msgid "" "* Blocks and scopes are delimited by curly braces.\n" -"* Line comments are started with `//`, block comments are delimited by `/* ...\n" +"* Line comments are started with `//`, block comments are delimited by `/" +"* ...\n" " */`.\n" "* Keywords like `if` and `while` work the same.\n" "* Variable assignment is done with `=`, comparison is done with `==`." msgstr "" "* Blöcke und Bereiche (scopes) werden durch geschweifte Klammern getrennt.\n" -"* Zeilenkommentare beginnen mit `//`, Blockkommentare werden mit `/* ... */` begrenzt\n" +"* Zeilenkommentare beginnen mit `//`, Blockkommentare werden mit `/* ... */` " +"begrenzt\n" "* Schlüsselwörter (keywords) wie `if` und `while` funktionieren gleich.\n" "* Variablenzuweisung erfolgt mit `=`, Vergleich erfolgt mit `==`." @@ -2612,32 +2892,33 @@ msgid "" "| | Types | " "Literals |\n" "|------------------------|--------------------------------------------|-------------------------------|\n" -"| Signed integers | `i8`, `i16`, `i32`, `i64`, `i128`, `isize` | `-10`, `0`, `1_000`, " -"`123i64` |\n" -"| Unsigned integers | `u8`, `u16`, `u32`, `u64`, `u128`, `usize` | `0`, `123`, " -"`10u16` |\n" -"| Floating point numbers | `f32`, `f64` | `3.14`, `-10.0e20`, " -"`2f32` |\n" -"| Strings | `&str` | `\"foo\"`, " -"`\"two\\nlines\"` |\n" -"| Unicode scalar values | `char` | `'a'`, `'α'`, " -"`'∞'` |\n" -"| Booleans | `bool` | `true`, " -"`false` |" +"| Signed integers | `i8`, `i16`, `i32`, `i64`, `i128`, `isize` | " +"`-10`, `0`, `1_000`, `123i64` |\n" +"| Unsigned integers | `u8`, `u16`, `u32`, `u64`, `u128`, `usize` | `0`, " +"`123`, `10u16` |\n" +"| Floating point numbers | `f32`, `f64` | " +"`3.14`, `-10.0e20`, `2f32` |\n" +"| Strings | `&str` | " +"`\"foo\"`, `\"two\\nlines\"` |\n" +"| Unicode scalar values | `char` | " +"`'a'`, `'α'`, `'∞'` |\n" +"| Booleans | `bool` | " +"`true`, `false` |" msgstr "" "| | Typen | Literale |\n" "|------------------------|--------------------------------------------|---------------------------------------|\n" -"| Ganzzahlen mit Vorzeichen | `i8`, `i16`, `i32`, `i64`, `i128`, `isize` | `-10`, `0`, `1_000`, " -"`123i64` |\n" -"| Ganzzahlen ohne Vorzeichen `u8`, `u16`, `u32`, `u64`, `u128`, `usize` | `0`, `123`, " -"`10u16` |\n" -"| Fließkommazahlen | `f32`, `f64` | `3.14`, `-10.0e20`, `2f32` |\n" -"| Zeichenketten (Strings) | `&str` | `\"foo\"`, " -"`\"two\\nlines\"` |\n" -"| Unicode-Skalarwerte | `char` | `'a'`, `'α'`, " -"`'∞'` \n" -"| Wahrheitswerte (booleans) | `bool` | `true`, " -"`false` |" +"| Ganzzahlen mit Vorzeichen | `i8`, `i16`, `i32`, `i64`, `i128`, `isize` | " +"`-10`, `0`, `1_000`, `123i64` |\n" +"| Ganzzahlen ohne Vorzeichen `u8`, `u16`, `u32`, `u64`, `u128`, `usize` | " +"`0`, `123`, `10u16` |\n" +"| Fließkommazahlen | `f32`, `f64` | `3.14`, " +"`-10.0e20`, `2f32` |\n" +"| Zeichenketten (Strings) | `&str` | " +"`\"foo\"`, `\"two\\nlines\"` |\n" +"| Unicode-Skalarwerte | `char` | `'a'`, " +"`'α'`, `'∞'` \n" +"| Wahrheitswerte (booleans) | " +"`bool` | `true`, `false` |" #: src/basic-syntax/scalar-types.md:12 msgid "The types have widths as follows:" @@ -2661,8 +2942,10 @@ msgstr "Es gibt einige Syntaxen, die oben nicht aufgeführt sind:" #: src/basic-syntax/scalar-types.md:23 msgid "" -"- Raw strings allow you to create a `&str` value with escapes disabled: `r\"\\n\"\n" -" == \"\\\\\\\\n\"`. You can embed double-quotes by using an equal amount of `#` on\n" +"- Raw strings allow you to create a `&str` value with escapes disabled: " +"`r\"\\n\"\n" +" == \"\\\\\\\\n\"`. You can embed double-quotes by using an equal amount of " +"`#` on\n" " either side of the quotes:\n" "\n" " ```rust,editable\n" @@ -2681,9 +2964,10 @@ msgid "" " }\n" " ```" msgstr "" -"- Mit puren Zeichenketten (raw strings) kannst Du einen `&str`-Wert mit deaktivierten Escape-" -"Zeichen erstellen: `r\"\\n\" == \"\\\\\\\\n\"`. Du kannst doppelte Anführungszeichen einbetten, " -"indem Du auf beiden Seiten der Anführungszeichen die gleiche Anzahl von `#` verwendest:\n" +"- Mit puren Zeichenketten (raw strings) kannst Du einen `&str`-Wert mit " +"deaktivierten Escape-Zeichen erstellen: `r\"\\n\" == \"\\\\\\\\n\"`. Du " +"kannst doppelte Anführungszeichen einbetten, indem Du auf beiden Seiten der " +"Anführungszeichen die gleiche Anzahl von `#` verwendest:\n" "\n" " ```rust,editable\n" " fn main() {\n" @@ -2707,14 +2991,19 @@ msgstr "# Verbundtypen" #: src/basic-syntax/compound-types.md:3 msgid "" -"| | Types | Literals |\n" +"| | Types | Literals " +"|\n" "|--------|-------------------------------|-----------------------------------|\n" -"| Arrays | `[T; N]` | `[20, 30, 40]`, `[0; 3]` |\n" -"| Tuples | `()`, `(T,)`, `(T1, T2)`, ... | `()`, `('x',)`, `('x', 1.2)`, ... |" +"| Arrays | `[T; N]` | `[20, 30, 40]`, `[0; 3]` " +"|\n" +"| Tuples | `()`, `(T,)`, `(T1, T2)`, ... | `()`, `('x',)`, `('x', 1.2)`, ... " +"|" msgstr "" -"| | Typen | Literale |\n" +"| | Typen | Literale " +"|\n" "|--------|-------------------------------|-----------------------------------|\n" -"| Arrays | `[T; N]` | `[20, 30, 40]`, `[0; 3]` |\n" +"| Arrays | `[T; N]` | `[20, 30, 40]`, `[0; 3]` " +"|\n" "| Tupel | `()`, `(T,)`, `(T1, T2)`, ... | `()`, `('x',)`, `('x', 1.2)`, ... |" #: src/basic-syntax/compound-types.md:8 @@ -2753,31 +3042,39 @@ msgstr "Arrays:" #: src/basic-syntax/compound-types.md:34 msgid "" -"* Arrays have elements of the same type, `T`, and length, `N`, which is a compile-time constant.\n" -" Note that the length of the array is *part of its type*, which means that `[u8; 3]` and\n" +"* Arrays have elements of the same type, `T`, and length, `N`, which is a " +"compile-time constant.\n" +" Note that the length of the array is *part of its type*, which means that " +"`[u8; 3]` and\n" " `[u8; 4]` are considered two different types.\n" "\n" "* We can use literals to assign values to arrays.\n" "\n" -"* In the main function, the print statement asks for the debug implementation with the `?` format\n" -" parameter: `{}` gives the default output, `{:?}` gives the debug output. We\n" -" could also have used `{a}` and `{a:?}` without specifying the value after the\n" +"* In the main function, the print statement asks for the debug " +"implementation with the `?` format\n" +" parameter: `{}` gives the default output, `{:?}` gives the debug output. " +"We\n" +" could also have used `{a}` and `{a:?}` without specifying the value after " +"the\n" " format string.\n" "\n" -"* Adding `#`, eg `{a:#?}`, invokes a \"pretty printing\" format, which can be easier to read." +"* Adding `#`, eg `{a:#?}`, invokes a \"pretty printing\" format, which can " +"be easier to read." msgstr "" -"* Arrays haben Elemente desselben Typs `T` und der Länge `N`, was eine Konstante zur " -"Kompilierungszeit ist. Beachten Sie, dass die Länge des Arrays *Teil seines Typs* ist, was " -"bedeutet, dass `[u8; 3]` und `[u8; 4]` als zwei verschiedene Typen betrachtet werden.\n" +"* Arrays haben Elemente desselben Typs `T` und der Länge `N`, was eine " +"Konstante zur Kompilierungszeit ist. Beachten Sie, dass die Länge des Arrays " +"*Teil seines Typs* ist, was bedeutet, dass `[u8; 3]` und `[u8; 4]` als zwei " +"verschiedene Typen betrachtet werden.\n" "\n" "* Wir können Literale verwenden, um Arrays Werte zuzuweisen.\n" "\n" -"* In der `main`-Funktion fragt die print-Anweisung mit dem Formatparameter `?` nach der Debug-" -"Implementierung: `{}` gibt die Standardausgabe aus, „{:?}“ gibt die Debug-Ausgabe aus. Wir hätten " -"auch `{a}` und `{a:?}` verwenden können, ohne den Wert nach der Formatzeichenfolge anzugeben.\n" +"* In der `main`-Funktion fragt die print-Anweisung mit dem Formatparameter `?" +"` nach der Debug-Implementierung: `{}` gibt die Standardausgabe aus, „{:?}“ " +"gibt die Debug-Ausgabe aus. Wir hätten auch `{a}` und `{a:?}` verwenden " +"können, ohne den Wert nach der Formatzeichenfolge anzugeben.\n" "\n" -"* Das Hinzufügen von `#`, z. B. `{a:#?}`, ruft ein „hübsches Druckformat“ (pretty print) auf, das " -"einfacher zu lesen ist." +"* Das Hinzufügen von `#`, z. B. `{a:#?}`, ruft ein „hübsches " +"Druckformat“ (pretty print) auf, das einfacher zu lesen ist." #: src/basic-syntax/compound-types.md:47 msgid "Tuples:" @@ -2789,28 +3086,35 @@ msgid "" "\n" "* Tuples group together values of different types into a compound type.\n" "\n" -"* Fields of a tuple can be accessed by the period and the index of the value, e.g. `t.0`, `t.1`.\n" +"* Fields of a tuple can be accessed by the period and the index of the " +"value, e.g. `t.0`, `t.1`.\n" "\n" -"* The empty tuple `()` is also known as the \"unit type\". It is both a type, and\n" -" the only valid value of that type - that is to say both the type and its value\n" -" are expressed as `()`. It is used to indicate, for example, that a function or\n" +"* The empty tuple `()` is also known as the \"unit type\". It is both a " +"type, and\n" +" the only valid value of that type - that is to say both the type and its " +"value\n" +" are expressed as `()`. It is used to indicate, for example, that a " +"function or\n" " expression has no return value, as we'll see in a future slide. \n" " * You can think of it as `void` that can be familiar to you from other \n" " programming languages." msgstr "" "* Wie Arrays haben Tupel eine feste Länge.\n" "\n" -"* Tupel gruppieren Werte unterschiedlicher Typen zu einem zusammengesetzten Typ.\n" +"* Tupel gruppieren Werte unterschiedlicher Typen zu einem zusammengesetzten " +"Typ.\n" "\n" -"* Auf Felder eines Tupels kann durch einen Punkt gefolgt von dem Index des Werts zugegriffen " -"werden, z. B. „t.0“, „t.1“.\n" +"* Auf Felder eines Tupels kann durch einen Punkt gefolgt von dem Index des " +"Werts zugegriffen werden, z. B. „t.0“, „t.1“.\n" "\n" -"* Das leere Tupel „()“ wird auch als „Einheitstyp“ (unit type) bezeichnet. Es ist sowohl ein Typ " -"als auch der einzige gültige Wert dieses Typs – das heißt, sowohl der Typ als auch sein Wert " -"werden als `()` ausgedrückt. Es wird beispielsweise verwendet, um anzuzeigen, dass eine Funktion " -"oder ein Ausdruck keinen Rückgabewert hat, wie wir auf einer zukünftigen Folie sehen werden.\n" -" * Du kannst es Dir als `void` vorstellen, das Dir aus anderen Programmiersprachen bekannt " -"sein könnte." +"* Das leere Tupel „()“ wird auch als „Einheitstyp“ (unit type) bezeichnet. " +"Es ist sowohl ein Typ als auch der einzige gültige Wert dieses Typs – das " +"heißt, sowohl der Typ als auch sein Wert werden als `()` ausgedrückt. Es " +"wird beispielsweise verwendet, um anzuzeigen, dass eine Funktion oder ein " +"Ausdruck keinen Rückgabewert hat, wie wir auf einer zukünftigen Folie sehen " +"werden.\n" +" * Du kannst es Dir als `void` vorstellen, das Dir aus anderen " +"Programmiersprachen bekannt sein könnte." #: src/basic-syntax/references.md:1 msgid "# References" @@ -2838,27 +3142,35 @@ msgstr "Einige Notizen:" #: src/basic-syntax/references.md:16 msgid "" -"* We must dereference `ref_x` when assigning to it, similar to C and C++ pointers.\n" +"* We must dereference `ref_x` when assigning to it, similar to C and C++ " +"pointers.\n" "* Rust will auto-dereference in some cases, in particular when invoking\n" " methods (try `ref_x.count_ones()`).\n" -"* References that are declared as `mut` can be bound to different values over their lifetime." +"* References that are declared as `mut` can be bound to different values " +"over their lifetime." msgstr "" -"* Wir müssen `ref_x` beim Zuweisen dereferenzieren, ähnlich wie bei C und C++-Zeigern.\n" -"* Rust wird in einigen Fällen automatisch dereferenzieren, insbesondere beim Aufrufen von Methoden " -"(probiere `ref_x.count_ones()`).\n" -"* Referenzen, die als `mut` deklariert sind, können über ihre Lebensdauer an unterschiedliche " -"Werte gebunden werden." +"* Wir müssen `ref_x` beim Zuweisen dereferenzieren, ähnlich wie bei C und C+" +"+-Zeigern.\n" +"* Rust wird in einigen Fällen automatisch dereferenzieren, insbesondere beim " +"Aufrufen von Methoden (probiere `ref_x.count_ones()`).\n" +"* Referenzen, die als `mut` deklariert sind, können über ihre Lebensdauer an " +"unterschiedliche Werte gebunden werden." #: src/basic-syntax/references.md:25 msgid "" -"* Be sure to note the difference between `let mut ref_x: &i32` and `let ref_x:\n" -" &mut i32`. The first one represents a mutable reference which can be bound to\n" -" different values, while the second represents a reference to a mutable value." +"* Be sure to note the difference between `let mut ref_x: &i32` and `let " +"ref_x:\n" +" &mut i32`. The first one represents a mutable reference which can be bound " +"to\n" +" different values, while the second represents a reference to a mutable " +"value." msgstr "" -"* Beachte unbedingt den Unterschied zwischen `let mut ref_x: &i32` und `let ref_x:\n" -" &mut i32`. Das erste stellt eine veränderliche Referenz (mutable reference) dar, an die " -"unterschiedliche Werte gebunden werden können,\n" -" während das zweite Beispiel einen Verweis auf einen veränderlichen Wert darstellt." +"* Beachte unbedingt den Unterschied zwischen `let mut ref_x: &i32` und `let " +"ref_x:\n" +" &mut i32`. Das erste stellt eine veränderliche Referenz (mutable " +"reference) dar, an die unterschiedliche Werte gebunden werden können,\n" +" während das zweite Beispiel einen Verweis auf einen veränderlichen Wert " +"darstellt." #: src/basic-syntax/references-dangling.md:1 msgid "# Dangling References" @@ -2889,10 +3201,12 @@ msgid "" " enough.\n" "* We will talk more about borrowing when we get to ownership." msgstr "" -"* Eine Referenz \"leiht\" (borrows) sich den Wert, auf den sie sich bezieht, .\n" -"* Rust verfolgt die Lebensdauer aller Referenzen, um sicherzustellen, dass sie lange genug leben\n" -"* Wir werden mehr über das Ausleihen (borrowing) sprechen, wenn wir zum Eigentum (ownership) " -"kommen." +"* Eine Referenz \"leiht\" (borrows) sich den Wert, auf den sie sich " +"bezieht, .\n" +"* Rust verfolgt die Lebensdauer aller Referenzen, um sicherzustellen, dass " +"sie lange genug leben\n" +"* Wir werden mehr über das Ausleihen (borrowing) sprechen, wenn wir zum " +"Eigentum (ownership) kommen." #: src/basic-syntax/slices.md:1 msgid "# Slices" @@ -2900,7 +3214,9 @@ msgstr "# Anteilstypen (Slices)" #: src/basic-syntax/slices.md:3 msgid "A slice gives you a view into a larger collection:" -msgstr "Ein Anteilstyp (slice) gibt Ihnen einen Einblick in eine größere Sammlung (collection):" +msgstr "" +"Ein Anteilstyp (slice) gibt Ihnen einen Einblick in eine größere Sammlung " +"(collection):" #: src/basic-syntax/slices.md:5 msgid "" @@ -2925,51 +3241,60 @@ msgstr "" #: src/basic-syntax/slices.md:20 msgid "" -"* We create a slice by borrowing `a` and specifying the starting and ending indexes in brackets.\n" +"* We create a slice by borrowing `a` and specifying the starting and ending " +"indexes in brackets.\n" "\n" -"* 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.\n" +"* 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.\n" " \n" -"* The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are identical.\n" +"* The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are " +"identical.\n" "\n" -"* To easily create a slice of the full array, we can therefore use `&a[..]`.\n" +"* To easily create a slice of the full array, we can therefore use " +"`&a[..]`.\n" "\n" -"* `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.\n" +"* `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.\n" " \n" -"* Slices always borrow from another object. In this example, `a` has to remain 'alive' (in scope) " -"for at least as long as our slice. \n" +"* Slices always borrow from another object. In this example, `a` has to " +"remain 'alive' (in scope) for at least as long as our slice. \n" " \n" -"* The question about modifying `a[3]` can spark an interesting discussion, but the answer is that " -"for memory safety reasons\n" -" you cannot do it through `a` after you created a slice, but you can read the data from both `a` " -"and `s` safely. \n" +"* The question about modifying `a[3]` can spark an interesting discussion, " +"but the answer is that for memory safety reasons\n" +" you cannot do it through `a` after you created a slice, but you can read " +"the data from both `a` and `s` safely. \n" " More details will be explained in the borrow checker section." msgstr "" -"* Wir erstellen ein Anteilstyp, indem wir `a` ausleihen (borrow) und den Start- und Endindex in " -"Klammern angeben.\n" +"* Wir erstellen ein Anteilstyp, indem wir `a` ausleihen (borrow) und den " +"Start- und Endindex in Klammern angeben.\n" "\n" -"* Wenn der Anteilstyp bei Index 0 beginnt, erlaubt uns die Range-Syntax von Rust, den Startindex " -"wegzulassen, was bedeutet, dass `&a[0..a.len()]` und `&a[..a.len()]` identisch sind.\n" +"* Wenn der Anteilstyp bei Index 0 beginnt, erlaubt uns die Range-Syntax von " +"Rust, den Startindex wegzulassen, was bedeutet, dass `&a[0..a.len()]` und " +"`&a[..a.len()]` identisch sind.\n" " \n" -"* Das Gleiche gilt für den letzten Index, daher sind `&a[2..a.len()]` und `&a[2..]` identisch.\n" +"* Das Gleiche gilt für den letzten Index, daher sind `&a[2..a.len()]` und " +"`&a[2..]` identisch.\n" "\n" -"* Um einfach einen Anteilstyp des gesamten Arrays zu erstellen, können wir daher „&a[..]“ " -"verwenden.\n" +"* Um einfach einen Anteilstyp des gesamten Arrays zu erstellen, können wir " +"daher „&a[..]“ verwenden.\n" "\n" -"* `s` ist ein Verweis (reference) auf einen Teil von `i32`. Beachte, dass der Typ `s` (`&[i32]`) " -"die Array-Länge nicht mehr erwähnt. Dadurch können wir Berechnungen für Anteilstypen " -"unterschiedlicher Größe durchführen.\n" +"* `s` ist ein Verweis (reference) auf einen Teil von `i32`. Beachte, dass " +"der Typ `s` (`&[i32]`) die Array-Länge nicht mehr erwähnt. Dadurch können " +"wir Berechnungen für Anteilstypen unterschiedlicher Größe durchführen.\n" " \n" -"* Anteilstypen (slices) leihen (borrow) sich immer etwas von einem anderen Objekt aus. In diesem " -"Beispiel muss `a` mindestens so lange (im Gültigkeitsbereich (scope)) „lebendig“ bleiben wie unser " -"Anteilstyp.\n" +"* Anteilstypen (slices) leihen (borrow) sich immer etwas von einem anderen " +"Objekt aus. In diesem Beispiel muss `a` mindestens so lange (im " +"Gültigkeitsbereich (scope)) „lebendig“ bleiben wie unser Anteilstyp.\n" " \n" -"* Die Frage nach einer Werteänderung durch `a[3]` kann eine interessante Diskussion auslösen, aber " -"die Antwort lautet: aus Gründen der Speichersicherheit kannst Du dies nicht über `a` tun, nachdem " -"Du ein Slice erstellt hast. Allerdings kannst Du die Werte sowohl von `a` als auch von `s` sicher " -"lesen.\n" -" Weitere Einzelheiten werden im Abschnitt „Ausleihenprüfer“ (borrow checker) erläutert." +"* Die Frage nach einer Werteänderung durch `a[3]` kann eine interessante " +"Diskussion auslösen, aber die Antwort lautet: aus Gründen der " +"Speichersicherheit kannst Du dies nicht über `a` tun, nachdem Du ein Slice " +"erstellt hast. Allerdings kannst Du die Werte sowohl von `a` als auch von " +"`s` sicher lesen.\n" +" Weitere Einzelheiten werden im Abschnitt „Ausleihenprüfer“ (borrow " +"checker) erläutert." #: src/basic-syntax/string-slices.md:1 msgid "# `String` vs `str`" @@ -3011,48 +3336,59 @@ 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 \n" -" stored in a block of memory. String literals (`”Hello”`), are stored in the program’s binary.\n" +"* `&str` introduces a string slice, which is an immutable reference to UTF-8 " +"encoded string data \n" +" stored in a block of memory. String literals (`”Hello”`), are stored in " +"the program’s binary.\n" "\n" -"* Rust’s `String` type is a wrapper around a vector of bytes. As with a `Vec`, it is owned.\n" +"* Rust’s `String` type is a wrapper around a vector of bytes. As with a " +"`Vec`, it is owned.\n" " \n" -"* As with many other types `String::from()` creates a string from a string literal; `String::" -"new()` \n" -" creates a new empty string, to which string data can be added using the `push()` and " -"`push_str()` methods.\n" +"* As with many other types `String::from()` creates a string from a string " +"literal; `String::new()` \n" +" creates a new empty string, to which string data can be added using the " +"`push()` and `push_str()` methods.\n" "\n" -"* The `format!()` macro is a convenient way to generate an owned string from dynamic values. It \n" +"* The `format!()` macro is a convenient way to generate an owned string from " +"dynamic values. It \n" " accepts the same format specification as `println!()`.\n" " \n" -"* You can borrow `&str` slices from `String` via `&` and optionally range selection.\n" +"* You can borrow `&str` slices from `String` via `&` and optionally range " +"selection.\n" " \n" -"* For C++ programmers: think of `&str` as `const char*` from C++, but the one that always points \n" -" to a valid string in memory. Rust `String` is a rough equivalent of `std::string` from C++ \n" -" (main difference: it can only contain UTF-8 encoded bytes and will never use a small-string " -"optimization).\n" +"* For C++ programmers: think of `&str` as `const char*` from C++, but the " +"one that always points \n" +" to a valid string in memory. Rust `String` is a rough equivalent of `std::" +"string` from C++ \n" +" (main difference: it can only contain UTF-8 encoded bytes and will never " +"use a small-string optimization).\n" " " msgstr "" -"* `&str` führt einen String-Slice ein, der eine unveränderliche Referenz auf UTF-8-codierte String-" -"Daten ist, die in einem Speicherblock gespeichert sind. String-Literale (`\"Hallo\"`) werden in " -"der Binärdatei des Programms gespeichert.\n" +"* `&str` führt einen String-Slice ein, der eine unveränderliche Referenz auf " +"UTF-8-codierte String-Daten ist, die in einem Speicherblock gespeichert " +"sind. String-Literale (`\"Hallo\"`) werden in der Binärdatei des Programms " +"gespeichert.\n" "\n" -"* Der `String`-Typ von Rust ist eine Verpackung (wrapper) um einen Byte-Vektor. Wie bei einem " -"`Vec` ist es im Besitz.\n" +"* Der `String`-Typ von Rust ist eine Verpackung (wrapper) um einen Byte-" +"Vektor. Wie bei einem `Vec` ist es im Besitz.\n" " \n" -"* Wie bei vielen anderen Typen erstellt `String::from()` einen String aus einem String-Literal; " -"`String::new()` erstellt einen neuen leeren String, zu dem String-Daten mit den Methoden `push()` " -"und `push_str()` hinzugefügt werden können.\n" +"* Wie bei vielen anderen Typen erstellt `String::from()` einen String aus " +"einem String-Literal; `String::new()` erstellt einen neuen leeren String, zu " +"dem String-Daten mit den Methoden `push()` und `push_str()` hinzugefügt " +"werden können.\n" "\n" -"* Das Makro `format!()` ist eine praktische Möglichkeit, einen aneigenbaren (owned) String aus " -"dynamischen Werten zu generieren. Es akzeptiert die gleiche Formatspezifikation wie `println!()`.\n" +"* Das Makro `format!()` ist eine praktische Möglichkeit, einen aneigenbaren " +"(owned) String aus dynamischen Werten zu generieren. Es akzeptiert die " +"gleiche Formatspezifikation wie `println!()`.\n" " \n" -"* Du kannst `&str`-Slices von `String` über `&` und optional eine Bereichsauswahl (range " -"selection) ausleihen.\n" +"* Du kannst `&str`-Slices von `String` über `&` und optional eine " +"Bereichsauswahl (range selection) ausleihen.\n" " \n" -"* Für C++-Programmierer: Stell Dir `&str` als `const char*` aus C++ vor, der immer auf eine " -"gültige Zeichenfolge im Speicher zeigt. Rust `String` ist ein grobes Äquivalent von `std::string` " -"aus C++ (Hauptunterschied: Es kann nur UTF-8-codierte Bytes enthalten und wird niemals eine " -"Optimierung für kleine Zeichenfolgen verwenden). " +"* Für C++-Programmierer: Stell Dir `&str` als `const char*` aus C++ vor, der " +"immer auf eine gültige Zeichenfolge im Speicher zeigt. Rust `String` ist ein " +"grobes Äquivalent von `std::string` aus C++ (Hauptunterschied: Es kann nur " +"UTF-8-codierte Bytes enthalten und wird niemals eine Optimierung für kleine " +"Zeichenfolgen verwenden). " #: src/basic-syntax/functions.md:1 msgid "# Functions" @@ -3060,10 +3396,11 @@ msgstr "# Funktionen" #: src/basic-syntax/functions.md:3 msgid "" -"A Rust version of the famous [FizzBuzz](https://en.wikipedia.org/wiki/Fizz_buzz) interview " -"question:" +"A Rust version of the famous [FizzBuzz](https://en.wikipedia.org/wiki/" +"Fizz_buzz) interview question:" msgstr "" -"Eine Rust-Version der berühmten [FizzBuzz](https://de.wikipedia.org/wiki/Fizz_buzz) Interviewfrage:" +"Eine Rust-Version der berühmten [FizzBuzz](https://de.wikipedia.org/wiki/" +"Fizz_buzz) Interviewfrage:" #: src/basic-syntax/functions.md:5 msgid "" @@ -3098,47 +3435,54 @@ msgstr "" #: src/basic-syntax/functions.md:35 msgid "" -"* We refer in `main` to a function written below. Neither forward declarations nor headers are " -"necessary. \n" -"* Declaration parameters are followed by a type (the reverse of some programming languages), then " -"a return type.\n" -"* The last expression in a function body (or any block) becomes the return value. Simply omit the " -"`;` at the end of the expression.\n" -"* Some functions have no return value, and return the 'unit type', `()`. The compiler will infer " -"this if the `-> ()` return type is omitted.\n" -"* The range expression in the `for` loop in `print_fizzbuzz_to()` contains `=n`, which causes it " -"to include the upper bound." +"* We refer in `main` to a function written below. Neither forward " +"declarations nor headers are necessary. \n" +"* Declaration parameters are followed by a type (the reverse of some " +"programming languages), then a return type.\n" +"* The last expression in a function body (or any block) becomes the return " +"value. Simply omit the `;` at the end of the expression.\n" +"* Some functions have no return value, and return the 'unit type', `()`. The " +"compiler will infer this if the `-> ()` return type is omitted.\n" +"* The range expression in the `for` loop in `print_fizzbuzz_to()` contains " +"`=n`, which causes it to include the upper bound." msgstr "" -"* Wir beziehen uns in `main` auf eine unten beschriebene Funktion. Es sind weder Forward-" -"Deklarationen noch Header erforderlich.\n" -"* Auf Deklarationsparameter folgt ein Typ (das Gegenteil einiger Programmiersprachen) und dann ein " -"Rückgabetyp.\n" -"* Der letzte Ausdruck in einem Funktionskörper (oder einem beliebigen Block) wird zum " -"Rückgabewert. Lasse einfach das `;` am Ende des Ausdrucks weg.\n" -"* Einige Funktionen haben keinen Rückgabewert und geben den `Einheitentyp` (Unittyp) `()` zurück. " -"Der Compiler schließt daraus, wenn der Rückgabetyp `->()` weggelassen wird.\n" -"* Der Bereichsausdruck (range expression) in der `for`-Schleife in `print_fizzbuzz_to()` enthält " -"`=n`, was dazu führt, dass die Obergrenze einschlossen wird." +"* Wir beziehen uns in `main` auf eine unten beschriebene Funktion. Es sind " +"weder Forward-Deklarationen noch Header erforderlich.\n" +"* Auf Deklarationsparameter folgt ein Typ (das Gegenteil einiger " +"Programmiersprachen) und dann ein Rückgabetyp.\n" +"* Der letzte Ausdruck in einem Funktionskörper (oder einem beliebigen Block) " +"wird zum Rückgabewert. Lasse einfach das `;` am Ende des Ausdrucks weg.\n" +"* Einige Funktionen haben keinen Rückgabewert und geben den `Einheitentyp` " +"(Unittyp) `()` zurück. Der Compiler schließt daraus, wenn der Rückgabetyp `-" +">()` weggelassen wird.\n" +"* Der Bereichsausdruck (range expression) in der `for`-Schleife in " +"`print_fizzbuzz_to()` enthält `=n`, was dazu führt, dass die Obergrenze " +"einschlossen wird." #: src/basic-syntax/rustdoc.md:1 msgid "# Rustdoc" msgstr "# Rustdoc" #: src/basic-syntax/rustdoc.md:3 -msgid "All language items in Rust can be documented using special `///` syntax." -msgstr "Alle Sprachelemente in Rust können mit der speziellen `///`-Syntax dokumentiert werden." +msgid "" +"All language items in Rust can be documented using special `///` syntax." +msgstr "" +"Alle Sprachelemente in Rust können mit der speziellen `///`-Syntax " +"dokumentiert werden." #: 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 "" @@ -3147,33 +3491,37 @@ msgstr "" msgid "" "The contents are treated as Markdown. All published Rust library crates are\n" "automatically documented at [`docs.rs`](https://docs.rs) using the\n" -"[rustdoc](https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) tool. It is\n" +"[rustdoc](https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) tool. It " +"is\n" "idiomatic to document all public items in an API using this pattern." msgstr "" -"Die Inhalte werden als Markdown behandelt. Alle veröffentlichten Rust-Bibliothekskästen (library " -"crates) werden automatisch unter [`docs.rs`](https://docs.rs) mit [rustdoc](https://doc.rust-lang." -"org/rustdoc/what-is-rustdoc.html) dokumentiert. Es ist idiomatisch, alle öffentlichen Elemente in " -"einer API mithilfe dieses Musters zu dokumentieren." +"Die Inhalte werden als Markdown behandelt. Alle veröffentlichten Rust-" +"Bibliothekskästen (library crates) werden automatisch unter [`docs.rs`]" +"(https://docs.rs) mit [rustdoc](https://doc.rust-lang.org/rustdoc/what-is-" +"rustdoc.html) dokumentiert. Es ist idiomatisch, alle öffentlichen Elemente " +"in einer API mithilfe dieses Musters zu dokumentieren." #: src/basic-syntax/rustdoc.md:24 msgid "" "* Show students the generated docs for the `rand` crate at\n" " [`docs.rs/rand`](https://docs.rs/rand).\n" "\n" -"* This course does not include rustdoc on slides, just to save space, but in\n" +"* This course does not include rustdoc on slides, just to save space, but " +"in\n" " real code they should be present.\n" "\n" -"* Inner doc comments are discussed later (in the page on modules) and need not\n" +"* Inner doc comments are discussed later (in the page on modules) and need " +"not\n" " be addressed here." msgstr "" -"* Zeige den Schülern die generierten Dokumente für die Kiste (crate) `rand` unter [`docs.rs/rand`]" -"(https://docs.rs/rand).\n" +"* Zeige den Schülern die generierten Dokumente für die Kiste (crate) `rand` " +"unter [`docs.rs/rand`](https://docs.rs/rand).\n" "\n" -"* Dieser Kurs enthält keine Rustdocs auf Folien, um Platz zu sparen, aber im echten Code sollten " -"Rustdoc-Kommentare vorhanden sein.\n" +"* Dieser Kurs enthält keine Rustdocs auf Folien, um Platz zu sparen, aber im " +"echten Code sollten Rustdoc-Kommentare vorhanden sein.\n" "\n" -"* Inner doc Kommentare werden später besprochen (auf der Seite zu Modulen) und müssen hier nicht " -"behandelt werden." +"* Inner doc Kommentare werden später besprochen (auf der Seite zu Modulen) " +"und müssen hier nicht behandelt werden." #: src/basic-syntax/methods.md:1 src/methods.md:1 msgid "# Methods" @@ -3181,11 +3529,13 @@ msgstr "# Methoden" #: src/basic-syntax/methods.md:3 msgid "" -"Methods are functions associated with a type. The `self` argument of a method is\n" +"Methods are functions associated with a type. The `self` argument of a " +"method is\n" "an instance of the type it is associated with:" msgstr "" "Methoden sind Funktionen, die einem bestimmten Typ zugeordnet sind.\n" -"Das `self`-Argument einer Methode ist die Instanz des Typs, dem sie zugeordnet ist:" +"Das `self`-Argument einer Methode ist die Instanz des Typs, dem sie " +"zugeordnet ist:" #: src/basic-syntax/methods.md:6 msgid "" @@ -3215,9 +3565,12 @@ msgid "" msgstr "" #: src/basic-syntax/methods.md:30 -msgid "* We will look much more at methods in today's exercise and in tomorrow's class." +msgid "" +"* We will look much more at methods in today's exercise and in tomorrow's " +"class." msgstr "" -"* Wir werden uns in der heutigen Übung und im morgigen Unterricht tiefer mit Methoden befassen." +"* Wir werden uns in der heutigen Übung und im morgigen Unterricht tiefer mit " +"Methoden befassen." #: src/basic-syntax/methods.md:34 msgid "" @@ -3232,7 +3585,8 @@ msgid "" "- Add a `Rectangle::new_square(width: u32)` constructor to illustrate that\n" " constructors can take arbitrary parameters." msgstr "" -"* Füge einen `Rectangle::new`-Konstruktor hinzu und rufe diesen von `main` aus auf:\n" +"* Füge einen `Rectangle::new`-Konstruktor hinzu und rufe diesen von `main` " +"aus auf:\n" "\n" " ```rust,editable,compile_fail\n" " fn new(width: u32, height: u32) -> Rectangle {\n" @@ -3240,8 +3594,8 @@ msgstr "" " }\n" " ```\n" "\n" -"* Füge einen `Rectangle::new_square(width: u32)`-Konstruktor hinzu, um zu veranschaulichen, dass " -"Konstruktoren beliebige Parameter annehmen können." +"* Füge einen `Rectangle::new_square(width: u32)`-Konstruktor hinzu, um zu " +"veranschaulichen, dass Konstruktoren beliebige Parameter annehmen können." #: src/basic-syntax/functions-interlude.md:1 msgid "# Function Overloading" @@ -3264,7 +3618,8 @@ msgstr "" " * Akzeptiert immer eine feste Anzahl von Parametern.\n" " * Akzeptiert immer einen einzelnen Satz von Parametertypen.\n" "* Standardwerte werden nicht unterstützt:\n" -" * Alle Aufrufstellen (call sites) haben die gleiche Anzahl von Argumenten.\n" +" * Alle Aufrufstellen (call sites) haben die gleiche Anzahl von " +"Argumenten.\n" " * Makros werden manchmal als Alternative verwendet." #: src/basic-syntax/functions-interlude.md:12 @@ -3287,12 +3642,14 @@ msgstr "" #: src/basic-syntax/functions-interlude.md:27 msgid "" -"* When using generics, the standard library's `Into` can provide a kind of limited\n" -" polymorphism on argument types. We will see more details in a later section." +"* When using generics, the standard library's `Into` can provide a kind " +"of limited\n" +" polymorphism on argument types. We will see more details in a later " +"section." msgstr "" -"* Bei Verwendung von Generika (generics) kann `Into` der Standardbibliothek eine Art " -"eingeschränkten Polymorphismus für Argumenttypen bereitstellen. Weitere Einzelheiten erfährst Du " -"in einem späteren Abschnitt." +"* Bei Verwendung von Generika (generics) kann `Into` der " +"Standardbibliothek eine Art eingeschränkten Polymorphismus für Argumenttypen " +"bereitstellen. Weitere Einzelheiten erfährst Du in einem späteren Abschnitt." #: src/exercises/day-1/morning.md:1 #, fuzzy @@ -3321,36 +3678,41 @@ msgstr "Ein paar Dinge, die Sie beim Lösen der Aufgaben beachten sollten:" #, fuzzy msgid "" "* Use a local Rust installation, if possible. This way you can get\n" -" auto-completion in your editor. See the page about [Using Cargo] for details\n" +" auto-completion in your editor. See the page about [Using Cargo] for " +"details\n" " on installing Rust.\n" "\n" "* Alternatively, use the Rust Playground." msgstr "" -"* Verwenden Sie nach Möglichkeit eine lokale Rust-Installation. Auf diese Weise können Sie " -"erhalten\n" -" Autovervollständigung in Ihrem Editor. Weitere Informationen finden Sie auf der Seite über " -"[Fracht verwenden].\n" +"* Verwenden Sie nach Möglichkeit eine lokale Rust-Installation. Auf diese " +"Weise können Sie erhalten\n" +" Autovervollständigung in Ihrem Editor. Weitere Informationen finden Sie " +"auf der Seite über [Fracht verwenden].\n" " bei der Installation von Rust." #: src/exercises/day-1/morning.md:19 #, fuzzy msgid "" -"The code snippets are not editable on purpose: the inline code snippets lose\n" +"The code snippets are not editable on purpose: the inline code snippets " +"lose\n" "their state if you navigate away from the page." msgstr "" -"Die Code-Snippets sind absichtlich nicht editierbar: die Inline-Code-Snippets gehen verloren\n" +"Die Code-Snippets sind absichtlich nicht editierbar: die Inline-Code-" +"Snippets gehen verloren\n" "ihren Zustand, wenn Sie von der Seite wegnavigieren." #: 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 #, fuzzy -msgid "After looking at the exercises, you can look at the [solutions] provided." +msgid "" +"After looking at the exercises, you can look at the [solutions] provided." msgstr "" -"Nachdem Sie sich die Übungen angesehen haben, können Sie sich die bereitgestellten [Lösungen] " -"ansehen." +"Nachdem Sie sich die Übungen angesehen haben, können Sie sich die " +"bereitgestellten [Lösungen] ansehen." #: src/exercises/day-1/implicit-conversions.md:1 #, fuzzy @@ -3360,10 +3722,12 @@ msgstr "# Implizite Konvertierungen" #: src/exercises/day-1/implicit-conversions.md:3 #, fuzzy msgid "" -"Rust will not automatically apply _implicit conversions_ between types ([unlike\n" +"Rust will not automatically apply _implicit conversions_ between types " +"([unlike\n" "C++][3]). You can see this in a program like this:" msgstr "" -"Rust wendet nicht automatisch _implizite Konvertierungen_ zwischen Typen an ([anders als\n" +"Rust wendet nicht automatisch _implizite Konvertierungen_ zwischen Typen an " +"([anders als\n" "C++[3]). Sie können dies in einem Programm wie diesem sehen:" #: src/exercises/day-1/implicit-conversions.md:6 @@ -3386,40 +3750,52 @@ msgstr "" #, fuzzy msgid "" "The Rust integer types all implement the [`From`][1] and [`Into`][2]\n" -"traits to let us convert between them. The `From` trait has a single `from()`\n" +"traits to let us convert between them. The `From` trait has a single " +"`from()`\n" "method and similarly, the `Into` trait has a single `into()` method.\n" -"Implementing these traits is how a type expresses that it can be converted into\n" +"Implementing these traits is how a type expresses that it can be converted " +"into\n" "another type." msgstr "" -"Die Rust-Integer-Typen implementieren alle [`From`][1] und [`Into`][2]\n" -"Eigenschaften, um uns zwischen ihnen umwandeln zu lassen. Das `From`-Merkmal hat ein einzelnes " -"`from()`\n" -"-Methode und ähnlich hat das `Into`-Merkmal eine einzige `into()`-Methode.\n" -"Durch die Implementierung dieser Merkmale drückt ein Typ aus, in was er umgewandelt werden kann\n" +"Die Rust-Integer-Typen implementieren alle [`From`][1] und [`Into`]" +"[2]\n" +"Eigenschaften, um uns zwischen ihnen umwandeln zu lassen. Das `From`-" +"Merkmal hat ein einzelnes `from()`\n" +"-Methode und ähnlich hat das `Into`-Merkmal eine einzige `into()`-" +"Methode.\n" +"Durch die Implementierung dieser Merkmale drückt ein Typ aus, in was er " +"umgewandelt werden kann\n" "ein anderer Typ." #: src/exercises/day-1/implicit-conversions.md:25 #, fuzzy msgid "" -"The standard library has an implementation of `From for i16`, which means\n" +"The standard library has an implementation of `From for i16`, which " +"means\n" "that we can convert a variable `x` of type `i8` to an `i16` by calling \n" "`i16::from(x)`. Or, simpler, with `x.into()`, because `From for i16`\n" "implementation automatically create an implementation of `Into for i8`." msgstr "" -"Die Standardbibliothek hat eine Implementierung von `From for i16`, was bedeutet\n" -"dass wir eine Variable `x` vom Typ `i8` per Aufruf in ein `i16` umwandeln können\n" +"Die Standardbibliothek hat eine Implementierung von `From for i16`, was " +"bedeutet\n" +"dass wir eine Variable `x` vom Typ `i8` per Aufruf in ein `i16` umwandeln " +"können\n" "`i16::von(x)`. Oder einfacher mit `x.into()`, denn `From for i16`\n" -"implementierung automatisch eine Implementierung von `Into for i8` erstellen." +"implementierung automatisch eine Implementierung von `Into for i8` " +"erstellen." #: src/exercises/day-1/implicit-conversions.md:30 #, fuzzy msgid "" -"The same applies for your own `From` implementations for your own types, so it is\n" -"sufficient to only implement `From` to get a respective `Into` implementation automatically." +"The same applies for your own `From` implementations for your own types, so " +"it is\n" +"sufficient to only implement `From` to get a respective `Into` " +"implementation automatically." msgstr "" -"Dasselbe gilt für Ihre eigenen `From`-Implementierungen für Ihre eigenen Typen, so ist es\n" -"Es reicht aus, nur `From` zu implementieren, um automatisch eine entsprechende `Into`-" -"Implementierung zu erhalten." +"Dasselbe gilt für Ihre eigenen `From`-Implementierungen für Ihre eigenen " +"Typen, so ist es\n" +"Es reicht aus, nur `From` zu implementieren, um automatisch eine " +"entsprechende `Into`-Implementierung zu erhalten." #: src/exercises/day-1/implicit-conversions.md:33 #, fuzzy @@ -3431,13 +3807,16 @@ msgid "" "3. Change the types of `x` and `y` to other things (such as `f32`, `bool`,\n" " `i128`) to see which types you can convert to which other types. Try\n" " converting small types to big types and the other way around. Check the\n" -" [standard library documentation][1] to see if `From` is implemented for\n" +" [standard library documentation][1] to see if `From` is implemented " +"for\n" " the pairs you check." msgstr "" "3. Ändern Sie die Typen von `x` und `y` in andere Dinge (wie `f32`, `bool`,\n" -" `i128`), um zu sehen, welche Typen Sie in welche anderen Typen konvertieren können. Versuchen\n" +" `i128`), um zu sehen, welche Typen Sie in welche anderen Typen " +"konvertieren können. Versuchen\n" " Umwandlung kleiner Typen in große Typen und umgekehrt. Überprüf den\n" -" [Dokumentation der Standardbibliothek][1], um zu sehen, ob \"From\" für implementiert ist\n" +" [Dokumentation der Standardbibliothek][1], um zu sehen, ob \"From\" " +"für implementiert ist\n" " die Paare, die Sie überprüfen." #: src/exercises/day-1/for-loops.md:1 @@ -3459,9 +3838,12 @@ msgstr "" #: src/exercises/day-1/for-loops.md:9 #, fuzzy -msgid "You can print such an array by asking for its debug representation with `{:?}`:" +msgid "" +"You can print such an array by asking for its debug representation with `{:?}" +"`:" msgstr "" -"Sie können ein solches Array drucken, indem Sie mit `{:?}` nach seiner Debug-Darstellung fragen:" +"Sie können ein solches Array drucken, indem Sie mit `{:?}` nach seiner Debug-" +"Darstellung fragen:" #: src/exercises/day-1/for-loops.md:11 msgid "" @@ -3479,7 +3861,8 @@ msgid "" "Rust lets you iterate over things like arrays and ranges using the `for`\n" "keyword:" msgstr "" -"Mit Rust können Sie über Dinge wie Arrays und Ranges iterieren, indem Sie das `for` verwenden\n" +"Mit Rust können Sie über Dinge wie Arrays und Ranges iterieren, indem Sie " +"das `for` verwenden\n" "Stichwort:" #: src/exercises/day-1/for-loops.md:21 @@ -3505,12 +3888,15 @@ msgstr "" #: src/exercises/day-1/for-loops.md:38 #, fuzzy msgid "" -"Use the above to write a function `pretty_print` which pretty-print a matrix and\n" -"a function `transpose` which will transpose a matrix (turn rows into columns):" +"Use the above to write a function `pretty_print` which pretty-print a matrix " +"and\n" +"a function `transpose` which will transpose a matrix (turn rows into " +"columns):" msgstr "" -"Verwenden Sie das Obige, um eine Funktion \"pretty_print\" zu schreiben, die eine Matrix hübsch " -"druckt und\n" -"eine Funktion \"transpose\", die eine Matrix transponiert (Zeilen in Spalten umwandelt):" +"Verwenden Sie das Obige, um eine Funktion \"pretty_print\" zu schreiben, die " +"eine Matrix hübsch druckt und\n" +"eine Funktion \"transpose\", die eine Matrix transponiert (Zeilen in Spalten " +"umwandelt):" #: src/exercises/day-1/for-loops.md:41 msgid "" @@ -3532,7 +3918,8 @@ msgid "" "Copy the code below to and implement the\n" "functions:" msgstr "" -"Kopieren Sie den folgenden Code nach und implementieren Sie die\n" +"Kopieren Sie den folgenden Code nach und " +"implementieren Sie die\n" "Funktionen:" #: src/exercises/day-1/for-loops.md:52 @@ -3578,17 +3965,21 @@ msgid "" "argument and return types? Something like `&[&[i32]]` for a two-dimensional\n" "slice-of-slices. Why or why not?" msgstr "" -"Könnten Sie `&[i32]`-Slices anstelle von fest codierten 3 × 3-Matrizen für Ihre verwenden\n" -"Argument- und Rückgabetypen? Etwas wie `&[&[i32]]` für ein zweidimensionales\n" +"Könnten Sie `&[i32]`-Slices anstelle von fest codierten 3 × 3-Matrizen für " +"Ihre verwenden\n" +"Argument- und Rückgabetypen? Etwas wie `&[&[i32]]` für ein " +"zweidimensionales\n" "Scheibe-von-Scheiben. Warum oder warum nicht?" #: src/exercises/day-1/for-loops.md:87 #, fuzzy msgid "" -"See the [`ndarray` crate](https://docs.rs/ndarray/) for a production quality\n" +"See the [`ndarray` crate](https://docs.rs/ndarray/) for a production " +"quality\n" "implementation." msgstr "" -"Siehe die [`ndarray`-Kiste](https://docs.rs/ndarray/) für eine Produktionsqualität\n" +"Siehe die [`ndarray`-Kiste](https://docs.rs/ndarray/) für eine " +"Produktionsqualität\n" "Implementierung." #: src/exercises/day-1/for-loops.md:92 @@ -3608,11 +3999,12 @@ msgstr "# Variablen" #: src/basic-syntax/variables.md:3 #, fuzzy msgid "" -"Rust provides type safety via static typing. Variable bindings are immutable by\n" +"Rust provides type safety via static typing. Variable bindings are immutable " +"by\n" "default:" msgstr "" -"Rust bietet Typsicherheit durch statische Typisierung. Variable Bindungen sind unveränderlich " -"durch\n" +"Rust bietet Typsicherheit durch statische Typisierung. Variable Bindungen " +"sind unveränderlich durch\n" "Standard:" #: src/basic-syntax/variables.md:6 @@ -3630,15 +4022,16 @@ msgstr "" #: src/basic-syntax/variables.md:17 #, fuzzy msgid "" -"* Due to type inference the `i32` is optional. We will gradually show the types less and less as " -"the course progresses.\n" -"* Note that since `println!` is a macro, `x` is not moved, even using the function like syntax of " -"`println!(\"x: {}\", x)`" +"* Due to type inference the `i32` is optional. We will gradually show the " +"types less and less as the course progresses.\n" +"* Note that since `println!` is a macro, `x` is not moved, even using the " +"function like syntax of `println!(\"x: {}\", x)`" msgstr "" -"* Aufgrund von Typrückschlüssen ist `i32` optional. Wir werden die Typen nach und nach immer " -"weniger zeigen, je weiter der Typ fortschreitet.\n" -"* Beachten Sie, dass, da `println!` ein Makro ist, `x` nicht verschoben wird, selbst wenn die " -"funktionsähnliche Syntax von `println!(\"x: {}\", x)` verwendet wird" +"* Aufgrund von Typrückschlüssen ist `i32` optional. Wir werden die Typen " +"nach und nach immer weniger zeigen, je weiter der Typ fortschreitet.\n" +"* Beachten Sie, dass, da `println!` ein Makro ist, `x` nicht verschoben " +"wird, selbst wenn die funktionsähnliche Syntax von `println!(\"x: {}\", x)` " +"verwendet wird" #: src/basic-syntax/type-inference.md:1 #, fuzzy @@ -3648,7 +4041,9 @@ msgstr "# Geben Sie Inferenz ein" #: src/basic-syntax/type-inference.md:3 #, fuzzy msgid "Rust will look at how the variable is _used_ to determine the type:" -msgstr "Rust wird sich ansehen, wie die Variable _verwendet_ wird, um den Typ zu bestimmen:" +msgstr "" +"Rust wird sich ansehen, wie die Variable _verwendet_ wird, um den Typ zu " +"bestimmen:" #: src/basic-syntax/type-inference.md:5 msgid "" @@ -3675,36 +4070,38 @@ msgstr "" #: src/basic-syntax/type-inference.md:26 #, fuzzy 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 "" -"Diese Folie zeigt, wie der Rust-Compiler Typen basierend auf Einschränkungen ableitet, die durch " -"Variablendeklarationen und Verwendungen gegeben sind.\n" +"Diese Folie zeigt, wie der Rust-Compiler Typen basierend auf Einschränkungen " +"ableitet, die durch Variablendeklarationen und Verwendungen gegeben sind.\n" #: src/basic-syntax/type-inference.md:28 #, fuzzy msgid "" -"It is very important to emphasize that variables declared like this are not of some sort of " -"dynamic \"any type\" that can\n" -"hold any data. The machine code generated by such declaration is identical to the explicit " -"declaration of a type.\n" +"It is very important to emphasize that variables declared like this are not " +"of some sort of dynamic \"any type\" that can\n" +"hold any data. The machine code generated by such declaration is identical " +"to the explicit declaration of a type.\n" "The compiler does the job for us and helps us write more concise code." msgstr "" -"Es ist sehr wichtig zu betonen, dass auf diese Weise deklarierte Variablen nicht von einer Art " -"dynamischem \"beliebigen Typ\" sind, der dies kann\n" -"irgendwelche Daten halten. Der durch eine solche Deklaration erzeugte Maschinencode ist identisch " -"mit der expliziten Deklaration eines Typs.\n" -"Der Compiler erledigt die Arbeit für uns und hilft uns, einen prägnanteren Code zu schreiben." +"Es ist sehr wichtig zu betonen, dass auf diese Weise deklarierte Variablen " +"nicht von einer Art dynamischem \"beliebigen Typ\" sind, der dies kann\n" +"irgendwelche Daten halten. Der durch eine solche Deklaration erzeugte " +"Maschinencode ist identisch mit der expliziten Deklaration eines Typs.\n" +"Der Compiler erledigt die Arbeit für uns und hilft uns, einen prägnanteren " +"Code zu schreiben." #: src/basic-syntax/type-inference.md:32 #, fuzzy 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 "" -"Der folgende Code weist den Compiler an, in einen bestimmten generischen Container zu kopieren, " -"ohne dass der Code jemals explizit den enthaltenen Typ angibt, wobei `_` als Platzhalter verwendet " -"wird:" +"Der folgende Code weist den Compiler an, in einen bestimmten generischen " +"Container zu kopieren, ohne dass der Code jemals explizit den enthaltenen " +"Typ angibt, wobei `_` als Platzhalter verwendet wird:" #: src/basic-syntax/type-inference.md:34 msgid "" @@ -3724,13 +4121,13 @@ msgstr "" #: src/basic-syntax/type-inference.md:46 #, fuzzy msgid "" -"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator.html#method.collect) relies " -"on `FromIterator`, which [`HashSet`](https://doc.rust-lang.org/std/iter/trait.FromIterator.html) " -"implements." +"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator." +"html#method.collect) relies on `FromIterator`, which [`HashSet`](https://doc." +"rust-lang.org/std/iter/trait.FromIterator.html) implements." msgstr "" -"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator.html#method.collect) stützt " -"sich auf `FromIterator`, das [`HashSet`](https:/ /doc.rust-lang.org/std/iter/trait.FromIterator." -"html) implementiert." +"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator." +"html#method.collect) stützt sich auf `FromIterator`, das [`HashSet`]" +"(https:/ /doc.rust-lang.org/std/iter/trait.FromIterator.html) implementiert." #: src/basic-syntax/static-and-const.md:1 #, fuzzy @@ -3740,7 +4137,8 @@ msgstr "# Statische und konstante Variablen" #: src/basic-syntax/static-and-const.md:3 #, fuzzy msgid "Global state is managed with static and constant variables." -msgstr "Der globale Status wird mit statischen und konstanten Variablen verwaltet." +msgstr "" +"Der globale Status wird mit statischen und konstanten Variablen verwaltet." #: src/basic-syntax/static-and-const.md:5 #, fuzzy @@ -3761,7 +4159,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" @@ -3776,7 +4175,8 @@ msgstr "" #: src/basic-syntax/static-and-const.md:27 #, fuzzy msgid "According to the [Rust RFC Book][1] these are inlined upon use." -msgstr "Gemäß dem [Rust RFC Book][1] werden diese bei der Verwendung eingefügt." +msgstr "" +"Gemäß dem [Rust RFC Book][1] werden diese bei der Verwendung eingefügt." #: src/basic-syntax/static-and-const.md:29 #, fuzzy @@ -3802,35 +4202,41 @@ msgstr "" #: src/basic-syntax/static-and-const.md:41 #, fuzzy msgid "" -"As noted in the [Rust RFC Book][1], 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." +"As noted in the [Rust RFC Book][1], 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." msgstr "" -"Wie im [Rust RFC Book][1] erwähnt, werden diese bei der Verwendung nicht inliniert und haben einen " -"tatsächlich zugeordneten Speicherort. Dies ist nützlich für unsicheren und eingebetteten Code, und " -"die Variable lebt während der gesamten Programmausführung." +"Wie im [Rust RFC Book][1] erwähnt, werden diese bei der Verwendung nicht " +"inliniert und haben einen tatsächlich zugeordneten Speicherort. Dies ist " +"nützlich für unsicheren und eingebetteten Code, und die Variable lebt " +"während der gesamten Programmausführung." #: src/basic-syntax/static-and-const.md:44 #, fuzzy -msgid "We will look at mutating static data in the [chapter on Unsafe Rust](../unsafe.md)." +msgid "" +"We will look at mutating static data in the [chapter on Unsafe Rust](../" +"unsafe.md)." msgstr "" -"Wir werden uns im [Kapitel über Unsafe Rust](../unsafe.md) mit mutierenden statischen Daten " -"befassen." +"Wir werden uns im [Kapitel über Unsafe Rust](../unsafe.md) mit mutierenden " +"statischen Daten befassen." #: src/basic-syntax/static-and-const.md:48 #, fuzzy msgid "" "* Mention that `const` behaves semantically similar to C++'s `constexpr`.\n" -"* `static`, on the other hand, is much more similar to a `const` or mutable global variable in C+" -"+.\n" -"* It isn't super common that one would need a runtime evaluated constant, but it is helpful and " -"safer than using a static." +"* `static`, on the other hand, is much more similar to a `const` or mutable " +"global variable in C++.\n" +"* It isn't super common that one would need a runtime evaluated constant, " +"but it is helpful and safer than using a static." msgstr "" -"* Erwähnen Sie, dass sich `const` semantisch ähnlich wie `constexpr` von C++ verhält.\n" -"* „Static“ hingegen ist einer „const“ oder veränderlichen globalen Variable in C++ viel " -"ähnlicher.\n" -"* Es kommt nicht sehr häufig vor, dass man eine zur Laufzeit ausgewertete Konstante benötigt, aber " -"es ist hilfreich und sicherer als die Verwendung einer statischen." +"* Erwähnen Sie, dass sich `const` semantisch ähnlich wie `constexpr` von C++ " +"verhält.\n" +"* „Static“ hingegen ist einer „const“ oder veränderlichen globalen Variable " +"in C++ viel ähnlicher.\n" +"* Es kommt nicht sehr häufig vor, dass man eine zur Laufzeit ausgewertete " +"Konstante benötigt, aber es ist hilfreich und sicherer als die Verwendung " +"einer statischen." #: src/basic-syntax/scopes-shadowing.md:1 #, fuzzy @@ -3840,11 +4246,12 @@ msgstr "# Bereiche und Shadowing" #: src/basic-syntax/scopes-shadowing.md:3 #, fuzzy msgid "" -"You can shadow variables, both those from outer scopes and variables from the\n" +"You can shadow variables, both those from outer scopes and variables from " +"the\n" "same scope:" msgstr "" -"Sie können Variablen schattieren, sowohl solche aus äußeren Gültigkeitsbereichen als auch " -"Variablen aus dem\n" +"Sie können Variablen schattieren, sowohl solche aus äußeren " +"Gültigkeitsbereichen als auch Variablen aus dem\n" "gleicher Umfang:" #: src/basic-syntax/scopes-shadowing.md:6 @@ -3870,23 +4277,26 @@ msgstr "" #: src/basic-syntax/scopes-shadowing.md:25 #, fuzzy 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. \n" +"* 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. \n" "* A shadowing variable can have a different type. \n" -"* Shadowing looks obscure at first, but is convenient for holding on to values after `.unwrap()`.\n" -"* The following code demonstrates why the compiler can't simply reuse memory locations when " -"shadowing an immutable variable in a scope, even if the type does not change." +"* Shadowing looks obscure at first, but is convenient for holding on to " +"values after `.unwrap()`.\n" +"* The following code demonstrates why the compiler can't simply reuse memory " +"locations when shadowing an immutable variable in a scope, even if the type " +"does not change." msgstr "" -"* Definition: Shadowing unterscheidet sich von Mutation, da nach dem Shadowing die Speicherplätze " -"beider Variablen gleichzeitig existieren. Beide sind unter demselben Namen verfügbar, je nachdem, " -"wo Sie ihn im Code verwenden.\n" +"* Definition: Shadowing unterscheidet sich von Mutation, da nach dem " +"Shadowing die Speicherplätze beider Variablen gleichzeitig existieren. Beide " +"sind unter demselben Namen verfügbar, je nachdem, wo Sie ihn im Code " +"verwenden.\n" "* Eine Shadowing-Variable kann einen anderen Typ haben.\n" -"* Shadowing sieht zunächst obskur aus, ist aber praktisch, um Werte nach `.unwrap()` " -"festzuhalten.\n" -"* Der folgende Code demonstriert, warum der Compiler Speicherorte nicht einfach wiederverwenden " -"kann, wenn er eine unveränderliche Variable in einem Bereich schattiert, selbst wenn sich der Typ " -"nicht ändert." +"* Shadowing sieht zunächst obskur aus, ist aber praktisch, um Werte nach `." +"unwrap()` festzuhalten.\n" +"* Der folgende Code demonstriert, warum der Compiler Speicherorte nicht " +"einfach wiederverwenden kann, wenn er eine unveränderliche Variable in einem " +"Bereich schattiert, selbst wenn sich der Typ nicht ändert." #: src/basic-syntax/scopes-shadowing.md:30 msgid "" @@ -3914,11 +4324,12 @@ msgstr "Traditionell fallen Sprachen in zwei große Kategorien:" #, fuzzy msgid "" "* Full control via manual memory management: C, C++, Pascal, ...\n" -"* Full safety via automatic memory management at runtime: Java, Python, Go, Haskell, ..." +"* Full safety via automatic memory management at runtime: Java, Python, Go, " +"Haskell, ..." msgstr "" "* Volle Kontrolle über manuelle Speicherverwaltung: C, C++, Pascal, ...\n" -"* Volle Sicherheit durch automatische Speicherverwaltung zur Laufzeit: Java, Python, Go, " -"Haskell, ..." +"* Volle Sicherheit durch automatische Speicherverwaltung zur Laufzeit: Java, " +"Python, Go, Haskell, ..." #: src/memory-management.md:8 #, fuzzy @@ -3931,7 +4342,8 @@ msgid "" "> Full control *and* safety via compile time enforcement of correct memory\n" "> management." msgstr "" -"> Volle Kontrolle *und* Sicherheit durch Erzwingung des korrekten Speichers zur Kompilierzeit\n" +"> Volle Kontrolle *und* Sicherheit durch Erzwingung des korrekten Speichers " +"zur Kompilierzeit\n" "> Verwaltung." #: src/memory-management.md:13 @@ -3942,7 +4354,9 @@ msgstr "Dies geschieht mit einem expliziten Eigentumskonzept." #: src/memory-management.md:15 #, fuzzy msgid "First, let's refresh how memory management works." -msgstr "Lassen Sie uns zunächst die Funktionsweise der Speicherverwaltung auffrischen." +msgstr "" +"Lassen Sie uns zunächst die Funktionsweise der Speicherverwaltung " +"auffrischen." #: src/memory-management/stack-vs-heap.md:1 #, fuzzy @@ -3977,11 +4391,12 @@ msgstr "# Stapelspeicher" #: src/memory-management/stack.md:3 #, fuzzy msgid "" -"Creating a `String` puts fixed-sized data on the stack and dynamically sized\n" +"Creating a `String` puts fixed-sized data on the stack and dynamically " +"sized\n" "data on the heap:" msgstr "" -"Das Erstellen eines \"Strings\" legt Daten mit fester Größe auf den Stapel und dynamisch in der " -"Größe\n" +"Das Erstellen eines \"Strings\" legt Daten mit fester Größe auf den Stapel " +"und dynamisch in der Größe\n" "Daten auf dem Haufen:" #: src/memory-management/stack.md:6 @@ -4012,14 +4427,15 @@ 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.\n" +"* 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.\n" "\n" -"* If students ask about it, you can mention that the underlying memory is heap allocated using the " -"[System Allocator] and custom allocators can be implemented using the [Allocator API]\n" +"* If students ask about it, you can mention that the underlying memory is " +"heap allocated using the [System Allocator] and custom allocators can be " +"implemented using the [Allocator API]\n" "\n" -"* We can inspect the memory layout with `unsafe` code. However, you should point out that this is " -"rightfully unsafe!\n" +"* We can inspect the memory layout with `unsafe` code. However, you should " +"point out that this is rightfully unsafe!\n" "\n" " ```rust,editable\n" " fn main() {\n" @@ -4027,11 +4443,14 @@ 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 (capacity, ptr, len): (usize, usize, usize) = std::mem::transmute(s1);\n" -" println!(\"ptr = {ptr:#x}, len = {len}, capacity = {capacity}\");\n" +" let (capacity, ptr, len): (usize, usize, usize) = std::mem::" +"transmute(s1);\n" +" println!(\"ptr = {ptr:#x}, len = {len}, capacity = " +"{capacity}\");\n" " }\n" " }\n" " ```" @@ -4050,10 +4469,11 @@ msgstr "Heap-Speicher können Sie selbst zuweisen und freigeben." #: src/memory-management/manual.md:5 #, fuzzy msgid "" -"If not done with care, this can lead to crashes, bugs, security vulnerabilities, and memory leaks." +"If not done with care, this can lead to crashes, bugs, security " +"vulnerabilities, and memory leaks." msgstr "" -"Wenn dies nicht sorgfältig durchgeführt wird, kann dies zu Abstürzen, Fehlern, Sicherheitslücken " -"und Speicherlecks führen." +"Wenn dies nicht sorgfältig durchgeführt wird, kann dies zu Abstürzen, " +"Fehlern, Sicherheitslücken und Speicherlecks führen." #: src/memory-management/manual.md:7 #, fuzzy @@ -4063,7 +4483,8 @@ msgstr "##C Beispiel" #: src/memory-management/manual.md:9 #, fuzzy msgid "You must call `free` on every pointer you allocate with `malloc`:" -msgstr "Sie müssen `free` auf jedem Zeiger aufrufen, den Sie mit `malloc` zuweisen:" +msgstr "" +"Sie müssen `free` auf jedem Zeiger aufrufen, den Sie mit `malloc` zuweisen:" #: src/memory-management/manual.md:11 msgid "" @@ -4081,10 +4502,12 @@ msgstr "" #: src/memory-management/manual.md:21 #, fuzzy msgid "" -"Memory is leaked if the function returns early between `malloc` and `free`: the\n" +"Memory is leaked if the function returns early between `malloc` and `free`: " +"the\n" "pointer is lost and we cannot deallocate the memory." msgstr "" -"Speicherverlust, wenn die Funktion früh zwischen `malloc` und `free` zurückkehrt: the\n" +"Speicherverlust, wenn die Funktion früh zwischen `malloc` und `free` " +"zurückkehrt: the\n" "Zeiger geht verloren und wir können den Speicher nicht freigeben." #: src/memory-management/scope-based.md:1 @@ -4094,30 +4517,35 @@ msgstr "# Bereichsbasierte Speicherverwaltung" #: src/memory-management/scope-based.md:3 #, fuzzy -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 "" -"Mit Konstruktoren und Destruktoren können Sie sich in die Lebensdauer eines Objekts einklinken." +"Mit Konstruktoren und Destruktoren können Sie sich in die Lebensdauer eines " +"Objekts einklinken." #: src/memory-management/scope-based.md:5 #, fuzzy msgid "" "By wrapping a pointer in an object, you can free memory when the object is\n" -"destroyed. The compiler guarantees that this happens, even if an exception is\n" +"destroyed. The compiler guarantees that this happens, even if an exception " +"is\n" "raised." msgstr "" -"Indem Sie einen Zeiger in ein Objekt einschließen, können Sie Speicher freigeben, wenn das Objekt " -"vorhanden ist\n" -"zerstört. Der Compiler garantiert, dass dies geschieht, auch wenn es sich um eine Ausnahme " -"handelt\n" +"Indem Sie einen Zeiger in ein Objekt einschließen, können Sie Speicher " +"freigeben, wenn das Objekt vorhanden ist\n" +"zerstört. Der Compiler garantiert, dass dies geschieht, auch wenn es sich um " +"eine Ausnahme handelt\n" "erzogen." #: src/memory-management/scope-based.md:9 #, fuzzy msgid "" -"This is often called _resource acquisition is initialization_ (RAII) and gives\n" +"This is often called _resource acquisition is initialization_ (RAII) and " +"gives\n" "you smart pointers." msgstr "" -"Dies wird oft als _Ressourcenerwerb ist Initialisierung_ (RAII) bezeichnet und gibt\n" +"Dies wird oft als _Ressourcenerwerb ist Initialisierung_ (RAII) bezeichnet " +"und gibt\n" "ihr klugen zeiger." #: src/memory-management/scope-based.md:12 @@ -4149,9 +4577,11 @@ msgstr "" #: src/memory-management/scope-based.md:25 #, fuzzy -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 "" -"Spezielle Move-Konstruktoren werden verwendet, wenn der Besitz an eine Funktion übergeben wird:" +"Spezielle Move-Konstruktoren werden verwendet, wenn der Besitz an eine " +"Funktion übergeben wird:" #: src/memory-management/scope-based.md:27 msgid "" @@ -4169,21 +4599,25 @@ msgstr "# Automatische Speicherverwaltung" #: src/memory-management/garbage-collection.md:3 #, fuzzy msgid "" -"An alternative to manual and scope-based memory management is automatic memory\n" +"An alternative to manual and scope-based memory management is automatic " +"memory\n" "management:" msgstr "" -"Eine Alternative zur manuellen und bereichsbasierten Speicherverwaltung ist der automatische " -"Speicher\n" +"Eine Alternative zur manuellen und bereichsbasierten Speicherverwaltung ist " +"der automatische Speicher\n" "Management:" #: src/memory-management/garbage-collection.md:6 #, fuzzy msgid "" "* The programmer never allocates or deallocates memory explicitly.\n" -"* 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 "" -"* Der Programmierer weist Speicher nie explizit zu oder gibt ihn nicht mehr frei.\n" -"* Ein Garbage Collector findet ungenutzten Speicher und gibt ihn für den Programmierer frei." +"* Der Programmierer weist Speicher nie explizit zu oder gibt ihn nicht mehr " +"frei.\n" +"* Ein Garbage Collector findet ungenutzten Speicher und gibt ihn für den " +"Programmierer frei." #: src/memory-management/garbage-collection.md:9 #, fuzzy @@ -4193,7 +4627,9 @@ msgstr "## Java-Beispiel" #: src/memory-management/garbage-collection.md:11 #, fuzzy msgid "The `person` object is not deallocated after `sayHello` returns:" -msgstr "Das `person`-Objekt wird nicht freigegeben, nachdem `sayHello` zurückgegeben wird:" +msgstr "" +"Das `person`-Objekt wird nicht freigegeben, nachdem `sayHello` zurückgegeben " +"wird:" #: src/memory-management/garbage-collection.md:13 msgid "" @@ -4218,19 +4654,21 @@ msgstr "Die Speicherverwaltung in Rust ist eine Mischung:" #, fuzzy msgid "" "* Safe and correct like Java, but without a garbage collector.\n" -"* Depending on which abstraction (or combination of abstractions) you choose, can be a single " -"unique pointer, reference counted, or atomically reference counted.\n" +"* Depending on which abstraction (or combination of abstractions) you " +"choose, can be a single unique pointer, reference counted, or atomically " +"reference counted.\n" "* Scope-based like C++, but the compiler enforces full adherence.\n" -"* 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 "" "* Sicher und korrekt wie Java, aber ohne Garbage Collector.\n" -"* Je nachdem, welche Abstraktion (oder Kombination von Abstraktionen) Sie wählen, kann es sich um " -"einen einzelnen eindeutigen Zeiger, eine Referenzzählung oder eine atomare Referenzzählung " -"handeln.\n" -"* Bereichsbasiert wie C++, aber der Compiler erzwingt die vollständige Einhaltung.\n" -"* Ein Rust-Benutzer kann die richtige Abstraktion für die Situation auswählen, einige haben sogar " -"keine Kosten zur Laufzeit wie C." +"* Je nachdem, welche Abstraktion (oder Kombination von Abstraktionen) Sie " +"wählen, kann es sich um einen einzelnen eindeutigen Zeiger, eine " +"Referenzzählung oder eine atomare Referenzzählung handeln.\n" +"* Bereichsbasiert wie C++, aber der Compiler erzwingt die vollständige " +"Einhaltung.\n" +"* Ein Rust-Benutzer kann die richtige Abstraktion für die Situation " +"auswählen, einige haben sogar keine Kosten zur Laufzeit wie C." #: src/memory-management/rust.md:10 #, fuzzy @@ -4240,16 +4678,19 @@ msgstr "Dies wird erreicht, indem _Eigentum_ explizit modelliert wird." #: src/memory-management/rust.md:14 #, fuzzy msgid "" -"* If asked how at this point, you can mention that in Rust this is usually handled by RAII wrapper " -"types such as [Box], [Vec], [Rc], or [Arc]. These encapsulate ownership and memory allocation via " -"various means, and prevent the potential errors in C.\n" +"* If asked how at this point, you can mention that in Rust this is usually " +"handled by RAII wrapper types such as [Box], [Vec], [Rc], or [Arc]. These " +"encapsulate ownership and memory allocation via various means, and prevent " +"the potential errors in C.\n" "\n" -"* You may be asked about destructors here, the [Drop] trait is the Rust equivalent." +"* You may be asked about destructors here, the [Drop] trait is the Rust " +"equivalent." msgstr "" -"* Wenn Sie an dieser Stelle fragen, wie das geht, können Sie erwähnen, dass dies in Rust " -"normalerweise von RAII-Wrapper-Typen wie [Box], [Vec], [Rc] oder [Arc] gehandhabt wird. Diese " -"kapseln den Besitz und die Speicherzuweisung auf verschiedene Weise und verhindern die " -"potenziellen Fehler in C." +"* Wenn Sie an dieser Stelle fragen, wie das geht, können Sie erwähnen, dass " +"dies in Rust normalerweise von RAII-Wrapper-Typen wie [Box], [Vec], [Rc] " +"oder [Arc] gehandhabt wird. Diese kapseln den Besitz und die " +"Speicherzuweisung auf verschiedene Weise und verhindern die potenziellen " +"Fehler in C." #: src/memory-management/comparison.md:1 #, fuzzy @@ -4339,10 +4780,12 @@ msgstr "# Eigentum" #: src/ownership.md:3 #, fuzzy msgid "" -"All variable bindings have a _scope_ where they are valid and it is an error to\n" +"All variable bindings have a _scope_ where they are valid and it is an error " +"to\n" "use a variable outside its scope:" msgstr "" -"Alle Variablenbindungen haben einen _Geltungsbereich_, wo sie gültig sind und es ein Fehler ist\n" +"Alle Variablenbindungen haben einen _Geltungsbereich_, wo sie gültig sind " +"und es ein Fehler ist\n" "Verwenden Sie eine Variable außerhalb ihres Gültigkeitsbereichs:" #: src/ownership.md:6 @@ -4367,7 +4810,8 @@ msgid "" "* A destructor can run here to free up resources.\n" "* We say that the variable _owns_ the value." msgstr "" -"* Am Ende des Gültigkeitsbereichs wird die Variable _gelöscht_ und die Daten werden freigegeben.\n" +"* Am Ende des Gültigkeitsbereichs wird die Variable _gelöscht_ und die Daten " +"werden freigegeben.\n" "* Hier kann ein Destruktor laufen, um Ressourcen freizugeben.\n" "* Wir sagen, dass die Variable den Wert _besitzt_." @@ -4403,21 +4847,25 @@ msgid "" "* There is always _exactly_ one variable binding which owns a value." msgstr "" "* Die Zuweisung von `s1` an `s2` überträgt das Eigentum.\n" -"* Die Daten wurden von `s1` _verschoben_ und `s1` ist nicht mehr zugänglich.\n" -"* Wenn `s1` den Gültigkeitsbereich verlässt, passiert nichts: Es hat keinen Besitz.\n" -"* Wenn `s2` den Geltungsbereich verlässt, werden die String-Daten freigegeben.\n" +"* Die Daten wurden von `s1` _verschoben_ und `s1` ist nicht mehr " +"zugänglich.\n" +"* Wenn `s1` den Gültigkeitsbereich verlässt, passiert nichts: Es hat keinen " +"Besitz.\n" +"* Wenn `s2` den Geltungsbereich verlässt, werden die String-Daten " +"freigegeben.\n" "* Es gibt immer _genau_ eine Variablenbindung, die einen Wert besitzt." #: src/ownership/move-semantics.md:22 #, fuzzy 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!).\n" +"* 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!).\n" "\n" "* In Rust, clones are explicit (by using `clone`)." msgstr "" -"* Erwähnen Sie, dass dies das Gegenteil der Standardeinstellungen in C++ ist, die nach Wert " -"kopieren, es sei denn, Sie verwenden `std::move` (und der Move-Konstruktor ist definiert!)." +"* Erwähnen Sie, dass dies das Gegenteil der Standardeinstellungen in C++ " +"ist, die nach Wert kopieren, es sei denn, Sie verwenden `std::move` (und der " +"Move-Konstruktor ist definiert!)." #: src/ownership/moved-strings-rust.md:1 #, fuzzy @@ -4441,7 +4889,8 @@ msgid "" "* When `s1` goes out of scope, nothing happens (it has been moved from)." msgstr "" "* Die Heap-Daten von „s1“ werden für „s2“ wiederverwendet.\n" -"* Wenn `s1` den Gültigkeitsbereich verlässt, passiert nichts (es wurde verschoben)." +"* Wenn `s1` den Gültigkeitsbereich verlässt, passiert nichts (es wurde " +"verschoben)." #: src/ownership/moved-strings-rust.md:13 #, fuzzy @@ -4516,11 +4965,14 @@ msgstr "" #: src/ownership/double-free-modern-cpp.md:10 #, fuzzy msgid "" -"* The heap data from `s1` is duplicated and `s2` gets its own independent copy.\n" +"* The heap data from `s1` is duplicated and `s2` gets its own independent " +"copy.\n" "* When `s1` and `s2` go out of scope, they each free their own memory." msgstr "" -"* Die Heap-Daten von `s1` werden dupliziert und `s2` bekommt seine eigene unabhängige Kopie.\n" -"* Wenn `s1` und `s2` den Geltungsbereich verlassen, geben sie jeweils ihren eigenen Speicher frei." +"* Die Heap-Daten von `s1` werden dupliziert und `s2` bekommt seine eigene " +"unabhängige Kopie.\n" +"* Wenn `s1` und `s2` den Geltungsbereich verlassen, geben sie jeweils ihren " +"eigenen Speicher frei." #: src/ownership/double-free-modern-cpp.md:13 #, fuzzy @@ -4584,7 +5036,8 @@ msgid "" "When you pass a value to a function, the value is assigned to the function\n" "parameter. This transfers ownership:" msgstr "" -"Wenn Sie einer Funktion einen Wert übergeben, wird der Wert der Funktion zugewiesen\n" +"Wenn Sie einer Funktion einen Wert übergeben, wird der Wert der Funktion " +"zugewiesen\n" "Parameter. Dadurch wird das Eigentum übertragen:" #: src/ownership/moves-function-calls.md:6 @@ -4605,23 +5058,29 @@ msgstr "" #: src/ownership/moves-function-calls.md:20 #, fuzzy msgid "" -"* With the first call to `say_hello`, `main` gives up ownership of `name`. Afterwards, `name` " -"cannot be used anymore within `main`.\n" -"* The heap memory allocated for `name` will be freed at the end of the `say_hello` function.\n" -"* `main` can retain ownership if it passes `name` as a reference (`&name`) and if `say_hello` " -"accepts a reference as a parameter.\n" -"* Alternatively, `main` can pass a clone of `name` in the first call (`name.clone()`).\n" -"* Rust makes it harder than C++ to inadvertently create copies by making move semantics the " -"default, and by forcing programmers to make clones explicit." +"* With the first call to `say_hello`, `main` gives up ownership of `name`. " +"Afterwards, `name` cannot be used anymore within `main`.\n" +"* The heap memory allocated for `name` will be freed at the end of the " +"`say_hello` function.\n" +"* `main` can retain ownership if it passes `name` as a reference (`&name`) " +"and if `say_hello` accepts a reference as a parameter.\n" +"* Alternatively, `main` can pass a clone of `name` in the first call (`name." +"clone()`).\n" +"* Rust makes it harder than C++ to inadvertently create copies by making " +"move semantics the default, and by forcing programmers to make clones " +"explicit." msgstr "" -"* Mit dem ersten Aufruf von `say_hello` gibt `main` den Besitz von `name` auf. Danach kann `name` " -"nicht mehr innerhalb von `main` verwendet werden.\n" -"* Der für `name` zugewiesene Heap-Speicher wird am Ende der `say_hello`-Funktion freigegeben.\n" -"* `main` kann den Besitz behalten, wenn es `name` als Referenz (`&name`) übergibt und wenn " -"`say_hello` eine Referenz als Parameter akzeptiert.\n" -"* Alternativ kann `main` beim ersten Aufruf (`name.clone()`) einen Klon von `name` übergeben.\n" -"* Rust macht es schwieriger als C++, versehentlich Kopien zu erstellen, indem es die " -"Bewegungssemantik zum Standard macht und Programmierer dazu zwingt, Klone explizit zu machen." +"* Mit dem ersten Aufruf von `say_hello` gibt `main` den Besitz von `name` " +"auf. Danach kann `name` nicht mehr innerhalb von `main` verwendet werden.\n" +"* Der für `name` zugewiesene Heap-Speicher wird am Ende der `say_hello`-" +"Funktion freigegeben.\n" +"* `main` kann den Besitz behalten, wenn es `name` als Referenz (`&name`) " +"übergibt und wenn `say_hello` eine Referenz als Parameter akzeptiert.\n" +"* Alternativ kann `main` beim ersten Aufruf (`name.clone()`) einen Klon von " +"`name` übergeben.\n" +"* Rust macht es schwieriger als C++, versehentlich Kopien zu erstellen, " +"indem es die Bewegungssemantik zum Standard macht und Programmierer dazu " +"zwingt, Klone explizit zu machen." #: src/ownership/copy-clone.md:1 #, fuzzy @@ -4630,9 +5089,11 @@ msgstr "# Kopieren und Klonen" #: src/ownership/copy-clone.md:3 #, fuzzy -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 "" -"Während die Bewegungssemantik der Standard ist, werden bestimmte Typen standardmäßig kopiert:" +"Während die Bewegungssemantik der Standard ist, werden bestimmte Typen " +"standardmäßig kopiert:" #: src/ownership/copy-clone.md:5 msgid "" @@ -4654,7 +5115,9 @@ msgstr "Diese Typen implementieren das `Copy`-Merkmal." #: src/ownership/copy-clone.md:16 #, fuzzy msgid "You can opt-in your own types to use copy semantics:" -msgstr "Sie können Ihre eigenen Typen für die Verwendung von Kopiersemantik aktivieren:" +msgstr "" +"Sie können Ihre eigenen Typen für die Verwendung von Kopiersemantik " +"aktivieren:" #: src/ownership/copy-clone.md:18 msgid "" @@ -4688,19 +5151,23 @@ msgstr "Kopieren und Klonen sind nicht dasselbe:" #: src/ownership/copy-clone.md:37 #, fuzzy msgid "" -"* Copying refers to bitwise copies of memory regions and does not work on arbitrary objects.\n" -"* Copying does not allow for custom logic (unlike copy constructors in C++).\n" -"* Cloning is a more general operation and also allows for custom behavior by implementing the " -"`Clone` trait.\n" +"* Copying refers to bitwise copies of memory regions and does not work on " +"arbitrary objects.\n" +"* Copying does not allow for custom logic (unlike copy constructors in C+" +"+).\n" +"* Cloning is a more general operation and also allows for custom behavior by " +"implementing the `Clone` trait.\n" "* Copying does not work on types that implement the `Drop` trait." msgstr "" -"* Kopieren bezieht sich auf bitweises Kopieren von Speicherbereichen und funktioniert nicht mit " -"beliebigen Objekten.\n" -"* Beim Kopieren ist keine benutzerdefinierte Logik möglich (im Gegensatz zu Kopierkonstruktoren in " -"C++).\n" -"* Klonen ist eine allgemeinere Operation und ermöglicht auch benutzerdefiniertes Verhalten durch " -"Implementieren der Eigenschaft \"Klonen\".\n" -"* Das Kopieren funktioniert nicht bei Typen, die das `Drop`-Merkmal implementieren." +"* Kopieren bezieht sich auf bitweises Kopieren von Speicherbereichen und " +"funktioniert nicht mit beliebigen Objekten.\n" +"* Beim Kopieren ist keine benutzerdefinierte Logik möglich (im Gegensatz zu " +"Kopierkonstruktoren in C++).\n" +"* Klonen ist eine allgemeinere Operation und ermöglicht auch " +"benutzerdefiniertes Verhalten durch Implementieren der Eigenschaft " +"\"Klonen\".\n" +"* Das Kopieren funktioniert nicht bei Typen, die das `Drop`-Merkmal " +"implementieren." #: src/ownership/copy-clone.md:42 src/ownership/lifetimes-function-calls.md:29 #, fuzzy @@ -4710,30 +5177,30 @@ msgstr "Versuchen Sie im obigen Beispiel Folgendes:" #: src/ownership/copy-clone.md:44 #, fuzzy msgid "" -"* Add a `String` field to `struct Point`. It will not compile because `String` is not a `Copy` " -"type.\n" -"* Remove `Copy` from the `derive` attribute. The compiler error is now in the `println!` for " -"`p1`.\n" +"* Add a `String` field to `struct Point`. It will not compile because " +"`String` is not a `Copy` type.\n" +"* Remove `Copy` from the `derive` attribute. The compiler error is now in " +"the `println!` for `p1`.\n" "* Show that it works if you clone `p1` instead." msgstr "" -"* Fügen Sie ein `String`-Feld zu `struct Point` hinzu. Es wird nicht kompiliert, da `String` kein " -"`Copy`-Typ ist.\n" -"* Entfernen Sie „Copy“ aus dem „derive“-Attribut. Der Compiler-Fehler steht jetzt im `println!` " -"für `p1`.\n" +"* Fügen Sie ein `String`-Feld zu `struct Point` hinzu. Es wird nicht " +"kompiliert, da `String` kein `Copy`-Typ ist.\n" +"* Entfernen Sie „Copy“ aus dem „derive“-Attribut. Der Compiler-Fehler steht " +"jetzt im `println!` für `p1`.\n" "* Zeigen Sie, dass es funktioniert, wenn Sie stattdessen `p1` klonen." #: src/ownership/copy-clone.md:48 #, fuzzy msgid "" -"If students ask about `derive`, it is sufficient to say that this is a way to generate code in " -"Rust\n" -"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\n" +"at compile time. In this case the default implementations of `Copy` and " +"`Clone` traits are generated." msgstr "" -"Wenn Schüler nach „derive“ fragen, reicht es zu sagen, dass dies eine Möglichkeit ist, Code in " -"Rust zu generieren\n" -"zur Kompilierzeit. In diesem Fall werden die Standardimplementierungen der Merkmale „Kopieren“ und " -"„Klonen“ generiert.\n" +"Wenn Schüler nach „derive“ fragen, reicht es zu sagen, dass dies eine " +"Möglichkeit ist, Code in Rust zu generieren\n" +"zur Kompilierzeit. In diesem Fall werden die Standardimplementierungen der " +"Merkmale „Kopieren“ und „Klonen“ generiert.\n" " \n" "" @@ -4786,10 +5253,11 @@ msgstr "Hinweise zur Stapelrückgabe:\n" #: src/ownership/borrowing.md:28 msgid "" -"* Demonstrate that the return from `add` is cheap because the compiler can eliminate the copy " -"operation. Change the above code to print stack addresses and run it on the [Playground]. In the " -"\"DEBUG\" optimization level, the addresses should change, while they stay the same when changing " -"to the \"RELEASE\" setting:\n" +"* 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]. In the \"DEBUG\" optimization level, the " +"addresses should change, while they stay the same when changing to the " +"\"RELEASE\" setting:\n" "\n" " ```rust,editable\n" " #[derive(Debug)]\n" @@ -4810,9 +5278,10 @@ msgid "" " }\n" " ```\n" "* The Rust compiler can do return value optimization (RVO).\n" -"* In C++, copy elision has to be defined in the language specification because constructors can " -"have side effects. In Rust, this is not an issue at all. If RVO did not happen, Rust will always " -"performs a simple and efficient `memcpy` copy." +"* In C++, copy elision has to be defined in the language specification " +"because constructors can have side effects. In Rust, this is not an issue at " +"all. If RVO did not happen, Rust will always performs a simple and efficient " +"`memcpy` copy." msgstr "" #: src/ownership/shared-unique-borrows.md:1 @@ -4855,21 +5324,23 @@ msgstr "" #: src/ownership/shared-unique-borrows.md:25 #, fuzzy msgid "" -"* The above code does not compile because `a` is borrowed as mutable (through `c`) and as " -"immutable (through `b`) at the same time.\n" -"* Move the `println!` statement for `b` before the scope that introduces `c` to make the code " -"compile.\n" -"* 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\"." +"* The above code does not compile because `a` is borrowed as mutable " +"(through `c`) and as immutable (through `b`) at the same time.\n" +"* Move the `println!` statement for `b` before the scope that introduces `c` " +"to make the code compile.\n" +"* 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 "" -"* Der obige Code lässt sich nicht kompilieren, da `a` gleichzeitig als veränderlich (durch `c`) " -"und als unveränderlich (durch `b`) ausgeliehen wird.\n" -"* Verschieben Sie die `println!`-Anweisung für `b` vor den Gültigkeitsbereich, der `c` einführt, " -"um den Code zu kompilieren.\n" -"* Nach dieser Änderung erkennt der Compiler, dass `b` immer nur vor dem neuen änderbaren Borgen " -"von `a` bis `c` verwendet wird. Dies ist eine Funktion des Borrow-Checkers, die als \"nicht-" -"lexikalische Lebensdauern\" bezeichnet wird." +"* Der obige Code lässt sich nicht kompilieren, da `a` gleichzeitig als " +"veränderlich (durch `c`) und als unveränderlich (durch `b`) ausgeliehen " +"wird.\n" +"* Verschieben Sie die `println!`-Anweisung für `b` vor den " +"Gültigkeitsbereich, der `c` einführt, um den Code zu kompilieren.\n" +"* Nach dieser Änderung erkennt der Compiler, dass `b` immer nur vor dem " +"neuen änderbaren Borgen von `a` bis `c` verwendet wird. Dies ist eine " +"Funktion des Borrow-Checkers, die als \"nicht-lexikalische Lebensdauern\" " +"bezeichnet wird." #: src/ownership/lifetimes.md:1 #, fuzzy @@ -4887,11 +5358,14 @@ msgid "" "* Lifetimes can also be explicit: `&'a Point`, `&'document str`.\n" "* Read `&'a Point` as \"a borrowed `Point` which is valid for at least the\n" " lifetime `a`\".\n" -"* Lifetimes are always inferred by the compiler: you cannot assign a lifetime\n" +"* Lifetimes are always inferred by the compiler: you cannot assign a " +"lifetime\n" " yourself.\n" -" * Lifetime annotations create constraints; the compiler verifies that there is\n" +" * Lifetime annotations create constraints; the compiler verifies that " +"there is\n" " a valid solution.\n" -"* Lifetimes for function arguments and return values must be fully specified,\n" +"* Lifetimes for function arguments and return values must be fully " +"specified,\n" " but Rust allows these to be elided in most cases with [a few simple\n" " rules](https://doc.rust-lang.org/nomicon/lifetime-elision.html)." msgstr "" @@ -4903,9 +5377,12 @@ msgstr "# Lebensdauer in Funktionsaufrufen" #: src/ownership/lifetimes-function-calls.md:3 #, fuzzy -msgid "In addition to borrowing its arguments, a function can return a borrowed value:" +msgid "" +"In addition to borrowing its arguments, a function can return a borrowed " +"value:" msgstr "" -"Zusätzlich zum Ausleihen ihrer Argumente kann eine Funktion einen geliehenen Wert zurückgeben:" +"Zusätzlich zum Ausleihen ihrer Argumente kann eine Funktion einen geliehenen " +"Wert zurückgeben:" #: src/ownership/lifetimes-function-calls.md:5 msgid "" @@ -4937,16 +5414,17 @@ msgid "" msgstr "" "* „a“ ist ein generischer Parameter, er wird vom Compiler abgeleitet.\n" "* Lebensdauern beginnen mit `'` und `'a` ist ein typischer Standardname.\n" -"* Lesen Sie `&'einen Punkt` als \"einen geliehenen `Punkt`, der mindestens für den gilt\n" +"* Lesen Sie `&'einen Punkt` als \"einen geliehenen `Punkt`, der mindestens " +"für den gilt\n" " Lebenszeit `a`\".\n" -" * Der Teil _at least_ ist wichtig, wenn sich Parameter in unterschiedlichen Geltungsbereichen " -"befinden." +" * Der Teil _at least_ ist wichtig, wenn sich Parameter in " +"unterschiedlichen Geltungsbereichen befinden." #: src/ownership/lifetimes-function-calls.md:31 #, fuzzy msgid "" -"* Move the declaration of `p2` and `p3` into a new scope (`{ ... }`), resulting in the following " -"code:\n" +"* Move the declaration of `p2` and `p3` into a new scope (`{ ... }`), " +"resulting in the following code:\n" " ```rust,ignore\n" " #[derive(Debug)]\n" " struct Point(i32, i32);\n" @@ -4967,27 +5445,31 @@ msgid "" " ```\n" " Note how this does not compile since `p3` outlives `p2`.\n" "\n" -"* 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.\n" +"* 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.\n" "* Another way to explain it:\n" -" * Two references to two values are borrowed by a function and the function returns\n" +" * Two references to two values are borrowed by a function and the function " +"returns\n" " another reference.\n" -" * It must have come from one of those two inputs (or from a global variable).\n" -" * Which one is it? The compiler needs to know, so at the call site the returned reference is not " -"used\n" +" * It must have come from one of those two inputs (or from a global " +"variable).\n" +" * Which one is it? The compiler needs to know, so at the call site the " +"returned reference is not used\n" " for longer than a variable from where the reference came from." msgstr "" -"* Setzen Sie den Arbeitsbereich zurück und ändern Sie die Funktionssignatur zu `fn left_most<'a, " -"'b>(p1: &'a Point, p2: &'a Point) -> &'b Point`. Dies wird nicht kompiliert, da die Beziehung " -"zwischen den Lebensdauern „a“ und „b“ unklar ist.\n" +"* Setzen Sie den Arbeitsbereich zurück und ändern Sie die Funktionssignatur " +"zu `fn left_most<'a, 'b>(p1: &'a Point, p2: &'a Point) -> &'b Point`. Dies " +"wird nicht kompiliert, da die Beziehung zwischen den Lebensdauern „a“ und " +"„b“ unklar ist.\n" "* Eine andere Möglichkeit, es zu erklären:\n" -" * Zwei Referenzen auf zwei Werte werden von einer Funktion ausgeliehen und die Funktion kehrt " -"zurück\n" +" * Zwei Referenzen auf zwei Werte werden von einer Funktion ausgeliehen und " +"die Funktion kehrt zurück\n" " eine andere Referenz.\n" -" * Es muss von einem dieser beiden Eingänge stammen (oder von einer globalen Variablen).\n" -" * Welches ist es? Der Compiler muss es wissen, damit die zurückgegebene Referenz auf der " -"Aufrufseite nicht verwendet wird\n" +" * Es muss von einem dieser beiden Eingänge stammen (oder von einer " +"globalen Variablen).\n" +" * Welches ist es? Der Compiler muss es wissen, damit die zurückgegebene " +"Referenz auf der Aufrufseite nicht verwendet wird\n" " länger als eine Variable, von der die Referenz stammt." #: src/ownership/lifetimes-data-structures.md:1 @@ -4997,8 +5479,11 @@ msgstr "# Lebensdauern in Datenstrukturen" #: src/ownership/lifetimes-data-structures.md:3 #, fuzzy -msgid "If a data type stores borrowed data, it must be annotated with a lifetime:" -msgstr "Wenn ein Datentyp geliehene Daten speichert, muss er mit einer Lebensdauer versehen werden:" +msgid "" +"If a data type stores borrowed data, it must be annotated with a lifetime:" +msgstr "" +"Wenn ein Datentyp geliehene Daten speichert, muss er mit einer Lebensdauer " +"versehen werden:" #: src/ownership/lifetimes-data-structures.md:5 msgid "" @@ -5011,7 +5496,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" @@ -5024,29 +5510,33 @@ msgstr "" #: src/ownership/lifetimes-data-structures.md:25 #, fuzzy msgid "" -"* In the above example, the annotation on `Highlight` enforces that the data underlying the " -"contained `&str` lives at least as long as any instance of `Highlight` that uses that data.\n" -"* If `text` is consumed before the end of the lifetime of `fox` (or `dog`), the borrow checker " -"throws an error.\n" -"* 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.\n" +"* In the above example, the annotation on `Highlight` enforces that the data " +"underlying the contained `&str` lives at least as long as any instance of " +"`Highlight` that uses that data.\n" +"* If `text` is consumed before the end of the lifetime of `fox` (or `dog`), " +"the borrow checker throws an error.\n" +"* 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.\n" "* When possible, make data structures own their data directly.\n" -"* 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." +"* 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." msgstr "" -"* Im obigen Beispiel erzwingt die Anmerkung zu `Highlight`, dass die Daten, die dem enthaltenen " -"`&str` zugrunde liegen, mindestens so lange leben wie jede Instanz von `Highlight`, die diese " -"Daten verwendet.\n" -"* Wenn `text` vor dem Ende der Lebensdauer von `fox` (oder `dog`) verbraucht wird, wirft der " -"Borrow-Checker einen Fehler.\n" -"* Typen mit geliehenen Daten zwingen Benutzer, an den Originaldaten festzuhalten. Dies kann " -"nützlich sein, um einfache Ansichten zu erstellen, macht sie jedoch im Allgemeinen etwas " -"schwieriger zu verwenden.\n" +"* Im obigen Beispiel erzwingt die Anmerkung zu `Highlight`, dass die Daten, " +"die dem enthaltenen `&str` zugrunde liegen, mindestens so lange leben wie " +"jede Instanz von `Highlight`, die diese Daten verwendet.\n" +"* Wenn `text` vor dem Ende der Lebensdauer von `fox` (oder `dog`) verbraucht " +"wird, wirft der Borrow-Checker einen Fehler.\n" +"* Typen mit geliehenen Daten zwingen Benutzer, an den Originaldaten " +"festzuhalten. Dies kann nützlich sein, um einfache Ansichten zu erstellen, " +"macht sie jedoch im Allgemeinen etwas schwieriger zu verwenden.\n" "* Wenn möglich, machen Sie Datenstrukturen direkt Eigentümer ihrer Daten.\n" -"* Einige Strukturen mit mehreren darin enthaltenen Referenzen können mehr als eine lebenslange " -"Anmerkung haben. Dies kann erforderlich sein, wenn zusätzlich zur Lebensdauer der Struktur selbst " -"Lebensdauerbeziehungen zwischen den Referenzen selbst beschrieben werden müssen. Das sind sehr " +"* Einige Strukturen mit mehreren darin enthaltenen Referenzen können mehr " +"als eine lebenslange Anmerkung haben. Dies kann erforderlich sein, wenn " +"zusätzlich zur Lebensdauer der Struktur selbst Lebensdauerbeziehungen " +"zwischen den Referenzen selbst beschrieben werden müssen. Das sind sehr " "fortgeschrittene Anwendungsfälle.\n" "" @@ -5076,10 +5566,12 @@ msgstr "# Entwerfen einer Bibliothek" #: src/exercises/day-1/book-library.md:3 #, fuzzy msgid "" -"We will learn much more about structs and the `Vec` type tomorrow. For now,\n" +"We will learn much more about structs and the `Vec` type tomorrow. For " +"now,\n" "you just need to know part of its API:" msgstr "" -"Wir werden morgen viel mehr über Strukturen und den Typ `Vec` lernen. Zur Zeit,\n" +"Wir werden morgen viel mehr über Strukturen und den Typ `Vec` lernen. Zur " +"Zeit,\n" "Sie müssen nur einen Teil seiner API kennen:" #: src/exercises/day-1/book-library.md:6 @@ -5103,9 +5595,10 @@ msgid "" "Use this to create a library application. Copy the code below to\n" " and update the types to make it compile:" msgstr "" -"Verwenden Sie dies, um eine Bibliotheksanwendung zu erstellen. Kopieren Sie den folgenden Code " -"nach\n" -" und aktualisieren Sie die Typen, damit es kompiliert wird:" +"Verwenden Sie dies, um eine Bibliotheksanwendung zu erstellen. Kopieren Sie " +"den folgenden Code nach\n" +" und aktualisieren Sie die Typen, damit es " +"kompiliert wird:" #: src/exercises/day-1/book-library.md:21 msgid "" @@ -5153,7 +5646,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" @@ -5171,7 +5665,8 @@ msgid "" " //println!(\"The library is empty: {}\", 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" " //\n" " //println!(\"The library is no longer empty: {}\", library.is_empty());\n" " //\n" @@ -5204,12 +5699,15 @@ msgstr "# Iteratoren und Eigentum" msgid "" "The ownership model of Rust affects many APIs. An example of this is the\n" "[`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) and\n" -"[`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator.html)\n" +"[`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator." +"html)\n" "traits." msgstr "" -"Das Eigentumsmodell von Rust betrifft viele APIs. Ein Beispiel hierfür ist die\n" +"Das Eigentumsmodell von Rust betrifft viele APIs. Ein Beispiel hierfür ist " +"die\n" "[`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) und\n" -"[`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator.html)\n" +"[`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator." +"html)\n" "Züge." #: src/exercises/day-1/iterators-and-ownership.md:8 @@ -5220,12 +5718,15 @@ msgstr "## `Iterator`" #: src/exercises/day-1/iterators-and-ownership.md:10 #, fuzzy msgid "" -"Traits are like interfaces: they describe behavior (methods) for a type. The\n" -"`Iterator` trait simply says that you can call `next` until you get `None` back:" +"Traits are like interfaces: they describe behavior (methods) for a type. " +"The\n" +"`Iterator` trait simply says that you can call `next` until you get `None` " +"back:" msgstr "" -"Merkmale sind wie Schnittstellen: Sie beschreiben das Verhalten (Methoden) für einen Typ. Der\n" -"Das `Iterator`-Merkmal sagt einfach, dass Sie `next` aufrufen können, bis Sie `None` " -"zurückbekommen:" +"Merkmale sind wie Schnittstellen: Sie beschreiben das Verhalten (Methoden) " +"für einen Typ. Der\n" +"Das `Iterator`-Merkmal sagt einfach, dass Sie `next` aufrufen können, bis " +"Sie `None` zurückbekommen:" #: src/exercises/day-1/iterators-and-ownership.md:13 msgid "" @@ -5289,10 +5790,13 @@ msgstr "## `IntoIterator`" #, fuzzy msgid "" "The `Iterator` trait tells you how to _iterate_ once you have created an\n" -"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 "" -"Die Eigenschaft „Iterator“ sagt Ihnen, wie Sie _iteraten_, sobald Sie eine erstellt haben\n" -"Iterator. Die zugehörige Eigenschaft `IntoIterator` sagt Ihnen, wie Sie den Iterator erstellen:" +"Die Eigenschaft „Iterator“ sagt Ihnen, wie Sie _iteraten_, sobald Sie eine " +"erstellt haben\n" +"Iterator. Die zugehörige Eigenschaft `IntoIterator` sagt Ihnen, wie Sie den " +"Iterator erstellen:" #: src/exercises/day-1/iterators-and-ownership.md:53 msgid "" @@ -5322,7 +5826,8 @@ msgid "" "* `IntoIter`: the `Iterator` type returned by the `into_iter` method." msgstr "" "* `Item`: der Typ, über den wir iterieren, wie z. B. `i8`,\n" -"* `IntoIter`: der `Iterator`-Typ, der von der `into_iter`-Methode zurückgegeben wird." +"* `IntoIter`: der `Iterator`-Typ, der von der `into_iter`-Methode " +"zurückgegeben wird." #: src/exercises/day-1/iterators-and-ownership.md:68 #, fuzzy @@ -5330,7 +5835,8 @@ msgid "" "Note that `IntoIter` and `Item` are linked: the iterator must have the same\n" "`Item` type, which means that it returns `Option`" msgstr "" -"Beachten Sie, dass „IntoIter“ und „Item“ verknüpft sind: Der Iterator muss dasselbe haben\n" +"Beachten Sie, dass „IntoIter“ und „Item“ verknüpft sind: Der Iterator muss " +"dasselbe haben\n" "`Item`-Typ, was bedeutet, dass es `Option` zurückgibt" #: src/exercises/day-1/iterators-and-ownership.md:71 @@ -5342,7 +5848,8 @@ msgstr "Welchen Typ gibt der Iterator wie zuvor zurück?" 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" @@ -5359,19 +5866,23 @@ msgstr "## `for`-Schleifen" #: src/exercises/day-1/iterators-and-ownership.md:85 #, fuzzy msgid "" -"Now that we know both `Iterator` and `IntoIterator`, we can build `for` loops.\n" +"Now that we know both `Iterator` and `IntoIterator`, we can build `for` " +"loops.\n" "They call `into_iter()` on an expression and iterates over the resulting\n" "iterator:" msgstr "" -"Jetzt, da wir sowohl „Iterator“ als auch „IntoIterator“ kennen, können wir „for“-Schleifen bauen.\n" -"Sie rufen `into_iter()` für einen Ausdruck auf und iterieren über das Ergebnis\n" +"Jetzt, da wir sowohl „Iterator“ als auch „IntoIterator“ kennen, können wir " +"„for“-Schleifen bauen.\n" +"Sie rufen `into_iter()` für einen Ausdruck auf und iterieren über das " +"Ergebnis\n" "Iterator:" #: 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" @@ -5392,22 +5903,24 @@ msgstr "Was ist die Art von „Wort“ in jeder Schleife?" #: src/exercises/day-1/iterators-and-ownership.md:105 #, fuzzy msgid "" -"Experiment with the code above and then consult the documentation for [`impl\n" +"Experiment with the code above and then consult the documentation for " +"[`impl\n" "IntoIterator for\n" -"&Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-for-" -"%26%27a%20Vec%3CT%2C%20A%3E)\n" +"&Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-" +"IntoIterator-for-%26%27a%20Vec%3CT%2C%20A%3E)\n" "and [`impl IntoIterator for\n" -"Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-for-" -"Vec%3CT%2C%20A%3E)\n" +"Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-" +"for-Vec%3CT%2C%20A%3E)\n" "to check your answers." msgstr "" -"Experimentieren Sie mit dem obigen Code und konsultieren Sie dann die Dokumentation für [`impl\n" +"Experimentieren Sie mit dem obigen Code und konsultieren Sie dann die " +"Dokumentation für [`impl\n" "IntoIterator für\n" -"&Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-for-" -"%26%27a%20Vec%3CT%2C%20A%3E)\n" +"&Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-" +"IntoIterator-for-%26%27a%20Vec%3CT%2C%20A%3E)\n" "und [`impl IntoIterator for\n" -"Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-for-" -"Vec%3CT%2C%20A%3E)\n" +"Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-" +"for-Vec%3CT%2C%20A%3E)\n" "um Ihre Antworten zu überprüfen." #: src/welcome-day-2.md:1 @@ -5418,7 +5931,8 @@ msgstr "# Willkommen zu Tag 2" #: src/welcome-day-2.md:3 #, fuzzy msgid "Now that we have seen a fair amount of Rust, we will continue with:" -msgstr "Nachdem wir nun eine ganze Menge Rust gesehen haben, fahren wir fort mit:" +msgstr "" +"Nachdem wir nun eine ganze Menge Rust gesehen haben, fahren wir fort mit:" #: src/welcome-day-2.md:5 msgid "" @@ -5426,10 +5940,12 @@ msgid "" "\n" "* Pattern matching: destructuring enums, structs, and arrays.\n" "\n" -"* Control flow constructs: `if`, `if let`, `while`, `while let`, `break`, and\n" +"* Control flow constructs: `if`, `if let`, `while`, `while let`, `break`, " +"and\n" " `continue`.\n" "\n" -"* The Standard Library: `String`, `Option` and `Result`, `Vec`, `HashMap`, `Rc`\n" +"* The Standard Library: `String`, `Option` and `Result`, `Vec`, `HashMap`, " +"`Rc`\n" " and `Arc`.\n" "\n" "* Modules: visibility, paths, and filesystem hierarchy." @@ -5473,8 +5989,8 @@ msgid "" msgstr "" #: src/structs.md:31 src/enums.md:34 src/enums/sizes.md:29 src/methods.md:30 -#: src/methods/example.md:46 src/pattern-matching.md:25 src/pattern-matching/match-guards.md:22 -#: src/control-flow/blocks.md:42 +#: src/methods/example.md:46 src/pattern-matching.md:25 +#: src/pattern-matching/match-guards.md:22 src/control-flow/blocks.md:42 #, fuzzy msgid "Key Points:" msgstr "Wichtige Punkte:" @@ -5484,13 +6000,18 @@ msgid "" "* Structs work like in C or C++.\n" " * Like in C++, and unlike in C, no typedef is needed to define a type.\n" " * Unlike in C++, there is no inheritance between structs.\n" -"* Methods are defined in an `impl` block, which we will see in following slides.\n" -"* This may be a good time to let people know there are different types of structs. \n" -" * 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. \n" -" * The next slide will introduce Tuple structs, used when the field names are not important.\n" -"* 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." +"* Methods are defined in an `impl` block, which we will see in following " +"slides.\n" +"* This may be a good time to let people know there are different types of " +"structs. \n" +" * 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. \n" +" * The next slide will introduce Tuple structs, used when the field names " +"are not important.\n" +"* 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:1 @@ -5501,7 +6022,8 @@ msgstr "# Tupelstrukturen" #: src/structs/tuple-structs.md:3 #, fuzzy msgid "If the field names are unimportant, you can use a tuple struct:" -msgstr "Wenn die Feldnamen unwichtig sind, können Sie eine Tupelstruktur verwenden:" +msgstr "" +"Wenn die Feldnamen unwichtig sind, können Sie eine Tupelstruktur verwenden:" #: src/structs/tuple-structs.md:5 msgid "" @@ -5544,15 +6066,16 @@ 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:\n" +"* Newtypes are a great way to encode additional information about the value " +"in a primitive type, for example:\n" " * The number is measured in some units: `Newtons` in the example above.\n" -" * 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)`.\n" -"* Demonstrate how to add a `f64` value to a `Newtons` type by accessing the single field in the " -"newtype.\n" -" * Rust generally doesn’t like inexplicit things, like automatic unwrapping or for instance " -"using booleans as integers.\n" +" * 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)`.\n" +"* Demonstrate how to add a `f64` value to a `Newtons` type by accessing the " +"single field in the newtype.\n" +" * Rust generally doesn’t like inexplicit things, like automatic " +"unwrapping or for instance using booleans as integers.\n" " * Operator overloading is discussed on Day 3 (generics). " msgstr "" @@ -5567,7 +6090,8 @@ msgid "" "If you already have variables with the right names, then you can create the\n" "struct using a shorthand:" msgstr "" -"Wenn Sie bereits Variablen mit den richtigen Namen haben, können Sie die erstellen\n" +"Wenn Sie bereits Variablen mit den richtigen Namen haben, können Sie die " +"erstellen\n" "struct mit einer Abkürzung:" #: src/structs/field-shorthand.md:6 @@ -5594,8 +6118,8 @@ msgstr "" #: src/structs/field-shorthand.md:27 msgid "" -"* The `new` function could be written using `Self` as a type, as it is interchangeable with the " -"struct type name\n" +"* The `new` function could be written using `Self` as a type, as it is " +"interchangeable with the struct type name\n" "\n" " ```rust,editable\n" " #[derive(Debug)]\n" @@ -5609,8 +6133,8 @@ msgid "" " }\n" " }\n" " ``` \n" -"* Implement the `Default` trait for the struct. Define some fields and use the default values for " -"the other fields.\n" +"* Implement the `Default` trait for the struct. Define some fields and use " +"the default values for the other fields.\n" "\n" " ```rust,editable\n" " #[derive(Debug)]\n" @@ -5638,8 +6162,8 @@ msgid "" " ```\n" "\n" "* Methods are defined in the `impl` block.\n" -"* Use struct update syntax to define a new structure using `peter`. Note that the variable `peter` " -"will no longer be accessible afterwards.\n" +"* Use struct update syntax to define a new structure using `peter`. Note " +"that the variable `peter` will no longer be accessible afterwards.\n" "* Use `{:#?}` when printing structs to request the `Debug` representation." msgstr "" @@ -5654,7 +6178,8 @@ msgid "" "The `enum` keyword allows the creation of a type which has a few\n" "different variants:" msgstr "" -"Das Schlüsselwort „enum“ ermöglicht die Erstellung eines Typs, der mehrere hat\n" +"Das Schlüsselwort „enum“ ermöglicht die Erstellung eines Typs, der mehrere " +"hat\n" "verschiedene Varianten:" #: src/enums.md:6 @@ -5690,25 +6215,30 @@ msgstr "" #, fuzzy msgid "" "* Enumerations allow you to collect a set of values under one type\n" -"* This page offers an enum type `CoinFlip` with two variants `Heads` and `Tail`. You might note " -"the namespace when using variants.\n" +"* This page offers an enum type `CoinFlip` with two variants `Heads` and " +"`Tail`. You might note the namespace when using variants.\n" "* This might be a good time to compare Structs and Enums:\n" -" * In both, you can have a simple version without fields (unit struct) or one with different " -"types of fields (variant payloads). \n" +" * In both, you can have a simple version without fields (unit struct) or " +"one with different types of fields (variant payloads). \n" " * In both, associated functions are defined within an `impl` block.\n" -" * You could even implement the different variants of an enum with separate structs but then they " -"wouldn’t be the same type as they would if they were all defined in an enum. " +" * You could even implement the different variants of an enum with separate " +"structs but then they wouldn’t be the same type as they would if they were " +"all defined in an enum. " msgstr "" -"* Aufzählungen ermöglichen es Ihnen, eine Reihe von Werten unter einem Typ zu sammeln\n" -"* Diese Seite bietet einen Aufzählungstyp `CoinFlip` mit zwei Varianten `Heads` und `Tail`. " -"Beachten Sie bei der Verwendung von Varianten möglicherweise den Namensraum.\n" -"* Dies könnte ein guter Zeitpunkt sein, um Structs und Enums zu vergleichen:\n" -" * In beiden Fällen können Sie eine einfache Version ohne Felder (unit struct) oder eine mit " -"unterschiedlichen Feldtypen (variant payloads) haben.\n" -" * In beiden werden zugehörige Funktionen innerhalb eines `impl`-Blocks definiert.\n" -" * Sie könnten sogar die verschiedenen Varianten einer Aufzählung mit separaten Structs " -"implementieren, aber dann wären sie nicht vom gleichen Typ, wie wenn sie alle in einer Aufzählung " -"definiert wären.\n" +"* Aufzählungen ermöglichen es Ihnen, eine Reihe von Werten unter einem Typ " +"zu sammeln\n" +"* Diese Seite bietet einen Aufzählungstyp `CoinFlip` mit zwei Varianten " +"`Heads` und `Tail`. Beachten Sie bei der Verwendung von Varianten " +"möglicherweise den Namensraum.\n" +"* Dies könnte ein guter Zeitpunkt sein, um Structs und Enums zu " +"vergleichen:\n" +" * In beiden Fällen können Sie eine einfache Version ohne Felder (unit " +"struct) oder eine mit unterschiedlichen Feldtypen (variant payloads) haben.\n" +" * In beiden werden zugehörige Funktionen innerhalb eines `impl`-Blocks " +"definiert.\n" +" * Sie könnten sogar die verschiedenen Varianten einer Aufzählung mit " +"separaten Structs implementieren, aber dann wären sie nicht vom gleichen " +"Typ, wie wenn sie alle in einer Aufzählung definiert wären.\n" "" #: src/enums/variant-payloads.md:1 @@ -5719,11 +6249,12 @@ msgstr "# Variantennutzlasten" #: src/enums/variant-payloads.md:3 #, fuzzy msgid "" -"You can define richer enums where the variants carry data. You can then use the\n" +"You can define richer enums where the variants carry data. You can then use " +"the\n" "`match` statement to extract the data from each variant:" msgstr "" -"Sie können reichhaltigere Aufzählungen definieren, bei denen die Varianten Daten enthalten. Sie " -"können dann die verwenden\n" +"Sie können reichhaltigere Aufzählungen definieren, bei denen die Varianten " +"Daten enthalten. Sie können dann die verwenden\n" "`match`-Anweisung, um die Daten aus jeder Variante zu extrahieren:" #: src/enums/variant-payloads.md:6 @@ -5758,22 +6289,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 `=>`.\n" -" * The expression is matched against the patterns from top to bottom. There is no fall-through " -"like in C or C++.\n" -" * The match expression has a value. The value is the last expression in the match arm which was " -"executed.\n" -" * 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. \n" -"* Demonstrate what happens when the search is inexhaustive. Note the advantage the Rust compiler " -"provides by confirming when all cases are handled. \n" +"* 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 `=>`.\n" +" * The expression is matched against the patterns from top to bottom. There " +"is no fall-through like in C or C++.\n" +" * The match expression has a value. The value is the last expression in " +"the match arm which was executed.\n" +" * 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. \n" +"* Demonstrate what happens when the search is inexhaustive. Note the " +"advantage the Rust compiler provides by confirming when all cases are " +"handled. \n" "* `match` inspects a hidden discriminant field in the `enum`.\n" -"* It is possible to retrieve the discriminant by calling `std::mem::discriminant()`\n" -" * This is useful, for example, if implementing `PartialEq` for structs where comparing field " -"values doesn't affect equality.\n" -"* `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. \n" +"* It is possible to retrieve the discriminant by calling `std::mem::" +"discriminant()`\n" +" * This is useful, for example, if implementing `PartialEq` for structs " +"where comparing field values doesn't affect equality.\n" +"* `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. \n" " " msgstr "" @@ -5784,10 +6319,12 @@ msgstr "# Aufzählungsgrößen" #: src/enums/sizes.md:3 #, fuzzy -msgid "Rust enums are packed tightly, taking constraints due to alignment into account:" +msgid "" +"Rust enums are packed tightly, taking constraints due to alignment into " +"account:" msgstr "" -"Rust-Aufzählungen sind dicht gepackt, wobei Einschränkungen aufgrund der Ausrichtung " -"berücksichtigt werden:" +"Rust-Aufzählungen sind dicht gepackt, wobei Einschränkungen aufgrund der " +"Ausrichtung berücksichtigt werden:" #: src/enums/sizes.md:5 msgid "" @@ -5814,14 +6351,20 @@ msgstr "" #: src/enums/sizes.md:25 #, fuzzy -msgid "* See the [Rust Reference](https://doc.rust-lang.org/reference/type-layout.html)." -msgstr "* Siehe die [Rust-Referenz] (https://doc.rust-lang.org/reference/type-layout.html)." +msgid "" +"* See the [Rust Reference](https://doc.rust-lang.org/reference/type-layout." +"html)." +msgstr "" +"* Siehe die [Rust-Referenz] (https://doc.rust-lang.org/reference/type-layout." +"html)." #: src/enums/sizes.md:31 msgid "" -" * Internally Rust is using a field (discriminant) to keep track of the enum variant.\n" +" * Internally Rust is using a field (discriminant) to keep track of the enum " +"variant.\n" "\n" -" * You can control the discriminant if needed (e.g., for compatibility with C):\n" +" * You can control the discriminant if needed (e.g., for compatibility with " +"C):\n" " \n" " ```rust,editable\n" " #[repr(u32)]\n" @@ -5838,35 +6381,41 @@ msgid "" " }\n" " ```\n" "\n" -" Without `repr`, the discriminant type takes 2 bytes, because 10001 fits 2\n" +" Without `repr`, the discriminant type takes 2 bytes, because 10001 fits " +"2\n" " bytes.\n" "\n" "\n" " * Try out other types such as\n" " \n" " * `dbg_size!(bool)`: size 1 bytes, align: 1 bytes,\n" -" * `dbg_size!(Option)`: size 1 bytes, align: 1 bytes (niche optimization, see below),\n" -" * `dbg_size!(&i32)`: size 8 bytes, align: 8 bytes (on a 64-bit machine),\n" -" * `dbg_size!(Option<&i32>)`: size 8 bytes, align: 8 bytes (null pointer optimization, see " -"below).\n" +" * `dbg_size!(Option)`: size 1 bytes, align: 1 bytes (niche " +"optimization, see below),\n" +" * `dbg_size!(&i32)`: size 8 bytes, align: 8 bytes (on a 64-bit " +"machine),\n" +" * `dbg_size!(Option<&i32>)`: size 8 bytes, align: 8 bytes (null pointer " +"optimization, see below).\n" "\n" " * Niche optimization: Rust will merge use unused bit patterns for the enum\n" " discriminant.\n" "\n" " * Null pointer optimization: For [some\n" -" types](https://doc.rust-lang.org/std/option/#representation), Rust guarantees\n" +" types](https://doc.rust-lang.org/std/option/#representation), Rust " +"guarantees\n" " that `size_of::()` equals `size_of::>()`.\n" "\n" -" Example code if you want to show how the bitwise representation *may* look like in practice.\n" -" It's important to note that the compiler provides no guarantees regarding this " -"representation, therefore this is totally unsafe.\n" +" Example code if you want to show how the bitwise representation *may* " +"look like in practice.\n" +" It's important to note that the compiler provides no guarantees " +"regarding this representation, therefore this is totally unsafe.\n" "\n" " ```rust,editable\n" " use std::mem::transmute;\n" "\n" " macro_rules! dbg_bits {\n" " ($e:expr, $bit_type:ty) => {\n" -" println!(\"- {}: {:#x}\", stringify!($e), transmute::<_, $bit_type>($e));\n" +" println!(\"- {}: {:#x}\", stringify!($e), transmute::<_, " +"$bit_type>($e));\n" " };\n" " }\n" "\n" @@ -5896,8 +6445,8 @@ msgid "" " }\n" " ```\n" "\n" -" More complex example if you want to discuss what happens when we chain more than 256 " -"`Option`s together.\n" +" More complex example if you want to discuss what happens when we chain " +"more than 256 `Option`s together.\n" "\n" " ```rust,editable\n" " #![recursion_limit = \"1000\"]\n" @@ -5906,11 +6455,13 @@ msgid "" " \n" " macro_rules! dbg_bits {\n" " ($e:expr, $bit_type:ty) => {\n" -" println!(\"- {}: {:#x}\", stringify!($e), transmute::<_, $bit_type>($e));\n" +" println!(\"- {}: {:#x}\", stringify!($e), transmute::<_, " +"$bit_type>($e));\n" " };\n" " }\n" "\n" -" // Macro to wrap a value in 2^n Some() where n is the number of \"@\" signs.\n" +" // Macro to wrap a value in 2^n Some() where n is the number of \"@\" " +"signs.\n" " // Increasing the recursion limit is required to evaluate this macro.\n" " macro_rules! many_options {\n" " ($value:expr) => { Some($value) };\n" @@ -5928,17 +6479,21 @@ 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" +" println!(\"Bitwise representation of a chain of 128 Option's." +"\");\n" " dbg_bits!(many_options!(false, @@@@@@@), u8);\n" " dbg_bits!(many_options!(true, @@@@@@@), u8);\n" "\n" -" println!(\"Bitwise representation of a chain of 256 Option's.\");\n" +" println!(\"Bitwise representation of a chain of 256 Option's." +"\");\n" " dbg_bits!(many_options!(false, @@@@@@@@), u16);\n" " dbg_bits!(many_options!(true, @@@@@@@@), u16);\n" "\n" -" println!(\"Bitwise representation of a chain of 257 Option's.\");\n" +" println!(\"Bitwise representation of a chain of 257 Option's." +"\");\n" " dbg_bits!(many_options!(Some(false), @@@@@@@@), u16);\n" " dbg_bits!(many_options!(Some(true), @@@@@@@@), u16);\n" " dbg_bits!(many_options!(None::, @@@@@@@@), u16);\n" @@ -5950,10 +6505,12 @@ msgstr "" #: src/methods.md:3 #, fuzzy msgid "" -"Rust allows you to associate functions with your new types. You do this with an\n" +"Rust allows you to associate functions with your new types. You do this with " +"an\n" "`impl` block:" msgstr "" -"Mit Rust können Sie Ihren neuen Typen Funktionen zuordnen. Das machst du mit einem\n" +"Mit Rust können Sie Ihren neuen Typen Funktionen zuordnen. Das machst du mit " +"einem\n" "`impl`-Block:" #: src/methods.md:6 @@ -5985,39 +6542,46 @@ msgstr "" #, fuzzy msgid "" "* It can be helpful to introduce methods by comparing them to functions.\n" -" * Methods are called on an instance of a type (such as a struct or enum), the first parameter " -"represents the instance as `self`.\n" -" * 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.\n" +" * Methods are called on an instance of a type (such as a struct or enum), " +"the first parameter represents the instance as `self`.\n" +" * 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.\n" "* Point out the use of the keyword `self`, a method receiver. \n" -" * Show that it is an abbreviated term for `self:&Self` and perhaps show how the struct name " -"could also be used. \n" -" * Explain that `Self` is a type alias for the type the `impl` block is in and can be used " -"elsewhere in the block.\n" -" * Note how `self` is used like other structs and dot notation can be used to refer to individual " -"fields.\n" -" * 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. \n" +" * Show that it is an abbreviated term for `self:&Self` and perhaps show " +"how the struct name could also be used. \n" +" * Explain that `Self` is a type alias for the type the `impl` block is in " +"and can be used elsewhere in the block.\n" +" * Note how `self` is used like other structs and dot notation can be used " +"to refer to individual fields.\n" +" * 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. \n" "* We describe the distinction between method receivers next.\n" " " msgstr "" -"* Es kann hilfreich sein, Methoden einzuführen, indem man sie mit Funktionen vergleicht.\n" -" * Methoden werden für eine Instanz eines Typs aufgerufen (z. B. eine Struktur oder Aufzählung), " -"der erste Parameter repräsentiert die Instanz als „self“.\n" +"* Es kann hilfreich sein, Methoden einzuführen, indem man sie mit Funktionen " +"vergleicht.\n" +" * Methoden werden für eine Instanz eines Typs aufgerufen (z. B. eine " +"Struktur oder Aufzählung), der erste Parameter repräsentiert die Instanz als " +"„self“.\n" " * Entwickler können sich dafür entscheiden, Methoden zu verwenden, um die " -"Methodenempfängersyntax zu nutzen und sie besser organisiert zu halten. Durch die Verwendung von " -"Methoden können wir den gesamten Implementierungscode an einem vorhersehbaren Ort aufbewahren.\n" -"* Weisen Sie auf die Verwendung des Schlüsselworts „self“ hin, einem Methodenempfänger.\n" -" * Zeigen Sie, dass es sich um eine Abkürzung für `self:&Self` handelt und zeigen Sie vielleicht, " -"wie der Strukturname auch verwendet werden könnte.\n" -" * Erklären Sie, dass Self ein Typ-Alias für den Typ ist, in dem sich der „impl“-Block befindet, " -"und an anderer Stelle im Block verwendet werden kann.\n" -" * Beachten Sie, dass self wie andere Strukturen verwendet wird und die Punktnotation verwendet " -"werden kann, um auf einzelne Felder zu verweisen.\n" -" * Dies könnte ein guter Zeitpunkt sein, um zu demonstrieren, wie sich `&self` von `self` " -"unterscheidet, indem Sie den Code ändern und versuchen, say_hello zweimal auszuführen.\n" -"* Als nächstes beschreiben wir die Unterscheidung zwischen Methodenempfängern.\n" +"Methodenempfängersyntax zu nutzen und sie besser organisiert zu halten. " +"Durch die Verwendung von Methoden können wir den gesamten " +"Implementierungscode an einem vorhersehbaren Ort aufbewahren.\n" +"* Weisen Sie auf die Verwendung des Schlüsselworts „self“ hin, einem " +"Methodenempfänger.\n" +" * Zeigen Sie, dass es sich um eine Abkürzung für `self:&Self` handelt und " +"zeigen Sie vielleicht, wie der Strukturname auch verwendet werden könnte.\n" +" * Erklären Sie, dass Self ein Typ-Alias für den Typ ist, in dem sich der " +"„impl“-Block befindet, und an anderer Stelle im Block verwendet werden " +"kann.\n" +" * Beachten Sie, dass self wie andere Strukturen verwendet wird und die " +"Punktnotation verwendet werden kann, um auf einzelne Felder zu verweisen.\n" +" * Dies könnte ein guter Zeitpunkt sein, um zu demonstrieren, wie sich " +"`&self` von `self` unterscheidet, indem Sie den Code ändern und versuchen, " +"say_hello zweimal auszuführen.\n" +"* Als nächstes beschreiben wir die Unterscheidung zwischen " +"Methodenempfängern.\n" " \n" "" @@ -6029,10 +6593,12 @@ msgstr "# Methodenempfänger" #: src/methods/receiver.md:3 #, fuzzy msgid "" -"The `&self` above indicates that the method borrows the object immutably. There\n" +"The `&self` above indicates that the method borrows the object immutably. " +"There\n" "are other possible receivers for a method:" msgstr "" -"Das obige `&self` gibt an, dass die Methode das Objekt unveränderlich ausleiht. Dort\n" +"Das obige `&self` gibt an, dass die Methode das Objekt unveränderlich " +"ausleiht. Dort\n" "sind weitere mögliche Empfänger für eine Methode:" #: src/methods/receiver.md:6 @@ -6040,54 +6606,69 @@ msgstr "" msgid "" "* `&self`: borrows the object from the caller using a shared and immutable\n" " reference. The object can be used again afterwards.\n" -"* `&mut self`: borrows the object from the caller using a unique and mutable\n" +"* `&mut self`: borrows the object from the caller using a unique and " +"mutable\n" " reference. The object can be used again afterwards.\n" -"* `self`: takes ownership of the object and moves it away from the caller. The\n" -" method becomes the owner of the object. The object will be dropped (deallocated)\n" +"* `self`: takes ownership of the object and moves it away from the caller. " +"The\n" +" method becomes the owner of the object. The object will be dropped " +"(deallocated)\n" " when the method returns, unless its ownership is explicitly\n" " transmitted. Complete ownership does not automatically mean mutability.\n" "* `mut self`: same as above, but the method can mutate the object. \n" -"* No receiver: this becomes a static method on the struct. Typically used to\n" +"* No receiver: this becomes a static method on the struct. Typically used " +"to\n" " create constructors which are called `new` by convention." msgstr "" -"* `&self`: leiht sich das Objekt vom Aufrufer unter Verwendung eines Shared und Immutable\n" +"* `&self`: leiht sich das Objekt vom Aufrufer unter Verwendung eines Shared " +"und Immutable\n" " Referenz. Das Objekt kann danach wieder verwendet werden.\n" -"* `&mut self`: leiht sich das Objekt vom Aufrufer unter Verwendung eines Unique und Mutable\n" +"* `&mut self`: leiht sich das Objekt vom Aufrufer unter Verwendung eines " +"Unique und Mutable\n" " Referenz. Das Objekt kann danach wieder verwendet werden.\n" -"* `self`: übernimmt den Besitz des Objekts und verschiebt es vom Aufrufer weg. Der\n" -" Die Methode wird Eigentümer des Objekts. Das Objekt wird gelöscht (deallocated)\n" +"* `self`: übernimmt den Besitz des Objekts und verschiebt es vom Aufrufer " +"weg. Der\n" +" Die Methode wird Eigentümer des Objekts. Das Objekt wird gelöscht " +"(deallocated)\n" " wenn die Methode zurückkehrt, es sei denn, ihr Besitz ist explizit\n" " übermittelt.\n" -"* `mut self`: wie oben, aber während die Methode das Objekt besitzt, kann sie es\n" -" mutiere es auch. Vollständiges Eigentum bedeutet nicht automatisch Wandelbarkeit.\n" -"* Kein Empfänger: Dies wird zu einer statischen Methode für die Struktur. Typischerweise gewohnt\n" +"* `mut self`: wie oben, aber während die Methode das Objekt besitzt, kann " +"sie es\n" +" mutiere es auch. Vollständiges Eigentum bedeutet nicht automatisch " +"Wandelbarkeit.\n" +"* Kein Empfänger: Dies wird zu einer statischen Methode für die Struktur. " +"Typischerweise gewohnt\n" " Erstellen Sie Konstruktoren, die per Konvention \"neu\" genannt werden." #: src/methods/receiver.md:18 #, fuzzy msgid "" "Beyond variants on `self`, there are also\n" -"[special wrapper types](https://doc.rust-lang.org/reference/special-types-and-traits.html)\n" +"[special wrapper types](https://doc.rust-lang.org/reference/special-types-" +"and-traits.html)\n" "allowed to be receiver types, such as `Box`." msgstr "" "Neben Varianten von „self“ gibt es auch\n" -"[spezielle Wrapper-Typen](https://doc.rust-lang.org/reference/special-types-and-traits.html)\n" +"[spezielle Wrapper-Typen](https://doc.rust-lang.org/reference/special-types-" +"and-traits.html)\n" "dürfen Empfängertypen sein, wie z. B. `Box`." #: src/methods/receiver.md:24 #, fuzzy msgid "" -"Consider emphasizing \"shared and immutable\" and \"unique and mutable\". These constraints always " -"come\n" -"together in Rust due to borrow checker rules, and `self` is no exception. It isn't possible to\n" -"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\n" +"together in Rust due to borrow checker rules, and `self` is no exception. It " +"isn't possible to\n" +"reference a struct from multiple locations and call a mutating (`&mut self`) " +"method on it." msgstr "" -"Erwägen Sie, die Betonung auf „gemeinsam und unveränderlich“ und „einzigartig und veränderlich“ zu " -"legen. Diese Einschränkungen kommen immer\n" -"zusammen in Rust aufgrund der Borrow-Checker-Regeln, und `self` ist keine Ausnahme. Es wird nicht " -"möglich sein\n" -"Verweisen Sie auf eine Struktur von mehreren Stellen und rufen Sie eine Mutationsmethode (`&mut " -"self`) darauf auf.\n" +"Erwägen Sie, die Betonung auf „gemeinsam und unveränderlich“ und " +"„einzigartig und veränderlich“ zu legen. Diese Einschränkungen kommen immer\n" +"zusammen in Rust aufgrund der Borrow-Checker-Regeln, und `self` ist keine " +"Ausnahme. Es wird nicht möglich sein\n" +"Verweisen Sie auf eine Struktur von mehreren Stellen und rufen Sie eine " +"Mutationsmethode (`&mut self`) darauf auf.\n" " \n" "" @@ -6110,7 +6691,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" @@ -6123,7 +6705,8 @@ msgid "" "\n" " fn finish(self) { // Exclusive ownership of self\n" " let total = self.laps.iter().sum::();\n" -" println!(\"Race {} is finished, total lap time: {}\", self.name, total);\n" +" println!(\"Race {} is finished, total lap time: {}\", self.name, " +"total);\n" " }\n" "}\n" "\n" @@ -6144,26 +6727,30 @@ msgstr "" #, fuzzy msgid "" "* All four methods here use a different method receiver.\n" -" * 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`.\n" -" * You can showcase the error that appears when trying to call `finish` twice.\n" -"* 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.\n" -"* 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 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`.\n" +" * You can showcase the error that appears when trying to call `finish` " +"twice.\n" +"* 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.\n" +"* 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 "" "* Alle vier Methoden hier verwenden einen anderen Methodenempfänger.\n" -" * Sie können darauf hinweisen, wie sich das ändert, was die Funktion mit den Variablenwerten " -"machen kann und ob/wie sie wieder in `main` verwendet werden kann.\n" -" * Sie können den Fehler zeigen, der auftritt, wenn Sie versuchen, zweimal „finish“ aufzurufen.\n" -"* Beachten Sie, dass, obwohl die Methodenempfänger unterschiedlich sind, die nicht statischen " -"Funktionen im Hauptteil auf die gleiche Weise aufgerufen werden. Rust ermöglicht die automatische " -"Referenzierung und Dereferenzierung beim Methodenaufruf. Rust fügt automatisch die `&`, `*`, " -"`muts` hinzu, sodass dieses Objekt mit der Methodensignatur übereinstimmt.\n" -"* Sie könnten darauf hinweisen, dass `print_laps` einen Vektor verwendet, der iteriert wird. Am " -"Nachmittag beschreiben wir Vektoren genauer." +" * Sie können darauf hinweisen, wie sich das ändert, was die Funktion mit " +"den Variablenwerten machen kann und ob/wie sie wieder in `main` verwendet " +"werden kann.\n" +" * Sie können den Fehler zeigen, der auftritt, wenn Sie versuchen, zweimal " +"„finish“ aufzurufen.\n" +"* Beachten Sie, dass, obwohl die Methodenempfänger unterschiedlich sind, die " +"nicht statischen Funktionen im Hauptteil auf die gleiche Weise aufgerufen " +"werden. Rust ermöglicht die automatische Referenzierung und Dereferenzierung " +"beim Methodenaufruf. Rust fügt automatisch die `&`, `*`, `muts` hinzu, " +"sodass dieses Objekt mit der Methodensignatur übereinstimmt.\n" +"* Sie könnten darauf hinweisen, dass `print_laps` einen Vektor verwendet, " +"der iteriert wird. Am Nachmittag beschreiben wir Vektoren genauer." #: src/pattern-matching.md:1 #, fuzzy @@ -6173,17 +6760,20 @@ msgstr "# Musterabgleich" #: src/pattern-matching.md:3 #, fuzzy msgid "" -"The `match` keyword let you match a value against one or more _patterns_. The\n" +"The `match` keyword let you match a value against one or more _patterns_. " +"The\n" "comparisons are done from top to bottom and the first match wins." msgstr "" -"Mit dem Schlüsselwort „match“ können Sie einen Wert mit einem oder mehreren _Mustern_ abgleichen. " -"Der\n" -"Vergleiche werden von oben nach unten durchgeführt und das erste Match gewinnt." +"Mit dem Schlüsselwort „match“ können Sie einen Wert mit einem oder mehreren " +"_Mustern_ abgleichen. Der\n" +"Vergleiche werden von oben nach unten durchgeführt und das erste Match " +"gewinnt." #: src/pattern-matching.md:6 #, fuzzy msgid "The patterns can be simple values, similarly to `switch` in C and C++:" -msgstr "Die Muster können einfache Werte sein, ähnlich wie `switch` in C und C++:" +msgstr "" +"Die Muster können einfache Werte sein, ähnlich wie `switch` in C und C++:" #: src/pattern-matching.md:8 msgid "" @@ -6209,28 +6799,31 @@ msgstr "Das `_`-Muster ist ein Platzhaltermuster, das jedem Wert entspricht." #: src/pattern-matching.md:26 #, fuzzy msgid "" -"* You might point out how some specific characters are being used when in a pattern\n" +"* You might point out how some specific characters are being used when in a " +"pattern\n" " * `|` as an `or`\n" " * `..` can expand as much as it needs to be\n" " * `1..=5` represents an inclusive range\n" " * `_` is a wild card\n" -"* It can be useful to show how binding works, by for instance replacing a wildcard character with " -"a variable, or removing the quotes around `q`.\n" +"* It can be useful to show how binding works, by for instance replacing a " +"wildcard character with a variable, or removing the quotes around `q`.\n" "* You can demonstrate matching on a reference.\n" -"* This might be a good time to bring up the concept of irrefutable patterns, as the term can show " -"up in error messages.\n" +"* This might be a good time to bring up the concept of irrefutable patterns, " +"as the term can show up in error messages.\n" " " msgstr "" -"* Sie können darauf hinweisen, wie bestimmte Zeichen in einem Muster verwendet werden\n" +"* Sie können darauf hinweisen, wie bestimmte Zeichen in einem Muster " +"verwendet werden\n" " * `|` als `oder`\n" " * `..` kann beliebig erweitert werden\n" " * „1..=5“ steht für einen inklusiven Bereich\n" " * „_“ ist ein Platzhalter\n" -"* Es kann nützlich sein, zu zeigen, wie die Bindung funktioniert, indem Sie zum Beispiel ein " -"Platzhalterzeichen durch eine Variable ersetzen oder die Anführungszeichen um `q` entfernen.\n" +"* Es kann nützlich sein, zu zeigen, wie die Bindung funktioniert, indem Sie " +"zum Beispiel ein Platzhalterzeichen durch eine Variable ersetzen oder die " +"Anführungszeichen um `q` entfernen.\n" "* Sie können die Übereinstimmung anhand einer Referenz nachweisen.\n" -"* Dies könnte ein guter Zeitpunkt sein, um das Konzept der unwiderlegbaren Muster anzusprechen, da " -"der Begriff in Fehlermeldungen auftauchen kann.\n" +"* Dies könnte ein guter Zeitpunkt sein, um das Konzept der unwiderlegbaren " +"Muster anzusprechen, da der Begriff in Fehlermeldungen auftauchen kann.\n" " \n" "" @@ -6242,11 +6835,15 @@ msgstr "# Destrukturierung von Enums" #: src/pattern-matching/destructuring-enums.md:3 #, fuzzy msgid "" -"Patterns can also be used to bind variables to parts of your values. This is how\n" -"you inspect the structure of your types. Let us start with a simple `enum` type:" +"Patterns can also be used to bind variables to parts of your values. This is " +"how\n" +"you inspect the structure of your types. Let us start with a simple `enum` " +"type:" msgstr "" -"Muster können auch verwendet werden, um Variablen an Teile Ihrer Werte zu binden. Das ist wie\n" -"Sie inspizieren die Struktur Ihrer Typen. Beginnen wir mit einem einfachen `enum`-Typ:" +"Muster können auch verwendet werden, um Variablen an Teile Ihrer Werte zu " +"binden. Das ist wie\n" +"Sie inspizieren die Struktur Ihrer Typen. Beginnen wir mit einem einfachen " +"`enum`-Typ:" #: src/pattern-matching/destructuring-enums.md:6 msgid "" @@ -6277,27 +6874,33 @@ msgstr "" #: src/pattern-matching/destructuring-enums.md:29 #, fuzzy msgid "" -"Here we have used the arms to _destructure_ the `Result` value. In the first\n" -"arm, `half` is bound to the value inside the `Ok` variant. In the second arm,\n" +"Here we have used the arms to _destructure_ the `Result` value. In the " +"first\n" +"arm, `half` is bound to the value inside the `Ok` variant. In the second " +"arm,\n" "`msg` is bound to the error message." msgstr "" -"Hier haben wir die Arme verwendet, um den „Result“-Wert zu _destrukturieren_. In der ersten\n" -"arm, `half` ist an den Wert innerhalb der `Ok`-Variante gebunden. Im zweiten Arm,\n" +"Hier haben wir die Arme verwendet, um den „Result“-Wert zu " +"_destrukturieren_. In der ersten\n" +"arm, `half` ist an den Wert innerhalb der `Ok`-Variante gebunden. Im zweiten " +"Arm,\n" "`msg` wird an die Fehlermeldung gebunden." #: src/pattern-matching/destructuring-enums.md:36 #, fuzzy msgid "" -"* The `if`/`else` expression is returning an enum that is later unpacked with a `match`.\n" -"* You can try adding a third variant to the enum definition and displaying the errors when running " -"the code. Point out the places where your code is now inexhaustive and how the compiler tries to " -"give you hints." +"* The `if`/`else` expression is returning an enum that is later unpacked " +"with a `match`.\n" +"* You can try adding a third variant to the enum definition and displaying " +"the errors when running the code. Point out the places where your code is " +"now inexhaustive and how the compiler tries to give you hints." msgstr "" -"* Der `if`/`else`-Ausdruck gibt eine Aufzählung zurück, die später mit einem `match` entpackt " -"wird.\n" -"* Sie können versuchen, der Enum-Definition eine dritte Variante hinzuzufügen und die Fehler beim " -"Ausführen des Codes anzuzeigen. Weisen Sie auf die Stellen hin, an denen Ihr Code jetzt " -"unerschöpflich ist und wie der Compiler versucht, Ihnen Hinweise zu geben." +"* Der `if`/`else`-Ausdruck gibt eine Aufzählung zurück, die später mit einem " +"`match` entpackt wird.\n" +"* Sie können versuchen, der Enum-Definition eine dritte Variante " +"hinzuzufügen und die Fehler beim Ausführen des Codes anzuzeigen. Weisen Sie " +"auf die Stellen hin, an denen Ihr Code jetzt unerschöpflich ist und wie der " +"Compiler versucht, Ihnen Hinweise zu geben." #: src/pattern-matching/destructuring-structs.md:1 #, fuzzy @@ -6323,7 +6926,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" "```" @@ -6333,8 +6937,10 @@ msgstr "" msgid "" "* Change the literal values in `foo` to match with the other patterns.\n" "* Add a new field to `Foo` and make changes to the pattern as needed.\n" -"* The distinction between a capture and a constant expression can be hard to\n" -" spot. Try changing the `2` in the second arm to a variable, and see that it subtly\n" +"* The distinction between a capture and a constant expression can be hard " +"to\n" +" spot. Try changing the `2` in the second arm to a variable, and see that " +"it subtly\n" " doesn't work. Change it to a `const` and see it working again." msgstr "" @@ -6345,8 +6951,11 @@ msgstr "# Destrukturieren von Arrays" #: src/pattern-matching/destructuring-arrays.md:3 #, fuzzy -msgid "You can destructure arrays, tuples, and slices by matching on their elements:" -msgstr "Sie können Arrays, Tupel und Slices destrukturieren, indem Sie ihre Elemente abgleichen:" +msgid "" +"You can destructure arrays, tuples, and slices by matching on their elements:" +msgstr "" +"Sie können Arrays, Tupel und Slices destrukturieren, indem Sie ihre Elemente " +"abgleichen:" #: src/pattern-matching/destructuring-arrays.md:5 msgid "" @@ -6366,7 +6975,8 @@ msgstr "" #: src/pattern-matching/destructuring-arrays.md:21 msgid "" -"* Destructuring of slices of unknown length also works with patterns of fixed length.\n" +"* Destructuring of slices of unknown length also works with patterns of " +"fixed length.\n" "\n" "\n" " ```rust,editable\n" @@ -6380,7 +6990,8 @@ msgid "" " println!(\"Tell me about {slice:?}\");\n" " match slice {\n" " &[0, y, z] => println!(\"First is 0, y = {y}, and z = {z}\"),\n" -" &[1, ..] => println!(\"First is 1 and the rest were ignored\"),\n" +" &[1, ..] => println!(\"First is 1 and the rest were " +"ignored\"),\n" " _ => println!(\"All elements were ignored\"),\n" " }\n" " }\n" @@ -6388,7 +6999,8 @@ msgid "" " \n" "* Create a new pattern using `_` to represent an element. \n" "* Add more values to the array.\n" -"* Point out that how `..` will expand to account for different number of elements.\n" +"* Point out that how `..` will expand to account for different number of " +"elements.\n" "* Show matching against the tail with patterns `[.., b]` and `[a@..,b]`" msgstr "" @@ -6400,11 +7012,12 @@ msgstr "# Match Guards" #: src/pattern-matching/match-guards.md:3 #, fuzzy msgid "" -"When matching, you can add a _guard_ to a pattern. This is an arbitrary Boolean\n" +"When matching, you can add a _guard_ to a pattern. This is an arbitrary " +"Boolean\n" "expression which will be executed if the pattern matches:" msgstr "" -"Beim Abgleich können Sie einem Muster einen _Wächter_ hinzufügen. Dies ist ein beliebiger " -"boolescher Wert\n" +"Beim Abgleich können Sie einem Muster einen _Wächter_ hinzufügen. Dies ist " +"ein beliebiger boolescher Wert\n" "Ausdruck, der ausgeführt wird, wenn das Muster übereinstimmt:" #: src/pattern-matching/match-guards.md:6 @@ -6427,23 +7040,29 @@ msgstr "" #: src/pattern-matching/match-guards.md:23 #, fuzzy 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.\n" -"* 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\n" +"* 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.\n" +"* 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\n" "of the original `match` expression being considered. \n" "* You can use the variables defined in the pattern in your if expression.\n" -"* The condition defined in the guard applies to every expression in a pattern with an `|`." +"* The condition defined in the guard applies to every expression in a " +"pattern with an `|`." msgstr "" "* Match Guards als separates Syntax-Feature sind wichtig und notwendig.\n" -"* Sie sind nicht dasselbe wie ein separater „if“-Ausdruck innerhalb des Match-Arms. Ein „if“-" -"Ausdruck innerhalb des Verzweigungsblocks (nach „=>“) erfolgt, nachdem der Match-Arm ausgewählt " -"wurde. Wenn die 'if'-Bedingung innerhalb dieses Blocks nicht bestanden wird, führt dies nicht zu " -"anderen Armen\n" +"* Sie sind nicht dasselbe wie ein separater „if“-Ausdruck innerhalb des " +"Match-Arms. Ein „if“-Ausdruck innerhalb des Verzweigungsblocks (nach „=>“) " +"erfolgt, nachdem der Match-Arm ausgewählt wurde. Wenn die 'if'-Bedingung " +"innerhalb dieses Blocks nicht bestanden wird, führt dies nicht zu anderen " +"Armen\n" "des betrachteten ursprünglichen \"Match\"-Ausdrucks.\n" -"* Sie können die im Muster definierten Variablen in Ihrem if-Ausdruck verwenden.\n" -"* Die im Guard definierte Bedingung gilt für jeden Ausdruck in einem Muster mit einem `|`.\n" +"* Sie können die im Muster definierten Variablen in Ihrem if-Ausdruck " +"verwenden.\n" +"* Die im Guard definierte Bedingung gilt für jeden Ausdruck in einem Muster " +"mit einem `|`.\n" "" #: src/exercises/day-2/morning.md:1 @@ -6472,31 +7091,37 @@ msgstr "# Gesundheitsstatistik" #: src/exercises/day-2/health-statistics.md:3 #, fuzzy msgid "" -"You're working on implementing a health-monitoring system. As part of that, you\n" +"You're working on implementing a health-monitoring system. As part of that, " +"you\n" "need to keep track of users' health statistics." msgstr "" -"Sie arbeiten an der Implementierung eines Gesundheitsüberwachungssystems. Als Teil davon Sie\n" +"Sie arbeiten an der Implementierung eines Gesundheitsüberwachungssystems. " +"Als Teil davon Sie\n" "müssen die Gesundheitsstatistiken der Benutzer verfolgen." #: src/exercises/day-2/health-statistics.md:6 #, fuzzy msgid "" -"You'll start with some stubbed functions in an `impl` block as well as a `User`\n" +"You'll start with some stubbed functions in an `impl` block as well as a " +"`User`\n" "struct definition. Your goal is to implement the stubbed out methods on the\n" "`User` `struct` defined in the `impl` block." msgstr "" -"Sie beginnen mit einigen Stub-Funktionen in einem `impl`-Block sowie einem `User`\n" -"Strukturdefinition. Ihr Ziel ist es, die Stubbed-out-Methoden auf dem zu implementieren\n" +"Sie beginnen mit einigen Stub-Funktionen in einem `impl`-Block sowie einem " +"`User`\n" +"Strukturdefinition. Ihr Ziel ist es, die Stubbed-out-Methoden auf dem zu " +"implementieren\n" "`User` `struct` definiert im `impl` Block." #: src/exercises/day-2/health-statistics.md:10 #, fuzzy msgid "" -"Copy the code below to and fill in the missing\n" +"Copy the code below to and fill in the " +"missing\n" "methods:" msgstr "" -"Kopieren Sie den folgenden Code nach und füllen Sie die fehlenden " -"aus\n" +"Kopieren Sie den folgenden Code nach und " +"füllen Sie die fehlenden aus\n" "Methoden:" #: src/exercises/day-2/health-statistics.md:13 @@ -6566,13 +7191,16 @@ msgstr "# Polygonstruktur" #: src/exercises/day-2/points-polygons.md:3 #, fuzzy msgid "" -"We will create a `Polygon` struct which contain some points. Copy the code below\n" -"to and fill in the missing methods to make the\n" +"We will create a `Polygon` struct which contain some points. Copy the code " +"below\n" +"to and fill in the missing methods to make " +"the\n" "tests pass:" msgstr "" -"Wir werden eine \"Polygon\"-Struktur erstellen, die einige Punkte enthält. Kopieren Sie den Code " -"unten\n" -"zu und füllen Sie die fehlenden Methoden aus, um die\n" +"Wir werden eine \"Polygon\"-Struktur erstellen, die einige Punkte enthält. " +"Kopieren Sie den Code unten\n" +"zu und füllen Sie die fehlenden Methoden aus, " +"um die\n" "Tests bestehen:" #: src/exercises/day-2/points-polygons.md:7 @@ -6689,10 +7317,13 @@ msgstr "" #: src/exercises/day-2/points-polygons.md:117 #, fuzzy msgid "" -"Since the method signatures are missing from the problem statements, the key part\n" -"of the exercise is to specify those correctly. You don't have to modify the tests." +"Since the method signatures are missing from the problem statements, the key " +"part\n" +"of the exercise is to specify those correctly. You don't have to modify the " +"tests." msgstr "" -"Da die Methodensignaturen in den Problembeschreibungen fehlen, ist der Schlüsselteil\n" +"Da die Methodensignaturen in den Problembeschreibungen fehlen, ist der " +"Schlüsselteil\n" "der Übung ist es, diese richtig anzugeben." #: src/exercises/day-2/points-polygons.md:120 @@ -6703,15 +7334,15 @@ msgstr "Weitere interessante Teile der Übung:\n" #: src/exercises/day-2/points-polygons.md:122 #, fuzzy msgid "" -"* Derive a `Copy` trait for some structs, as in tests the methods sometimes don't borrow their " -"arguments.\n" -"* Discover that `Add` trait must be implemented for two objects to be addable via \"+\". Note that " -"we do not discuss generics until Day 3." +"* Derive a `Copy` trait for some structs, as in tests the methods sometimes " +"don't borrow their arguments.\n" +"* 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 "" -"* Leiten Sie ein `Copy`-Merkmal für einige Strukturen ab, da die Methoden in Tests ihre Argumente " -"manchmal nicht ausleihen.\n" -"* Entdecken Sie, dass die Eigenschaft „Hinzufügen“ implementiert werden muss, damit zwei Objekte " -"über „+“ hinzugefügt werden können." +"* Leiten Sie ein `Copy`-Merkmal für einige Strukturen ab, da die Methoden in " +"Tests ihre Argumente manchmal nicht ausleihen.\n" +"* Entdecken Sie, dass die Eigenschaft „Hinzufügen“ implementiert werden " +"muss, damit zwei Objekte über „+“ hinzugefügt werden können." #: src/control-flow.md:1 #, fuzzy @@ -6722,13 +7353,18 @@ msgstr "# Kontrollfluss" #, fuzzy msgid "" "As we have seen, `if` is an expression in Rust. It is used to conditionally\n" -"evaluate one of two blocks, but the blocks can have a value which then becomes\n" -"the value of the `if` expression. Other control flow expressions work similarly\n" +"evaluate one of two blocks, but the blocks can have a value which then " +"becomes\n" +"the value of the `if` expression. Other control flow expressions work " +"similarly\n" "in Rust." msgstr "" -"Wie wir gesehen haben, ist `if` ein Ausdruck in Rust. Es ist bedingt gewohnt\n" -"einen von zwei Blöcken auswerten, aber die Blöcke können einen Wert haben, der dann wird\n" -"der Wert des `if`-Ausdrucks. Andere Ablaufsteuerungsausdrücke funktionieren ähnlich\n" +"Wie wir gesehen haben, ist `if` ein Ausdruck in Rust. Es ist bedingt " +"gewohnt\n" +"einen von zwei Blöcken auswerten, aber die Blöcke können einen Wert haben, " +"der dann wird\n" +"der Wert des `if`-Ausdrucks. Andere Ablaufsteuerungsausdrücke funktionieren " +"ähnlich\n" "in Rost." #: src/control-flow/blocks.md:1 @@ -6739,10 +7375,12 @@ msgstr "# Blöcke" #: src/control-flow/blocks.md:3 #, fuzzy msgid "" -"A block in Rust has a value and a type: the value is the last expression of the\n" +"A block in Rust has a value and a type: the value is the last expression of " +"the\n" "block:" msgstr "" -"Ein Block in Rust hat einen Wert und einen Typ: Der Wert ist der letzte Ausdruck der\n" +"Ein Block in Rust hat einen Wert und einen Typ: Der Wert ist der letzte " +"Ausdruck der\n" "Block:" #: src/control-flow/blocks.md:6 @@ -6773,7 +7411,8 @@ msgid "" "The same rule is used for functions: the value of the function body is the\n" "return value:" msgstr "" -"Die gleiche Regel gilt für Funktionen: Der Wert des Funktionskörpers ist der\n" +"Die gleiche Regel gilt für Funktionen: Der Wert des Funktionskörpers ist " +"der\n" "Rückgabewert:" #: src/control-flow/blocks.md:28 @@ -6790,21 +7429,26 @@ msgid "" msgstr "" #: src/control-flow/blocks.md:38 -msgid "However if the last expression ends with `;`, then the resulting value and type is `()`." +msgid "" +"However if the last expression ends with `;`, then the resulting value and " +"type is `()`." msgstr "" #: src/control-flow/blocks.md:43 #, fuzzy msgid "" -"* The point of this slide is to show that blocks have a type and value in Rust. \n" -"* You can show how the value of the block changes by changing the last line in the block. For " -"instance, adding/removing a semicolon or using a `return`.\n" +"* The point of this slide is to show that blocks have a type and value in " +"Rust. \n" +"* You can show how the value of the block changes by changing the last line " +"in the block. For instance, adding/removing a semicolon or using a " +"`return`.\n" " " msgstr "" -"* Der Zweck dieser Folie ist es zu zeigen, dass Blöcke in Rust einen Typ und einen Wert haben.\n" -"* Sie können zeigen, wie sich der Wert des Blocks ändert, indem Sie die letzte Zeile im Block " -"ändern. Zum Beispiel das Hinzufügen/Entfernen eines Semikolons oder die Verwendung eines " -"`Return`.\n" +"* Der Zweck dieser Folie ist es zu zeigen, dass Blöcke in Rust einen Typ und " +"einen Wert haben.\n" +"* Sie können zeigen, wie sich der Wert des Blocks ändert, indem Sie die " +"letzte Zeile im Block ändern. Zum Beispiel das Hinzufügen/Entfernen eines " +"Semikolons oder die Verwendung eines `Return`.\n" " \n" "" @@ -6816,7 +7460,8 @@ msgstr "# `if`-Ausdrücke" #: src/control-flow/if-expressions.md:3 msgid "" "You use [`if`\n" -"expressions](https://doc.rust-lang.org/reference/expressions/if-expr.html#if-expressions)\n" +"expressions](https://doc.rust-lang.org/reference/expressions/if-expr.html#if-" +"expressions)\n" "exactly like `if` statements in other languages:" msgstr "" @@ -6839,7 +7484,9 @@ msgstr "" msgid "" "In addition, you can use `if` as an expression. The last expression of each\n" "block becomes the value of the `if` expression:" -msgstr "Darüber hinaus können Sie es als Ausdruck verwenden. Das macht dasselbe wie oben:" +msgstr "" +"Darüber hinaus können Sie es als Ausdruck verwenden. Das macht dasselbe wie " +"oben:" #: src/control-flow/if-expressions.md:22 msgid "" @@ -6857,8 +7504,9 @@ msgstr "" #: src/control-flow/if-expressions.md:35 msgid "" -"Because `if` is an expression and must have a particular type, both of its branch blocks must have " -"the same type. Consider showing what happens if you add `;` after `x / 2` in the second example." +"Because `if` is an expression and must have a particular type, both of its " +"branch blocks must have the same type. Consider showing what happens if you " +"add `;` after `x / 2` in the second example." msgstr "" #: src/control-flow/if-let-expressions.md:1 @@ -6869,8 +7517,10 @@ msgstr "# `if let`-Ausdrücke" #: src/control-flow/if-let-expressions.md:3 msgid "" "The [`if let`\n" -"expression](https://doc.rust-lang.org/reference/expressions/if-expr.html#if-let-expressions)\n" -"lets you execute different code depending on whether a value matches a pattern:" +"expression](https://doc.rust-lang.org/reference/expressions/if-expr.html#if-" +"let-expressions)\n" +"lets you execute different code depending on whether a value matches a " +"pattern:" msgstr "" #: src/control-flow/if-let-expressions.md:7 @@ -6887,25 +7537,30 @@ msgid "" "```" msgstr "" -#: src/control-flow/if-let-expressions.md:18 src/control-flow/while-let-expressions.md:21 +#: src/control-flow/if-let-expressions.md:18 +#: src/control-flow/while-let-expressions.md:21 #: src/control-flow/match-expressions.md:23 #, fuzzy msgid "" -"See [pattern matching](../pattern-matching.md) for more details on patterns in\n" +"See [pattern matching](../pattern-matching.md) for more details on patterns " +"in\n" "Rust." msgstr "" -"Siehe [pattern matching](../pattern-matching.md) für weitere Details zu Mustern in\n" +"Siehe [pattern matching](../pattern-matching.md) für weitere Details zu " +"Mustern in\n" "Rost." #: src/control-flow/if-let-expressions.md:23 msgid "" -"* `if let` can be more concise than `match`, e.g., when only one case is interesting. In contrast, " -"`match` requires all branches to be covered.\n" +"* `if let` can be more concise than `match`, e.g., when only one case is " +"interesting. In contrast, `match` requires all branches to be covered.\n" "* A common usage is handling `Some` values when working with `Option`.\n" -"* Unlike `match`, `if let` does not support guard clauses for pattern matching.\n" -"* 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, have a non-returning " -"block branch (panic/return/break/continue):\n" +"* Unlike `match`, `if let` does not support guard clauses for pattern " +"matching.\n" +"* 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, have a non-returning block branch (panic/return/" +"break/continue):\n" "\n" " ```rust,editable\n" " fn main() {\n" @@ -6928,8 +7583,8 @@ msgstr "# `while`-Ausdrücke" #: src/control-flow/while-expressions.md:3 msgid "" -"The [`while` keyword](https://doc.rust-lang.org/reference/expressions/loop-expr.html#predicate-" -"loops)\n" +"The [`while` keyword](https://doc.rust-lang.org/reference/expressions/loop-" +"expr.html#predicate-loops)\n" "works very similar to other languages:" msgstr "" @@ -6958,11 +7613,12 @@ msgstr "# `while let`-Ausdrücke" #: src/control-flow/while-let-expressions.md:3 #, fuzzy msgid "" -"Like with `if let`, there is a [`while let`](https://doc.rust-lang.org/reference/expressions/loop-" -"expr.html#predicate-pattern-loops)\n" +"Like with `if let`, there is a [`while let`](https://doc.rust-lang.org/" +"reference/expressions/loop-expr.html#predicate-pattern-loops)\n" "variant which repeatedly tests a value against a pattern:" msgstr "" -"Wie bei `if` gibt es eine `while let`-Variante, die einen Wert wiederholt testet\n" +"Wie bei `if` gibt es eine `while let`-Variante, die einen Wert wiederholt " +"testet\n" "gegen ein Muster:" #: src/control-flow/while-let-expressions.md:6 @@ -6982,28 +7638,34 @@ msgstr "" #: src/control-flow/while-let-expressions.md:17 #, fuzzy msgid "" -"Here the iterator returned by `v.iter()` will return a `Option` on every\n" -"call to `next()`. It returns `Some(x)` until it is done, after which it will\n" +"Here the iterator returned by `v.iter()` will return a `Option` on " +"every\n" +"call to `next()`. It returns `Some(x)` until it is done, after which it " +"will\n" "return `None`. The `while let` lets us keep iterating through all items." msgstr "" -"Hier gibt der von `v.iter()` zurückgegebene Iterator bei jedem eine `Option` zurück\n" -"Aufruf von `next()`. Es gibt `Some(x)` zurück, bis es fertig ist, danach wird es\n" +"Hier gibt der von `v.iter()` zurückgegebene Iterator bei jedem eine " +"`Option` zurück\n" +"Aufruf von `next()`. Es gibt `Some(x)` zurück, bis es fertig ist, danach " +"wird es\n" "gibt \"Keine\" zurück. Das `while let` lässt uns alle Elemente durchlaufen." #: src/control-flow/while-let-expressions.md:26 #, fuzzy msgid "" -"* Point out that the `while let` loop will keep going as long as the value matches the pattern.\n" -"* 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.\n" +"* Point out that the `while let` loop will keep going as long as the value " +"matches the pattern.\n" +"* 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.\n" " " msgstr "" -"* Weisen Sie darauf hin, dass die „while let“-Schleife so lange läuft, wie der Wert mit dem Muster " -"übereinstimmt.\n" -"* Sie könnten die „while let“-Schleife als Endlosschleife mit einer if-Anweisung umschreiben, die " -"abbricht, wenn es keinen Wert zum Auspacken für „iter.next()“ gibt. Das `while let` liefert " -"syntaktischen Zucker für das obige Szenario.\n" +"* Weisen Sie darauf hin, dass die „while let“-Schleife so lange läuft, wie " +"der Wert mit dem Muster übereinstimmt.\n" +"* Sie könnten die „while let“-Schleife als Endlosschleife mit einer if-" +"Anweisung umschreiben, die abbricht, wenn es keinen Wert zum Auspacken für " +"„iter.next()“ gibt. Das `while let` liefert syntaktischen Zucker für das " +"obige Szenario.\n" " \n" "" @@ -7020,7 +7682,8 @@ msgid "" "automatically call `into_iter()` on the expression and then iterate over it:" msgstr "" "Der „for“-Ausdruck ist eng verwandt mit dem „while let“-Ausdruck. Es wird\n" -"Rufen Sie automatisch `into_iter()` für den Ausdruck auf und iterieren Sie dann darüber:" +"Rufen Sie automatisch `into_iter()` für den Ausdruck auf und iterieren Sie " +"dann darüber:" #: src/control-flow/for-expressions.md:7 msgid "" @@ -7049,14 +7712,15 @@ msgstr "Sie können hier wie gewohnt `break` und `continue` verwenden." msgid "" "* Index iteration is not a special syntax in Rust for just that case.\n" "* `(0..10)` is a range that implements an `Iterator` trait. \n" -"* `step_by` is a method that returns another `Iterator` that skips every other element. \n" -"* Modify the elements in the vector and explain the compiler errors. Change vector `v` to be " -"mutable and the for loop to `for x in v.iter_mut()`." +"* `step_by` is a method that returns another `Iterator` that skips every " +"other element. \n" +"* Modify the elements in the vector and explain the compiler errors. Change " +"vector `v` to be mutable and the for loop to `for x in v.iter_mut()`." msgstr "" "* Index-Iteration ist in Rust keine spezielle Syntax für genau diesen Fall.\n" "* „(0..10)“ ist ein Bereich, der ein „Iterator“-Merkmal implementiert.\n" -"* „step_by“ ist eine Methode, die einen weiteren „Iterator“ zurückgibt, der jedes andere Element " -"überspringt.\n" +"* „step_by“ ist eine Methode, die einen weiteren „Iterator“ zurückgibt, der " +"jedes andere Element überspringt.\n" " \n" "" @@ -7067,8 +7731,8 @@ msgstr "# `loop`-Ausdrücke" #: src/control-flow/loop-expressions.md:3 msgid "" -"Finally, there is a [`loop` keyword](https://doc.rust-lang.org/reference/expressions/loop-expr." -"html#infinite-loops)\n" +"Finally, there is a [`loop` keyword](https://doc.rust-lang.org/reference/" +"expressions/loop-expr.html#infinite-loops)\n" "which creates an endless loop." msgstr "" @@ -7076,8 +7740,8 @@ msgstr "" #, fuzzy msgid "Here you must either `break` or `return` to stop the loop:" msgstr "" -"Schließlich gibt es noch ein „loop“-Schlüsselwort, das eine Endlosschleife erzeugt. Hier müssen " -"Sie\n" +"Schließlich gibt es noch ein „loop“-Schlüsselwort, das eine Endlosschleife " +"erzeugt. Hier müssen Sie\n" "entweder `break` oder `return`, um die Schleife zu stoppen:" #: src/control-flow/loop-expressions.md:8 @@ -7103,8 +7767,10 @@ msgstr "" #: src/control-flow/loop-expressions.md:27 msgid "" "* Break the `loop` with a value (e.g. `break 8`) and print it out.\n" -"* Note that `loop` is the only looping construct which returns a non-trivial\n" -" value. This is because it's guaranteed to be entered at least once (unlike\n" +"* Note that `loop` is the only looping construct which returns a non-" +"trivial\n" +" value. This is because it's guaranteed to be entered at least once " +"(unlike\n" " `while` and `for` loops)." msgstr "" @@ -7116,12 +7782,14 @@ msgstr "# `Match`-Ausdrücke" #: src/control-flow/match-expressions.md:3 #, fuzzy msgid "" -"The [`match` keyword](https://doc.rust-lang.org/reference/expressions/match-expr.html)\n" -"is used to match a value against one or more patterns. In that sense, it works\n" +"The [`match` keyword](https://doc.rust-lang.org/reference/expressions/match-" +"expr.html)\n" +"is used to match a value against one or more patterns. In that sense, it " +"works\n" "like a series of `if let` expressions:" msgstr "" -"Das Schlüsselwort „match“ wird verwendet, um einen Wert mit einem oder mehreren Mustern " -"abzugleichen. In\n" +"Das Schlüsselwort „match“ wird verwendet, um einen Wert mit einem oder " +"mehreren Mustern abzugleichen. In\n" "In diesem Sinne funktioniert es wie eine Reihe von `if let`-Ausdrücken:" #: src/control-flow/match-expressions.md:7 @@ -7146,18 +7814,20 @@ msgid "" "Like `if let`, each match arm must have the same type. The type is the last\n" "expression of the block, if any. In the example above, the type is `()`." msgstr "" -"Wie bei „if let“ muss jeder Match-Arm denselben Typ haben. Der Typ ist der letzte\n" +"Wie bei „if let“ muss jeder Match-Arm denselben Typ haben. Der Typ ist der " +"letzte\n" "Ausdruck des Blocks, falls vorhanden. Im obigen Beispiel ist der Typ `()`." #: src/control-flow/match-expressions.md:28 msgid "" "* Save the match expression to a variable and print it out.\n" "* Remove `.as_deref()` and explain the error.\n" -" * `std::env::args().next()` returns an `Option`, but we cannot match against " -"`String`.\n" -" * `as_deref()` transforms an `Option` to `Option<&T::Target>`. In our case, this turns " -"`Option` into `Option<&str>`.\n" -" * We can now use pattern matching to match against the `&str` inside `Option`." +" * `std::env::args().next()` returns an `Option`, but we cannot " +"match against `String`.\n" +" * `as_deref()` transforms an `Option` to `Option<&T::Target>`. In our " +"case, this turns `Option` into `Option<&str>`.\n" +" * We can now use pattern matching to match against the `&str` inside " +"`Option`." msgstr "" #: src/control-flow/break-continue.md:1 @@ -7167,24 +7837,26 @@ msgstr "# `break` und `continue`" #: src/control-flow/break-continue.md:3 msgid "" -"- If you want to exit a loop early, use [`break`](https://doc.rust-lang.org/reference/expressions/" -"loop-expr.html#break-expressions),\n" +"- If you want to exit a loop early, use [`break`](https://doc.rust-lang.org/" +"reference/expressions/loop-expr.html#break-expressions),\n" "- If you want to immediately start\n" -"the next iteration use [`continue`](https://doc.rust-lang.org/reference/expressions/loop-expr." -"html#continue-expressions)." +"the next iteration use [`continue`](https://doc.rust-lang.org/reference/" +"expressions/loop-expr.html#continue-expressions)." msgstr "" #: src/control-flow/break-continue.md:7 #, fuzzy msgid "" -"Both `continue` and `break` can optionally take a label argument which is used\n" +"Both `continue` and `break` can optionally take a label argument which is " +"used\n" "to break out of nested loops:" msgstr "" -"Wenn Sie eine Schleife vorzeitig verlassen möchten, verwenden Sie `break`, wenn Sie sofort " -"beginnen möchten\n" -"Verwenden Sie für die nächste Iteration \"Continue\". Sowohl `Continue` als auch `Break` können " -"optional verwendet werden\n" -"Nehmen Sie ein Label-Argument, das zum Ausbrechen aus verschachtelten Schleifen verwendet wird:" +"Wenn Sie eine Schleife vorzeitig verlassen möchten, verwenden Sie `break`, " +"wenn Sie sofort beginnen möchten\n" +"Verwenden Sie für die nächste Iteration \"Continue\". Sowohl `Continue` als " +"auch `Break` können optional verwendet werden\n" +"Nehmen Sie ein Label-Argument, das zum Ausbrechen aus verschachtelten " +"Schleifen verwendet wird:" #: src/control-flow/break-continue.md:10 msgid "" @@ -7209,8 +7881,11 @@ msgstr "" #: src/control-flow/break-continue.md:28 #, fuzzy -msgid "In this case we break the outer loop after 3 iterations of the inner loop." -msgstr "In diesem Fall brechen wir die äußere Schleife nach 3 Iterationen der inneren Schleife." +msgid "" +"In this case we break the outer loop after 3 iterations of the inner loop." +msgstr "" +"In diesem Fall brechen wir die äußere Schleife nach 3 Iterationen der " +"inneren Schleife." #: src/std.md:1 #, fuzzy @@ -7220,14 +7895,16 @@ msgstr "# Standardbibliothek" #: src/std.md:3 #, fuzzy msgid "" -"Rust comes with a standard library which helps establish a set of common types\n" -"used by Rust library and programs. This way, two libraries can work together\n" +"Rust comes with a standard library which helps establish a set of common " +"types\n" +"used by Rust library and programs. This way, two libraries can work " +"together\n" "smoothly because they both use the same `String` type." msgstr "" -"Rust wird mit einer Standardbibliothek geliefert, die dabei hilft, eine Reihe gängiger Typen zu " -"erstellen\n" -"Wird von Rust-Bibliotheken und -Programmen verwendet. Auf diese Weise können zwei Bibliotheken " -"zusammenarbeiten\n" +"Rust wird mit einer Standardbibliothek geliefert, die dabei hilft, eine " +"Reihe gängiger Typen zu erstellen\n" +"Wird von Rust-Bibliotheken und -Programmen verwendet. Auf diese Weise können " +"zwei Bibliotheken zusammenarbeiten\n" "reibungslos, da beide den gleichen `String`-Typ verwenden." #: src/std.md:7 @@ -7237,7 +7914,8 @@ msgstr "Zu den gängigen Wortschatztypen gehören:" #: src/std.md:9 msgid "" -"* [`Option` and `Result`](std/option-result.md) types: used for optional values\n" +"* [`Option` and `Result`](std/option-result.md) types: used for optional " +"values\n" " and [error handling](error-handling.md).\n" "\n" "* [`String`](std/string.md): the default string type used for owned data.\n" @@ -7249,25 +7927,31 @@ msgid "" "\n" "* [`Box`](std/box.md): an owned pointer for heap-allocated data.\n" "\n" -"* [`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 #, fuzzy msgid "" -" * In fact, Rust contains several layers of the Standard Library: `core`, `alloc` and `std`. \n" -" * `core` includes the most basic types and functions that don't depend on `libc`, allocator or\n" +" * In fact, Rust contains several layers of the Standard Library: `core`, " +"`alloc` and `std`. \n" +" * `core` includes the most basic types and functions that don't depend on " +"`libc`, allocator or\n" " even the presence of an operating system. \n" -" * `alloc` includes types which require a global heap allocator, such as `Vec`, `Box` and `Arc`.\n" +" * `alloc` includes types which require a global heap allocator, such as " +"`Vec`, `Box` and `Arc`.\n" " * Embedded Rust applications often only use `core`, and sometimes `alloc`." msgstr "" -" * Tatsächlich enthält Rust mehrere Schichten der Standardbibliothek: `core`, `alloc` und `std`.\n" -" * `core` enthält die grundlegendsten Typen und Funktionen, die nicht von `libc`, allocator oder " -"abhängen\n" +" * Tatsächlich enthält Rust mehrere Schichten der Standardbibliothek: " +"`core`, `alloc` und `std`.\n" +" * `core` enthält die grundlegendsten Typen und Funktionen, die nicht von " +"`libc`, allocator oder abhängen\n" " sogar das Vorhandensein eines Betriebssystems.\n" -" * „alloc“ umfasst Typen, die einen globalen Heap-Zuordner erfordern, wie etwa „Vec“, „Box“ und " -"„Arc“.\n" -" * Eingebettete Rust-Anwendungen verwenden oft nur `core` und manchmal `alloc`." +" * „alloc“ umfasst Typen, die einen globalen Heap-Zuordner erfordern, wie " +"etwa „Vec“, „Box“ und „Arc“.\n" +" * Eingebettete Rust-Anwendungen verwenden oft nur `core` und manchmal " +"`alloc`." #: src/std/option-result.md:1 #, fuzzy @@ -7298,18 +7982,23 @@ msgstr "" msgid "" "* `Option` and `Result` are widely used not just in the standard library.\n" "* `Option<&T>` has zero space overhead compared to `&T`.\n" -"* `Result` is the standard type to implement error handling as we will see on Day 3.\n" +"* `Result` is the standard type to implement error handling as we will see " +"on Day 3.\n" "* `binary_search` returns `Result`.\n" " * If found, `Result::Ok` holds the index where the element is found.\n" -" * Otherwise, `Result::Err` contains the index where such an element should be inserted." +" * Otherwise, `Result::Err` contains the index where such an element should " +"be inserted." msgstr "" -"* „Option“ und „Ergebnis“ werden nicht nur in der Standardbibliothek häufig verwendet.\n" +"* „Option“ und „Ergebnis“ werden nicht nur in der Standardbibliothek häufig " +"verwendet.\n" "* `Option<&T>` hat im Vergleich zu `&T` keinen Speicherplatz-Overhead.\n" -"* „Ergebnis“ ist der Standardtyp zur Implementierung der Fehlerbehandlung, wie wir an Tag 3 sehen " -"werden.\n" +"* „Ergebnis“ ist der Standardtyp zur Implementierung der Fehlerbehandlung, " +"wie wir an Tag 3 sehen werden.\n" "* `binary_search` gibt `Result` zurück.\n" -" * Falls gefunden, enthält `Result::Ok` den Index, wo das Element gefunden wurde.\n" -" * Andernfalls enthält `Result::Err` den Index, wo ein solches Element eingefügt werden soll." +" * Falls gefunden, enthält `Result::Ok` den Index, wo das Element gefunden " +"wurde.\n" +" * Andernfalls enthält `Result::Err` den Index, wo ein solches Element " +"eingefügt werden soll." #: src/std/string.md:1 #, fuzzy @@ -7318,8 +8007,11 @@ msgstr "# Zeichenfolge" #: src/std/string.md:3 #, fuzzy -msgid "[`String`][1] is the standard heap-allocated growable UTF-8 string buffer:" -msgstr "[`String`][1] ist der Standard-Heap-zugewiesene erweiterbare UTF-8-String-Puffer:" +msgid "" +"[`String`][1] is the standard heap-allocated growable UTF-8 string buffer:" +msgstr "" +"[`String`][1] ist der Standard-Heap-zugewiesene erweiterbare UTF-8-String-" +"Puffer:" #: src/std/string.md:5 msgid "" @@ -7344,32 +8036,39 @@ msgstr "" #: src/std/string.md:22 #, fuzzy msgid "" -"`String` implements [`Deref`][2], which means that you can call all\n" +"`String` implements [`Deref`][2], which means that you can " +"call all\n" "`str` methods on a `String`." msgstr "" -"`String` implementiert [`Deref`][2], was bedeutet, dass Sie alle aufrufen können\n" +"`String` implementiert [`Deref`][2], was bedeutet, dass Sie " +"alle aufrufen können\n" "`str`-Methoden auf einem `String`." #: 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.\n" -"* `String::len` returns the size of the `String` in bytes (which can be different from its length " -"in characters).\n" -"* `String::chars` returns an iterator over the actual characters. Note that a `char` can be " -"different from what a human will consider a \"character\" due to [grapheme clusters](https://docs." -"rs/unicode-segmentation/latest/unicode_segmentation/struct.Graphemes.html).\n" -"* When people refer to strings they could either be talking about `&str` or `String`. \n" -"* When a type implements `Deref`, the compiler will let you transparently call methods " -"from `T`.\n" -" * `String` implements `Deref` which transparently gives it access to `str`'s " -"methods.\n" +"* `String::new` returns a new empty string, use `String::with_capacity` when " +"you know how much data you want to push to the string.\n" +"* `String::len` returns the size of the `String` in bytes (which can be " +"different from its length in characters).\n" +"* `String::chars` returns an iterator over the actual characters. Note that " +"a `char` can be different from what a human will consider a \"character\" " +"due to [grapheme clusters](https://docs.rs/unicode-segmentation/latest/" +"unicode_segmentation/struct.Graphemes.html).\n" +"* When people refer to strings they could either be talking about `&str` or " +"`String`. \n" +"* When a type implements `Deref`, the compiler will let you " +"transparently call methods from `T`.\n" +" * `String` implements `Deref` which transparently gives it " +"access to `str`'s methods.\n" " * Write and compare `let s3 = s1.deref();` and `let s3 = &*s1`;.\n" -"* `String` is implemented as a wrapper around a vector of bytes, many of the operations you see " -"supported on vectors are also supported on `String`, but with some extra guarantees.\n" +"* `String` is implemented as a wrapper around a vector of bytes, many of the " +"operations you see supported on vectors are also supported on `String`, but " +"with some extra guarantees.\n" "* Compare the different ways to index a `String`:\n" -" * To a character by using `s3.chars().nth(i).unwrap()` where `i` is in-bound, out-of-bounds.\n" -" * To a substring by using `s3[0..4]`, where that slice is on character boundaries or not." +" * To a character by using `s3.chars().nth(i).unwrap()` where `i` is in-" +"bound, out-of-bounds.\n" +" * To a substring by using `s3[0..4]`, where that slice is on character " +"boundaries or not." msgstr "" #: src/std/vec.md:1 @@ -7412,26 +8111,32 @@ msgstr "" #: src/std/vec.md:29 #, fuzzy msgid "" -"`Vec` implements [`Deref`][2], which means that you can call slice\n" +"`Vec` implements [`Deref`][2], which means that you can call " +"slice\n" "methods on a `Vec`." msgstr "" -"`Vec` implementiert [`Deref`][2], was bedeutet, dass Sie Slice aufrufen können\n" +"`Vec` implementiert [`Deref`][2], was bedeutet, dass Sie Slice " +"aufrufen können\n" "Methoden auf einem `Vec`." #: src/std/vec.md:37 msgid "" -"* `Vec` is a type of collection, along with `String` and `HashMap`. The data it contains is " -"stored\n" -" on the heap. This means the amount of data doesn't need to be known at compile time. It can " -"grow\n" +"* `Vec` is a type of collection, along with `String` and `HashMap`. The data " +"it contains is stored\n" +" on the heap. This means the amount of data doesn't need to be known at " +"compile time. It can grow\n" " or shrink at runtime.\n" -"* Notice how `Vec` is a generic type too, but you don't have to specify `T` explicitly. As " -"always\n" -" with Rust type inference, the `T` was established during the first `push` call.\n" -"* `vec![...]` is a canonical macro to use instead of `Vec::new()` and it supports adding initial\n" +"* Notice how `Vec` is a generic type too, but you don't have to specify " +"`T` explicitly. As always\n" +" with Rust type inference, the `T` was established during the first `push` " +"call.\n" +"* `vec![...]` is a canonical macro to use instead of `Vec::new()` and it " +"supports adding initial\n" " elements to the vector.\n" -"* To index the vector you use `[` `]`, but they will panic if out of bounds. Alternatively, using\n" -" `get` will return an `Option`. The `pop` function will remove the last element.\n" +"* To index the vector you use `[` `]`, but they will panic if out of bounds. " +"Alternatively, using\n" +" `get` will return an `Option`. The `pop` function will remove the last " +"element.\n" "* Show iterating over a vector and mutating the value:\n" " `for e in &mut v { *e += 50; }`" msgstr "" @@ -7453,7 +8158,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" @@ -7462,7 +8168,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" @@ -7470,8 +8177,10 @@ msgid "" " }\n" "\n" " // Use the .entry() method to insert a value if nothing is found.\n" -" for book in [\"Pride and Prejudice\", \"Alice's Adventure in Wonderland\"] {\n" -" let page_count: &mut i32 = page_counts.entry(book.to_string()).or_insert(0);\n" +" for book in [\"Pride and Prejudice\", \"Alice's Adventure in " +"Wonderland\"] {\n" +" let page_count: &mut i32 = page_counts.entry(book.to_string())." +"or_insert(0);\n" " *page_count += 1;\n" " }\n" "\n" @@ -7482,10 +8191,11 @@ msgstr "" #: src/std/hashmap.md:38 msgid "" -"* `HashMap` is not defined in the prelude and needs to be brought into scope.\n" -"* 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.\n" +"* `HashMap` is not defined in the prelude and needs to be brought into " +"scope.\n" +"* 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.\n" "\n" " ```rust,ignore\n" " let pc1 = page_counts\n" @@ -7496,8 +8206,8 @@ msgid "" " .or_insert(374);\n" " ```\n" "* Unlike `vec!`, there is unfortunately no standard `hashmap!` macro.\n" -" * Although, since Rust 1.56, HashMap implements [`From<[(K, V); N]>`][1], which allows us to " -"easily initialize a hash map from a literal array:\n" +" * Although, since Rust 1.56, HashMap implements [`From<[(K, V); N]>`][1], " +"which allows us to easily initialize a hash map from a literal array:\n" "\n" " ```rust,ignore\n" " let page_counts = HashMap::from([\n" @@ -7506,12 +8216,14 @@ msgid "" " ]);\n" " ```\n" "\n" -" * Alternatively HashMap can be built from any `Iterator` which yields key-value tuples.\n" -"* We are showing `HashMap`, and avoid using `&str` as key to make examples easier. " -"Using references in collections can, of course, be done,\n" +" * Alternatively HashMap can be built from any `Iterator` which yields key-" +"value tuples.\n" +"* We are showing `HashMap`, and avoid using `&str` as key to " +"make examples easier. Using references in collections can, of course, be " +"done,\n" " but it can lead into complications with the borrow checker.\n" -" * 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 @@ -7553,22 +8265,26 @@ msgstr "" #: src/std/box.md:26 #, fuzzy msgid "" -"`Box` implements `Deref`, which means that you can [call methods\n" +"`Box` implements `Deref`, which means that you can [call " +"methods\n" "from `T` directly on a `Box`][2]." msgstr "" -"`Box` implementiert `Deref`, was bedeutet, dass Sie [Methoden aufrufen können\n" +"`Box` implementiert `Deref`, was bedeutet, dass Sie [Methoden " +"aufrufen können\n" "von `T` direkt auf eine `Box`][2]." #: src/std/box.md:34 msgid "" -"* `Box` is like `std::unique_ptr` in C++, except that it's guaranteed to be not null. \n" -"* In the above example, you can even leave out the `*` in the `println!` statement thanks to " -"`Deref`. \n" +"* `Box` is like `std::unique_ptr` in C++, except that it's guaranteed to be " +"not null. \n" +"* In the above example, you can even leave out the `*` in the `println!` " +"statement thanks to `Deref`. \n" "* A `Box` can be useful when you:\n" -" * have a type whose size that can't be known at compile time, but the Rust compiler wants to " -"know an exact size.\n" -" * 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." +" * have a type whose size that can't be known at compile time, but the " +"Rust compiler wants to know an exact size.\n" +" * want to transfer ownership of a large amount of data. To avoid copying " +"large amounts of data on the stack, instead store the data on the heap in a " +"`Box` so only the pointer is moved." msgstr "" #: src/std/box-recursive.md:1 @@ -7578,8 +8294,11 @@ msgstr "# Box mit rekursiven Datenstrukturen" #: src/std/box-recursive.md:3 #, fuzzy -msgid "Recursive data types or data types with dynamic sizes need to use a `Box`:" -msgstr "Rekursive Datentypen oder Datentypen mit dynamischer Größe müssen eine `Box` verwenden:" +msgid "" +"Recursive data types or data types with dynamic sizes need to use a `Box`:" +msgstr "" +"Rekursive Datentypen oder Datentypen mit dynamischer Größe müssen eine `Box` " +"verwenden:" #: src/std/box-recursive.md:5 src/std/box-niche.md:3 msgid "" @@ -7591,7 +8310,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" "```" @@ -7601,30 +8321,38 @@ msgstr "" msgid "" "```bob\n" " Stack Heap\n" -".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - - -.\n" +".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - " +"- -.\n" ": : : :\n" -": list : : :\n" -": +------+----+----+ : : +------+----+----+ +------+----+----+ :\n" -": | Cons | 1 | o--+----+-----+--->| Cons | 2 | o--+--->| Nil | // | // | :\n" -": +------+----+----+ : : +------+----+----+ +------+----+----+ :\n" +": " +"list : : :\n" +": +------+----+----+ : : +------+----+----+ +------+----+----" +"+ :\n" +": | Cons | 1 | o--+----+-----+--->| Cons | 2 | o--+--->| Nil | // | // " +"| :\n" +": +------+----+----+ : : +------+----+----+ +------+----+----" +"+ :\n" ": : : :\n" ": : : :\n" -"'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - - -'\n" +"'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - " +"- -'\n" "```" msgstr "" #: src/std/box-recursive.md:33 msgid "" -"* If the `Box` was not used here and we attempted to embed a `List` directly into the `List`,\n" -"the compiler would not compute a fixed size of the struct in memory, it would look infinite.\n" +"* If the `Box` was not used here and we attempted to embed a `List` directly " +"into the `List`,\n" +"the compiler would not compute a fixed size of the struct in memory, it " +"would look infinite.\n" "\n" -"* `Box` solves this problem as it has the same size as a regular pointer and just points at the " -"next\n" +"* `Box` solves this problem as it has the same size as a regular pointer and " +"just points at the next\n" "element of the `List` in the heap.\n" "\n" -"* Remove the `Box` in the List definition and show the compiler error. \"Recursive with " -"indirection\" is a hint you might want to use a Box or reference of some kind, instead of storing " -"a value directly. \n" +"* Remove the `Box` in the List definition and show the compiler error. " +"\"Recursive with indirection\" is a hint you might want to use a Box or " +"reference of some kind, instead of storing a value directly. \n" " " msgstr "" @@ -7636,25 +8364,33 @@ msgstr "# Nischenoptimierung" #: src/std/box-niche.md:16 #, fuzzy msgid "" -"A `Box` cannot be empty, so the pointer is always valid and non-`null`. This\n" +"A `Box` cannot be empty, so the pointer is always valid and non-`null`. " +"This\n" "allows the compiler to optimize the memory layout:" msgstr "" -"Eine „Box“ kann nicht leer sein, daher ist der Zeiger immer gültig und nicht „null“. Das\n" +"Eine „Box“ kann nicht leer sein, daher ist der Zeiger immer gültig und nicht " +"„null“. Das\n" "ermöglicht dem Compiler, das Speicherlayout zu optimieren:" #: src/std/box-niche.md:19 msgid "" "```bob\n" " Stack Heap\n" -".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - -.\n" +".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - " +"-.\n" ": : : :\n" -": list : : :\n" -": +----+----+ : : +----+----+ +----+------+ :\n" -": | 1 | o--+-----------+-----+--->| 2 | o--+--->| // | null | :\n" -": +----+----+ : : +----+----+ +----+------+ :\n" +": " +"list : : :\n" +": +----+----+ : : +----+----+ +----+------" +"+ :\n" +": | 1 | o--+-----------+-----+--->| 2 | o--+--->| // | null " +"| :\n" +": +----+----+ : : +----+----+ +----+------" +"+ :\n" ": : : :\n" ": : : :\n" -"`- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - -'\n" +"`- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - " +"-'\n" "```" msgstr "" @@ -7666,11 +8402,12 @@ msgstr "# `Rc`" #: src/std/rc.md:3 #, fuzzy msgid "" -"[`Rc`][1] is a reference-counted shared pointer. Use this when you need to refer\n" +"[`Rc`][1] is a reference-counted shared pointer. Use this when you need to " +"refer\n" "to the same data from multiple places:" msgstr "" -"[`Rc`][1] ist ein referenzgezählter gemeinsamer Zeiger. Verwenden Sie dies, wenn Sie verweisen " -"müssen\n" +"[`Rc`][1] ist ein referenzgezählter gemeinsamer Zeiger. Verwenden Sie dies, " +"wenn Sie verweisen müssen\n" "auf dieselben Daten von mehreren Orten:" #: src/std/rc.md:6 @@ -7691,30 +8428,35 @@ msgstr "" #: src/std/rc.md:18 #, fuzzy msgid "" -"* If you need to mutate the data inside an `Rc`, you will need to wrap the data in\n" +"* If you need to mutate the data inside an `Rc`, you will need to wrap the " +"data in\n" " a type such as [`Cell` or `RefCell`][2].\n" "* See [`Arc`][3] if you are in a multi-threaded context.\n" -"* You can *downgrade* a shared pointer into a [`Weak`][4] pointer to create cycles\n" +"* You can *downgrade* a shared pointer into a [`Weak`][4] pointer to create " +"cycles\n" " that will get dropped." msgstr "" -"Wenn Sie die Daten innerhalb eines „Rc“ mutieren müssen, müssen Sie die Daten einschließen\n" -"ein Typ wie [`Cell` oder `RefCell`][2]. Siehe [`Arc`][3], wenn Sie sich in einem Multithreading " -"befinden\n" +"Wenn Sie die Daten innerhalb eines „Rc“ mutieren müssen, müssen Sie die " +"Daten einschließen\n" +"ein Typ wie [`Cell` oder `RefCell`][2]. Siehe [`Arc`][3], wenn Sie sich in " +"einem Multithreading befinden\n" "Kontext." #: src/std/rc.md:31 msgid "" -"* `Rc`'s count ensures that its contained value is valid for as long as there are references.\n" +"* `Rc`'s count ensures that its contained value is valid for as long as " +"there are references.\n" "* Like C++'s `std::shared_ptr`.\n" -"* `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.\n" -"* `make_mut` actually clones the inner value if necessary (\"clone-on-write\") and returns a " -"mutable reference.\n" +"* `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.\n" +"* `make_mut` actually clones the inner value if necessary (\"clone-on-" +"write\") and returns a mutable reference.\n" "* Use `Rc::strong_count` to check the reference count.\n" -"* 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.\n" +"* 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.\n" "* `Rc::downgrade` gives you a *weakly reference-counted* object to\n" " create cycles that will be dropped properly (likely in combination with\n" " `RefCell`)." @@ -7759,7 +8501,9 @@ msgstr "# Module" #: src/modules.md:3 #, fuzzy msgid "We have seen how `impl` blocks let us namespace functions to a type." -msgstr "Wir haben gesehen, wie `impl`-Blöcke Namensraumfunktionen zu einem Typ machen." +msgstr "" +"Wir haben gesehen, wie `impl`-Blöcke Namensraumfunktionen zu einem Typ " +"machen." #: src/modules.md:5 #, fuzzy @@ -7790,10 +8534,10 @@ 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.\n" -"* Crates are a tree of modules, where a binary crate creates an executable and a library crate " -"compiles to a library.\n" +"* Packages provide functionality and include a `Cargo.toml` file that " +"describes how to build a bundle of 1+ crates.\n" +"* Crates are a tree of modules, where a binary crate creates an executable " +"and a library crate compiles to a library.\n" "* Modules define organization, scope, and are the focus of this section." msgstr "" @@ -7812,10 +8556,12 @@ msgstr "Module sind eine Datenschutzgrenze:" msgid "" "* Module items are private by default (hides implementation details).\n" "* Parent and sibling items are always visible.\n" -"* In other words, if an item is visible in module `foo`, it's visible in all the\n" +"* In other words, if an item is visible in module `foo`, it's visible in all " +"the\n" " descendants of `foo`." msgstr "" -"* Modulelemente sind standardmäßig privat (versteckt Implementierungsdetails).\n" +"* Modulelemente sind standardmäßig privat (versteckt " +"Implementierungsdetails).\n" "* Übergeordnete und gleichgeordnete Elemente sind immer sichtbar." #: src/modules/visibility.md:10 @@ -7854,16 +8600,18 @@ msgstr "" #: src/modules/visibility.md:41 msgid "" -"Additionally, there are advanced `pub(...)` specifiers to restrict the scope of public visibility." +"Additionally, there are advanced `pub(...)` specifiers to restrict the scope " +"of public visibility." msgstr "" #: src/modules/visibility.md:43 msgid "" -"* See the [Rust Reference](https://doc.rust-lang.org/reference/visibility-and-privacy.html#pubin-" -"path-pubcrate-pubsuper-and-pubself).\n" +"* See the [Rust Reference](https://doc.rust-lang.org/reference/visibility-" +"and-privacy.html#pubin-path-pubcrate-pubsuper-and-pubself).\n" "* Configuring `pub(crate)` visibility is a common pattern.\n" "* Less commonly, you can give visibility to a specific path.\n" -"* 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:1 @@ -7888,7 +8636,8 @@ msgid "" " * `bar::foo` refers to `foo` in the `bar` crate." msgstr "" "2. Als absoluter Pfad:\n" -" * `crate::foo` bezieht sich auf `foo` im Stammverzeichnis der aktuellen Kiste,\n" +" * `crate::foo` bezieht sich auf `foo` im Stammverzeichnis der aktuellen " +"Kiste,\n" " * `bar::foo` bezieht sich auf `foo` in der `bar`-Crate." #: src/modules/paths.md:13 @@ -7939,7 +8688,8 @@ msgstr "" #: src/modules/filesystem.md:14 #, fuzzy msgid "Similarly, a `garden::vegetables` module can be found at:" -msgstr "In ähnlicher Weise kann ein `garden::vegetables`-Modul gefunden werden unter:" +msgstr "" +"In ähnlicher Weise kann ein `garden::vegetables`-Modul gefunden werden unter:" #: src/modules/filesystem.md:16 #, fuzzy @@ -7966,14 +8716,16 @@ msgstr "" #: src/modules/filesystem.md:24 msgid "" -"Modules defined in files can be documented, too, using \"inner doc comments\".\n" +"Modules defined in files can be documented, too, using \"inner doc " +"comments\".\n" "These document the item that contains them -- in this case, a module." msgstr "" #: src/modules/filesystem.md:27 msgid "" "```rust,editable,compile_fail\n" -"//! This module implements the garden, including a highly performant germination\n" +"//! This module implements the garden, including a highly performant " +"germination\n" "//! implementation.\n" "\n" "// Re-export types from this module.\n" @@ -7990,8 +8742,8 @@ msgstr "" #: src/modules/filesystem.md:44 msgid "" -"* The change from `module/mod.rs` to `module.rs` doesn't preclude the use of submodules in Rust " -"2018.\n" +"* The change from `module/mod.rs` to `module.rs` doesn't preclude the use of " +"submodules in Rust 2018.\n" " (It was mandatory in Rust 2015.)\n" "\n" " The following is valid:\n" @@ -8004,10 +8756,12 @@ msgid "" " └── sub_module.rs\n" " ```\n" "\n" -"* The main reason for the change is to prevent many files named `mod.rs`, which can be hard\n" +"* The main reason for the change is to prevent many files named `mod.rs`, " +"which can be hard\n" " to distinguish in IDEs.\n" "\n" -"* Rust will look for modules in `modulename/mod.rs` and `modulename.rs`, but this can be changed\n" +"* Rust will look for modules in `modulename/mod.rs` and `modulename.rs`, but " +"this can be changed\n" " with a compiler directive:\n" "\n" " ```rust,ignore\n" @@ -8015,7 +8769,8 @@ msgid "" " mod some_module { }\n" " ```\n" "\n" -" This is useful, for example, if you would like to place tests for a module in a file named\n" +" This is useful, for example, if you would like to place tests for a module " +"in a file named\n" " `some_module_test.rs`, similar to the convention in Go." msgstr "" @@ -8027,7 +8782,9 @@ msgstr "# Tag 2: Nachmittagsübungen" #: src/exercises/day-2/afternoon.md:3 #, fuzzy msgid "The exercises for this afternoon will focus on strings and iterators." -msgstr "Die Übungen für diesen Nachmittag konzentrieren sich auf Strings und Iteratoren." +msgstr "" +"Die Übungen für diesen Nachmittag konzentrieren sich auf Strings und " +"Iteratoren." #: src/exercises/day-2/luhn.md:1 #, fuzzy @@ -8037,23 +8794,28 @@ msgstr "# Luhn-Algorithmus" #: src/exercises/day-2/luhn.md:3 #, fuzzy msgid "" -"The [Luhn algorithm](https://en.wikipedia.org/wiki/Luhn_algorithm) is used to\n" -"validate credit card numbers. The algorithm takes a string as input and does the\n" +"The [Luhn algorithm](https://en.wikipedia.org/wiki/Luhn_algorithm) is used " +"to\n" +"validate credit card numbers. The algorithm takes a string as input and does " +"the\n" "following to validate the credit card number:" msgstr "" -"Dazu dient der [Luhn-Algorithmus](https://en.wikipedia.org/wiki/Luhn_algorithm).\n" -"Kreditkartennummern validieren. Der Algorithmus nimmt eine Zeichenfolge als Eingabe und führt die " -"aus\n" +"Dazu dient der [Luhn-Algorithmus](https://en.wikipedia.org/wiki/" +"Luhn_algorithm).\n" +"Kreditkartennummern validieren. Der Algorithmus nimmt eine Zeichenfolge als " +"Eingabe und führt die aus\n" "Folgendes, um die Kreditkartennummer zu validieren:" #: src/exercises/day-2/luhn.md:7 msgid "" "* Ignore all spaces. Reject number with less than two digits.\n" "\n" -"* Moving from right to left, double every second digit: for the number `1234`,\n" +"* Moving from right to left, double every second digit: for the number " +"`1234`,\n" " we double `3` and `1`.\n" "\n" -"* After doubling a digit, sum the digits. So doubling `7` becomes `14` which\n" +"* After doubling a digit, sum the digits. So doubling `7` becomes `14` " +"which\n" " becomes `5`.\n" "\n" "* Sum all the undoubled and doubled digits.\n" @@ -8067,7 +8829,8 @@ msgid "" "Copy the following code to and implement the\n" "function:" msgstr "" -"Kopieren Sie den folgenden Code nach und implementieren Sie die\n" +"Kopieren Sie den folgenden Code nach und " +"implementieren Sie die\n" "Funktion:" #: src/exercises/day-2/luhn.md:23 @@ -8130,14 +8893,19 @@ msgstr "# Strings und Iteratoren" #: src/exercises/day-2/strings-iterators.md:3 #, fuzzy msgid "" -"In this exercise, you are implementing a routing component of a web server. The\n" -"server is configured with a number of _path prefixes_ which are matched against\n" +"In this exercise, you are implementing a routing component of a web server. " +"The\n" +"server is configured with a number of _path prefixes_ which are matched " +"against\n" "_request paths_. The path prefixes can contain a wildcard character which\n" "matches a full segment. See the unit tests below." msgstr "" -"In dieser Übung implementieren Sie eine Routing-Komponente eines Webservers. Der\n" -"Der Server ist mit einer Reihe von _Pfadpräfixen_ konfiguriert, die abgeglichen werden\n" -"_Anfragepfade_. Die Pfadpräfixe können ein Platzhalterzeichen enthalten, das\n" +"In dieser Übung implementieren Sie eine Routing-Komponente eines Webservers. " +"Der\n" +"Der Server ist mit einer Reihe von _Pfadpräfixen_ konfiguriert, die " +"abgeglichen werden\n" +"_Anfragepfade_. Die Pfadpräfixe können ein Platzhalterzeichen enthalten, " +"das\n" "entspricht einem vollständigen Segment. Siehe die Unit-Tests unten." #: src/exercises/day-2/strings-iterators.md:8 @@ -8146,7 +8914,8 @@ msgid "" "Copy the following code to and make the tests\n" "pass. Try avoiding allocating a `Vec` for your intermediate results:" msgstr "" -"Kopieren Sie den folgenden Code nach und führen Sie die Tests durch\n" +"Kopieren Sie den folgenden Code nach und " +"führen Sie die Tests durch\n" "passieren. Versuchen Sie, Ihren Zwischenergebnissen kein „Vec“ zuzuweisen:" #: src/exercises/day-2/strings-iterators.md:12 @@ -8162,12 +8931,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" @@ -8185,7 +8957,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" @@ -8209,7 +8982,8 @@ msgid "" "* Traits: deriving traits, default methods, and important standard library\n" " traits.\n" "\n" -"* Generics: generic data types, generic methods, monomorphization, and trait\n" +"* Generics: generic data types, generic methods, monomorphization, and " +"trait\n" " objects.\n" "\n" "* Error handling: panics, `Result`, and the try operator `?`.\n" @@ -8228,10 +9002,12 @@ msgstr "# Generika" #: src/generics.md:3 #, fuzzy msgid "" -"Rust support generics, which lets you abstract an algorithm (such as sorting)\n" +"Rust support generics, which lets you abstract an algorithm (such as " +"sorting)\n" "over the types used in the algorithm." msgstr "" -"Rust unterstützt Generika, mit denen Sie einen Algorithmus abstrahieren können (z. B. Sortieren)\n" +"Rust unterstützt Generika, mit denen Sie einen Algorithmus abstrahieren " +"können (z. B. Sortieren)\n" "über die im Algorithmus verwendeten Typen." #: src/generics/data-types.md:1 @@ -8302,21 +9078,24 @@ msgstr "" #: src/generics/methods.md:25 #, fuzzy msgid "" -"* *Q:* Why `T` is specified twice in `impl Point {}`? Isn't that redundant?\n" -" * This is because it is a generic implementation section for generic type. They are " -"independently generic.\n" +"* *Q:* Why `T` is specified twice in `impl Point {}`? Isn't that " +"redundant?\n" +" * This is because it is a generic implementation section for generic " +"type. They are independently generic.\n" " * It means these methods are defined for any `T`.\n" " * It is possible to write `impl Point { .. }`. \n" -" * `Point` is still generic and you can use `Point`, but methods in this block will only " -"be available for `Point`." +" * `Point` is still generic and you can use `Point`, but methods " +"in this block will only be available for `Point`." msgstr "" -"* *F:* Warum wird `T` zweimal in `impl Point {}` angegeben? Ist das nicht überflüssig?\n" -" * Dies liegt daran, dass es sich um einen generischen Implementierungsabschnitt für einen " -"generischen Typ handelt. Sie sind unabhängig generisch.\n" +"* *F:* Warum wird `T` zweimal in `impl Point {}` angegeben? Ist das " +"nicht überflüssig?\n" +" * Dies liegt daran, dass es sich um einen generischen " +"Implementierungsabschnitt für einen generischen Typ handelt. Sie sind " +"unabhängig generisch.\n" " * Dies bedeutet, dass diese Methoden für jedes `T` definiert sind.\n" " * Es ist möglich `impl Point { .. }` zu schreiben.\n" -" * „Point“ ist immer noch generisch und Sie können „Point“ verwenden, aber Methoden in " -"diesem Block sind nur für „Point“ verfügbar." +" * „Point“ ist immer noch generisch und Sie können „Point“ " +"verwenden, aber Methoden in diesem Block sind nur für „Point“ verfügbar." #: src/generics/monomorphization.md:1 #, fuzzy @@ -8326,7 +9105,9 @@ msgstr "# Monomorphisierung" #: src/generics/monomorphization.md:3 #, fuzzy msgid "Generic code is turned into non-generic code based on the call sites:" -msgstr "Basierend auf den Aufrufseiten wird generischer Code in nicht generischen Code umgewandelt:" +msgstr "" +"Basierend auf den Aufrufseiten wird generischer Code in nicht generischen " +"Code umgewandelt:" #: src/generics/monomorphization.md:5 msgid "" @@ -8366,11 +9147,12 @@ msgstr "" #: src/generics/monomorphization.md:31 #, fuzzy msgid "" -"This is a zero-cost abstraction: you get exactly the same result as if you had\n" +"This is a zero-cost abstraction: you get exactly the same result as if you " +"had\n" "hand-coded the data structures without the abstraction." msgstr "" -"Dies ist eine Null-Kosten-Abstraktion: Sie erhalten genau das gleiche Ergebnis, als ob Sie es " -"hätten\n" +"Dies ist eine Null-Kosten-Abstraktion: Sie erhalten genau das gleiche " +"Ergebnis, als ob Sie es hätten\n" "die Datenstrukturen ohne die Abstraktion von Hand codiert." #: src/traits.md:1 @@ -8380,8 +9162,11 @@ msgstr "# Züge" #: src/traits.md:3 #, fuzzy -msgid "Rust lets you abstract over types with traits. They're similar to interfaces:" -msgstr "Mit Rust können Sie über Typen mit Merkmalen abstrahieren. Sie ähneln Schnittstellen:" +msgid "" +"Rust lets you abstract over types with traits. They're similar to interfaces:" +msgstr "" +"Mit Rust können Sie über Typen mit Merkmalen abstrahieren. Sie ähneln " +"Schnittstellen:" #: src/traits.md:5 msgid "" @@ -8404,7 +9189,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" @@ -8428,7 +9214,9 @@ msgid "# Trait Objects" msgstr "# Eigenschaftsobjekte" #: src/traits/trait-objects.md:3 -msgid "Trait objects allow for values of different types, for instance in a collection:" +msgid "" +"Trait objects allow for values of different types, for instance in a " +"collection:" msgstr "" #: src/traits/trait-objects.md:5 @@ -8452,7 +9240,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" @@ -8477,29 +9266,50 @@ msgstr "Speicherlayout nach Zuweisung von `xs`:" msgid "" "```bob\n" " Stack Heap\n" -".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - -.\n" +".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - " +"- -.\n" ": : : :\n" -": pets : : :\n" -": +-----------+-------+ : : +-----+-----+ :\n" -": | ptr | o---+---+-----+-->| o o | o o | :\n" -": | len | 2 | : : +-|-|-+-|-|-+ :\n" -": | capacity | 2 | : : | | | | +---------------+ :\n" -": +-----------+-------+ : : | | | '-->| name: \"Fido\" | :\n" -": : : | | | +---------------+ :\n" -"`- - - - - - - - - - - - - -' : | | | :\n" -" : | | | +----------------------+ : \n" -" : | | '---->| \"::name\" | :\n" -" : | | +----------------------+ : \n" -" : | | : \n" -" : | | +-+ : \n" -" : | '-->|\\| : \n" -" : | +-+ : \n" -" : | : \n" -" : | +----------------------+ : \n" -" : '---->| \"::name\" | : \n" -" : +----------------------+ :\n" +": " +"pets : : :\n" +": +-----------+-------+ : : +-----+-----" +"+ :\n" +": | ptr | o---+---+-----+-->| o o | o o " +"| :\n" +": | len | 2 | : : +-|-|-+-|-|-" +"+ :\n" +": | capacity | 2 | : : | | | | +---------------" +"+ :\n" +": +-----------+-------+ : : | | | '-->| name: \"Fido\" " +"| :\n" +": : : | | | +---------------" +"+ :\n" +"`- - - - - - - - - - - - - -' : | | " +"| :\n" +" : | | | +----------------------" +"+ : \n" +" : | | '---->| \"::name\" " +"| :\n" +" : | | +----------------------" +"+ : \n" +" : | " +"| : \n" +" : | | +-" +"+ : \n" +" : | '-->|" +"\\| : \n" +" : | +-" +"+ : \n" +" : " +"| : \n" +" : | +----------------------" +"+ : \n" +" : '---->| \"::name\" " +"| : \n" +" : +----------------------" +"+ :\n" " : :\n" -" '- - - - - - - - - - - - - - - - - - - - - - -'\n" +" '- - - - - - - - - - - - - - - - - - - - - " +"- -'\n" "\n" "```" msgstr "" @@ -8507,30 +9317,36 @@ msgstr "" #: src/traits/trait-objects.md:72 #, fuzzy msgid "" -"* Types that implement a given trait may be of different sizes. This makes it impossible to have " -"things like `Vec` in the example above.\n" -"* `dyn Pet` is a way to tell the compiler about a dynamically sized type that implements `Pet`.\n" -"* 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.\n" +"* Types that implement a given trait may be of different sizes. This makes " +"it impossible to have things like `Vec` in the example above.\n" +"* `dyn Pet` is a way to tell the compiler about a dynamically sized type " +"that implements `Pet`.\n" +"* 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.\n" "* Compare these outputs in the above example:\n" " ```rust,ignore\n" -" println!(\"{} {}\", std::mem::size_of::(), std::mem::size_of::());\n" -" println!(\"{} {}\", std::mem::size_of::<&Dog>(), std::mem::size_of::<&Cat>());\n" +" println!(\"{} {}\", std::mem::size_of::(), std::mem::size_of::" +"());\n" +" println!(\"{} {}\", std::mem::size_of::<&Dog>(), std::mem::size_of::" +"<&Cat>());\n" " println!(\"{}\", std::mem::size_of::<&dyn Pet>());\n" " println!(\"{}\", std::mem::size_of::>());\n" " ```" msgstr "" -"* Merkmale können vorimplementierte (Standard-)Methoden und Methoden spezifizieren, die Benutzer " -"selbst implementieren müssen. Methoden mit Standardimplementierungen können sich auf erforderliche " -"Methoden stützen.\n" -"* Typen, die ein bestimmtes Merkmal implementieren, können unterschiedlich groß sein. Das macht es " -"unmöglich Dinge wie `Vec` im obigen Beispiel zu haben.\n" -"* „dyn Greet“ ist eine Möglichkeit, dem Compiler einen Typ mit dynamischer Größe mitzuteilen, der " -"„Greet“ implementiert.\n" -"* Im Beispiel enthält `pets` Fat Pointer auf Objekte, die `Greet` implementieren. Der Fat Pointer " -"besteht aus zwei Komponenten, einem Zeiger auf das tatsächliche Objekt und einem Zeiger auf die " -"virtuelle Methodentabelle für die \"Greet\"-Implementierung dieses bestimmten Objekts." +"* Merkmale können vorimplementierte (Standard-)Methoden und Methoden " +"spezifizieren, die Benutzer selbst implementieren müssen. Methoden mit " +"Standardimplementierungen können sich auf erforderliche Methoden stützen.\n" +"* Typen, die ein bestimmtes Merkmal implementieren, können unterschiedlich " +"groß sein. Das macht es unmöglich Dinge wie `Vec` im obigen Beispiel " +"zu haben.\n" +"* „dyn Greet“ ist eine Möglichkeit, dem Compiler einen Typ mit dynamischer " +"Größe mitzuteilen, der „Greet“ implementiert.\n" +"* Im Beispiel enthält `pets` Fat Pointer auf Objekte, die `Greet` " +"implementieren. Der Fat Pointer besteht aus zwei Komponenten, einem Zeiger " +"auf das tatsächliche Objekt und einem Zeiger auf die virtuelle " +"Methodentabelle für die \"Greet\"-Implementierung dieses bestimmten Objekts." #: src/traits/deriving-traits.md:1 #, fuzzy @@ -8569,7 +9385,8 @@ msgstr "# Standardmethoden" #: src/traits/default-methods.md:3 #, fuzzy msgid "Traits can implement behavior in terms of other trait methods:" -msgstr "Traits können Verhalten im Sinne anderer Trait-Methoden implementieren:" +msgstr "" +"Traits können Verhalten im Sinne anderer Trait-Methoden implementieren:" #: src/traits/default-methods.md:5 msgid "" @@ -8601,8 +9418,10 @@ msgstr "" #: src/traits/default-methods.md:32 msgid "" -"* Traits may specify pre-implemented (default) methods and methods that users are required to\n" -" implement themselves. Methods with default implementations can rely on required methods.\n" +"* Traits may specify pre-implemented (default) methods and methods that " +"users are required to\n" +" implement themselves. Methods with default implementations can rely on " +"required methods.\n" "\n" "* Move method `not_equal` to a new trait `NotEqual`.\n" "\n" @@ -8627,7 +9446,8 @@ msgid "" " }\n" " }\n" " ```\n" -" * With the blanket implementation, you no longer need `NotEqual` as a super trait for `Equal`.\n" +" * With the blanket implementation, you no longer need `NotEqual` as a " +"super trait for `Equal`.\n" " " msgstr "" @@ -8639,10 +9459,12 @@ msgstr "# Eigenschaftsgrenzen" #: src/traits/trait-bounds.md:3 #, fuzzy msgid "" -"When working with generics, you often want to require the types to implement\n" +"When working with generics, you often want to require the types to " +"implement\n" "some trait, so that you can call this trait's methods." msgstr "" -"Wenn Sie mit Generika arbeiten, möchten Sie häufig die Typen einschränken. Du kannst das\n" +"Wenn Sie mit Generika arbeiten, möchten Sie häufig die Typen einschränken. " +"Du kannst das\n" "mit `T:Trait` oder `impl Trait`:" #: src/traits/trait-bounds.md:6 @@ -8698,14 +9520,14 @@ msgstr "" msgid "" "* It declutters the function signature if you have many parameters.\n" "* It has additional features making it more powerful.\n" -" * If someone asks, the extra feature is that the type on the left of \":\" can be arbitrary, " -"like `Option`.\n" +" * If someone asks, the extra feature is that the type on the left of \":" +"\" can be arbitrary, like `Option`.\n" " " msgstr "" "* Es entrümpelt die Funktionssignatur, wenn Sie viele Parameter haben.\n" "* Es hat zusätzliche Funktionen, die es leistungsfähiger machen.\n" -" * Wenn jemand fragt, das zusätzliche Feature ist, dass der Typ links von \":\" beliebig sein " -"kann, wie `Option`.\n" +" * Wenn jemand fragt, das zusätzliche Feature ist, dass der Typ links von " +"\":\" beliebig sein kann, wie `Option`.\n" " \n" "" @@ -8720,7 +9542,8 @@ msgid "" "Similar to trait bounds, an `impl Trait` syntax can be used in function\n" "arguments and return values:" msgstr "" -"Ähnlich wie Merkmalsgrenzen kann eine \"impl Trait\"-Syntax in Funktion verwendet werden\n" +"Ähnlich wie Merkmalsgrenzen kann eine \"impl Trait\"-Syntax in Funktion " +"verwendet werden\n" "Argumente und Rückgabewerte:" #: src/traits/impl-trait.md:6 @@ -8744,58 +9567,71 @@ msgstr "" msgid "* `impl Trait` allows you to work with types which you cannot name." msgstr "" "* `impl Trait` kann nicht mit der `::<>` Turbofish-Syntax verwendet werden.\n" -"* `impl Trait` ermöglicht es Ihnen, mit Typen zu arbeiten, die Sie nicht benennen können." +"* `impl Trait` ermöglicht es Ihnen, mit Typen zu arbeiten, die Sie nicht " +"benennen können." #: src/traits/impl-trait.md:23 #, fuzzy -msgid "The meaning of `impl Trait` is a bit different in the different positions." -msgstr "Die Bedeutung von „impl Trait“ ist in den verschiedenen Positionen etwas unterschiedlich." +msgid "" +"The meaning of `impl Trait` is a bit different in the different positions." +msgstr "" +"Die Bedeutung von „impl Trait“ ist in den verschiedenen Positionen etwas " +"unterschiedlich." #: src/traits/impl-trait.md:25 #, fuzzy msgid "" -"* For a parameter, `impl Trait` is like an anonymous generic parameter with a trait bound.\n" +"* For a parameter, `impl Trait` is like an anonymous generic parameter with " +"a trait bound.\n" "\n" -"* For a return type, it means that the return type is some concrete type that implements the " -"trait,\n" -" without naming the type. This can be useful when you don't want to expose the concrete type in " -"a\n" +"* For a return type, it means that the return type is some concrete type " +"that implements the trait,\n" +" without naming the type. This can be useful when you don't want to expose " +"the concrete type in a\n" " public API.\n" "\n" -" Inference is hard in return position. A function returning `impl Foo` picks\n" -" the concrete type it returns, without writing it out in the source. A function\n" +" Inference is hard in return position. A function returning `impl Foo` " +"picks\n" +" the concrete type it returns, without writing it out in the source. A " +"function\n" " returning a generic type like `collect() -> B` can return any type\n" -" satisfying `B`, and the caller may need to choose one, such as with `let x:\n" +" satisfying `B`, and the caller may need to choose one, such as with `let " +"x:\n" " Vec<_> = foo.collect()` or with the turbofish, `foo.collect::>()`." msgstr "" -"* Für einen Parameter ist `impl Trait` wie ein anonymer generischer Parameter mit einer " -"Eigenschaftsbindung.\n" -"* Für einen Rückgabetyp bedeutet dies, dass der Rückgabetyp ein konkreter Typ ist, der die " -"Eigenschaft implementiert,\n" -" ohne den Typ zu nennen. Dies kann nützlich sein, wenn Sie den konkreten Typ in a nicht verfügbar " -"machen möchten\n" +"* Für einen Parameter ist `impl Trait` wie ein anonymer generischer " +"Parameter mit einer Eigenschaftsbindung.\n" +"* Für einen Rückgabetyp bedeutet dies, dass der Rückgabetyp ein konkreter " +"Typ ist, der die Eigenschaft implementiert,\n" +" ohne den Typ zu nennen. Dies kann nützlich sein, wenn Sie den konkreten " +"Typ in a nicht verfügbar machen möchten\n" " öffentliche API." #: src/traits/impl-trait.md:37 #, fuzzy msgid "" -"This example is great, because it uses `impl Display` twice. It helps to explain that\n" -"nothing here enforces that it is _the same_ `impl Display` type. If we used a single \n" -"`T: Display`, it would enforce the constraint that input `T` and return `T` type are the same " -"type.\n" -"It would not work for this particular function, as the type we expect as input is likely not\n" -"what `format!` returns. If we wanted to do the same via `: Display` syntax, we'd need two\n" +"This example is great, because it uses `impl Display` twice. It helps to " +"explain that\n" +"nothing here enforces that it is _the same_ `impl Display` type. If we used " +"a single \n" +"`T: Display`, it would enforce the constraint that input `T` and return `T` " +"type are the same type.\n" +"It would not work for this particular function, as the type we expect as " +"input is likely not\n" +"what `format!` returns. If we wanted to do the same via `: Display` syntax, " +"we'd need two\n" "independent generic parameters." msgstr "" -"Dieses Beispiel ist großartig, weil es `impl Display` zweimal verwendet. Es hilft, das zu " -"erklären\n" -"nichts hier erzwingt, dass es _derselbe_ `impl Display`-Typ ist. Wenn wir eine Single benutzten\n" -"`T: Display`, es würde die Einschränkung erzwingen, dass der Eingabe-`T`- und der Rückgabe-`T-Typ " -"derselbe Typ sind.\n" -"Es würde für diese spezielle Funktion nicht funktionieren, da der Typ, den wir als Eingabe " -"erwarten, wahrscheinlich nicht der Fall ist\n" -"welches `format!` zurückgibt. Wenn wir dasselbe über die `: Display`-Syntax machen wollten, " -"bräuchten wir zwei\n" +"Dieses Beispiel ist großartig, weil es `impl Display` zweimal verwendet. Es " +"hilft, das zu erklären\n" +"nichts hier erzwingt, dass es _derselbe_ `impl Display`-Typ ist. Wenn wir " +"eine Single benutzten\n" +"`T: Display`, es würde die Einschränkung erzwingen, dass der Eingabe-`T`- " +"und der Rückgabe-`T-Typ derselbe Typ sind.\n" +"Es würde für diese spezielle Funktion nicht funktionieren, da der Typ, den " +"wir als Eingabe erwarten, wahrscheinlich nicht der Fall ist\n" +"welches `format!` zurückgibt. Wenn wir dasselbe über die `: Display`-Syntax " +"machen wollten, bräuchten wir zwei\n" "unabhängige generische Parameter.\n" " \n" "" @@ -8807,8 +9643,12 @@ msgstr "# Wichtige Eigenschaften" #: src/traits/important-traits.md:3 #, fuzzy -msgid "We will now look at some of the most common traits of the Rust standard library:" -msgstr "Wir werden uns nun einige der häufigsten Merkmale der Rust-Standardbibliothek ansehen:" +msgid "" +"We will now look at some of the most common traits of the Rust standard " +"library:" +msgstr "" +"Wir werden uns nun einige der häufigsten Merkmale der Rust-" +"Standardbibliothek ansehen:" #: src/traits/important-traits.md:5 #, fuzzy @@ -8834,7 +9674,8 @@ msgstr "# Iteratoren" #: src/traits/iterator.md:3 #, fuzzy msgid "You can implement the [`Iterator`][1] trait on your own types:" -msgstr "Sie können das `Iterator`-Merkmal für Ihre eigenen Typen implementieren:" +msgstr "" +"Sie können das `Iterator`-Merkmal für Ihre eigenen Typen implementieren:" #: src/traits/iterator.md:5 msgid "" @@ -8866,17 +9707,18 @@ msgstr "" #: src/traits/iterator.md:32 msgid "" -"* The `Iterator` trait implements many common functional programming operations over collections \n" -" (e.g. `map`, `filter`, `reduce`, etc). This is the trait where you can find all the " -"documentation\n" -" about them. In Rust these functions should produce the code as efficient as equivalent " -"imperative\n" +"* The `Iterator` trait implements many common functional programming " +"operations over collections \n" +" (e.g. `map`, `filter`, `reduce`, etc). This is the trait where you can " +"find all the documentation\n" +" about them. In Rust these functions should produce the code as efficient " +"as equivalent imperative\n" " implementations.\n" " \n" -"* `IntoIterator` is the trait that makes for loops work. It is implemented by collection types " -"such as\n" -" `Vec` and references to them such as `&Vec` and `&[T]`. Ranges also implement it. This is " -"why\n" +"* `IntoIterator` is the trait that makes for loops work. It is implemented " +"by collection types such as\n" +" `Vec` and references to them such as `&Vec` and `&[T]`. Ranges also " +"implement it. This is why\n" " you can iterate over a vector with `for i in some_vec { .. }` but\n" " `some_vec.next()` doesn't exist." msgstr "" @@ -8888,8 +9730,10 @@ msgstr "# FromIterator" #: src/traits/from-iterator.md:3 #, fuzzy -msgid "[`FromIterator`][1] lets you build a collection from an [`Iterator`][2]." -msgstr "Mit „FromIterator“ können Sie eine Sammlung aus einem „Iterator“ erstellen." +msgid "" +"[`FromIterator`][1] lets you build a collection from an [`Iterator`][2]." +msgstr "" +"Mit „FromIterator“ können Sie eine Sammlung aus einem „Iterator“ erstellen." #: src/traits/from-iterator.md:5 msgid "" @@ -8935,8 +9779,10 @@ msgstr "# `Von` und `Nach`" #: src/traits/from-into.md:3 #, fuzzy -msgid "Types implement [`From`][1] and [`Into`][2] to facilitate type conversions:" -msgstr "Typen implementieren „From“ und „Into“, um Typkonvertierungen zu erleichtern:" +msgid "" +"Types implement [`From`][1] and [`Into`][2] to facilitate type conversions:" +msgstr "" +"Typen implementieren „From“ und „Into“, um Typkonvertierungen zu erleichtern:" #: src/traits/from-into.md:5 msgid "" @@ -8953,7 +9799,8 @@ msgstr "" #: src/traits/from-into.md:15 #, fuzzy -msgid "[`Into`][2] is automatically implemented when [`From`][1] is implemented:" +msgid "" +"[`Into`][2] is automatically implemented when [`From`][1] is implemented:" msgstr "„Into“ wird automatisch implementiert, wenn „From“ implementiert wird:" #: src/traits/from-into.md:17 @@ -8972,19 +9819,21 @@ msgstr "" #: src/traits/from-into.md:29 #, fuzzy msgid "" -"* That's why it is common to only implement `From`, as your type will get `Into` implementation " -"too.\n" -"* When declaring a function argument input type like \"anything that can be converted into a " -"`String`\", the rule is opposite, you should use `Into`.\n" -" Your function will accept types that implement `From` and those that _only_ implement `Into`.\n" +"* That's why it is common to only implement `From`, as your type will get " +"`Into` implementation too.\n" +"* When declaring a function argument input type like \"anything that can be " +"converted into a `String`\", the rule is opposite, you should use `Into`.\n" +" Your function will accept types that implement `From` and those that " +"_only_ implement `Into`.\n" " " msgstr "" -"* Aus diesem Grund ist es üblich, nur `From` zu implementieren, da Ihr Typ auch die `Into`-" -"Implementierung erhält.\n" -"* Beim Deklarieren eines Funktionsargument-Eingabetyps wie „alles, was in einen „String“ " -"konvertiert werden kann“, ist die Regel umgekehrt, Sie sollten „Into“ verwenden.\n" -" Ihre Funktion akzeptiert Typen, die `From` implementieren, und solche, die _nur_ `Into` " -"implementieren.\n" +"* Aus diesem Grund ist es üblich, nur `From` zu implementieren, da Ihr Typ " +"auch die `Into`-Implementierung erhält.\n" +"* Beim Deklarieren eines Funktionsargument-Eingabetyps wie „alles, was in " +"einen „String“ konvertiert werden kann“, ist die Regel umgekehrt, Sie " +"sollten „Into“ verwenden.\n" +" Ihre Funktion akzeptiert Typen, die `From` implementieren, und solche, die " +"_nur_ `Into` implementieren.\n" " \n" "" @@ -8995,7 +9844,8 @@ msgstr "# `Lesen` und `Schreiben`" #: src/traits/read-write.md:3 #, fuzzy -msgid "Using [`Read`][1] and [`BufRead`][2], you can abstract over `u8` sources:" +msgid "" +"Using [`Read`][1] and [`BufRead`][2], you can abstract over `u8` sources:" msgstr "Mit `Read` und `BufRead` können Sie über `u8`-Quellen abstrahieren:" #: src/traits/read-write.md:5 @@ -9022,7 +9872,8 @@ msgstr "" #: src/traits/read-write.md:23 #, fuzzy msgid "Similarly, [`Write`][3] lets you abstract over `u8` sinks:" -msgstr "In ähnlicher Weise können Sie mit \"Write\" über \"u8\"-Senken abstrahieren:" +msgstr "" +"In ähnlicher Weise können Sie mit \"Write\" über \"u8\"-Senken abstrahieren:" #: src/traits/read-write.md:25 msgid "" @@ -9051,10 +9902,12 @@ msgstr "# Die `Drop`-Eigenschaft" #: src/traits/drop.md:3 #, fuzzy -msgid "Values which implement [`Drop`][1] can specify code to run when they go out of scope:" +msgid "" +"Values which implement [`Drop`][1] can specify code to run when they go out " +"of scope:" msgstr "" -"Werte, die \"Drop\" implementieren, können Code angeben, der ausgeführt werden soll, wenn sie den " -"Gültigkeitsbereich verlassen:" +"Werte, die \"Drop\" implementieren, können Code angeben, der ausgeführt " +"werden soll, wenn sie den Gültigkeitsbereich verlassen:" #: src/traits/drop.md:5 msgid "" @@ -9095,14 +9948,17 @@ msgstr "Diskussionspunkte:" #, fuzzy msgid "" "* Why doesn't `Drop::drop` take `self`?\n" -" * Short-answer: If it did, `std::mem::drop` would be called at the end of\n" +" * Short-answer: If it did, `std::mem::drop` would be called at the end " +"of\n" " the block, resulting in another call to `Drop::drop`, and a stack\n" " overflow!\n" "* Try replacing `drop(a)` with `a.drop()`." msgstr "" "* Warum nimmt `Drop::drop` nicht `self`?\n" -" * Kurzantwort: Wenn ja, würde `std::mem::drop` am Ende von aufgerufen werden\n" -" den Block, was zu einem weiteren Aufruf von `Drop::drop` und einem Stack führt\n" +" * Kurzantwort: Wenn ja, würde `std::mem::drop` am Ende von aufgerufen " +"werden\n" +" den Block, was zu einem weiteren Aufruf von `Drop::drop` und einem " +"Stack führt\n" " Überlauf!\n" "* Versuchen Sie, `drop(a)` durch `a.drop()` zu ersetzen." @@ -9153,14 +10009,16 @@ msgstr "" #: src/traits/default.md:40 msgid "" -" * It can be implemented directly or it can be derived via `#[derive(Default)]`.\n" -" * Derived implementation will produce an instance where all fields are set to their default " -"values.\n" +" * It can be implemented directly or it can be derived via " +"`#[derive(Default)]`.\n" +" * Derived implementation will produce an instance where all fields are set " +"to their default values.\n" " * This means all types in the struct must implement `Default` too.\n" -" * Standard Rust types often implement `Default` with reasonable values (e.g. `0`, `\"\"`, etc).\n" +" * Standard Rust types often implement `Default` with reasonable values (e." +"g. `0`, `\"\"`, etc).\n" " * The partial struct copy works nicely with default.\n" -" * 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/operators.md:1 @@ -9171,7 +10029,8 @@ msgstr "# `Hinzufügen`, `Mul`, ..." #: src/traits/operators.md:3 #, fuzzy msgid "Operator overloading is implemented via traits in [`std::ops`][1]:" -msgstr "Das Überladen von Operatoren wird über Traits in `std::ops` implementiert:" +msgstr "" +"Das Überladen von Operatoren wird über Traits in `std::ops` implementiert:" #: src/traits/operators.md:5 msgid "" @@ -9198,27 +10057,37 @@ msgstr "" #: src/traits/operators.md:28 #, fuzzy msgid "" -"* You could implement `Add` for `&Point`. In which situations is that useful? \n" +"* You could implement `Add` for `&Point`. In which situations is that " +"useful? \n" " * Answer: `Add:add` consumes `self`. If type `T` for which you are\n" -" overloading the operator is not `Copy`, you should consider overloading\n" -" the operator for `&T` as well. This avoids unnecessary cloning on the\n" +" overloading the operator is not `Copy`, you should consider " +"overloading\n" +" the operator for `&T` as well. This avoids unnecessary cloning on " +"the\n" " call site.\n" -"* Why is `Output` an associated type? Could it be made a type parameter of the method?\n" -" * Short answer: Function type parameters are controlled by the caller, but\n" -" associated types (like `Output`) are controlled by the implementor of a\n" +"* Why is `Output` an associated type? Could it be made a type parameter of " +"the method?\n" +" * Short answer: Function type parameters are controlled by the caller, " +"but\n" +" associated types (like `Output`) are controlled by the implementor " +"of a\n" " trait.\n" "* You could implement `Add` for two different types, e.g.\n" " `impl Add<(i32, i32)> for Point` would add a tuple to a `Point`." msgstr "" -"* Sie könnten `Add` für `&Point` implementieren. In welchen Situationen ist das sinnvoll?\n" -" * Antwort: `Add:add` verbraucht `self`. Geben Sie \"T\" ein, für das Sie sind\n" -" Das Überladen des Operators ist nicht \"Kopieren\", Sie sollten das Überladen in Betracht " -"ziehen\n" +"* Sie könnten `Add` für `&Point` implementieren. In welchen Situationen ist " +"das sinnvoll?\n" +" * Antwort: `Add:add` verbraucht `self`. Geben Sie \"T\" ein, für das Sie " +"sind\n" +" Das Überladen des Operators ist nicht \"Kopieren\", Sie sollten das " +"Überladen in Betracht ziehen\n" " auch der Operator für `&T`. Dies vermeidet unnötiges Klonen auf der\n" " Website aufrufen.\n" -"* Warum ist `Output` ein assoziierter Typ? Könnte es ein Typparameter gemacht werden?\n" +"* Warum ist `Output` ein assoziierter Typ? Könnte es ein Typparameter " +"gemacht werden?\n" " * Kurze Antwort: Typparameter werden vom Aufrufer gesteuert, aber\n" -" Zugehörige Typen (wie `Output`) werden vom Implementierer von a gesteuert\n" +" Zugehörige Typen (wie `Output`) werden vom Implementierer von a " +"gesteuert\n" " Merkmal." #: src/traits/closures.md:1 @@ -9229,15 +10098,19 @@ msgstr "# Schließungen" #: src/traits/closures.md:3 #, fuzzy msgid "" -"Closures or lambda expressions have types which cannot be named. However, they\n" +"Closures or lambda expressions have types which cannot be named. However, " +"they\n" "implement special [`Fn`](https://doc.rust-lang.org/std/ops/trait.Fn.html),\n" "[`FnMut`](https://doc.rust-lang.org/std/ops/trait.FnMut.html), and\n" "[`FnOnce`](https://doc.rust-lang.org/std/ops/trait.FnOnce.html) traits:" msgstr "" -"Closures oder Lambda-Ausdrücke haben Typen, die nicht benannt werden können. Allerdings sie\n" -"spezielles [`Fn`] implementieren (https://doc.rust-lang.org/std/ops/trait.Fn.html),\n" +"Closures oder Lambda-Ausdrücke haben Typen, die nicht benannt werden können. " +"Allerdings sie\n" +"spezielles [`Fn`] implementieren (https://doc.rust-lang.org/std/ops/trait.Fn." +"html),\n" "[`FnMut`](https://doc.rust-lang.org/std/ops/trait.FnMut.html) und\n" -"[`FnOnce`](https://doc.rust-lang.org/std/ops/trait.FnOnce.html) Eigenschaften:" +"[`FnOnce`](https://doc.rust-lang.org/std/ops/trait.FnOnce.html) " +"Eigenschaften:" #: src/traits/closures.md:8 msgid "" @@ -9259,41 +10132,46 @@ msgstr "" #: src/traits/closures.md:25 #, fuzzy -msgid "If you have an `FnOnce`, you may only call it once. It might consume captured values." +msgid "" +"If you have an `FnOnce`, you may only call it once. It might consume " +"captured values." msgstr "" -"Wenn Sie ein `FnOnce` haben, können Sie es nur einmal aufrufen. Es kann erfasste Werte verbrauchen." +"Wenn Sie ein `FnOnce` haben, können Sie es nur einmal aufrufen. Es kann " +"erfasste Werte verbrauchen." #: src/traits/closures.md:27 #, fuzzy msgid "" -"An `FnMut` might mutate captured values, so you can call it multiple times but not concurrently." +"An `FnMut` might mutate captured values, so you can call it multiple times " +"but not concurrently." msgstr "" -"Ein `FnMut` kann erfasste Werte mutieren, sodass Sie es mehrmals, aber nicht gleichzeitig aufrufen " -"können." +"Ein `FnMut` kann erfasste Werte mutieren, sodass Sie es mehrmals, aber nicht " +"gleichzeitig aufrufen können." #: src/traits/closures.md:29 #, fuzzy msgid "" -"An `Fn` neither consumes nor mutates captured values, or perhaps captures nothing at all, so it " -"can\n" +"An `Fn` neither consumes nor mutates captured values, or perhaps captures " +"nothing at all, so it can\n" "be called multiple times concurrently." msgstr "" -"Ein „Fn“ verbraucht oder mutiert erfasste Werte nicht oder erfasst vielleicht gar nichts, also " -"kann es das\n" +"Ein „Fn“ verbraucht oder mutiert erfasste Werte nicht oder erfasst " +"vielleicht gar nichts, also kann es das\n" "mehrmals gleichzeitig aufgerufen werden." #: src/traits/closures.md:32 #, fuzzy msgid "" -"`FnMut` is a subtype of `FnOnce`. `Fn` is a subtype of `FnMut` and `FnOnce`. I.e. you can use an\n" -"`FnMut` wherever an `FnOnce` is called for, and you can use an `Fn` wherever an `FnMut` or " -"`FnOnce`\n" +"`FnMut` is a subtype of `FnOnce`. `Fn` is a subtype of `FnMut` and `FnOnce`. " +"I.e. you can use an\n" +"`FnMut` wherever an `FnOnce` is called for, and you can use an `Fn` wherever " +"an `FnMut` or `FnOnce`\n" "is called for." msgstr "" -"`FnMut` ist ein Untertyp von `FnOnce`. „Fn“ ist ein Untertyp von „FnMut“ und „FnOnce“. D.h. Sie " -"können eine verwenden\n" -"„FnMut“, wo immer ein „FnOnce“ verlangt wird, und Sie können ein „Fn“ überall dort verwenden, wo " -"ein „FnMut“ oder „FnOnce“ steht\n" +"`FnMut` ist ein Untertyp von `FnOnce`. „Fn“ ist ein Untertyp von „FnMut“ und " +"„FnOnce“. D.h. Sie können eine verwenden\n" +"„FnMut“, wo immer ein „FnOnce“ verlangt wird, und Sie können ein „Fn“ " +"überall dort verwenden, wo ein „FnMut“ oder „FnOnce“ steht\n" "ist angesagt." #: src/traits/closures.md:36 @@ -9309,7 +10187,9 @@ msgstr "# Tag 3: Morgengymnastik" #: src/exercises/day-3/morning.md:3 #, fuzzy msgid "We will design a classical GUI library traits and trait objects." -msgstr "Wir werden Traits und Trait-Objekte einer klassischen GUI-Bibliothek entwerfen." +msgstr "" +"Wir werden Traits und Trait-Objekte einer klassischen GUI-Bibliothek " +"entwerfen." #: src/exercises/day-3/simple-gui.md:1 #, fuzzy @@ -9322,7 +10202,8 @@ msgid "" "Let us design a classical GUI library using our new knowledge of traits and\n" "trait objects." msgstr "" -"Lassen Sie uns eine klassische GUI-Bibliothek mit unserem neuen Wissen über Traits und entwerfen\n" +"Lassen Sie uns eine klassische GUI-Bibliothek mit unserem neuen Wissen über " +"Traits und entwerfen\n" "Eigenschaftsobjekte." #: src/exercises/day-3/simple-gui.md:6 @@ -9339,7 +10220,8 @@ msgid "" "* `Label`: has a `label`." msgstr "" "* „Fenster“: hat einen „Titel“ und enthält andere Widgets.\n" -"* `Button`: hat ein `Label` und eine Callback-Funktion, die aufgerufen wird, wenn die\n" +"* `Button`: hat ein `Label` und eine Callback-Funktion, die aufgerufen wird, " +"wenn die\n" " Taste gedrückt wird.\n" "* `Label`: hat ein `Label`." @@ -9354,8 +10236,8 @@ msgid "" "Copy the code below to , fill in the missing\n" "`draw_into` methods so that you implement the `Widget` trait:" msgstr "" -"Kopieren Sie den folgenden Code nach und füllen Sie die fehlenden " -"aus\n" +"Kopieren Sie den folgenden Code nach und " +"füllen Sie die fehlenden aus\n" "`draw_into`-Methoden, sodass Sie das `Widget`-Merkmal implementieren:" #: src/exercises/day-3/simple-gui.md:18 @@ -9463,7 +10345,8 @@ msgid "" "\n" "fn main() {\n" " let mut window = Window::new(\"Rust GUI Demo 1.23\");\n" -" window.add_widget(Box::new(Label::new(\"This is a small text GUI demo.\")));\n" +" window.add_widget(Box::new(Label::new(\"This is a small text GUI demo." +"\")));\n" " window.add_widget(Box::new(Button::new(\n" " \"Click me!\",\n" " Box::new(|| println!(\"You clicked the button!\")),\n" @@ -9495,13 +10378,16 @@ msgstr "" #, fuzzy msgid "" "If you want to draw aligned text, you can use the\n" -"[fill/alignment](https://doc.rust-lang.org/std/fmt/index.html#fillalignment)\n" +"[fill/alignment](https://doc.rust-lang.org/std/fmt/index." +"html#fillalignment)\n" "formatting operators. In particular, notice how you can pad with different\n" "characters (here a `'/'`) and how you can control alignment:" msgstr "" "Wenn Sie ausgerichteten Text zeichnen möchten, können Sie die verwenden\n" -"[fill/alignment](https://doc.rust-lang.org/std/fmt/index.html#fillalignment)\n" -"Formatierungsoperatoren. Beachten Sie insbesondere, wie Sie mit verschiedenen auffüllen können\n" +"[fill/alignment](https://doc.rust-lang.org/std/fmt/index." +"html#fillalignment)\n" +"Formatierungsoperatoren. Beachten Sie insbesondere, wie Sie mit " +"verschiedenen auffüllen können\n" "Zeichen (hier ein `'/'`) und wie Sie die Ausrichtung steuern können:" #: src/exercises/day-3/simple-gui.md:147 @@ -9518,8 +10404,11 @@ msgstr "" #: src/exercises/day-3/simple-gui.md:156 #, fuzzy -msgid "Using such alignment tricks, you can for example produce output like this:" -msgstr "Mit solchen Ausrichtungstricks können Sie beispielsweise eine Ausgabe wie diese erzeugen:" +msgid "" +"Using such alignment tricks, you can for example produce output like this:" +msgstr "" +"Mit solchen Ausrichtungstricks können Sie beispielsweise eine Ausgabe wie " +"diese erzeugen:" #: src/exercises/day-3/simple-gui.md:158 msgid "" @@ -9543,7 +10432,8 @@ msgstr "# Fehlerbehandlung" #: src/error-handling.md:3 #, fuzzy msgid "Error handling in Rust is done using explicit control flow:" -msgstr "Die Fehlerbehandlung in Rust erfolgt über einen expliziten Kontrollfluss:" +msgstr "" +"Die Fehlerbehandlung in Rust erfolgt über einen expliziten Kontrollfluss:" #: src/error-handling.md:5 #, fuzzy @@ -9551,7 +10441,8 @@ msgid "" "* Functions that can have errors list this in their return type,\n" "* There are no exceptions." msgstr "" -"* Funktionen, die Fehler haben können, führen dies in ihrem Rückgabetyp auf,\n" +"* Funktionen, die Fehler haben können, führen dies in ihrem Rückgabetyp " +"auf,\n" "* Es gibt keine Ausnahmen." #: src/error-handling/panics.md:1 @@ -9562,7 +10453,9 @@ msgstr "# Panik" #: src/error-handling/panics.md:3 #, fuzzy msgid "Rust will trigger a panic if a fatal error happens at runtime:" -msgstr "Rust löst eine Panik aus, wenn zur Laufzeit ein schwerwiegender Fehler auftritt:" +msgstr "" +"Rust löst eine Panik aus, wenn zur Laufzeit ein schwerwiegender Fehler " +"auftritt:" #: src/error-handling/panics.md:5 msgid "" @@ -9583,7 +10476,8 @@ msgid "" msgstr "" "* Paniken sind für nicht behebbare und unerwartete Fehler.\n" " * Paniken sind Symptome von Fehlern im Programm.\n" -"* Verwenden Sie Anti-Panik-APIs (wie `Vec::get`), wenn ein Absturz nicht akzeptabel ist." +"* Verwenden Sie Anti-Panik-APIs (wie `Vec::get`), wenn ein Absturz nicht " +"akzeptabel ist." #: src/error-handling/panic-unwind.md:1 #, fuzzy @@ -9592,10 +10486,12 @@ msgstr "# Auffangen des Stapels beim Abwickeln" #: src/error-handling/panic-unwind.md:3 #, fuzzy -msgid "By default, a panic will cause the stack to unwind. The unwinding can be caught:" +msgid "" +"By default, a panic will cause the stack to unwind. The unwinding can be " +"caught:" msgstr "" -"Standardmäßig führt eine Panik dazu, dass der Stack abgewickelt wird. Die Abwicklung kann gefangen " -"werden:" +"Standardmäßig führt eine Panik dazu, dass der Stack abgewickelt wird. Die " +"Abwicklung kann gefangen werden:" #: src/error-handling/panic-unwind.md:5 msgid "" @@ -9621,9 +10517,11 @@ msgid "" " request crashes.\n" "* This does not work if `panic = 'abort'` is set in your `Cargo.toml`." msgstr "" -"* Dies kann bei Servern nützlich sein, die auch bei einem einzigen weiterlaufen sollen\n" +"* Dies kann bei Servern nützlich sein, die auch bei einem einzigen " +"weiterlaufen sollen\n" " Anfrage stürzt ab.\n" -"* Dies funktioniert nicht, wenn in Ihrer `Cargo.toml` `panic = 'abort'` gesetzt ist." +"* Dies funktioniert nicht, wenn in Ihrer `Cargo.toml` `panic = 'abort'` " +"gesetzt ist." #: src/error-handling/result.md:1 #, fuzzy @@ -9633,11 +10531,12 @@ msgstr "# Strukturierte Fehlerbehandlung mit `Result`" #: src/error-handling/result.md:3 #, fuzzy msgid "" -"We have already seen the `Result` enum. This is used pervasively when errors are\n" +"We have already seen the `Result` enum. This is used pervasively when errors " +"are\n" "expected as part of normal operation:" msgstr "" -"Wir haben bereits die Aufzählung `Result` gesehen. Dies wird häufig verwendet, wenn Fehler " -"vorhanden sind\n" +"Wir haben bereits die Aufzählung `Result` gesehen. Dies wird häufig " +"verwendet, wenn Fehler vorhanden sind\n" "erwartet im Rahmen des Normalbetriebs:" #: src/error-handling/result.md:6 @@ -9665,26 +10564,28 @@ msgstr "" #: src/error-handling/result.md:27 #, fuzzy msgid "" -" * As with `Option`, the successful value sits inside of `Result`, forcing the developer to\n" -" explicitly extract it. This encourages error checking. In the case where an error should never " -"happen,\n" -" `unwrap()` or `expect()` can be called, and this is a signal of the developer intent too. \n" -" * `Result` documentation is a recommended read. Not during the course, but it is worth " -"mentioning. \n" -" It contains a lot of convenience methods and functions that help functional-style " -"programming. \n" +" * As with `Option`, the successful value sits inside of `Result`, forcing " +"the developer to\n" +" explicitly extract it. This encourages error checking. In the case where " +"an error should never happen,\n" +" `unwrap()` or `expect()` can be called, and this is a signal of the " +"developer intent too. \n" +" * `Result` documentation is a recommended read. Not during the course, but " +"it is worth mentioning. \n" +" It contains a lot of convenience methods and functions that help " +"functional-style programming. \n" " " msgstr "" -" * Wie bei `Option` befindet sich der erfolgreiche Wert innerhalb von `Result`, was den " -"Entwickler dazu zwingt\n" -" explizit extrahieren. Dies fördert die Fehlerprüfung. Für den Fall, dass niemals ein Fehler " -"passieren sollte,\n" -" `unwrap()` oder `expect()` können aufgerufen werden, und dies ist auch ein Signal für die " -"Absicht des Entwicklers.\n" -" * Die `Result`-Dokumentation ist eine empfohlene Lektüre. Nicht während des Kurses, aber es ist " -"erwähnenswert.\n" -" Es enthält viele bequeme Methoden und Funktionen, die bei der funktionalen Programmierung " -"helfen.\n" +" * Wie bei `Option` befindet sich der erfolgreiche Wert innerhalb von " +"`Result`, was den Entwickler dazu zwingt\n" +" explizit extrahieren. Dies fördert die Fehlerprüfung. Für den Fall, dass " +"niemals ein Fehler passieren sollte,\n" +" `unwrap()` oder `expect()` können aufgerufen werden, und dies ist auch " +"ein Signal für die Absicht des Entwicklers.\n" +" * Die `Result`-Dokumentation ist eine empfohlene Lektüre. Nicht während " +"des Kurses, aber es ist erwähnenswert.\n" +" Es enthält viele bequeme Methoden und Funktionen, die bei der " +"funktionalen Programmierung helfen.\n" " \n" "" @@ -9696,11 +10597,12 @@ msgstr "# Propagieren von Fehlern mit `?`" #: src/error-handling/try-operator.md:3 #, fuzzy msgid "" -"The try-operator `?` is used to return errors to the caller. It lets you turn\n" +"The try-operator `?` is used to return errors to the caller. It lets you " +"turn\n" "the common" msgstr "" -"Der Try-Operator `?` wird verwendet, um Fehler an den Aufrufer zurückzugeben. Es lässt dich " -"drehen\n" +"Der Try-Operator `?` wird verwendet, um Fehler an den Aufrufer " +"zurückzugeben. Es lässt dich drehen\n" "das gemeine" #: src/error-handling/try-operator.md:6 @@ -9728,7 +10630,8 @@ msgstr "" #: src/error-handling/try-operator.md:19 #, fuzzy msgid "We can use this to simplify our error handing code:" -msgstr "Wir können dies verwenden, um unseren Fehlerbehandlungscode zu vereinfachen:" +msgstr "" +"Wir können dies verwenden, um unseren Fehlerbehandlungscode zu vereinfachen:" #: src/error-handling/try-operator.md:21 msgid "" @@ -9758,16 +10661,18 @@ msgid "" "```" msgstr "" -#: src/error-handling/try-operator.md:50 src/error-handling/converting-error-types-example.md:52 +#: src/error-handling/try-operator.md:50 +#: src/error-handling/converting-error-types-example.md:52 #, fuzzy msgid "" "* The `username` variable can be either `Ok(string)` or `Err(error)`.\n" -"* Use the `fs::write` call to test out the different scenarios: no file, empty file, file with " -"username." +"* Use the `fs::write` call to test out the different scenarios: no file, " +"empty file, file with username." msgstr "" -"* Die Variable „username“ kann entweder „Ok(string)“ oder „Err(error)“ sein.\n" -"* Verwenden Sie den `fs::write`-Aufruf, um die verschiedenen Szenarien zu testen: keine Datei, " -"leere Datei, Datei mit Benutzername." +"* Die Variable „username“ kann entweder „Ok(string)“ oder „Err(error)“ " +"sein.\n" +"* Verwenden Sie den `fs::write`-Aufruf, um die verschiedenen Szenarien zu " +"testen: keine Datei, leere Datei, Datei mit Benutzername." #: src/error-handling/converting-error-types.md:1 #: src/error-handling/converting-error-types-example.md:1 @@ -9777,8 +10682,12 @@ msgstr "# Konvertieren von Fehlertypen" #: src/error-handling/converting-error-types.md:3 #, fuzzy -msgid "The effective expansion of `?` is a little more complicated than previously indicated:" -msgstr "Die effektive Erweiterung von „?“ ist etwas komplizierter als zuvor angedeutet:" +msgid "" +"The effective expansion of `?` is a little more complicated than previously " +"indicated:" +msgstr "" +"Die effektive Erweiterung von „?“ ist etwas komplizierter als zuvor " +"angedeutet:" #: src/error-handling/converting-error-types.md:5 msgid "" @@ -9805,10 +10714,12 @@ msgstr "" #: src/error-handling/converting-error-types.md:18 #, fuzzy msgid "" -"The `From::from` call here means we attempt to convert the error type to the\n" +"The `From::from` call here means we attempt to convert the error type to " +"the\n" "type returned by the function:" msgstr "" -"Der `From::from`-Aufruf hier bedeutet, dass wir versuchen, den Fehlertyp in den zu konvertieren\n" +"Der `From::from`-Aufruf hier bedeutet, dass wir versuchen, den Fehlertyp in " +"den zu konvertieren\n" "Typ, der von der Funktion zurückgegeben wird:" #: src/error-handling/converting-error-types-example.md:3 @@ -9831,7 +10742,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" @@ -9862,19 +10774,20 @@ msgstr "" #: src/error-handling/converting-error-types-example.md:55 #, fuzzy msgid "" -"It is good practice for all error types to implement `std::error::Error`, which requires `Debug` " -"and\n" -"`Display`. It's generally helpful for them to implement `Clone` and `Eq` too where possible, to " -"make\n" -"life easier for tests and consumers of your library. In this case we can't easily do so, because\n" +"It is good practice for all error types to implement `std::error::Error`, " +"which requires `Debug` and\n" +"`Display`. It's generally helpful for them to implement `Clone` and `Eq` too " +"where possible, to make\n" +"life easier for tests and consumers of your library. In this case we can't " +"easily do so, because\n" "`io::Error` doesn't implement them." msgstr "" -"Es ist eine gute Praxis für alle Fehlertypen, `std::error::Error` zu implementieren, was `Debug` " -"und erfordert\n" -"\"Anzeigen\". Es ist im Allgemeinen hilfreich für sie, `Clone` und `Eq` zu implementieren, wo es " -"möglich ist, zu machen\n" -"das Leben einfacher für Tests und Benutzer Ihrer Bibliothek. In diesem Fall können wir das nicht " -"so einfach tun, weil\n" +"Es ist eine gute Praxis für alle Fehlertypen, `std::error::Error` zu " +"implementieren, was `Debug` und erfordert\n" +"\"Anzeigen\". Es ist im Allgemeinen hilfreich für sie, `Clone` und `Eq` zu " +"implementieren, wo es möglich ist, zu machen\n" +"das Leben einfacher für Tests und Benutzer Ihrer Bibliothek. In diesem Fall " +"können wir das nicht so einfach tun, weil\n" "`io::Error` implementiert sie nicht." #: src/error-handling/deriving-error-enums.md:1 @@ -9885,10 +10798,12 @@ msgstr "# Fehleraufzählungen ableiten" #: src/error-handling/deriving-error-enums.md:3 #, fuzzy msgid "" -"The [thiserror](https://docs.rs/thiserror/) crate is a popular way to create an\n" +"The [thiserror](https://docs.rs/thiserror/) crate is a popular way to create " +"an\n" "error enum like we did on the previous page:" msgstr "" -"Die Kiste [thiserror](https://docs.rs/thiserror/) ist eine beliebte Methode zum Erstellen einer\n" +"Die Kiste [thiserror](https://docs.rs/thiserror/) ist eine beliebte Methode " +"zum Erstellen einer\n" "error enum wie auf der vorherigen Seite:" #: src/error-handling/deriving-error-enums.md:6 @@ -9928,21 +10843,24 @@ msgstr "" #: src/error-handling/deriving-error-enums.md:39 #, fuzzy msgid "" -"`thiserror`'s derive macro automatically implements `std::error::Error`, and optionally `Display`\n" -"(if the `#[error(...)]` attributes are provided) and `From` (if the `#[from]` attribute is " -"added).\n" +"`thiserror`'s derive macro automatically implements `std::error::Error`, and " +"optionally `Display`\n" +"(if the `#[error(...)]` attributes are provided) and `From` (if the " +"`#[from]` attribute is added).\n" "It also works for structs." msgstr "" -"Das Ableitungsmakro von `thiserror` implementiert automatisch `std::error::Error` und optional " -"`Display`\n" -"(wenn die `#[error(...)]`-Attribute bereitgestellt werden) und `From` (wenn das `#[from]`-Attribut " -"hinzugefügt wird).\n" +"Das Ableitungsmakro von `thiserror` implementiert automatisch `std::error::" +"Error` und optional `Display`\n" +"(wenn die `#[error(...)]`-Attribute bereitgestellt werden) und `From` (wenn " +"das `#[from]`-Attribut hinzugefügt wird).\n" "Es funktioniert auch für Strukturen." #: src/error-handling/deriving-error-enums.md:43 #, fuzzy msgid "It doesn't affect your public API, which makes it good for libraries." -msgstr "Es wirkt sich nicht auf Ihre öffentliche API aus, was es gut für Bibliotheken macht." +msgstr "" +"Es wirkt sich nicht auf Ihre öffentliche API aus, was es gut für " +"Bibliotheken macht." #: src/error-handling/dynamic-errors.md:1 #, fuzzy @@ -9952,11 +10870,12 @@ msgstr "# Dynamische Fehlertypen" #: src/error-handling/dynamic-errors.md:3 #, fuzzy msgid "" -"Sometimes we want to allow any type of error to be returned without writing our own enum covering\n" +"Sometimes we want to allow any type of error to be returned without writing " +"our own enum covering\n" "all the different possibilities. `std::error::Error` makes this easy." msgstr "" -"Manchmal möchten wir zulassen, dass jede Art von Fehler zurückgegeben wird, ohne unsere eigene " -"Enum-Abdeckung zu schreiben\n" +"Manchmal möchten wir zulassen, dass jede Art von Fehler zurückgegeben wird, " +"ohne unsere eigene Enum-Abdeckung zu schreiben\n" "all die verschiedenen Möglichkeiten. `std::error::Error` macht das einfach." #: src/error-handling/dynamic-errors.md:6 @@ -9993,20 +10912,20 @@ msgstr "" #: src/error-handling/dynamic-errors.md:36 #, fuzzy msgid "" -"This saves on code, but gives up the ability to cleanly handle different error cases differently " -"in\n" -"the program. As such it's generally not a good idea to use `Box` in the public API of " -"a\n" -"library, but it can be a good option in a program where you just want to display the error " -"message\n" +"This saves on code, but gives up the ability to cleanly handle different " +"error cases differently in\n" +"the program. As such it's generally not a good idea to use `Box` " +"in the public API of a\n" +"library, but it can be a good option in a program where you just want to " +"display the error message\n" "somewhere." msgstr "" -"Dies spart Code, gibt aber die Möglichkeit auf, verschiedene Fehlerfälle sauber unterschiedlich zu " -"behandeln\n" -"das Programm. Daher ist es im Allgemeinen keine gute Idee, `Box` in der öffentlichen " -"API von a zu verwenden\n" -"Bibliothek, aber es kann eine gute Option in einem Programm sein, in dem Sie nur die Fehlermeldung " -"anzeigen möchten\n" +"Dies spart Code, gibt aber die Möglichkeit auf, verschiedene Fehlerfälle " +"sauber unterschiedlich zu behandeln\n" +"das Programm. Daher ist es im Allgemeinen keine gute Idee, `Box` " +"in der öffentlichen API von a zu verwenden\n" +"Bibliothek, aber es kann eine gute Option in einem Programm sein, in dem Sie " +"nur die Fehlermeldung anzeigen möchten\n" "irgendwo." #: src/error-handling/error-contexts.md:1 @@ -10021,8 +10940,10 @@ msgid "" "contextual information to your errors and allows you to have fewer\n" "custom error types:" msgstr "" -"Die weit verbreitete Kiste [anyhow](https://docs.rs/anyhow/) kann Ihnen beim Hinzufügen helfen\n" -"Kontextinformationen zu Ihren Fehlern und ermöglicht es Ihnen, weniger zu haben\n" +"Die weit verbreitete Kiste [anyhow](https://docs.rs/anyhow/) kann Ihnen beim " +"Hinzufügen helfen\n" +"Kontextinformationen zu Ihren Fehlern und ermöglicht es Ihnen, weniger zu " +"haben\n" "benutzerdefinierte Fehlertypen:" #: src/error-handling/error-contexts.md:7 @@ -10058,21 +10979,25 @@ msgstr "" #, fuzzy msgid "" "* `anyhow::Result` is a type alias for `Result`.\n" -"* `anyhow::Error` is essentially a wrapper around `Box`. As such it's again generally " -"not\n" -" a good choice for the public API of a library, but is widely used in applications.\n" -"* Actual error type inside of it can be extracted for examination if necessary.\n" -"* Functionality provided by `anyhow::Result` may be familiar to Go developers, as it provides\n" +"* `anyhow::Error` is essentially a wrapper around `Box`. As such " +"it's again generally not\n" +" a good choice for the public API of a library, but is widely used in " +"applications.\n" +"* Actual error type inside of it can be extracted for examination if " +"necessary.\n" +"* Functionality provided by `anyhow::Result` may be familiar to Go " +"developers, as it provides\n" " similar usage patterns and ergonomics to `(T, error)` from Go." msgstr "" "* `anyhow::Result` ist ein Typ-Alias für `Result`.\n" -"* `anyhow::Error` ist im Wesentlichen ein Wrapper um `Box`. Als solches ist es wieder " -"im Allgemeinen nicht\n" -" eine gute Wahl für die öffentliche API einer Bibliothek, wird aber häufig in Anwendungen " -"verwendet.\n" -"* Der darin enthaltene tatsächliche Fehlertyp kann bei Bedarf zur Untersuchung extrahiert werden.\n" -"* Die von `anyhow::Result` bereitgestellte Funktionalität ist Go-Entwicklern möglicherweise " -"vertraut, da sie bereitgestellt wird\n" +"* `anyhow::Error` ist im Wesentlichen ein Wrapper um `Box`. Als " +"solches ist es wieder im Allgemeinen nicht\n" +" eine gute Wahl für die öffentliche API einer Bibliothek, wird aber häufig " +"in Anwendungen verwendet.\n" +"* Der darin enthaltene tatsächliche Fehlertyp kann bei Bedarf zur " +"Untersuchung extrahiert werden.\n" +"* Die von `anyhow::Result` bereitgestellte Funktionalität ist Go-" +"Entwicklern möglicherweise vertraut, da sie bereitgestellt wird\n" " ähnliche Nutzungsmuster und Ergonomie wie `(T, error)` von Go." #: src/testing.md:1 @@ -10133,7 +11058,9 @@ msgstr "" #: src/testing/unit-tests.md:29 #, fuzzy msgid "Use `cargo test` to find and run the unit tests." -msgstr "Verwenden Sie \"Cargo Test\", um die Komponententests zu finden und auszuführen." +msgstr "" +"Verwenden Sie \"Cargo Test\", um die Komponententests zu finden und " +"auszuführen." #: src/testing/test-modules.md:1 #, fuzzy @@ -10215,9 +11142,11 @@ msgid "" "* Test the above code on the [Rust Playground](https://play.rust-lang.org/?" "version=stable&mode=debug&edition=2021&gist=3ce2ad13ea1302f6572cb15cd96becf0)." msgstr "" -"* Codeblöcke in `///`-Kommentaren werden automatisch als Rust-Code angesehen.\n" +"* Codeblöcke in `///`-Kommentaren werden automatisch als Rust-Code " +"angesehen.\n" "* Der Code wird im Rahmen von „Cargo Test“ kompiliert und ausgeführt.\n" -"* Testen Sie den obigen Code auf [Rust Playground](https://play.rust-lang.org/?" +"* Testen Sie den obigen Code auf [Rust Playground](https://play.rust-lang." +"org/?" "version=stable&mode=debug&edition=2021&gist=3ce2ad13ea1302f6572cb15cd96becf0)." #: src/testing/integration-tests.md:1 @@ -10228,7 +11157,9 @@ msgstr "# Integrationstests" #: src/testing/integration-tests.md:3 #, fuzzy msgid "If you want to test your library as a client, use an integration test." -msgstr "Wenn Sie Ihre Bibliothek als Client testen möchten, verwenden Sie einen Integrationstest." +msgstr "" +"Wenn Sie Ihre Bibliothek als Client testen möchten, verwenden Sie einen " +"Integrationstest." #: src/testing/integration-tests.md:5 #, fuzzy @@ -10267,10 +11198,11 @@ msgstr "" #: src/testing/useful-crates.md:7 msgid "" -"* [googletest](https://docs.rs/googletest): Comprehensive test assertion library in the tradition " -"of GoogleTest for C++.\n" +"* [googletest](https://docs.rs/googletest): Comprehensive test assertion " +"library in the tradition of GoogleTest for C++.\n" "* [proptest](https://docs.rs/proptest): Property-based testing for Rust.\n" -"* [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:1 @@ -10287,29 +11219,35 @@ msgstr "Die Rust-Sprache besteht aus zwei Teilen:" #, fuzzy msgid "" "* **Safe Rust:** memory safe, no undefined behavior possible.\n" -"* **Unsafe Rust:** can trigger undefined behavior if preconditions are violated." +"* **Unsafe Rust:** can trigger undefined behavior if preconditions are " +"violated." msgstr "" "* **Safe Rust:** Speichersicher, kein undefiniertes Verhalten möglich.\n" -"* **Unsicherer Rost:** kann undefiniertes Verhalten auslösen, wenn Vorbedingungen verletzt werden." +"* **Unsicherer Rost:** kann undefiniertes Verhalten auslösen, wenn " +"Vorbedingungen verletzt werden." #: src/unsafe.md:8 #, fuzzy msgid "" -"We will be seeing mostly safe Rust in this course, but it's important to know\n" +"We will be seeing mostly safe Rust in this course, but it's important to " +"know\n" "what Unsafe Rust is." msgstr "" -"Wir werden in diesem Kurs hauptsächlich sicheres Rust sehen, aber es ist wichtig zu wissen\n" +"Wir werden in diesem Kurs hauptsächlich sicheres Rust sehen, aber es ist " +"wichtig zu wissen\n" "was unsicherer Rost ist." #: src/unsafe.md:11 #, fuzzy msgid "" -"Unsafe code is usually small and isolated, and its correctness should be carefully\n" +"Unsafe code is usually small and isolated, and its correctness should be " +"carefully\n" "documented. It is usually wrapped in a safe abstraction layer." msgstr "" -"Unsicherer Code ist normalerweise klein und isoliert, und seine Korrektheit sollte sorgfältig " -"geprüft werden\n" -"dokumentiert. Es ist normalerweise in eine sichere Abstraktionsschicht eingeschlossen." +"Unsicherer Code ist normalerweise klein und isoliert, und seine Korrektheit " +"sollte sorgfältig geprüft werden\n" +"dokumentiert. Es ist normalerweise in eine sichere Abstraktionsschicht " +"eingeschlossen." #: src/unsafe.md:14 #, fuzzy @@ -10326,7 +11264,8 @@ msgid "" "* Implement `unsafe` traits." msgstr "" "* Rohzeiger dereferenzieren.\n" -"* Greifen Sie auf veränderliche statische Variablen zu oder ändern Sie diese.\n" +"* Greifen Sie auf veränderliche statische Variablen zu oder ändern Sie " +"diese.\n" "* Greifen Sie auf `Union`-Felder zu.\n" "* „Unsichere“ Funktionen aufrufen, einschließlich „externer“ Funktionen.\n" "* Implementieren Sie \"unsichere\" Eigenschaften." @@ -10334,25 +11273,33 @@ msgstr "" #: src/unsafe.md:22 #, fuzzy msgid "" -"We will briefly cover unsafe capabilities next. For full details, please see\n" -"[Chapter 19.1 in the Rust Book](https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html)\n" +"We will briefly cover unsafe capabilities next. For full details, please " +"see\n" +"[Chapter 19.1 in the Rust Book](https://doc.rust-lang.org/book/ch19-01-" +"unsafe-rust.html)\n" "and the [Rustonomicon](https://doc.rust-lang.org/nomicon/)." msgstr "" -"Als nächstes werden wir uns kurz mit unsicheren Fähigkeiten befassen. Ausführliche Informationen " -"finden Sie unter\n" -"[Kapitel 19.1 im Rust-Buch](https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html)\n" +"Als nächstes werden wir uns kurz mit unsicheren Fähigkeiten befassen. " +"Ausführliche Informationen finden Sie unter\n" +"[Kapitel 19.1 im Rust-Buch](https://doc.rust-lang.org/book/ch19-01-unsafe-" +"rust.html)\n" "und das [Rustonomicon] (https://doc.rust-lang.org/nomicon/)." #: src/unsafe.md:28 #, fuzzy msgid "" -"Unsafe Rust does not mean the code is incorrect. It means that developers have\n" +"Unsafe Rust does not mean the code is incorrect. It means that developers " +"have\n" "turned off the compiler safety features and have to write correct code by\n" -"themselves. It means the compiler no longer enforces Rust's memory-safety rules." +"themselves. It means the compiler no longer enforces Rust's memory-safety " +"rules." msgstr "" -"Unsicherer Rost bedeutet nicht, dass der Code falsch ist. Es bedeutet, dass Entwickler haben\n" -"die Compiler-Sicherheitsfunktionen ausgeschaltet haben und korrekten Code schreiben müssen\n" -"sich. Das bedeutet, dass der Compiler die Speichersicherheitsregeln von Rust nicht mehr erzwingt." +"Unsicherer Rost bedeutet nicht, dass der Code falsch ist. Es bedeutet, dass " +"Entwickler haben\n" +"die Compiler-Sicherheitsfunktionen ausgeschaltet haben und korrekten Code " +"schreiben müssen\n" +"sich. Das bedeutet, dass der Compiler die Speichersicherheitsregeln von Rust " +"nicht mehr erzwingt." #: src/unsafe/raw-pointers.md:1 #, fuzzy @@ -10362,7 +11309,9 @@ msgstr "# Rohzeiger dereferenzieren" #: src/unsafe/raw-pointers.md:3 #, fuzzy msgid "Creating pointers is safe, but dereferencing them requires `unsafe`:" -msgstr "Das Erstellen von Zeigern ist sicher, aber das Dereferenzieren erfordert \"unsicher\":" +msgstr "" +"Das Erstellen von Zeigern ist sicher, aber das Dereferenzieren erfordert " +"\"unsicher\":" #: src/unsafe/raw-pointers.md:5 msgid "" @@ -10374,7 +11323,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" @@ -10390,14 +11340,16 @@ msgstr "" #: src/unsafe/raw-pointers.md:27 #, fuzzy msgid "" -"It is good practice (and required by the Android Rust style guide) to write a comment for each\n" -"`unsafe` block explaining how the code inside it satisfies the safety requirements of the unsafe\n" +"It is good practice (and required by the Android Rust style guide) to write " +"a comment for each\n" +"`unsafe` block explaining how the code inside it satisfies the safety " +"requirements of the unsafe\n" "operations it is doing." msgstr "" -"Es ist eine gute Praxis (und vom Android Rust Styleguide vorgeschrieben), für jeden einen " -"Kommentar zu schreiben\n" -"\"unsicherer\" Block, der erklärt, wie der darin enthaltene Code die Sicherheitsanforderungen des " -"unsicheren Codes erfüllt\n" +"Es ist eine gute Praxis (und vom Android Rust Styleguide vorgeschrieben), " +"für jeden einen Kommentar zu schreiben\n" +"\"unsicherer\" Block, der erklärt, wie der darin enthaltene Code die " +"Sicherheitsanforderungen des unsicheren Codes erfüllt\n" "Operationen, die es tut." #: src/unsafe/raw-pointers.md:31 @@ -10413,25 +11365,28 @@ msgstr "" #, fuzzy msgid "" " * The pointer must be non-null.\n" -" * The pointer must be _dereferenceable_ (within the bounds of a single allocated object).\n" +" * The pointer must be _dereferenceable_ (within the bounds of a single " +"allocated object).\n" " * The object must not have been deallocated.\n" " * There must not be concurrent accesses to the same location.\n" -" * If the pointer was obtained by casting a reference, the underlying object must be live and no\n" +" * If the pointer was obtained by casting a reference, the underlying object " +"must be live and no\n" " reference may be used to access the memory." msgstr "" " * Der Zeiger darf nicht null sein.\n" -" * Der Zeiger muss _dereferenzierbar_ sein (innerhalb der Grenzen eines einzelnen zugewiesenen " -"Objekts).\n" +" * Der Zeiger muss _dereferenzierbar_ sein (innerhalb der Grenzen eines " +"einzelnen zugewiesenen Objekts).\n" " * Das Objekt darf nicht freigegeben worden sein.\n" " * Es darf nicht gleichzeitig auf denselben Standort zugegriffen werden.\n" -" * Wenn der Zeiger durch Casting einer Referenz erhalten wurde, muss das zugrunde liegende Objekt " -"live sein und nein\n" +" * Wenn der Zeiger durch Casting einer Referenz erhalten wurde, muss das " +"zugrunde liegende Objekt live sein und nein\n" " Referenz kann verwendet werden, um auf den Speicher zuzugreifen." #: src/unsafe/raw-pointers.md:41 #, fuzzy msgid "In most cases the pointer must also be properly aligned." -msgstr "In den meisten Fällen muss auch der Zeiger richtig ausgerichtet werden." +msgstr "" +"In den meisten Fällen muss auch der Zeiger richtig ausgerichtet werden." #: src/unsafe/mutable-static-variables.md:1 #, fuzzy @@ -10460,7 +11415,8 @@ msgid "" "However, since data races can occur, it is unsafe to read and write mutable\n" "static variables:" msgstr "" -"Da es jedoch zu Datenrennen kommen kann, ist es unsicher, änderbar zu lesen und zu schreiben\n" +"Da es jedoch zu Datenrennen kommen kann, ist es unsicher, änderbar zu lesen " +"und zu schreiben\n" "statische Variablen:" #: src/unsafe/mutable-static-variables.md:16 @@ -10483,14 +11439,15 @@ msgstr "" #: src/unsafe/mutable-static-variables.md:32 #, fuzzy msgid "" -"Using a mutable static is generally a bad idea, but there are some cases where it might make " -"sense\n" -"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\n" +"in low-level `no_std` code, such as implementing a heap allocator or working " +"with some C APIs." msgstr "" -"Die Verwendung eines änderbaren statischen Werts ist im Allgemeinen eine schlechte Idee, aber es " -"gibt einige Fälle, in denen es sinnvoll sein könnte\n" -"in `no_std`-Code auf niedriger Ebene, wie z. B. die Implementierung eines Heap-Allokators oder die " -"Arbeit mit einigen C-APIs." +"Die Verwendung eines änderbaren statischen Werts ist im Allgemeinen eine " +"schlechte Idee, aber es gibt einige Fälle, in denen es sinnvoll sein könnte\n" +"in `no_std`-Code auf niedriger Ebene, wie z. B. die Implementierung eines " +"Heap-Allokators oder die Arbeit mit einigen C-APIs." #: src/unsafe/unions.md:1 #, fuzzy @@ -10500,7 +11457,9 @@ msgstr "# Gewerkschaften" #: src/unsafe/unions.md:3 #, fuzzy msgid "Unions are like enums, but you need to track the active field yourself:" -msgstr "Unions sind wie Aufzählungen, aber Sie müssen das aktive Feld selbst verfolgen:" +msgstr "" +"Unions sind wie Aufzählungen, aber Sie müssen das aktive Feld selbst " +"verfolgen:" #: src/unsafe/unions.md:5 msgid "" @@ -10522,25 +11481,27 @@ msgstr "" #: src/unsafe/unions.md:21 #, fuzzy msgid "" -"Unions are very rarely needed in Rust as you can usually use an enum. They are occasionally " -"needed\n" +"Unions are very rarely needed in Rust as you can usually use an enum. They " +"are occasionally needed\n" "for interacting with C library APIs." msgstr "" -"Unions werden in Rust sehr selten benötigt, da Sie normalerweise eine Aufzählung verwenden können. " -"Sie werden gelegentlich benötigt\n" +"Unions werden in Rust sehr selten benötigt, da Sie normalerweise eine " +"Aufzählung verwenden können. Sie werden gelegentlich benötigt\n" "für die Interaktion mit C-Bibliotheks-APIs." #: src/unsafe/unions.md:24 #, fuzzy msgid "" -"If you just want to reinterpret bytes as a different type, you probably want\n" -"[`std::mem::transmute`](https://doc.rust-lang.org/stable/std/mem/fn.transmute.html) or a safe\n" +"If you just want to reinterpret bytes as a different type, you probably " +"want\n" +"[`std::mem::transmute`](https://doc.rust-lang.org/stable/std/mem/fn." +"transmute.html) or a safe\n" "wrapper such as the [`zerocopy`](https://crates.io/crates/zerocopy) crate." msgstr "" -"Wenn Sie Bytes nur als einen anderen Typ neu interpretieren möchten, möchten Sie dies " -"wahrscheinlich tun\n" -"[`std::mem::transmute`](https://doc.rust-lang.org/stable/std/mem/fn.transmute.html) oder einen " -"Safe\n" +"Wenn Sie Bytes nur als einen anderen Typ neu interpretieren möchten, möchten " +"Sie dies wahrscheinlich tun\n" +"[`std::mem::transmute`](https://doc.rust-lang.org/stable/std/mem/fn." +"transmute.html) oder einen Safe\n" "Wrapper wie die Kiste [`zerocopy`](https://crates.io/crates/zerocopy)." #: src/unsafe/calling-unsafe-functions.md:1 @@ -10551,11 +11512,12 @@ msgstr "# Aufruf unsicherer Funktionen" #: src/unsafe/calling-unsafe-functions.md:3 #, fuzzy msgid "" -"A function or method can be marked `unsafe` if it has extra preconditions you\n" +"A function or method can be marked `unsafe` if it has extra preconditions " +"you\n" "must uphold to avoid undefined behaviour:" msgstr "" -"Eine Funktion oder Methode kann als „unsicher“ gekennzeichnet werden, wenn sie zusätzliche " -"Voraussetzungen für Sie hat\n" +"Eine Funktion oder Methode kann als „unsicher“ gekennzeichnet werden, wenn " +"sie zusätzliche Voraussetzungen für Sie hat\n" "muss eingehalten werden, um undefiniertes Verhalten zu vermeiden:" #: src/unsafe/calling-unsafe-functions.md:6 @@ -10564,7 +11526,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" @@ -10572,11 +11535,13 @@ msgid "" " println!(\"emoji: {}\", emojis.get_unchecked(7..11));\n" " }\n" "\n" -" println!(\"char count: {}\", count_chars(unsafe { emojis.get_unchecked(0..7) }));\n" +" println!(\"char count: {}\", count_chars(unsafe { emojis." +"get_unchecked(0..7) }));\n" "\n" " // Not upholding the UTF-8 encoding requirement breaks memory safety!\n" " // println!(\"emoji: {}\", unsafe { emojis.get_unchecked(0..3) });\n" -" // println!(\"char count: {}\", count_chars(unsafe { emojis.get_unchecked(0..3) }));\n" +" // println!(\"char count: {}\", count_chars(unsafe { emojis." +"get_unchecked(0..3) }));\n" "}\n" "\n" "fn count_chars(s: &str) -> usize {\n" @@ -10593,12 +11558,12 @@ msgstr "# Unsichere Funktionen schreiben" #: src/unsafe/writing-unsafe-functions.md:3 #, fuzzy msgid "" -"You can mark your own functions as `unsafe` if they require particular conditions to avoid " -"undefined\n" +"You can mark your own functions as `unsafe` if they require particular " +"conditions to avoid undefined\n" "behaviour." msgstr "" -"Sie können Ihre eigenen Funktionen als \"unsicher\" markieren, wenn sie bestimmte Bedingungen " -"erfordern, um undefined zu vermeiden\n" +"Sie können Ihre eigenen Funktionen als \"unsicher\" markieren, wenn sie " +"bestimmte Bedingungen erfordern, um undefined zu vermeiden\n" "Verhalten." #: src/unsafe/writing-unsafe-functions.md:6 @@ -10631,20 +11596,25 @@ msgstr "" #: src/unsafe/writing-unsafe-functions.md:33 #, fuzzy -msgid "We wouldn't actually use pointers for this because it can be done safely with references." +msgid "" +"We wouldn't actually use pointers for this because it can be done safely " +"with references." msgstr "" -"Wir würden dafür eigentlich keine Zeiger verwenden, da dies mit Referenzen sicher möglich ist." +"Wir würden dafür eigentlich keine Zeiger verwenden, da dies mit Referenzen " +"sicher möglich ist." #: src/unsafe/writing-unsafe-functions.md:35 #, fuzzy msgid "" -"Note that unsafe code is allowed within an unsafe function without an `unsafe` block. We can\n" -"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\n" +"prohibit this with `#[deny(unsafe_op_in_unsafe_fn)]`. Try adding it and see " +"what happens." msgstr "" -"Beachten Sie, dass unsicherer Code innerhalb einer unsicheren Funktion ohne einen „unsicheren“ " -"Block zulässig ist. Wir können\n" -"verbieten Sie dies mit `#[deny(unsafe_op_in_unsafe_fn)]`. Versuchen Sie es hinzuzufügen und sehen " -"Sie, was passiert." +"Beachten Sie, dass unsicherer Code innerhalb einer unsicheren Funktion ohne " +"einen „unsicheren“ Block zulässig ist. Wir können\n" +"verbieten Sie dies mit `#[deny(unsafe_op_in_unsafe_fn)]`. Versuchen Sie es " +"hinzuzufügen und sehen Sie, was passiert." #: src/unsafe/extern-functions.md:1 #, fuzzy @@ -10654,10 +11624,12 @@ msgstr "# Externer Code aufrufen" #: src/unsafe/extern-functions.md:3 #, fuzzy msgid "" -"Functions from other languages might violate the guarantees of Rust. Calling\n" +"Functions from other languages might violate the guarantees of Rust. " +"Calling\n" "them is thus unsafe:" msgstr "" -"Funktionen aus anderen Sprachen könnten die Garantien von Rust verletzen. Berufung\n" +"Funktionen aus anderen Sprachen könnten die Garantien von Rust verletzen. " +"Berufung\n" "sie ist somit unsicher:" #: src/unsafe/extern-functions.md:6 @@ -10679,21 +11651,23 @@ msgstr "" #: src/unsafe/extern-functions.md:21 #, fuzzy msgid "" -"This is usually only a problem for extern functions which do things with pointers which might\n" -"violate Rust's memory model, but in general any C function might have undefined behaviour under " -"any\n" +"This is usually only a problem for extern functions which do things with " +"pointers which might\n" +"violate Rust's memory model, but in general any C function might have " +"undefined behaviour under any\n" "arbitrary circumstances." msgstr "" -"Dies ist normalerweise nur ein Problem für externe Funktionen, die möglicherweise Dinge mit " -"Zeigern tun\n" -"verletzen das Speichermodell von Rust, aber im Allgemeinen kann jede C-Funktion undefiniertes " -"Verhalten unter jeder haben\n" +"Dies ist normalerweise nur ein Problem für externe Funktionen, die " +"möglicherweise Dinge mit Zeigern tun\n" +"verletzen das Speichermodell von Rust, aber im Allgemeinen kann jede C-" +"Funktion undefiniertes Verhalten unter jeder haben\n" "willkürliche Umstände." #: src/unsafe/extern-functions.md:25 msgid "" "The `\"C\"` in this example is the ABI;\n" -"[other ABIs are available too](https://doc.rust-lang.org/reference/items/external-blocks.html)." +"[other ABIs are available too](https://doc.rust-lang.org/reference/items/" +"external-blocks.html)." msgstr "" #: src/unsafe/unsafe-traits.md:1 @@ -10704,21 +11678,25 @@ msgstr "# Unsichere Merkmale implementieren" #: src/unsafe/unsafe-traits.md:3 #, fuzzy msgid "" -"Like with functions, you can mark a trait as `unsafe` if the implementation must guarantee\n" +"Like with functions, you can mark a trait as `unsafe` if the implementation " +"must guarantee\n" "particular conditions to avoid undefined behaviour." msgstr "" -"Wie bei Funktionen können Sie ein Merkmal als \"unsicher\" markieren, wenn die Implementierung " -"dies gewährleisten muss\n" +"Wie bei Funktionen können Sie ein Merkmal als \"unsicher\" markieren, wenn " +"die Implementierung dies gewährleisten muss\n" "besondere Bedingungen, um undefiniertes Verhalten zu vermeiden." #: src/unsafe/unsafe-traits.md:6 #, fuzzy msgid "" "For example, the `zerocopy` crate has an unsafe trait that looks\n" -"[something like this](https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes.html):" +"[something like this](https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes." +"html):" msgstr "" -"Zum Beispiel hat die „Nullkopie“-Kiste eine unsichere Eigenschaft, die aussieht\n" -"[etwas in der Art](https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes.html):" +"Zum Beispiel hat die „Nullkopie“-Kiste eine unsichere Eigenschaft, die " +"aussieht\n" +"[etwas in der Art](https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes." +"html):" #: src/unsafe/unsafe-traits.md:9 #, fuzzy @@ -10733,7 +11711,8 @@ msgid "" "pub unsafe trait AsBytes {\n" " fn as_bytes(&self) -> &[u8] {\n" " unsafe {\n" -" slice::from_raw_parts(self as *const Self as *const u8, size_of_val(self))\n" +" slice::from_raw_parts(self as *const Self as *const u8, " +"size_of_val(self))\n" " }\n" " }\n" "}\n" @@ -10744,11 +11723,13 @@ msgid "" msgstr "" "/// ...\n" "/// # Sicherheit\n" -"/// Der Typ muss eine definierte Darstellung haben und darf nicht aufgefüllt werden.\n" +"/// Der Typ muss eine definierte Darstellung haben und darf nicht aufgefüllt " +"werden.\n" "pub unsichere Eigenschaft AsBytes {\n" " fn as_bytes(&self) -> &[u8] {\n" " unsicher {\n" -" Slice::from_raw_parts(self als *const Self als *const u8, size_of_val(self))\n" +" Slice::from_raw_parts(self als *const Self als *const u8, " +"size_of_val(self))\n" " }\n" " }\n" "}" @@ -10756,22 +11737,28 @@ msgstr "" #: src/unsafe/unsafe-traits.md:30 #, fuzzy msgid "" -"There should be a `# Safety` section on the Rustdoc for the trait explaining the requirements for\n" +"There should be a `# Safety` section on the Rustdoc for the trait explaining " +"the requirements for\n" "the trait to be safely implemented." msgstr "" -"Es sollte einen Abschnitt „# Sicherheit“ im Rustdoc für das Merkmal geben, in dem die " -"Anforderungen für erklärt werden\n" +"Es sollte einen Abschnitt „# Sicherheit“ im Rustdoc für das Merkmal geben, " +"in dem die Anforderungen für erklärt werden\n" "die sicher zu implementierende Eigenschaft." #: src/unsafe/unsafe-traits.md:33 #, fuzzy -msgid "The actual safety section for `AsBytes` is rather longer and more complicated." -msgstr "Der eigentliche Sicherheitsabschnitt für `AsBytes` ist etwas länger und komplizierter." +msgid "" +"The actual safety section for `AsBytes` is rather longer and more " +"complicated." +msgstr "" +"Der eigentliche Sicherheitsabschnitt für `AsBytes` ist etwas länger und " +"komplizierter." #: src/unsafe/unsafe-traits.md:35 #, fuzzy msgid "The built-in `Send` and `Sync` traits are unsafe." -msgstr "Die eingebauten Eigenschaften „Senden“ und „Synchronisieren“ sind unsicher." +msgstr "" +"Die eingebauten Eigenschaften „Senden“ und „Synchronisieren“ sind unsicher." #: src/exercises/day-3/afternoon.md:1 #, fuzzy @@ -10781,13 +11768,16 @@ msgstr "# Tag 3: Nachmittagsübungen" #: src/exercises/day-3/afternoon.md:3 #, fuzzy msgid "Let us build a safe wrapper for reading directory content!" -msgstr "Lassen Sie uns einen sicheren Wrapper zum Lesen von Verzeichnisinhalten erstellen!" +msgstr "" +"Lassen Sie uns einen sicheren Wrapper zum Lesen von Verzeichnisinhalten " +"erstellen!" #: src/exercises/day-3/afternoon.md:7 #, fuzzy msgid "After looking at the exercise, you can look at the [solution] provided." msgstr "" -"Nachdem Sie sich die Übung angesehen haben, können Sie sich die bereitgestellte [Lösung] ansehen." +"Nachdem Sie sich die Übung angesehen haben, können Sie sich die " +"bereitgestellte [Lösung] ansehen." #: src/exercises/day-3/safe-ffi-wrapper.md:1 #, fuzzy @@ -10801,10 +11791,12 @@ msgid "" "interface_ (FFI). We will use this to build a safe wrapper for the `libc`\n" "functions you would use from C to read the filenames of a directory." msgstr "" -"Rust bietet großartige Unterstützung für den Aufruf von Funktionen über eine _foreign-Funktion\n" -"Schnittstelle_ (FFI). Wir werden dies verwenden, um einen sicheren Wrapper für die `libc` zu " -"erstellen\n" -"Funktionen, die Sie von C verwenden würden, um die Dateinamen eines Verzeichnisses zu lesen." +"Rust bietet großartige Unterstützung für den Aufruf von Funktionen über eine " +"_foreign-Funktion\n" +"Schnittstelle_ (FFI). Wir werden dies verwenden, um einen sicheren Wrapper " +"für die `libc` zu erstellen\n" +"Funktionen, die Sie von C verwenden würden, um die Dateinamen eines " +"Verzeichnisses zu lesen." #: src/exercises/day-3/safe-ffi-wrapper.md:7 #, fuzzy @@ -10824,17 +11816,22 @@ msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:13 msgid "" -"You will also want to browse the [`std::ffi`] module. There you find a number of\n" +"You will also want to browse the [`std::ffi`] module. There you find a " +"number of\n" "string types which you need for the exercise:" msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:16 msgid "" -"| Types | Encoding | Use |\n" +"| Types | Encoding | " +"Use |\n" "|----------------------------|----------------|--------------------------------|\n" -"| [`str`] and [`String`] | UTF-8 | Text processing in Rust |\n" -"| [`CStr`] and [`CString`] | NUL-terminated | Communicating with C functions |\n" -"| [`OsStr`] and [`OsString`] | OS-specific | Communicating with the OS |" +"| [`str`] and [`String`] | UTF-8 | Text processing in " +"Rust |\n" +"| [`CStr`] and [`CString`] | NUL-terminated | Communicating with C " +"functions |\n" +"| [`OsStr`] and [`OsString`] | OS-specific | Communicating with the " +"OS |" msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:22 @@ -10843,14 +11840,19 @@ msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:24 msgid "" -"- `&str` to `CString`: you need to allocate space for a trailing `\\0` character,\n" +"- `&str` to `CString`: you need to allocate space for a trailing `\\0` " +"character,\n" "- `CString` to `*const i8`: you need a pointer to call C functions,\n" -"- `*const i8` to `&CStr`: you need something which can find the trailing `\\0` character,\n" -"- `&CStr` to `&[u8]`: a slice of bytes is the universal interface for \"some unknow data\",\n" +"- `*const i8` to `&CStr`: you need something which can find the trailing " +"`\\0` character,\n" +"- `&CStr` to `&[u8]`: a slice of bytes is the universal interface for \"some " +"unknow data\",\n" "- `&[u8]` to `&OsStr`: `&OsStr` is a step towards `OsString`, use\n" -" [`OsStrExt`](https://doc.rust-lang.org/std/os/unix/ffi/trait.OsStrExt.html)\n" +" [`OsStrExt`](https://doc.rust-lang.org/std/os/unix/ffi/trait.OsStrExt." +"html)\n" " to create it,\n" -"- `&OsStr` to `OsString`: you need to clone the data in `&OsStr` to be able to return it and call\n" +"- `&OsStr` to `OsString`: you need to clone the data in `&OsStr` to be able " +"to return it and call\n" " `readdir` again." msgstr "" @@ -10861,11 +11863,12 @@ msgstr "" #: src/exercises/day-3/safe-ffi-wrapper.md:45 #, fuzzy msgid "" -"Copy the code below to and fill in the missing\n" +"Copy the code below to and fill in the " +"missing\n" "functions and methods:" msgstr "" -"Kopieren Sie den folgenden Code nach und füllen Sie die fehlenden " -"aus\n" +"Kopieren Sie den folgenden Code nach und " +"füllen Sie die fehlenden aus\n" "Funktionen und Methoden:" #: src/exercises/day-3/safe-ffi-wrapper.md:48 @@ -10883,10 +11886,12 @@ msgid "" " #[repr(C)]\n" " pub struct DIR {\n" " _data: [u8; 0],\n" -" _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,\n" +" _marker: core::marker::PhantomData<(*mut u8, core::marker::" +"PhantomPinned)>,\n" " }\n" "\n" -" // Layout as per readdir(3) and definitions in /usr/include/x86_64-linux-gnu.\n" +" // Layout as per readdir(3) and definitions in /usr/include/x86_64-linux-" +"gnu.\n" " #[cfg(not(target_os = \"macos\"))]\n" " #[repr(C)]\n" " pub struct dirent {\n" @@ -10964,26 +11969,33 @@ msgstr "# Willkommen zu Tag 1" #: src/android.md:3 #, fuzzy msgid "" -"Rust is supported for native platform development on Android. This means that\n" +"Rust is supported for native platform development on Android. This means " +"that\n" "you can write new operating system services in Rust, as well as extending\n" "existing services." msgstr "" -"Rust wird für die native Plattformentwicklung auf Android unterstützt. Das bedeutet, dass\n" +"Rust wird für die native Plattformentwicklung auf Android unterstützt. Das " +"bedeutet, dass\n" "Sie können neue Betriebssystemdienste in Rust schreiben und erweitern\n" "bestehende Dienste." #: src/android.md:7 #, fuzzy msgid "" -"> We will attempt to call Rust from one of your own projects today. So try to\n" -"> find a little corner of your code base where we can move some lines of code to\n" -"> Rust. The fewer dependencies and \"exotic\" types the better. Something that\n" +"> We will attempt to call Rust from one of your own projects today. So try " +"to\n" +"> find a little corner of your code base where we can move some lines of " +"code to\n" +"> Rust. The fewer dependencies and \"exotic\" types the better. Something " +"that\n" "> parses some raw bytes would be ideal." msgstr "" -"> Wir werden heute versuchen, Rust aus einem Ihrer eigenen Projekte anzurufen. Versuchen Sie es " -"also\n" -"> Finden Sie eine kleine Ecke Ihrer Codebasis, in die wir einige Codezeilen verschieben können\n" -"> Rost. Je weniger Abhängigkeiten und \"exotische\" Typen, desto besser. Etwas das\n" +"> Wir werden heute versuchen, Rust aus einem Ihrer eigenen Projekte " +"anzurufen. Versuchen Sie es also\n" +"> Finden Sie eine kleine Ecke Ihrer Codebasis, in die wir einige Codezeilen " +"verschieben können\n" +"> Rost. Je weniger Abhängigkeiten und \"exotische\" Typen, desto besser. " +"Etwas das\n" "> parst einige rohe Bytes wäre ideal." #: src/android/setup.md:1 @@ -10994,11 +12006,12 @@ msgstr "# Aufstellen" #: src/android/setup.md:3 #, fuzzy msgid "" -"We will be using an Android Virtual Device to test our code. Make sure you have\n" +"We will be using an Android Virtual Device to test our code. Make sure you " +"have\n" "access to one or create a new one with:" msgstr "" -"Wir werden ein Android Virtual Device verwenden, um unseren Code zu testen. Stell sicher dass du " -"hast\n" +"Wir werden ein Android Virtual Device verwenden, um unseren Code zu testen. " +"Stell sicher dass du hast\n" "Greifen Sie auf eines zu oder erstellen Sie ein neues mit:" #: src/android/setup.md:6 @@ -11027,7 +12040,9 @@ msgstr "# Bauregeln" #: src/android/build-rules.md:3 #, fuzzy msgid "The Android build system (Soong) supports Rust via a number of modules:" -msgstr "Das Android-Build-System (Soong) unterstützt Rust über eine Reihe von Modulen:" +msgstr "" +"Das Android-Build-System (Soong) unterstützt Rust über eine Reihe von " +"Modulen:" #: src/android/build-rules.md:5 #, fuzzy @@ -11037,39 +12052,41 @@ msgid "" "|\n" "|-------------------|----------------------------------------------------------------------------------------------------|\n" "| `rust_binary` | Produces a Rust " -"binary. |\n" -"| `rust_library` | Produces a Rust library, and provides both `rlib` and `dylib` " -"variants. |\n" -"| `rust_ffi` | Produces a Rust C library usable by `cc` modules, and provides both static " -"and shared variants. |\n" -"| `rust_proc_macro` | Produces a `proc-macro` Rust library. These are analogous to compiler " -"plugins. |\n" -"| `rust_test` | Produces a Rust test binary that uses the standard Rust test " -"harness. |\n" +"binary. " +"|\n" +"| `rust_library` | Produces a Rust library, and provides both `rlib` and " +"`dylib` variants. |\n" +"| `rust_ffi` | Produces a Rust C library usable by `cc` modules, and " +"provides both static and shared variants. |\n" +"| `rust_proc_macro` | Produces a `proc-macro` Rust library. These are " +"analogous to compiler plugins. |\n" +"| `rust_test` | Produces a Rust test binary that uses the standard " +"Rust test harness. |\n" "| `rust_fuzz` | Produces a Rust fuzz binary leveraging " "`libfuzzer`. |\n" -"| `rust_protobuf` | Generates source and produces a Rust library that provides an interface for " -"a particular protobuf. |\n" -"| `rust_bindgen` | Generates source and produces a Rust library containing Rust bindings to C " -"libraries. |" +"| `rust_protobuf` | Generates source and produces a Rust library that " +"provides an interface for a particular protobuf. |\n" +"| `rust_bindgen` | Generates source and produces a Rust library " +"containing Rust bindings to C libraries. |" msgstr "" "| Modultyp | Beschreibung |\n" -"|-------------------|------------------------ -------------------------------------------------- " -"---------------------|\n" +"|-------------------|------------------------ " +"-------------------------------------------------- ---------------------|\n" "| `rust_binary` | Erzeugt eine Rust-Binärdatei. |\n" -"| `rust_library` | Erzeugt eine Rust-Bibliothek und bietet sowohl `rlib`- als auch `dylib`-" -"Varianten. |\n" -"| `rust_ffi` | Erzeugt eine Rust-C-Bibliothek, die von `cc`-Modulen verwendet werden kann, und " -"bietet sowohl statische als auch gemeinsam genutzte Varianten. |\n" -"| `rust_proc_macro` | Erzeugt eine `proc-macro` Rust-Bibliothek. Diese sind analog zu Compiler-" -"Plugins. |\n" -"| `rust_test` | Erzeugt eine Rust-Test-Binärdatei, die die standardmäßige Rust-Testumgebung " -"verwendet. |\n" +"| `rust_library` | Erzeugt eine Rust-Bibliothek und bietet sowohl `rlib`- " +"als auch `dylib`-Varianten. |\n" +"| `rust_ffi` | Erzeugt eine Rust-C-Bibliothek, die von `cc`-Modulen " +"verwendet werden kann, und bietet sowohl statische als auch gemeinsam " +"genutzte Varianten. |\n" +"| `rust_proc_macro` | Erzeugt eine `proc-macro` Rust-Bibliothek. Diese sind " +"analog zu Compiler-Plugins. |\n" +"| `rust_test` | Erzeugt eine Rust-Test-Binärdatei, die die standardmäßige " +"Rust-Testumgebung verwendet. |\n" "| `rust_fuzz` | Erzeugt eine Rust-Fuzz-Binärdatei, die `libfuzzer` nutzt. |\n" -"| `rust_protobuf` | Generiert Quellcode und erstellt eine Rust-Bibliothek, die eine Schnittstelle " -"für einen bestimmten Protobuf bereitstellt. |\n" -"| `rust_bindgen` | Generiert Quellcode und erstellt eine Rust-Bibliothek, die Rust-Bindungen an C-" -"Bibliotheken enthält. |" +"| `rust_protobuf` | Generiert Quellcode und erstellt eine Rust-Bibliothek, " +"die eine Schnittstelle für einen bestimmten Protobuf bereitstellt. |\n" +"| `rust_bindgen` | Generiert Quellcode und erstellt eine Rust-Bibliothek, " +"die Rust-Bindungen an C-Bibliotheken enthält. |" #: src/android/build-rules.md:16 #, fuzzy @@ -11084,11 +12101,12 @@ msgstr "# Rust-Binärdateien" #: src/android/build-rules/binary.md:3 #, fuzzy msgid "" -"Let us start with a simple application. At the root of an AOSP checkout, create\n" +"Let us start with a simple application. At the root of an AOSP checkout, " +"create\n" "the following files:" msgstr "" -"Beginnen wir mit einer einfachen Anwendung. Erstellen Sie im Stammverzeichnis eines AOSP-" -"Checkouts\n" +"Beginnen wir mit einer einfachen Anwendung. Erstellen Sie im " +"Stammverzeichnis eines AOSP-Checkouts\n" "folgende Dateien:" #: src/android/build-rules/binary.md:6 src/android/build-rules/library.md:13 @@ -11147,7 +12165,9 @@ msgstr "# Rust-Bibliotheken" #: src/android/build-rules/library.md:3 #, fuzzy msgid "You use `rust_library` to create a new Rust library for Android." -msgstr "Sie verwenden `rust_library`, um eine neue Rust-Bibliothek für Android zu erstellen." +msgstr "" +"Sie verwenden `rust_library`, um eine neue Rust-Bibliothek für Android zu " +"erstellen." #: src/android/build-rules/library.md:5 #, fuzzy @@ -11228,7 +12248,8 @@ msgstr "Sie erstellen, pushen und führen die Binärdatei wie zuvor aus:" 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" "Hello Bob, it is very\n" "nice to meet you!\n" @@ -11244,10 +12265,12 @@ msgstr "# AIDL" #, fuzzy msgid "" "The [Android Interface Definition Language\n" -"(AIDL)](https://developer.android.com/guide/components/aidl) is supported in Rust:" +"(AIDL)](https://developer.android.com/guide/components/aidl) is supported in " +"Rust:" msgstr "" "Die [Android Interface Definition Language\n" -"(AIDL)](https://developer.android.com/guide/components/aidl) wird in Rust unterstützt:" +"(AIDL)](https://developer.android.com/guide/components/aidl) wird in Rust " +"unterstützt:" #: src/android/aidl.md:6 #, fuzzy @@ -11270,8 +12293,10 @@ msgstr "Sie deklarieren die API Ihres Dienstes über eine AIDL-Schnittstelle:" #: src/android/aidl/interface.md:5 #, fuzzy -msgid "*birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl*:" -msgstr "*birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl*:" +msgid "" +"*birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl*:" +msgstr "" +"*birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl*:" #: src/android/aidl/interface.md:7 msgid "" @@ -11310,11 +12335,12 @@ msgstr "" #: src/android/aidl/interface.md:32 #, fuzzy msgid "" -"Add `vendor_available: true` if your AIDL file is used by a binary in the vendor\n" +"Add `vendor_available: true` if your AIDL file is used by a binary in the " +"vendor\n" "partition." msgstr "" -"Fügen Sie „vendor_available: true“ hinzu, wenn Ihre AIDL-Datei von einer Binärdatei des Anbieters " -"verwendet wird\n" +"Fügen Sie „vendor_available: true“ hinzu, wenn Ihre AIDL-Datei von einer " +"Binärdatei des Anbieters verwendet wird\n" "Partition." #: src/android/aidl/implementation.md:1 @@ -11336,8 +12362,8 @@ msgstr "*birthday_service/src/lib.rs*:" msgid "" "```rust,ignore\n" "//! Implementation of the `IBirthdayService` AIDL interface.\n" -"use com_example_birthdayservice::aidl::com::example::birthdayservice::IBirthdayService::" -"IBirthdayService;\n" +"use com_example_birthdayservice::aidl::com::example::birthdayservice::" +"IBirthdayService::IBirthdayService;\n" "use com_example_birthdayservice::binder;\n" "\n" "/// The `IBirthdayService` implementation.\n" @@ -11346,16 +12372,19 @@ msgid "" "impl binder::Interface for BirthdayService {}\n" "\n" "impl IBirthdayService for BirthdayService {\n" -" fn wishHappyBirthday(&self, name: &str, years: i32) -> binder::Result {\n" +" fn wishHappyBirthday(&self, name: &str, years: i32) -> binder::" +"Result {\n" " Ok(format!(\n" -" \"Happy Birthday {name}, congratulations with the {years} years!\"\n" +" \"Happy Birthday {name}, congratulations with the {years} years!" +"\"\n" " ))\n" " }\n" "}\n" "```" msgstr "" -#: src/android/aidl/implementation.md:26 src/android/aidl/server.md:28 src/android/aidl/client.md:37 +#: src/android/aidl/implementation.md:26 src/android/aidl/server.md:28 +#: src/android/aidl/client.md:37 #, fuzzy msgid "*birthday_service/Android.bp*:" msgstr "*birthday_service/Android.bp*:" @@ -11383,7 +12412,9 @@ msgstr "# AIDL-Server" #: src/android/aidl/server.md:3 #, fuzzy msgid "Finally, we can create a server which exposes the service:" -msgstr "Schließlich können wir einen Server erstellen, der den Dienst verfügbar macht:" +msgstr "" +"Schließlich können wir einen Server erstellen, der den Dienst verfügbar " +"macht:" #: src/android/aidl/server.md:5 #, fuzzy @@ -11395,8 +12426,8 @@ msgid "" "```rust,ignore\n" "//! Birthday service.\n" "use birthdayservice::BirthdayService;\n" -"use com_example_birthdayservice::aidl::com::example::birthdayservice::IBirthdayService::" -"BnBirthdayService;\n" +"use com_example_birthdayservice::aidl::com::example::birthdayservice::" +"IBirthdayService::BnBirthdayService;\n" "use com_example_birthdayservice::binder;\n" "\n" "const SERVICE_IDENTIFIER: &str = \"birthdayservice\";\n" @@ -11408,7 +12439,8 @@ msgid "" " birthday_service,\n" " binder::BinderFeatures::default(),\n" " );\n" -" binder::add_service(SERVICE_IDENTIFIER, birthday_service_binder.as_binder())\n" +" binder::add_service(SERVICE_IDENTIFIER, birthday_service_binder." +"as_binder())\n" " .expect(\"Failed to register service\");\n" " binder::ProcessState::join_thread_pool()\n" "}\n" @@ -11446,7 +12478,8 @@ msgstr "Wir können den Dienst jetzt erstellen, pushen und starten:" 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 "" @@ -11454,7 +12487,8 @@ msgstr "" #: src/android/aidl/deploy.md:11 #, fuzzy msgid "In another terminal, check that the service runs:" -msgstr "Überprüfen Sie in einem anderen Terminal, ob der Dienst ausgeführt wird:" +msgstr "" +"Überprüfen Sie in einem anderen Terminal, ob der Dienst ausgeführt wird:" #: src/android/aidl/deploy.md:13 msgid "" @@ -11493,7 +12527,8 @@ msgstr "# AIDL-Client" #: src/android/aidl/client.md:3 #, fuzzy msgid "Finally, we can create a Rust client for our new service." -msgstr "Schließlich können wir einen Rust-Client für unseren neuen Dienst erstellen." +msgstr "" +"Schließlich können wir einen Rust-Client für unseren neuen Dienst erstellen." #: src/android/aidl/client.md:5 #, fuzzy @@ -11504,14 +12539,15 @@ msgstr "*birthday_service/src/client.rs*:" msgid "" "```rust,ignore\n" "//! Birthday service.\n" -"use com_example_birthdayservice::aidl::com::example::birthdayservice::IBirthdayService::" -"IBirthdayService;\n" +"use com_example_birthdayservice::aidl::com::example::birthdayservice::" +"IBirthdayService::IBirthdayService;\n" "use com_example_birthdayservice::binder;\n" "\n" "const SERVICE_IDENTIFIER: &str = \"birthdayservice\";\n" "\n" "/// Connect to the BirthdayService.\n" -"pub fn connect() -> Result, binder::StatusCode> {\n" +"pub fn connect() -> Result, binder::" +"StatusCode> {\n" " binder::get_interface(SERVICE_IDENTIFIER)\n" "}\n" "\n" @@ -11526,7 +12562,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" @@ -11564,7 +12601,8 @@ msgstr "Erstellen, pushen und führen Sie den Client auf Ihrem Gerät aus:" 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" "Happy Birthday Charlie, congratulations with the 60 years!\n" "```" @@ -11578,10 +12616,12 @@ msgstr "# Ändern der API" #: src/android/aidl/changing.md:3 #, fuzzy msgid "" -"Let us extend the API with more functionality: we want to let clients specify a\n" +"Let us extend the API with more functionality: we want to let clients " +"specify a\n" "list of lines for the birthday card:" msgstr "" -"Lassen Sie uns die API um mehr Funktionalität erweitern: Wir möchten, dass Kunden a angeben\n" +"Lassen Sie uns die API um mehr Funktionalität erweitern: Wir möchten, dass " +"Kunden a angeben\n" "Liste der Zeilen für die Geburtstagskarte:" #: src/android/aidl/changing.md:6 @@ -11605,11 +12645,12 @@ msgstr "# Protokollierung" #: src/android/logging.md:3 #, fuzzy msgid "" -"You should use the `log` crate to automatically log to `logcat` (on-device) or\n" +"You should use the `log` crate to automatically log to `logcat` (on-device) " +"or\n" "`stdout` (on-host):" msgstr "" -"Sie sollten die `log`-Crate verwenden, um sich automatisch bei `logcat` (auf dem Gerät) anzumelden " -"oder\n" +"Sie sollten die `log`-Crate verwenden, um sich automatisch bei `logcat` (auf " +"dem Gerät) anzumelden oder\n" "`stdout` (auf dem Host):" #: src/android/logging.md:6 @@ -11664,13 +12705,15 @@ msgstr "" #: src/android/interoperability/with-c/rust.md:73 #, fuzzy msgid "Build, push, and run the binary on your device:" -msgstr "Erstellen, übertragen und führen Sie die Binärdatei auf Ihrem Gerät aus:" +msgstr "" +"Erstellen, übertragen und führen Sie die Binärdatei auf Ihrem Gerät aus:" #: src/android/logging.md:44 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 "" @@ -11685,8 +12728,10 @@ msgid "" "```shell\n" "$ adb logcat -s rust\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 "" @@ -11698,11 +12743,12 @@ msgstr "# Interoperabilität" #: src/android/interoperability.md:3 #, fuzzy msgid "" -"Rust has excellent support for interoperability with other languages. This means\n" +"Rust has excellent support for interoperability with other languages. This " +"means\n" "that you can:" msgstr "" -"Rust bietet eine hervorragende Unterstützung für die Interoperabilität mit anderen Sprachen. Das " -"heisst\n" +"Rust bietet eine hervorragende Unterstützung für die Interoperabilität mit " +"anderen Sprachen. Das heisst\n" "dass du kannst:" #: src/android/interoperability.md:6 @@ -11720,7 +12766,8 @@ msgid "" "When you call functions in a foreign language we say that you're using a\n" "_foreign function interface_, also known as FFI." msgstr "" -"Wenn Sie Funktionen in einer Fremdsprache aufrufen, sagen wir, dass Sie a verwenden\n" +"Wenn Sie Funktionen in einer Fremdsprache aufrufen, sagen wir, dass Sie a " +"verwenden\n" "_Fremdfunktionsschnittstelle_, auch bekannt als FFI." #: src/android/interoperability/with-c.md:1 @@ -11734,7 +12781,8 @@ msgid "" "Rust has full support for linking object files with a C calling convention.\n" "Similarly, you can export Rust functions and call them from C." msgstr "" -"Rust bietet volle Unterstützung für das Linken von Objektdateien mit einer C-Aufrufkonvention.\n" +"Rust bietet volle Unterstützung für das Linken von Objektdateien mit einer C-" +"Aufrufkonvention.\n" "Ebenso können Sie Rust-Funktionen exportieren und von C aus aufrufen." #: src/android/interoperability/with-c.md:6 @@ -11772,7 +12820,8 @@ msgid "" "> This assumes full knowledge of the target platform. Not recommended for\n" "> production." msgstr "" -"> Dies setzt vollständige Kenntnisse der Zielplattform voraus. Nicht empfehlenswert für\n" +"> Dies setzt vollständige Kenntnisse der Zielplattform voraus. Nicht " +"empfehlenswert für\n" "> Produktion." #: src/android/interoperability/with-c.md:26 @@ -11788,10 +12837,12 @@ msgstr "# Verwenden von Bindgen" #: src/android/interoperability/with-c/bindgen.md:3 #, fuzzy msgid "" -"The [bindgen](https://rust-lang.github.io/rust-bindgen/introduction.html) tool\n" +"The [bindgen](https://rust-lang.github.io/rust-bindgen/introduction.html) " +"tool\n" "can auto-generate bindings from a C header file." msgstr "" -"Das Tool [bindgen](https://rust-lang.github.io/rust-bindgen/introduction.html).\n" +"Das Tool [bindgen](https://rust-lang.github.io/rust-bindgen/introduction." +"html).\n" "kann Bindungen aus einer C-Header-Datei automatisch generieren." #: src/android/interoperability/with-c/bindgen.md:6 @@ -11901,7 +12952,8 @@ msgstr "" #: src/android/interoperability/with-c/bindgen.md:67 #, fuzzy msgid "Finally, we can use the bindings in our Rust program:" -msgstr "Schließlich können wir die Bindungen in unserem Rust-Programm verwenden:" +msgstr "" +"Schließlich können wir die Bindungen in unserem Rust-Programm verwenden:" #: src/android/interoperability/with-c/bindgen.md:71 msgid "" @@ -11943,7 +12995,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 "" @@ -11952,8 +13005,8 @@ msgstr "" #, fuzzy msgid "Finally, we can run auto-generated tests to ensure the bindings work:" msgstr "" -"Schließlich können wir automatisch generierte Tests ausführen, um sicherzustellen, dass die " -"Bindungen funktionieren:" +"Schließlich können wir automatisch generierte Tests ausführen, um " +"sicherzustellen, dass die Bindungen funktionieren:" #: src/android/interoperability/with-c/bindgen.md:110 msgid "" @@ -12091,7 +13144,8 @@ 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 "" @@ -12099,14 +13153,15 @@ msgstr "" #: src/android/interoperability/with-c/rust.md:83 #, fuzzy msgid "" -"`#[no_mangle]` disables Rust's usual name mangling, so the exported symbol will just be the name " -"of\n" -"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\n" +"the function. You can also use `#[export_name = \"some_name\"]` to specify " +"whatever name you want." msgstr "" -"`#[no_mangle]` deaktiviert Rusts übliches Namensverstümmeln, so dass das exportierte Symbol nur " -"der Name von ist\n" -"die Funktion. Sie können auch `#[export_name = \"some_name\"]` verwenden, um einen beliebigen " -"Namen anzugeben." +"`#[no_mangle]` deaktiviert Rusts übliches Namensverstümmeln, so dass das " +"exportierte Symbol nur der Name von ist\n" +"die Funktion. Sie können auch `#[export_name = \"some_name\"]` verwenden, um " +"einen beliebigen Namen anzugeben." #: src/android/interoperability/cpp.md:1 #, fuzzy @@ -12116,7 +13171,8 @@ msgstr "# Mit C++" #: src/android/interoperability/cpp.md:3 #, fuzzy msgid "" -"The [CXX crate][1] makes it possible to do safe interoperability between Rust\n" +"The [CXX crate][1] makes it possible to do safe interoperability between " +"Rust\n" "and C++." msgstr "" "Die [CXX-Kiste][1] ermöglicht eine sichere Interoperabilität zwischen Rust\n" @@ -12135,7 +13191,9 @@ msgstr "" #: src/android/interoperability/cpp.md:10 #, fuzzy msgid "See the [CXX tutorial][2] for an full example of using this." -msgstr "Ein vollständiges Beispiel für die Verwendung finden Sie im [CXX-Tutorial] [2]." +msgstr "" +"Ein vollständiges Beispiel für die Verwendung finden Sie im [CXX-Tutorial] " +"[2]." #: src/android/interoperability/java.md:1 #, fuzzy @@ -12151,7 +13209,8 @@ msgid "" msgstr "" "Java kann gemeinsame Objekte über [Java Native Interface\n" "(JNI)](https://en.wikipedia.org/wiki/Java_Native_Interface). Die [`jni`\n" -"crate](https://docs.rs/jni/) ermöglicht es Ihnen, eine kompatible Bibliothek zu erstellen." +"crate](https://docs.rs/jni/) ermöglicht es Ihnen, eine kompatible Bibliothek " +"zu erstellen." #: src/android/interoperability/java.md:7 #, fuzzy @@ -12187,7 +13246,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 #, fuzzy msgid "_interoperability/java/Android.bp_:" msgstr "_interoperability/java/Android.bp_:" @@ -12247,7 +13307,9 @@ msgstr "" #: src/android/interoperability/java.md:73 #, fuzzy msgid "Finally, you can build, sync, and run the binary:" -msgstr "Schließlich können Sie die Binärdatei erstellen, synchronisieren und ausführen:" +msgstr "" +"Schließlich können Sie die Binärdatei erstellen, synchronisieren und " +"ausführen:" #: src/android/interoperability/java.md:75 msgid "" @@ -12259,7 +13321,8 @@ msgid "" msgstr "" #: 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 #, fuzzy msgid "# Exercises" @@ -12268,11 +13331,12 @@ msgstr "# Übungen" #: src/exercises/android/morning.md:3 #, fuzzy msgid "" -"This is a group exercise: We will look at one of the projects you work with and\n" +"This is a group exercise: We will look at one of the projects you work with " +"and\n" "try to integrate some Rust into it. Some suggestions:" msgstr "" -"Für die letzte Übung schauen wir uns eines der Projekte an, mit denen Sie arbeiten. Lassen Sie " -"uns\n" +"Für die letzte Übung schauen wir uns eines der Projekte an, mit denen Sie " +"arbeiten. Lassen Sie uns\n" "gruppiert euch und macht das gemeinsam. Einige Vorschläge:" #: src/exercises/android/morning.md:6 @@ -12281,15 +13345,19 @@ msgid "" "* Call your AIDL service with a client written in Rust.\n" "\n" "* Move a function from your project to Rust and call it." -msgstr "* Verschieben Sie eine Funktion aus Ihrem Projekt nach Rust und rufen Sie sie auf." +msgstr "" +"* Verschieben Sie eine Funktion aus Ihrem Projekt nach Rust und rufen Sie " +"sie auf." #: src/exercises/android/morning.md:12 #, fuzzy msgid "" -"No solution is provided here since this is open-ended: it relies on someone in\n" +"No solution is provided here since this is open-ended: it relies on someone " +"in\n" "the class having a piece of code which you can turn in to Rust on the fly." msgstr "" -"Hier wird keine Lösung bereitgestellt, da dies offen ist: Es hängt von jemandem ab\n" +"Hier wird keine Lösung bereitgestellt, da dies offen ist: Es hängt von " +"jemandem ab\n" "Die Klasse hat einen Code, den Sie spontan an Rust übergeben können." #: src/bare-metal.md:1 @@ -12299,17 +13367,17 @@ msgstr "# Willkommen bei Comprehensive Rust 🦀" #: 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\n" -"basics of Rust (perhaps from completing the Comprehensive Rust course), and ideally also have " -"some\n" +"This is a standalone one-day course about bare-metal Rust, aimed at people " +"who are familiar with the\n" +"basics of Rust (perhaps from completing the Comprehensive Rust course), and " +"ideally also have some\n" "experience with bare-metal programming in some other language such as C." msgstr "" #: src/bare-metal.md:7 msgid "" -"Today we will talk about 'bare-metal' Rust: running Rust code without an OS underneath us. This " -"will\n" +"Today we will talk about 'bare-metal' Rust: running Rust code without an OS " +"underneath us. This will\n" "be divided into several parts:" msgstr "" @@ -12323,24 +13391,25 @@ msgstr "" #: src/bare-metal.md:15 msgid "" -"For the microcontroller part of the course we will use the [BBC micro:bit](https://microbit.org/) " -"v2\n" -"as an example. It's a [development board](https://tech.microbit.org/hardware/) based on the " -"Nordic\n" -"nRF51822 microcontroller with some LEDs and buttons, an I2C-connected accelerometer and compass, " -"and\n" +"For the microcontroller part of the course we will use the [BBC micro:bit]" +"(https://microbit.org/) v2\n" +"as an example. It's a [development board](https://tech.microbit.org/" +"hardware/) based on the Nordic\n" +"nRF51822 microcontroller with some LEDs and buttons, an I2C-connected " +"accelerometer and compass, and\n" "an on-board SWD debugger." msgstr "" #: src/bare-metal.md:20 -msgid "To get started, install some tools we'll need later. On gLinux or Debian:" +msgid "" +"To get started, install some tools we'll need later. On gLinux or Debian:" msgstr "" #: src/bare-metal.md:22 msgid "" "```bash\n" -"sudo apt install gcc-aarch64-linux-gnu gdb-multiarch libudev-dev picocom pkg-config qemu-system-" -"arm\n" +"sudo apt install gcc-aarch64-linux-gnu gdb-multiarch libudev-dev picocom pkg-" +"config qemu-system-arm\n" "rustup update\n" "rustup target add aarch64-unknown-none thumbv7em-none-eabihf\n" "rustup component add llvm-tools-preview\n" @@ -12349,13 +13418,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" "```" @@ -12495,12 +13566,13 @@ msgid "" "* This will compile to an empty binary.\n" "* `std` provides a panic handler; without it we must provide our own.\n" "* It can also be provided by another crate, such as `panic-halt`.\n" -"* Depending on the target, you may need to compile with `panic = \"abort\"` to avoid an error " -"about\n" +"* Depending on the target, you may need to compile with `panic = \"abort\"` " +"to avoid an error about\n" " `eh_personality`.\n" -"* Note that there is no `main` or any other entry point; it's up to you to define your own entry\n" -" point. This will typically involve a linker script and some assembly code to set things up " -"ready\n" +"* Note that there is no `main` or any other entry point; it's up to you to " +"define your own entry\n" +" point. This will typically involve a linker script and some assembly code " +"to set things up ready\n" " for Rust code to run." msgstr "" @@ -12511,7 +13583,8 @@ msgstr "" #: src/bare-metal/alloc.md:3 msgid "" "To use `alloc` you must implement a\n" -"[global (heap) allocator](https://doc.rust-lang.org/stable/std/alloc/trait.GlobalAlloc.html)." +"[global (heap) allocator](https://doc.rust-lang.org/stable/std/alloc/trait." +"GlobalAlloc.html)." msgstr "" #: src/bare-metal/alloc.md:6 @@ -12533,7 +13606,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" @@ -12550,15 +13624,19 @@ msgstr "" #: src/bare-metal/alloc.md:39 msgid "" -"* `buddy_system_allocator` is a third-party crate implementing a basic buddy system allocator. " -"Other\n" -" crates are available, or you can write your own or hook into your existing allocator.\n" -"* The const parameter of `LockedHeap` is the max order of the allocator; i.e. in this case it can\n" +"* `buddy_system_allocator` is a third-party crate implementing a basic buddy " +"system allocator. Other\n" +" crates are available, or you can write your own or hook into your existing " +"allocator.\n" +"* The const parameter of `LockedHeap` is the max order of the allocator; i." +"e. in this case it can\n" " allocate regions of up to 2**32 bytes.\n" -"* If any crate in your dependency tree depends on `alloc` then you must have exactly one global\n" -" allocator defined in your binary. Usually this is done in the top-level binary crate.\n" -"* `extern crate panic_halt as _` is necessary to ensure that the `panic_halt` crate is linked in " -"so\n" +"* If any crate in your dependency tree depends on `alloc` then you must have " +"exactly one global\n" +" allocator defined in your binary. Usually this is done in the top-level " +"binary crate.\n" +"* `extern crate panic_halt as _` is necessary to ensure that the " +"`panic_halt` crate is linked in so\n" " we get its panic handler.\n" "* This example will build but not run, as it doesn't have an entry point." msgstr "" @@ -12569,8 +13647,8 @@ msgstr "" #: src/bare-metal/microcontrollers.md:3 msgid "" -"The `cortex_m_rt` crate provides (among other things) a reset handler for Cortex M " -"microcontrollers." +"The `cortex_m_rt` crate provides (among other things) a reset handler for " +"Cortex M microcontrollers." msgstr "" #: src/bare-metal/microcontrollers.md:5 @@ -12593,13 +13671,15 @@ msgid "" msgstr "" #: src/bare-metal/microcontrollers.md:21 -msgid "Next we'll look at how to access peripherals, with increasing levels of abstraction." +msgid "" +"Next we'll look at how to access peripherals, with increasing levels of " +"abstraction." msgstr "" #: src/bare-metal/microcontrollers.md:25 msgid "" -"* The `cortex_m_rt::entry` macro requires that the function have type `fn() -> !`, because " -"returning\n" +"* The `cortex_m_rt::entry` macro requires that the function have type `fn() -" +"> !`, because returning\n" " to the reset handler doesn't make sense.\n" "* Run the example with `cargo embed --bin minimal`" msgstr "" @@ -12610,7 +13690,8 @@ msgstr "" #: src/bare-metal/microcontrollers/mmio.md:3 msgid "" -"Most microcontrollers access peripherals via memory-mapped IO. Let's try turning on an LED on our\n" +"Most microcontrollers access peripherals via memory-mapped IO. Let's try " +"turning on an LED on our\n" "micro:bit:" msgstr "" @@ -12645,23 +13726,29 @@ msgid "" "#[entry]\n" "fn main() -> ! {\n" " // Configure GPIO 0 pins 21 and 28 as push-pull outputs.\n" -" let pin_cnf_21 = (GPIO_P0 + PIN_CNF + 21 * size_of::()) as *mut u32;\n" -" let pin_cnf_28 = (GPIO_P0 + PIN_CNF + 28 * size_of::()) as *mut u32;\n" -" // Safe because the pointers are to valid peripheral control registers, and\n" +" let pin_cnf_21 = (GPIO_P0 + PIN_CNF + 21 * size_of::()) as *mut " +"u32;\n" +" let pin_cnf_28 = (GPIO_P0 + PIN_CNF + 28 * size_of::()) as *mut " +"u32;\n" +" // Safe because the pointers are to valid peripheral control registers, " +"and\n" " // no aliases exist.\n" " unsafe {\n" " pin_cnf_21.write_volatile(\n" -" DIR_OUTPUT | INPUT_DISCONNECT | PULL_DISABLED | DRIVE_S0S1 | SENSE_DISABLED,\n" +" DIR_OUTPUT | INPUT_DISCONNECT | PULL_DISABLED | DRIVE_S0S1 | " +"SENSE_DISABLED,\n" " );\n" " pin_cnf_28.write_volatile(\n" -" DIR_OUTPUT | INPUT_DISCONNECT | PULL_DISABLED | DRIVE_S0S1 | SENSE_DISABLED,\n" +" DIR_OUTPUT | INPUT_DISCONNECT | PULL_DISABLED | DRIVE_S0S1 | " +"SENSE_DISABLED,\n" " );\n" " }\n" "\n" " // Set pin 28 low and pin 21 high to turn the LED on.\n" " let gpio0_outset = (GPIO_P0 + OUTSET) as *mut u32;\n" " let gpio0_outclr = (GPIO_P0 + OUTCLR) as *mut u32;\n" -" // Safe because the pointers are to valid peripheral control registers, and\n" +" // Safe because the pointers are to valid peripheral control registers, " +"and\n" " // no aliases exist.\n" " unsafe {\n" " gpio0_outclr.write_volatile(1 << 28);\n" @@ -12675,11 +13762,14 @@ msgstr "" #: src/bare-metal/microcontrollers/mmio.md:64 msgid "" -"* GPIO 0 pin 21 is connected to the first column of the LED matrix, and pin 28 to the first row." +"* GPIO 0 pin 21 is connected to the first column of the LED matrix, and pin " +"28 to the first row." msgstr "" -#: src/bare-metal/microcontrollers/mmio.md:66 src/bare-metal/microcontrollers/pacs.md:59 -#: src/bare-metal/microcontrollers/hals.md:43 src/bare-metal/microcontrollers/board-support.md:34 +#: src/bare-metal/microcontrollers/mmio.md:66 +#: src/bare-metal/microcontrollers/pacs.md:59 +#: src/bare-metal/microcontrollers/hals.md:43 +#: src/bare-metal/microcontrollers/board-support.md:34 msgid "Run the example with:" msgstr "" @@ -12696,9 +13786,10 @@ msgstr "" #: src/bare-metal/microcontrollers/pacs.md:3 msgid "" -"[`svd2rust`](https://crates.io/crates/svd2rust) generates mostly-safe Rust wrappers for\n" -"memory-mapped peripherals from [CMSIS-SVD](https://www.keil.com/pack/doc/CMSIS/SVD/html/index." -"html)\n" +"[`svd2rust`](https://crates.io/crates/svd2rust) generates mostly-safe Rust " +"wrappers for\n" +"memory-mapped peripherals from [CMSIS-SVD](https://www.keil.com/pack/doc/" +"CMSIS/SVD/html/index.html)\n" "files." msgstr "" @@ -12747,16 +13838,19 @@ msgstr "" #: src/bare-metal/microcontrollers/pacs.md:49 msgid "" -"* SVD (System View Description) files are XML files typically provided by silicon vendors which\n" +"* SVD (System View Description) files are XML files typically provided by " +"silicon vendors which\n" " describe the memory map of the device.\n" -" * They are organised by peripheral, register, field and value, with names, descriptions, " -"addresses\n" +" * They are organised by peripheral, register, field and value, with names, " +"descriptions, addresses\n" " and so on.\n" -" * SVD files are often buggy and incomplete, so there are various projects which patch the\n" +" * SVD files are often buggy and incomplete, so there are various projects " +"which patch the\n" " mistakes, add missing details, and publish the generated crates.\n" "* `cortex-m-rt` provides the vector table, among other things.\n" "* If you `cargo install cargo-binutils` then you can run\n" -" `cargo objdump --bin pac -- -d --no-show-raw-insn` to see the resulting binary." +" `cargo objdump --bin pac -- -d --no-show-raw-insn` to see the resulting " +"binary." msgstr "" #: src/bare-metal/microcontrollers/pacs.md:61 @@ -12772,10 +13866,10 @@ msgstr "" #: src/bare-metal/microcontrollers/hals.md:3 msgid "" -"[HAL crates](https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates) " -"for\n" -"many microcontrollers provide wrappers around various peripherals. These generally implement " -"traits\n" +"[HAL crates](https://github.com/rust-embedded/awesome-embedded-rust#hal-" +"implementation-crates) for\n" +"many microcontrollers provide wrappers around various peripherals. These " +"generally implement traits\n" "from [`embedded-hal`](https://crates.io/crates/embedded-hal)." msgstr "" @@ -12814,9 +13908,10 @@ msgstr "" #: src/bare-metal/microcontrollers/hals.md:39 msgid "" -" * `set_low` and `set_high` are methods on the `embedded_hal` `OutputPin` trait.\n" -" * HAL crates exist for many Cortex-M and RISC-V devices, including various STM32, GD32, nRF, " -"NXP,\n" +" * `set_low` and `set_high` are methods on the `embedded_hal` `OutputPin` " +"trait.\n" +" * HAL crates exist for many Cortex-M and RISC-V devices, including various " +"STM32, GD32, nRF, NXP,\n" " MSP430, AVR and PIC microcontrollers." msgstr "" @@ -12834,7 +13929,8 @@ msgstr "# Tastaturkürzel" #: 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 @@ -12863,9 +13959,11 @@ 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\n" +" * In this case the board support crate is just providing more useful names, " +"and a bit of\n" " initialisation.\n" -" * The crate may also include drivers for some on-board devices outside of the microcontroller\n" +" * The crate may also include drivers for some on-board devices outside of " +"the microcontroller\n" " itself.\n" " * `microbit-v2` includes a simple driver for the LED matrix." msgstr "" @@ -12897,14 +13995,17 @@ msgid "" " // ...\n" " }\n" " let mut pin_output: P0_01> = pin_input\n" -" .into_open_drain_output(OpenDrainConfig::Disconnect0Standard1, Level::Low);\n" +" .into_open_drain_output(OpenDrainConfig::Disconnect0Standard1, " +"Level::Low);\n" " pin_output.set_high().unwrap();\n" " // pin_input.is_high(); // Error, moved.\n" "\n" " let _pin2: P0_02> = gpio0\n" " .p0_02\n" -" .into_open_drain_output(OpenDrainConfig::Disconnect0Standard1, Level::Low);\n" -" let _pin3: P0_03> = gpio0.p0_03.into_push_pull_output(Level::Low);\n" +" .into_open_drain_output(OpenDrainConfig::Disconnect0Standard1, " +"Level::Low);\n" +" let _pin3: P0_03> = gpio0.p0_03." +"into_push_pull_output(Level::Low);\n" "\n" " loop {}\n" "}\n" @@ -12913,17 +14014,21 @@ 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\n" +" * Pins don't implement `Copy` or `Clone`, so only one instance of each can " +"exist. Once a pin is\n" " moved out of the port struct nobody else can take it.\n" -" * Changing the configuration of a pin consumes the old pin instance, so you can’t keep use the " -"old\n" +" * Changing the configuration of a pin consumes the old pin instance, so you " +"can’t keep use the old\n" " instance afterwards.\n" -" * The type of a value indicates the state that it is in: e.g. in this case, the configuration " -"state\n" -" of a GPIO pin. This encodes the state machine into the type system, and ensures that you don't\n" -" try to use a pin in a certain way without properly configuring it first. Illegal state\n" +" * The type of a value indicates the state that it is in: e.g. in this case, " +"the configuration state\n" +" of a GPIO pin. This encodes the state machine into the type system, and " +"ensures that you don't\n" +" try to use a pin in a certain way without properly configuring it first. " +"Illegal state\n" " transitions are caught at compile time.\n" -" * You can call `is_high` on an input pin and `set_high` on an output pin, but not vice-versa.\n" +" * You can call `is_high` on an input pin and `set_high` on an output pin, " +"but not vice-versa.\n" " * Many HAL crates follow this pattern." msgstr "" @@ -12933,7 +14038,8 @@ msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:3 msgid "" -"The [`embedded-hal`](https://crates.io/crates/embedded-hal) crate provides a number of traits\n" +"The [`embedded-hal`](https://crates.io/crates/embedded-hal) crate provides a " +"number of traits\n" "covering common microcontroller peripherals." msgstr "" @@ -12950,16 +14056,19 @@ msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:13 msgid "" "Other crates then implement\n" -"[drivers](https://github.com/rust-embedded/awesome-embedded-rust#driver-crates) in terms of these\n" -"traits, e.g. an accelerometer driver might need an I2C or SPI bus implementation." +"[drivers](https://github.com/rust-embedded/awesome-embedded-rust#driver-" +"crates) in terms of these\n" +"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\n" +" * There are implementations for many microcontrollers, as well as other " +"platforms such as Linux on\n" "Raspberry Pi.\n" -" * 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 @@ -12968,39 +14077,50 @@ 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\n" +"[probe-rs](https://probe.rs/) is a handy toolset for embedded debugging, " +"like OpenOCD but better\n" "integrated." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:6 msgid "" -"* SWD and JTAG via CMSIS-DAP, ST-Link and J-Link probes\n" -"* GDB stub and Microsoft DAP server\n" +"* SWD and JTAG via CMSIS-DAP, ST-" +"Link and J-Link probes\n" +"* GDB stub and Microsoft DAP " +"server\n" "* Cargo integration" msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:10 msgid "" "`cargo-embed` is a cargo subcommand to build and flash binaries, log\n" -"RTT output and connect GDB. It's configured by an\n" +"RTT output and connect GDB. It's " +"configured by an\n" "`Embed.toml` file in your project directory." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:16 msgid "" -"* [CMSIS-DAP](https://arm-software.github.io/CMSIS_5/DAP/html/index.html) is an Arm standard\n" -" protocol over USB for an in-circuit debugger to access the CoreSight Debug Access Port of " -"various\n" -" Arm Cortex processors. It's what the on-board debugger on the BBC micro:bit uses.\n" -"* ST-Link is a range of in-circuit debuggers from ST Microelectronics, J-Link is a range from\n" +"* [CMSIS-DAP](https://arm-software.github.io/CMSIS_5/DAP/html/index.html) is " +"an Arm standard\n" +" protocol over USB for an in-circuit debugger to access the CoreSight Debug " +"Access Port of various\n" +" Arm Cortex processors. It's what the on-board debugger on the BBC micro:" +"bit uses.\n" +"* ST-Link is a range of in-circuit debuggers from ST Microelectronics, J-" +"Link is a range from\n" " SEGGER.\n" -"* The Debug Access Port is usually either a 5-pin JTAG interface or 2-pin Serial Wire Debug.\n" -"* probe-rs is a library which you can integrate into your own tools if you want to.\n" -"* The [Microsoft Debug Adapter Protocol](https://microsoft.github.io/debug-adapter-protocol/) " -"lets\n" -" VSCode and other IDEs debug code running on any supported microcontroller.\n" +"* The Debug Access Port is usually either a 5-pin JTAG interface or 2-pin " +"Serial Wire Debug.\n" +"* probe-rs is a library which you can integrate into your own tools if you " +"want to.\n" +"* The [Microsoft Debug Adapter Protocol](https://microsoft.github.io/debug-" +"adapter-protocol/) lets\n" +" VSCode and other IDEs debug code running on any supported " +"microcontroller.\n" "* cargo-embed is a binary built using the probe-rs library.\n" -"* RTT (Real Time Transfers) is a mechanism to transfer data between the debug host and the target\n" +"* RTT (Real Time Transfers) is a mechanism to transfer data between the " +"debug host and the target\n" " through a number of ringbuffers." msgstr "" @@ -13038,13 +14158,14 @@ msgstr "" #: src/bare-metal/microcontrollers/debugging.md:19 #, fuzzy msgid "In another terminal in the same directory:" -msgstr "Überprüfen Sie in einem anderen Terminal, ob der Dienst ausgeführt wird:" +msgstr "" +"Überprüfen Sie in einem anderen Terminal, ob der Dienst ausgeführt wird:" #: 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 "" @@ -13064,7 +14185,8 @@ msgid "" "```" msgstr "" -#: src/bare-metal/microcontrollers/other-projects.md:1 src/bare-metal/aps/other-projects.md:1 +#: src/bare-metal/microcontrollers/other-projects.md:1 +#: src/bare-metal/aps/other-projects.md:1 msgid "# Other projects" msgstr "" @@ -13072,32 +14194,39 @@ msgstr "" msgid "" " * [RTIC](https://rtic.rs/)\n" " * \"Real-Time Interrupt-driven Concurrency\"\n" -" * Shared resource management, message passing, task scheduling, timer queue\n" +" * Shared resource management, message passing, task scheduling, timer " +"queue\n" " * [Embassy](https://embassy.dev/)\n" " * `async` executors with priorities, timers, networking, USB\n" " * [TockOS](https://www.tockos.org/documentation/getting-started)\n" -" * Security-focused RTOS with preemptive scheduling and Memory Protection Unit support\n" +" * Security-focused RTOS with preemptive scheduling and Memory Protection " +"Unit support\n" " * [Hubris](https://hubris.oxide.computer/)\n" -" * Microkernel RTOS from Oxide Computer Company with memory protection, unprivileged drivers, " -"IPC\n" +" * Microkernel RTOS from Oxide Computer Company with memory protection, " +"unprivileged drivers, IPC\n" " * [Bindings for FreeRTOS](https://github.com/lobaro/FreeRTOS-rust)\n" " * Some platforms have `std` implementations, e.g.\n" -" [esp-idf](https://esp-rs.github.io/book/overview/using-the-standard-library.html)." +" [esp-idf](https://esp-rs.github.io/book/overview/using-the-standard-" +"library.html)." msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:18 msgid "" " * RTIC can be considered either an RTOS or a concurrency framework.\n" " * It doesn't include any HALs.\n" -" * It uses the Cortex-M NVIC (Nested Virtual Interrupt Controller) for scheduling rather than a\n" +" * It uses the Cortex-M NVIC (Nested Virtual Interrupt Controller) for " +"scheduling rather than a\n" " proper kernel.\n" " * Cortex-M only.\n" " * Google uses TockOS on the Haven microcontroller for Titan security keys.\n" -" * FreeRTOS is mostly written in C, but there are Rust bindings for writing applications." +" * FreeRTOS is mostly written in C, but there are Rust bindings for writing " +"applications." msgstr "" #: src/exercises/bare-metal/morning.md:3 -msgid "We will read the direction from an I2C compass, and log the readings to a serial port." +msgid "" +"We will read the direction from an I2C compass, and log the readings to a " +"serial port." msgstr "" #: src/exercises/bare-metal/compass.md:1 @@ -13107,8 +14236,8 @@ msgstr "# Vergleich" #: src/exercises/bare-metal/compass.md:3 msgid "" -"We will read the direction from an I2C compass, and log the readings to a serial port. If you " -"have\n" +"We will read the direction from an I2C compass, and log the readings to a " +"serial port. If you have\n" "time, try displaying it on the LEDs somehow too, or use the buttons somehow." msgstr "" @@ -13118,28 +14247,33 @@ msgstr "" #: src/exercises/bare-metal/compass.md:8 msgid "" -"- Check the documentation for the [`lsm303agr`](https://docs.rs/lsm303agr/latest/lsm303agr/) and\n" -" [`microbit-v2`](https://docs.rs/microbit-v2/latest/microbit/) crates, as well as the\n" +"- Check the documentation for the [`lsm303agr`](https://docs.rs/lsm303agr/" +"latest/lsm303agr/) and\n" +" [`microbit-v2`](https://docs.rs/microbit-v2/latest/microbit/) crates, as " +"well as the\n" " [micro:bit hardware](https://tech.microbit.org/hardware/).\n" -"- The LSM303AGR Inertial Measurement Unit is connected to the internal I2C bus.\n" +"- The LSM303AGR Inertial Measurement Unit is connected to the internal I2C " +"bus.\n" "- TWI is another name for I2C, so the I2C master peripheral is called TWIM.\n" -"- The LSM303AGR driver needs something implementing the `embedded_hal::blocking::i2c::WriteRead`\n" +"- The LSM303AGR driver needs something implementing the `embedded_hal::" +"blocking::i2c::WriteRead`\n" " trait. The\n" -" [`microbit::hal::Twim`](https://docs.rs/microbit-v2/latest/microbit/hal/struct.Twim.html) " -"struct\n" +" [`microbit::hal::Twim`](https://docs.rs/microbit-v2/latest/microbit/hal/" +"struct.Twim.html) struct\n" " implements this.\n" -"- You have a [`microbit::Board`](https://docs.rs/microbit-v2/latest/microbit/struct.Board.html)\n" +"- You have a [`microbit::Board`](https://docs.rs/microbit-v2/latest/microbit/" +"struct.Board.html)\n" " struct with fields for the various pins and peripherals.\n" "- You can also look at the\n" -" [nRF52833 datasheet](https://infocenter.nordicsemi.com/pdf/nRF52833_PS_v1.5.pdf) if you want, " -"but\n" +" [nRF52833 datasheet](https://infocenter.nordicsemi.com/pdf/" +"nRF52833_PS_v1.5.pdf) if you want, but\n" " it shouldn't be necessary for this exercise." msgstr "" #: src/exercises/bare-metal/compass.md:23 msgid "" -"Download the [exercise template](../../comprehensive-rust-exercises.zip) and look in the " -"`compass`\n" +"Download the [exercise template](../../comprehensive-rust-exercises.zip) and " +"look in the `compass`\n" "directory for the following files." msgstr "" @@ -13149,7 +14283,8 @@ msgid "`src/main.rs`:" msgstr "_hello_rust/src/main.rs_:" #: src/exercises/bare-metal/compass.md:28 src/exercises/bare-metal/rtc.md:21 -#: src/exercises/concurrency/dining-philosophers.md:17 src/exercises/concurrency/link-checker.md:55 +#: src/exercises/concurrency/dining-philosophers.md:17 +#: src/exercises/concurrency/link-checker.md:55 #: src/exercises/concurrency/dining-philosophers-async.md:11 msgid "" msgstr "" @@ -13196,8 +14331,10 @@ msgid "`Cargo.toml` (you shouldn't need to change this):" msgstr "" #: src/exercises/bare-metal/compass.md:66 src/exercises/bare-metal/rtc.md:387 -#: src/exercises/concurrency/dining-philosophers.md:63 src/exercises/concurrency/link-checker.md:35 -#: src/exercises/concurrency/dining-philosophers-async.md:60 src/exercises/concurrency/chat-app.md:17 +#: src/exercises/concurrency/dining-philosophers.md:63 +#: src/exercises/concurrency/link-checker.md:35 +#: src/exercises/concurrency/dining-philosophers-async.md:60 +#: src/exercises/concurrency/chat-app.md:17 msgid "" msgstr "" @@ -13274,7 +14411,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 @@ -13294,18 +14432,21 @@ msgstr "" #: src/bare-metal/aps.md:3 msgid "" -"So far we've talked about microcontrollers, such as the Arm Cortex-M series. Now let's try " -"writing\n" +"So far we've talked about microcontrollers, such as the Arm Cortex-M series. " +"Now let's try writing\n" "something for Cortex-A. For simplicity we'll just work with QEMU's aarch64\n" "['virt'](https://qemu-project.gitlab.io/qemu/system/arm/virt.html) board." msgstr "" #: src/bare-metal/aps.md:9 msgid "" -"* Broadly speaking, microcontrollers don't have an MMU or multiple levels of privilege (exception\n" +"* Broadly speaking, microcontrollers don't have an MMU or multiple levels of " +"privilege (exception\n" " levels on Arm CPUs, rings on x86), while application processors do.\n" -"* QEMU supports emulating various different machines or board models for each architecture. The\n" -" 'virt' board doesn't correspond to any particular real hardware, but is designed purely for\n" +"* QEMU supports emulating various different machines or board models for " +"each architecture. The\n" +" 'virt' board doesn't correspond to any particular real hardware, but is " +"designed purely for\n" " virtual machines." msgstr "" @@ -13315,8 +14456,10 @@ 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,\n" -"to make an HVC to tell the firmware to power off the system:" +"Sometimes we need to use assembly to do things that aren't possible with " +"Rust code. For example,\n" +"to make an HVC to tell the firmware " +"to power off the system:" msgstr "" #: src/bare-metal/aps/inline-assembly.md:6 @@ -13357,31 +14500,36 @@ msgstr "" #: src/bare-metal/aps/inline-assembly.md:39 msgid "" -"(If you actually want to do this, use the [`smccc`][1] crate which has wrappers for all these " -"functions.)" +"(If you actually want to do this, use the [`smccc`][1] crate which has " +"wrappers for all these functions.)" msgstr "" #: src/bare-metal/aps/inline-assembly.md:43 msgid "" -"* PSCI is the Arm Power State Coordination Interface, a standard set of functions to manage " -"system\n" -" and CPU power states, among other things. It is implemented by EL3 firmware and hypervisors on\n" +"* PSCI is the Arm Power State Coordination Interface, a standard set of " +"functions to manage system\n" +" and CPU power states, among other things. It is implemented by EL3 " +"firmware and hypervisors on\n" " many systems.\n" -"* The `0 => _` syntax means initialise the register to 0 before running the inline assembly code,\n" -" and ignore its contents afterwards. We need to use `inout` rather than `in` because the call " -"could\n" +"* The `0 => _` syntax means initialise the register to 0 before running the " +"inline assembly code,\n" +" and ignore its contents afterwards. We need to use `inout` rather than " +"`in` because the call could\n" " potentially clobber the contents of the registers.\n" -"* This `main` function needs to be `#[no_mangle]` and `extern \"C\"` because it is called from " -"our\n" +"* This `main` function needs to be `#[no_mangle]` and `extern \"C\"` because " +"it is called from our\n" " entry point in `entry.S`.\n" -"* `_x0`–`_x3` are the values of registers `x0`–`x3`, which are conventionally used by the " -"bootloader\n" -" to pass things like a pointer to the device tree. According to the standard aarch64 calling\n" -" convention (which is what `extern \"C\"` specifies to use), registers `x0`–`x7` are used for " -"the\n" -" first 8 arguments passed to a function, so `entry.S` doesn't need to do anything special except\n" +"* `_x0`–`_x3` are the values of registers `x0`–`x3`, which are " +"conventionally used by the bootloader\n" +" to pass things like a pointer to the device tree. According to the " +"standard aarch64 calling\n" +" convention (which is what `extern \"C\"` specifies to use), registers `x0`–" +"`x7` are used for the\n" +" first 8 arguments passed to a function, so `entry.S` doesn't need to do " +"anything special except\n" " make sure it doesn't change these registers.\n" -"* Run the example in QEMU with `make qemu_psci` under `src/bare-metal/aps/examples`." +"* Run the example in QEMU with `make qemu_psci` under `src/bare-metal/aps/" +"examples`." msgstr "" #: src/bare-metal/aps/mmio.md:1 @@ -13392,20 +14540,24 @@ msgstr "" msgid "" " * Use `pointer::read_volatile` and `pointer::write_volatile`.\n" " * Never hold a reference.\n" -" * `addr_of!` lets you get fields of structs without creating an intermediate reference." +" * `addr_of!` lets you get fields of structs without creating an " +"intermediate reference." msgstr "" #: src/bare-metal/aps/mmio.md:9 msgid "" -" * Volatile access: read or write operations may have side-effects, so prevent the compiler or\n" +" * Volatile access: read or write operations may have side-effects, so " +"prevent the compiler or\n" " hardware from reordering, duplicating or eliding them.\n" -" * Usually if you write and then read, e.g. via a mutable reference, the compiler may assume " -"that\n" -" the value read is the same as the value just written, and not bother actually reading " -"memory.\n" -" * Some existing crates for volatile access to hardware do hold references, but this is unsound.\n" +" * Usually if you write and then read, e.g. via a mutable reference, the " +"compiler may assume that\n" +" the value read is the same as the value just written, and not bother " +"actually reading memory.\n" +" * Some existing crates for volatile access to hardware do hold references, " +"but this is unsound.\n" " Whenever a reference exist, the compiler may choose to dereference it.\n" -" * Use the `addr_of!` macro to get struct field pointers from a pointer to the struct." +" * Use the `addr_of!` macro to get struct field pointers from a pointer to " +"the struct." msgstr "" #: src/bare-metal/aps/uart.md:1 @@ -13413,7 +14565,9 @@ msgid "# Let's write a UART driver" msgstr "" #: src/bare-metal/aps/uart.md:3 -msgid "The QEMU 'virt' machine has a [PL011][1] UART, so let's write a driver for that." +msgid "" +"The QEMU 'virt' machine has a [PL011][1] UART, so let's write a driver for " +"that." msgstr "" #: src/bare-metal/aps/uart.md:5 @@ -13430,13 +14584,16 @@ msgid "" "}\n" "\n" "impl Uart {\n" -" /// Constructs a new instance of the UART driver for a PL011 device at the\n" +" /// Constructs a new instance of the UART driver for a PL011 device at " +"the\n" " /// given base address.\n" " ///\n" " /// # Safety\n" " ///\n" -" /// The given base address must point to the 8 MMIO control registers of a\n" -" /// PL011 device, which must be mapped into the address space of the process\n" +" /// The given base address must point to the 8 MMIO control registers of " +"a\n" +" /// PL011 device, which must be mapped into the address space of the " +"process\n" " /// as device memory and not have any other aliases.\n" " pub unsafe fn new(base_address: *mut u8) -> Self {\n" " Self { base_address }\n" @@ -13461,7 +14618,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" "```" @@ -13469,19 +14627,22 @@ msgstr "" #: src/bare-metal/aps/uart.md:55 msgid "" -"* Note that `Uart::new` is unsafe while the other methods are safe. This is because as long as " -"the\n" -" caller of `Uart::new` guarantees that its safety requirements are met (i.e. that there is only\n" -" ever one instance of the driver for a given UART, and nothing else aliasing its address space),\n" -" then it is always safe to call `write_byte` later because we can assume the necessary\n" +"* Note that `Uart::new` is unsafe while the other methods are safe. This is " +"because as long as the\n" +" caller of `Uart::new` guarantees that its safety requirements are met (i." +"e. that there is only\n" +" ever one instance of the driver for a given UART, and nothing else " +"aliasing its address space),\n" +" then it is always safe to call `write_byte` later because we can assume " +"the necessary\n" " preconditions.\n" -"* We could have done it the other way around (making `new` safe but `write_byte` unsafe), but " -"that\n" -" would be much less convenient to use as every place that calls `write_byte` would need to " -"reason\n" +"* We could have done it the other way around (making `new` safe but " +"`write_byte` unsafe), but that\n" +" would be much less convenient to use as every place that calls " +"`write_byte` would need to reason\n" " about the safety\n" -"* This is a common pattern for writing safe wrappers of unsafe code: moving the burden of proof " -"for\n" +"* This is a common pattern for writing safe wrappers of unsafe code: moving " +"the burden of proof for\n" " soundness from a large number of places to a smaller number of places." msgstr "" @@ -13496,7 +14657,9 @@ msgid "# More traits" msgstr "# Züge" #: 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." +msgid "" +"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 @@ -13521,8 +14684,10 @@ msgstr "" #: src/bare-metal/aps/uart/traits.md:24 msgid "" -"* Implementing `Write` lets us use the `write!` and `writeln!` macros with our `Uart` type.\n" -"* Run the example in QEMU with `make qemu_minimal` under `src/bare-metal/aps/examples`." +"* Implementing `Write` lets us use the `write!` and `writeln!` macros with " +"our `Uart` type.\n" +"* Run the example in QEMU with `make qemu_minimal` under `src/bare-metal/aps/" +"examples`." msgstr "" #: src/bare-metal/aps/better-uart.md:1 @@ -13531,9 +14696,10 @@ msgstr "" #: src/bare-metal/aps/better-uart.md:3 msgid "" -"The PL011 actually has [a bunch more registers][1], and adding offsets to construct pointers to " -"access\n" -"them is error-prone and hard to read. Plus, some of them are bit fields which would be nice to\n" +"The PL011 actually has [a bunch more registers][1], and adding offsets to " +"construct pointers to access\n" +"them is error-prone and hard to read. Plus, some of them are bit fields " +"which would be nice to\n" "access in a structured way." msgstr "" @@ -13567,7 +14733,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 @@ -13605,8 +14772,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\n" +"* The `bitflags!` macro creates a newtype something like `Flags(u16)`, along " +"with a bunch of method\n" " implementations to get and set flags." msgstr "" @@ -13615,7 +14782,8 @@ msgid "# Multiple registers" msgstr "" #: src/bare-metal/aps/better-uart/registers.md:3 -msgid "We can use a struct to represent the memory layout of the UART's registers." +msgid "" +"We can use a struct to represent the memory layout of the UART's registers." msgstr "" #: src/bare-metal/aps/better-uart/registers.md:5 @@ -13657,10 +14825,12 @@ msgstr "" #: src/bare-metal/aps/better-uart/registers.md:41 msgid "" -"* [`#[repr(C)]`](https://doc.rust-lang.org/reference/type-layout.html#the-c-representation) tells\n" -" the compiler to lay the struct fields out in order, following the same rules as C. This is\n" -" necessary for our struct to have a predictable layout, as default Rust representation allows " -"the\n" +"* [`#[repr(C)]`](https://doc.rust-lang.org/reference/type-layout.html#the-c-" +"representation) tells\n" +" the compiler to lay the struct fields out in order, following the same " +"rules as C. This is\n" +" necessary for our struct to have a predictable layout, as default Rust " +"representation allows the\n" " compiler to (among other things) reorder fields however it sees fit." msgstr "" @@ -13682,13 +14852,16 @@ msgid "" "}\n" "\n" "impl Uart {\n" -" /// Constructs a new instance of the UART driver for a PL011 device at the\n" +" /// Constructs a new instance of the UART driver for a PL011 device at " +"the\n" " /// given base address.\n" " ///\n" " /// # Safety\n" " ///\n" -" /// The given base address must point to the 8 MMIO control registers of a\n" -" /// PL011 device, which must be mapped into the address space of the process\n" +" /// The given base address must point to the 8 MMIO control registers of " +"a\n" +" /// PL011 device, which must be mapped into the address space of the " +"process\n" " /// as device memory and not have any other aliases.\n" " pub unsafe fn new(base_address: *mut u32) -> Self {\n" " Self {\n" @@ -13712,12 +14885,14 @@ msgid "" " while self.read_flag_register().contains(Flags::BUSY) {}\n" " }\n" "\n" -" /// Reads and returns a pending byte, or `None` if nothing has been received.\n" +" /// Reads and returns a pending byte, or `None` if nothing has been " +"received.\n" " pub fn read_byte(&self) -> Option {\n" " if self.read_flag_register().contains(Flags::RXFE) {\n" " None\n" " } else {\n" -" let data = unsafe { addr_of!((*self.registers).dr).read_volatile() };\n" +" let data = unsafe { addr_of!((*self.registers).dr)." +"read_volatile() };\n" " // TODO: Check for error conditions in bits 8-11.\n" " Some(data as u8)\n" " }\n" @@ -13734,19 +14909,21 @@ msgstr "" #: src/bare-metal/aps/better-uart/driver.md:64 msgid "" -"* Note the use of `addr_of!` / `addr_of_mut!` to get pointers to individual fields without " -"creating\n" +"* Note the use of `addr_of!` / `addr_of_mut!` to get pointers to individual " +"fields without creating\n" " 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 #, fuzzy msgid "# Using it" msgstr "# Verwenden von Bindgen" #: src/bare-metal/aps/better-uart/using.md:3 msgid "" -"Let's write a small program using our driver to write to the serial console, and echo incoming\n" +"Let's write a small program using our driver to write to the serial console, " +"and echo incoming\n" "bytes." msgstr "" @@ -13771,7 +14948,8 @@ msgid "" "\n" "#[no_mangle]\n" "extern \"C\" fn main(x0: u64, x1: u64, x2: u64, x3: u64) {\n" -" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 device,\n" +" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 " +"device,\n" " // and nothing else accesses that address range.\n" " let mut uart = unsafe { Uart::new(PL011_BASE_ADDRESS) };\n" "\n" @@ -13798,16 +14976,17 @@ msgstr "" #: src/bare-metal/aps/better-uart/using.md:51 msgid "" -"* As in the [inline assembly](../inline-assembly.md) example, this `main` function is called from " -"our\n" +"* As in the [inline assembly](../inline-assembly.md) example, this `main` " +"function is called from our\n" " entry point code in `entry.S`. See the speaker notes there for details.\n" -"* Run the example in QEMU with `make qemu` under `src/bare-metal/aps/examples`." +"* Run the example in QEMU with `make qemu` under `src/bare-metal/aps/" +"examples`." msgstr "" #: src/bare-metal/aps/logging.md:3 msgid "" -"It would be nice to be able to use the logging macros from the [`log`][1] crate. We can do this " -"by\n" +"It would be nice to be able to use the logging macros from the [`log`][1] " +"crate. We can do this by\n" "implementing the `Log` trait." msgstr "" @@ -13846,7 +15025,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" @@ -13857,7 +15037,9 @@ msgid "" msgstr "" #: src/bare-metal/aps/logging.md:50 -msgid "* The unwrap in `log` is safe because we initialise `LOGGER` before calling `set_logger`." +msgid "" +"* The unwrap in `log` is safe because we initialise `LOGGER` before calling " +"`set_logger`." msgstr "" #: src/bare-metal/aps/logging/using.md:3 @@ -13885,7 +15067,8 @@ msgid "" "\n" "#[no_mangle]\n" "extern \"C\" fn main(x0: u64, x1: u64, x2: u64, x3: u64) {\n" -" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 device,\n" +" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 " +"device,\n" " // and nothing else accesses that address range.\n" " let uart = unsafe { Uart::new(PL011_BASE_ADDRESS) };\n" " logger::init(uart, LevelFilter::Trace).unwrap();\n" @@ -13909,7 +15092,8 @@ msgstr "" #: src/bare-metal/aps/logging/using.md:46 msgid "" "* Note that our panic handler can now log details of panics.\n" -"* Run the example in QEMU with `make qemu_logger` under `src/bare-metal/aps/examples`." +"* Run the example in QEMU with `make qemu_logger` under `src/bare-metal/aps/" +"examples`." msgstr "" #: src/bare-metal/aps/other-projects.md:3 @@ -13918,9 +15102,10 @@ msgid "" " * \"coreboot without the C\"\n" " * Supports x86, aarch64 and RISC-V.\n" " * Relies on LinuxBoot rather than having many drivers itself.\n" -" * [Rust RaspberryPi OS tutorial](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials)\n" -" * Initialisation, UART driver, simple bootloader, JTAG, exception levels, exception handling, " -"page tables\n" +" * [Rust RaspberryPi OS tutorial](https://github.com/rust-embedded/rust-" +"raspberrypi-OS-tutorials)\n" +" * Initialisation, UART driver, simple bootloader, JTAG, exception levels, " +"exception handling, page tables\n" " * Not all very well written, so beware.\n" " * [`cargo-call-stack`](https://crates.io/crates/cargo-call-stack)\n" " * Static analysis to determine maximum stack usage." @@ -13931,7 +15116,9 @@ msgid "# Useful crates" msgstr "" #: src/bare-metal/useful-crates.md:3 -msgid "We'll go over a few crates which solve some common problems in bare-metal programming." +msgid "" +"We'll go over a few crates which solve some common problems in bare-metal " +"programming." msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:1 @@ -13940,7 +15127,8 @@ msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:3 msgid "" -"The [`zerocopy`][1] crate (from Fuchsia) provides traits and macros for safely converting between\n" +"The [`zerocopy`][1] crate (from Fuchsia) provides traits and macros for " +"safely converting between\n" "byte sequences and other types." msgstr "" @@ -13983,22 +15171,23 @@ 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\n" -"working with structures shared with hardware e.g. by DMA, or sent over some external interface." +"This is not suitable for MMIO (as it doesn't use volatile reads and writes), " +"but can be useful for\n" +"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\n" +"* `FromBytes` can be implemented for types for which any byte pattern is " +"valid, and so can safely be\n" " converted from an untrusted sequence of bytes.\n" -"* Attempting to derive `FromBytes` for these types would fail, because `RequestType` doesn't use " -"all\n" +"* Attempting to derive `FromBytes` for these types would fail, because " +"`RequestType` doesn't use all\n" " possible u32 values as discriminants, so not all byte patterns are valid.\n" "* `zerocopy::byteorder` has types for byte-order aware numeric primitives.\n" -"* Run the example with `cargo run` under `src/bare-metal/useful-crates/zerocopy-example/`. (It " -"won't\n" +"* Run the example with `cargo run` under `src/bare-metal/useful-crates/" +"zerocopy-example/`. (It won't\n" " run in the Playground because of the crate dependency.)" msgstr "" @@ -14008,8 +15197,8 @@ msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:3 msgid "" -"The [`aarch64-paging`][1] crate lets you create page tables according to the AArch64 Virtual " -"Memory\n" +"The [`aarch64-paging`][1] crate lets you create page tables according to the " +"AArch64 Virtual Memory\n" "System Architecture." msgstr "" @@ -14038,11 +15227,12 @@ 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\n" +"* For now it only supports EL1, but support for other exception levels " +"should be straightforward to\n" " add.\n" "* This is used in Android for the [Protected VM Firmware][2].\n" -"* 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 @@ -14051,10 +15241,12 @@ msgstr "" #: src/bare-metal/useful-crates/buddy_system_allocator.md:3 msgid "" -"[`buddy_system_allocator`][1] is a third-party crate implementing a basic buddy system allocator.\n" -"It can be used both for [`LockedHeap`][2] implementing [`GlobalAlloc`][3] so you can use the\n" -"standard `alloc` crate (as we saw [before][4]), or for allocating other address space. For " -"example,\n" +"[`buddy_system_allocator`][1] is a third-party crate implementing a basic " +"buddy system allocator.\n" +"It can be used both for [`LockedHeap`][2] implementing [`GlobalAlloc`][3] so " +"you can use the\n" +"standard `alloc` crate (as we saw [before][4]), or for allocating other " +"address space. For example,\n" "we might want to allocate MMIO space for PCI BARs:" msgstr "" @@ -14080,8 +15272,8 @@ msgstr "" #: src/bare-metal/useful-crates/buddy_system_allocator.md:26 msgid "" "* PCI BARs always have alignment equal to their size.\n" -"* Run the example with `cargo run` under `src/bare-metal/useful-crates/allocator-example/`. (It " -"won't\n" +"* Run the example with `cargo run` under `src/bare-metal/useful-crates/" +"allocator-example/`. (It won't\n" " run in the Playground because of the crate dependency.)" msgstr "" @@ -14091,10 +15283,12 @@ 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.\n" -"[`tinyvec`][1] provides this: a vector backed by an array or slice, which could be statically\n" -"allocated or on the stack, which keeps track of how many elements are used and panics if you try " -"to\n" +"Sometimes you want something which can be resized like a `Vec`, but without " +"heap allocation.\n" +"[`tinyvec`][1] provides this: a vector backed by an array or slice, which " +"could be statically\n" +"allocated or on the stack, which keeps track of how many elements are used " +"and panics if you try to\n" "use more than are allocated." msgstr "" @@ -14116,8 +15310,10 @@ msgstr "" #: src/bare-metal/useful-crates/tinyvec.md:23 msgid "" -"* `tinyvec` requires that the element type implement `Default` for initialisation.\n" -"* The Rust Playground includes `tinyvec`, so this example will run fine inline." +"* `tinyvec` requires that the element type implement `Default` for " +"initialisation.\n" +"* The Rust Playground includes `tinyvec`, so this example will run fine " +"inline." msgstr "" #: src/bare-metal/useful-crates/spin.md:1 @@ -14127,13 +15323,17 @@ msgstr "## `statisch`" #: src/bare-metal/useful-crates/spin.md:3 msgid "" -"`std::sync::Mutex` and the other synchronisation primitives from `std::sync` are not available in\n" -"`core` or `alloc`. How can we manage synchronisation or interior mutability, such as for sharing\n" +"`std::sync::Mutex` and the other synchronisation primitives from `std::sync` " +"are not available in\n" +"`core` or `alloc`. How can we manage synchronisation or interior mutability, " +"such as for sharing\n" "state between different CPUs?" msgstr "" #: src/bare-metal/useful-crates/spin.md:7 -msgid "The [`spin`][1] crate provides spinlock-based equivalents of many of these primitives." +msgid "" +"The [`spin`][1] crate provides spinlock-based equivalents of many of these " +"primitives." msgstr "" #: src/bare-metal/useful-crates/spin.md:9 @@ -14154,10 +15354,11 @@ msgstr "" #: src/bare-metal/useful-crates/spin.md:23 msgid "" "* Be careful to avoid deadlock if you take locks in interrupt handlers.\n" -"* `spin` also has a ticket lock mutex implementation; equivalents of `RwLock`, `Barrier` and " -"`Once`\n" +"* `spin` also has a ticket lock mutex implementation; equivalents of " +"`RwLock`, `Barrier` and `Once`\n" " from `std::sync`; and `Lazy` for lazy initialisation.\n" -"* The [`once_cell`][2] crate also has some useful types for late initialisation with a slightly\n" +"* The [`once_cell`][2] crate also has some useful types for late " +"initialisation with a slightly\n" " different approach to `spin::once::Once`.\n" "* The Rust Playground includes `spin`, so this example will run fine inline." msgstr "" @@ -14169,9 +15370,10 @@ msgstr "# Android" #: 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\n" -"your Rust code, then a `cc_binary` with a linker script to produce the binary itself, and then a\n" +"To build a bare-metal Rust binary in AOSP, you need to use a " +"`rust_ffi_static` Soong rule to build\n" +"your Rust code, then a `cc_binary` with a linker script to produce the " +"binary itself, and then a\n" "`raw_binary` to convert the ELF to a raw binary ready to be run." msgstr "" @@ -14223,9 +15425,10 @@ msgstr "" #: src/bare-metal/android/vmbase.md:3 msgid "" -"For VMs running under crosvm on aarch64, the [vmbase][1] library provides a linker script and " -"useful\n" -"defaults for the build rules, along with an entry point, UART console logging and more." +"For VMs running under crosvm on aarch64, the [vmbase][1] library provides a " +"linker script and useful\n" +"defaults for the build rules, along with an entry point, UART console " +"logging and more." msgstr "" #: src/bare-metal/android/vmbase.md:6 @@ -14246,9 +15449,10 @@ msgstr "" #: src/bare-metal/android/vmbase.md:21 msgid "" -"* The `main!` macro marks your main function, to be called from the `vmbase` entry point.\n" -"* The `vmbase` entry point handles console initialisation, and issues a PSCI_SYSTEM_OFF to " -"shutdown\n" +"* The `main!` macro marks your main function, to be called from the `vmbase` " +"entry point.\n" +"* The `vmbase` entry point handles console initialisation, and issues a " +"PSCI_SYSTEM_OFF to shutdown\n" " the VM if your main function returns." msgstr "" @@ -14262,32 +15466,34 @@ msgstr "" #: src/exercises/bare-metal/rtc.md:3 msgid "" -"The QEMU aarch64 virt machine has a [PL031][1] real-time clock at 0x9010000. For this exercise, " -"you\n" +"The QEMU aarch64 virt machine has a [PL031][1] real-time clock at 0x9010000. " +"For this exercise, you\n" "should write a driver for it." msgstr "" #: src/exercises/bare-metal/rtc.md:6 msgid "" -"1. Use it to print the current time to the serial console. You can use the [`chrono`][2] crate " -"for\n" +"1. Use it to print the current time to the serial console. You can use the " +"[`chrono`][2] crate for\n" " date/time formatting.\n" -"2. Use the match register and raw interrupt status to busy-wait until a given time, e.g. 3 " -"seconds\n" +"2. Use the match register and raw interrupt status to busy-wait until a " +"given time, e.g. 3 seconds\n" " in the future. (Call [`core::hint::spin_loop`][3] inside the loop.)\n" -"3. _Extension if you have time:_ Enable and handle the interrupt generated by the RTC match. You " -"can\n" -" use the driver provided in the [`arm-gic`][4] crate to configure the Arm Generic Interrupt " -"Controller.\n" +"3. _Extension if you have time:_ Enable and handle the interrupt generated " +"by the RTC match. You can\n" +" use the driver provided in the [`arm-gic`][4] crate to configure the Arm " +"Generic Interrupt Controller.\n" " - Use the RTC interrupt, which is wired to the GIC as `IntId::spi(2)`.\n" -" - Once the interrupt is enabled, you can put the core to sleep via `arm_gic::wfi()`, which will " -"cause the core to sleep until it receives an interrupt.\n" +" - Once the interrupt is enabled, you can put the core to sleep via " +"`arm_gic::wfi()`, which will cause the core to sleep until it receives an " +"interrupt.\n" " " msgstr "" #: src/exercises/bare-metal/rtc.md:16 msgid "" -"Download the [exercise template](../../comprehensive-rust-exercises.zip) and look in the `rtc`\n" +"Download the [exercise template](../../comprehensive-rust-exercises.zip) and " +"look in the `rtc`\n" "directory for the following files." msgstr "" @@ -14317,17 +15523,20 @@ msgid "" "\n" "#[no_mangle]\n" "extern \"C\" fn main(x0: u64, x1: u64, x2: u64, x3: u64) {\n" -" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 device,\n" +" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 " +"device,\n" " // and nothing else accesses that address range.\n" " let uart = unsafe { Uart::new(PL011_BASE_ADDRESS) };\n" " logger::init(uart, LevelFilter::Trace).unwrap();\n" "\n" " info!(\"main({:#x}, {:#x}, {:#x}, {:#x})\", x0, x1, x2, x3);\n" "\n" -" // Safe because `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the base\n" +" // Safe because `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the " +"base\n" " // addresses of a GICv3 distributor and redistributor respectively, and\n" " // nothing else accesses those address ranges.\n" -" let mut gic = unsafe { GicV3::new(GICD_BASE_ADDRESS, GICR_BASE_ADDRESS) };\n" +" let mut gic = unsafe { GicV3::new(GICD_BASE_ADDRESS, " +"GICR_BASE_ADDRESS) };\n" " gic.setup();\n" "\n" " // TODO: Create instance of RTC driver and print current time.\n" @@ -14347,7 +15556,9 @@ msgid "" msgstr "" #: src/exercises/bare-metal/rtc.md:75 -msgid "`src/exceptions.rs` (you should only need to change this for the 3rd part of the exercise):" +msgid "" +"`src/exceptions.rs` (you should only need to change this for the 3rd part of " +"the exercise):" msgstr "" #: src/exercises/bare-metal/rtc.md:77 @@ -14385,7 +15596,8 @@ msgid "" "#[no_mangle]\n" "extern \"C\" fn irq_current(_elr: u64, _spsr: u64) {\n" " trace!(\"irq_current\");\n" -" let intid = GicV3::get_and_acknowledge_interrupt().expect(\"No pending interrupt\");\n" +" let intid = GicV3::get_and_acknowledge_interrupt().expect(\"No pending " +"interrupt\");\n" " info!(\"IRQ {intid:?}\");\n" "}\n" "\n" @@ -14485,7 +15697,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" @@ -14613,13 +15826,16 @@ msgid "" "}\n" "\n" "impl Uart {\n" -" /// Constructs a new instance of the UART driver for a PL011 device at the\n" +" /// Constructs a new instance of the UART driver for a PL011 device at " +"the\n" " /// given base address.\n" " ///\n" " /// # Safety\n" " ///\n" -" /// The given base address must point to the MMIO control registers of a\n" -" /// PL011 device, which must be mapped into the address space of the process\n" +" /// The given base address must point to the MMIO control registers of " +"a\n" +" /// PL011 device, which must be mapped into the address space of the " +"process\n" " /// as device memory and not have any other aliases.\n" " pub unsafe fn new(base_address: *mut u32) -> Self {\n" " Self {\n" @@ -14643,12 +15859,14 @@ msgid "" " while self.read_flag_register().contains(Flags::BUSY) {}\n" " }\n" "\n" -" /// Reads and returns a pending byte, or `None` if nothing has been received.\n" +" /// Reads and returns a pending byte, or `None` if nothing has been " +"received.\n" " pub fn read_byte(&self) -> Option {\n" " if self.read_flag_register().contains(Flags::RXFE) {\n" " None\n" " } else {\n" -" let data = unsafe { addr_of!((*self.registers).dr).read_volatile() };\n" +" let data = unsafe { addr_of!((*self.registers).dr)." +"read_volatile() };\n" " // TODO: Check for error conditions in bits 8-11.\n" " Some(data as u8)\n" " }\n" @@ -14791,24 +16009,29 @@ msgid "" ".set .L_TCR_TG0_4KB, 0x0 << 14\n" "/* 4 KiB granule size for TTBR1_EL1. */\n" ".set .L_TCR_TG1_4KB, 0x2 << 30\n" -"/* Disable translation table walk for TTBR1_EL1, generating a translation fault instead. */\n" +"/* Disable translation table walk for TTBR1_EL1, generating a translation " +"fault instead. */\n" ".set .L_TCR_EPD1, 0x1 << 23\n" "/* Translation table walks for TTBR0_EL1 are inner sharable. */\n" ".set .L_TCR_SH_INNER, 0x3 << 12\n" "/*\n" -" * Translation table walks for TTBR0_EL1 are outer write-back read-allocate write-allocate\n" +" * Translation table walks for TTBR0_EL1 are outer write-back read-allocate " +"write-allocate\n" " * cacheable.\n" " */\n" ".set .L_TCR_RGN_OWB, 0x1 << 10\n" "/*\n" -" * Translation table walks for TTBR0_EL1 are inner write-back read-allocate write-allocate\n" +" * Translation table walks for TTBR0_EL1 are inner write-back read-allocate " +"write-allocate\n" " * cacheable.\n" " */\n" ".set .L_TCR_RGN_IWB, 0x1 << 8\n" "/* Size offset for TTBR0_EL1 is 2**39 bytes (512 GiB). */\n" ".set .L_TCR_T0SZ_512, 64 - 39\n" -".set .Ltcrval, .L_TCR_TG0_4KB | .L_TCR_TG1_4KB | .L_TCR_EPD1 | .L_TCR_RGN_OWB\n" -".set .Ltcrval, .Ltcrval | .L_TCR_RGN_IWB | .L_TCR_SH_INNER | .L_TCR_T0SZ_512\n" +".set .Ltcrval, .L_TCR_TG0_4KB | .L_TCR_TG1_4KB | .L_TCR_EPD1 | ." +"L_TCR_RGN_OWB\n" +".set .Ltcrval, .Ltcrval | .L_TCR_RGN_IWB | .L_TCR_SH_INNER | ." +"L_TCR_T0SZ_512\n" "\n" "/* Stage 1 instruction access cacheability is unaffected. */\n" ".set .L_SCTLR_ELx_I, 0x1 << 12\n" @@ -14824,23 +16047,27 @@ msgid "" ".set .L_SCTLR_EL1_SED, 0x1 << 8\n" "/* Various IT instructions are disabled at EL0 in aarch32 mode. */\n" ".set .L_SCTLR_EL1_ITD, 0x1 << 7\n" -".set .L_SCTLR_EL1_RES1, (0x1 << 11) | (0x1 << 20) | (0x1 << 22) | (0x1 << 28) | (0x1 << 29)\n" -".set .Lsctlrval, .L_SCTLR_ELx_M | .L_SCTLR_ELx_C | .L_SCTLR_ELx_SA | .L_SCTLR_EL1_ITD | ." -"L_SCTLR_EL1_SED\n" -".set .Lsctlrval, .Lsctlrval | .L_SCTLR_ELx_I | .L_SCTLR_EL1_SPAN | .L_SCTLR_EL1_RES1\n" +".set .L_SCTLR_EL1_RES1, (0x1 << 11) | (0x1 << 20) | (0x1 << 22) | (0x1 << " +"28) | (0x1 << 29)\n" +".set .Lsctlrval, .L_SCTLR_ELx_M | .L_SCTLR_ELx_C | .L_SCTLR_ELx_SA | ." +"L_SCTLR_EL1_ITD | .L_SCTLR_EL1_SED\n" +".set .Lsctlrval, .Lsctlrval | .L_SCTLR_ELx_I | .L_SCTLR_EL1_SPAN | ." +"L_SCTLR_EL1_RES1\n" "\n" "/**\n" -" * This is a generic entry point for an image. It carries out the operations required to prepare " -"the\n" -" * loaded image to be run. Specifically, it zeroes the bss section using registers x25 and above,\n" -" * prepares the stack, enables floating point, and sets up the exception vector. It preserves x0-" -"x3\n" +" * This is a generic entry point for an image. It carries out the operations " +"required to prepare the\n" +" * loaded image to be run. Specifically, it zeroes the bss section using " +"registers x25 and above,\n" +" * prepares the stack, enables floating point, and sets up the exception " +"vector. It preserves x0-x3\n" " * for the Rust entry point, as these may contain boot parameters.\n" " */\n" ".section .init.entry, \"ax\"\n" ".global entry\n" "entry:\n" -"\t/* Load and apply the memory management configuration, ready to enable MMU and caches. */\n" +"\t/* Load and apply the memory management configuration, ready to enable MMU " +"and caches. */\n" "\tadrp x30, idmap\n" "\tmsr ttbr0_el1, x30\n" "\n" @@ -14857,7 +16084,8 @@ msgid "" "\tmov_i x30, .Lsctlrval\n" "\n" "\t/*\n" -"\t * Ensure everything before this point has completed, then invalidate any potentially stale\n" +"\t * Ensure everything before this point has completed, then invalidate any " +"potentially stale\n" "\t * local TLB entries before they start being used.\n" "\t */\n" "\tisb\n" @@ -14867,7 +16095,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" @@ -14932,11 +16161,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" @@ -14963,7 +16195,8 @@ msgid "" "\n" "/**\n" " * Restores the volatile registers from the stack. This currently takes 14\n" -" * instructions, so it can be used in exception handlers while still leaving 18\n" +" * instructions, so it can be used in exception handlers while still leaving " +"18\n" " * instructions left; if paired with save_volatile_to_stack, there are 4\n" " * instructions to spare.\n" " */\n" @@ -14990,12 +16223,15 @@ msgid "" ".endm\n" "\n" "/**\n" -" * This is a generic handler for exceptions taken at the current EL while using\n" -" * SP0. It behaves similarly to the SPx case by first switching to SPx, doing\n" +" * This is a generic handler for exceptions taken at the current EL while " +"using\n" +" * SP0. It behaves similarly to the SPx case by first switching to SPx, " +"doing\n" " * the work, then switching back to SP0 before returning.\n" " *\n" " * Switching to SPx and calling the Rust handler takes 16 instructions. To\n" -" * restore and return we need an additional 16 instructions, so we can implement\n" +" * restore and return we need an additional 16 instructions, so we can " +"implement\n" " * the whole handler within the allotted 32 instructions.\n" " */\n" ".macro current_exception_sp0 handler:req\n" @@ -15008,15 +16244,18 @@ msgid "" ".endm\n" "\n" "/**\n" -" * This is a generic handler for exceptions taken at the current EL while using\n" -" * SPx. It saves volatile registers, calls the Rust handler, restores volatile\n" +" * This is a generic handler for exceptions taken at the current EL while " +"using\n" +" * SPx. It saves volatile registers, calls the Rust handler, restores " +"volatile\n" " * registers, then returns.\n" " *\n" " * This also works for exceptions taken from EL0, if we don't care about\n" " * non-volatile registers.\n" " *\n" " * Saving state and jumping to the Rust handler takes 15 instructions, and\n" -" * restoring and returning also takes 15 instructions, so we can fit the whole\n" +" * restoring and returning also takes 15 instructions, so we can fit the " +"whole\n" " * handler in 30 instructions, under the limit of 32.\n" " */\n" ".macro current_exception_spx handler:req\n" @@ -15133,7 +16372,8 @@ msgid "" ".set .L_TT_XN, 0x3 << 53\n" "\n" ".set .L_TT_MT_DEV, 0x0 << 2\t\t\t// MAIR #0 (DEV_nGnRE)\n" -".set .L_TT_MT_MEM, (0x1 << 2) | (0x3 << 8)\t// MAIR #1 (MEM_WBWA), inner shareable\n" +".set .L_TT_MT_MEM, (0x1 << 2) | (0x3 << 8)\t// MAIR #1 (MEM_WBWA), inner " +"shareable\n" "\n" ".set .L_BLOCK_DEV, .L_TT_TYPE_BLOCK | .L_TT_MT_DEV | .L_TT_AF | .L_TT_XN\n" ".set .L_BLOCK_MEM, .L_TT_TYPE_BLOCK | .L_TT_MT_MEM | .L_TT_AF | .L_TT_NG\n" @@ -15179,7 +16419,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" @@ -15313,8 +16554,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" @@ -15346,20 +16587,25 @@ msgid "" "Rust has full support for concurrency using OS threads with mutexes and\n" "channels." msgstr "" -"Rust bietet volle Unterstützung für Parallelität unter Verwendung von Betriebssystem-Threads mit " -"Mutexes und\n" +"Rust bietet volle Unterstützung für Parallelität unter Verwendung von " +"Betriebssystem-Threads mit Mutexes und\n" "Kanäle." #: src/concurrency.md:6 #, fuzzy msgid "" -"The Rust type system plays an important role in making many concurrency bugs\n" -"compile time bugs. This is often referred to as _fearless concurrency_ since you\n" +"The Rust type system plays an important role in making many concurrency " +"bugs\n" +"compile time bugs. This is often referred to as _fearless concurrency_ since " +"you\n" "can rely on the compiler to ensure correctness at runtime." msgstr "" -"Das Rust-Typsystem spielt eine wichtige Rolle bei der Entstehung vieler Nebenläufigkeitsfehler\n" -"Kompilierzeitfehler. Dies wird seit Ihnen oft als _furchtlose Parallelität_ bezeichnet\n" -"kann sich auf den Compiler verlassen, um die Korrektheit zur Laufzeit sicherzustellen." +"Das Rust-Typsystem spielt eine wichtige Rolle bei der Entstehung vieler " +"Nebenläufigkeitsfehler\n" +"Kompilierzeitfehler. Dies wird seit Ihnen oft als _furchtlose Parallelität_ " +"bezeichnet\n" +"kann sich auf den Compiler verlassen, um die Korrektheit zur Laufzeit " +"sicherzustellen." #: src/concurrency/threads.md:1 #, fuzzy @@ -15402,19 +16648,23 @@ msgid "" msgstr "" "* Threads sind alle Daemon-Threads, der Haupt-Thread wartet nicht auf sie.\n" "* Thread-Panics sind voneinander unabhängig.\n" -" * Paniken können eine Nutzlast tragen, die mit `downcast_ref` entpackt werden kann." +" * Paniken können eine Nutzlast tragen, die mit `downcast_ref` entpackt " +"werden kann." #: src/concurrency/threads.md:32 msgid "" -"* Notice that the thread is stopped before it reaches 10 — the main thread is\n" +"* Notice that the thread is stopped before it reaches 10 — the main thread " +"is\n" " not waiting.\n" "\n" -"* Use `let handle = thread::spawn(...)` and later `handle.join()` to wait for\n" +"* Use `let handle = thread::spawn(...)` and later `handle.join()` to wait " +"for\n" " the thread to finish.\n" "\n" "* Trigger a panic in the thread, notice how this doesn't affect `main`.\n" "\n" -"* Use the `Result` return value from `handle.join()` to get access to the panic\n" +"* Use the `Result` return value from `handle.join()` to get access to the " +"panic\n" " payload. This is a good time to talk about [`Any`]." msgstr "" @@ -15468,16 +16718,19 @@ msgstr "" #: src/concurrency/scoped-threads.md:37 #, fuzzy msgid "" -"* The reason for that is that when the `thread::scope` function completes, all the threads are " -"guaranteed to be joined, so they can return borrowed data.\n" -"* Normal Rust borrowing rules apply: you can either borrow mutably by one thread, or immutably by " -"any number of threads.\n" +"* The reason for that is that when the `thread::scope` function completes, " +"all the threads are guaranteed to be joined, so they can return borrowed " +"data.\n" +"* Normal Rust borrowing rules apply: you can either borrow mutably by one " +"thread, or immutably by any number of threads.\n" " " msgstr "" -"* Der Grund dafür ist, dass nach Abschluss der `thread::scope`-Funktion garantiert alle Threads " -"verbunden sind, sodass sie geliehene Daten zurückgeben können.\n" -"* Es gelten die normalen Rust-Ausleihregeln: Sie können entweder veränderlich von einem Thread " -"ausleihen oder unveränderlich von einer beliebigen Anzahl von Threads.\n" +"* Der Grund dafür ist, dass nach Abschluss der `thread::scope`-Funktion " +"garantiert alle Threads verbunden sind, sodass sie geliehene Daten " +"zurückgeben können.\n" +"* Es gelten die normalen Rust-Ausleihregeln: Sie können entweder " +"veränderlich von einem Thread ausleihen oder unveränderlich von einer " +"beliebigen Anzahl von Threads.\n" " \n" "" @@ -15489,10 +16742,12 @@ msgstr "# Kanäle" #: src/concurrency/channels.md:3 #, fuzzy msgid "" -"Rust channels have two parts: a `Sender` and a `Receiver`. The two parts\n" +"Rust channels have two parts: a `Sender` and a `Receiver`. The two " +"parts\n" "are connected via the channel, but you only see the end-points." msgstr "" -"Rust-Kanäle bestehen aus zwei Teilen: einem `Sender` und einem `Receiver`. Die zwei Teile\n" +"Rust-Kanäle bestehen aus zwei Teilen: einem `Sender` und einem " +"`Receiver`. Die zwei Teile\n" "über den Kanal verbunden sind, aber Sie sehen nur die Endpunkte." #: src/concurrency/channels.md:6 @@ -15520,18 +16775,18 @@ msgstr "" #: src/concurrency/channels.md:27 #, fuzzy msgid "" -"* `mpsc` stands for Multi-Producer, Single-Consumer. `Sender` and `SyncSender` implement `Clone` " -"(so\n" +"* `mpsc` stands for Multi-Producer, Single-Consumer. `Sender` and " +"`SyncSender` implement `Clone` (so\n" " you can make multiple producers) but `Receiver` does not.\n" -"* `send()` and `recv()` return `Result`. If they return `Err`, it means the counterpart `Sender` " -"or\n" +"* `send()` and `recv()` return `Result`. If they return `Err`, it means the " +"counterpart `Sender` or\n" " `Receiver` is dropped and the channel is closed." msgstr "" -"* „mpsc“ steht für Multi-Producer, Single-Consumer. `Sender` und `SyncSender` implementieren " -"`Clone` (also\n" +"* „mpsc“ steht für Multi-Producer, Single-Consumer. `Sender` und " +"`SyncSender` implementieren `Clone` (also\n" " Sie können mehrere Producer erstellen), aber 'Receiver' nicht.\n" -"* `send()` und `recv()` geben `Result` zurück. Wenn sie `Err` zurückgeben, bedeutet dies das " -"Gegenstück `Sender` bzw\n" +"* `send()` und `recv()` geben `Result` zurück. Wenn sie `Err` zurückgeben, " +"bedeutet dies das Gegenstück `Sender` bzw\n" " „Receiver“ wird fallen gelassen und der Kanal wird geschlossen." #: src/concurrency/channels/unbounded.md:1 @@ -15542,7 +16797,8 @@ msgstr "# Unbegrenzte Kanäle" #: src/concurrency/channels/unbounded.md:3 #, fuzzy msgid "You get an unbounded and asynchronous channel with `mpsc::channel()`:" -msgstr "Einen unbegrenzten und asynchronen Kanal erhält man mit `mpsc::channel()`:" +msgstr "" +"Einen unbegrenzten und asynchronen Kanal erhält man mit `mpsc::channel()`:" #: src/concurrency/channels/unbounded.md:5 msgid "" @@ -15580,8 +16836,8 @@ msgstr "# Gebundene Kanäle" #, fuzzy msgid "Bounded and synchronous channels make `send` block the current thread:" msgstr "" -"Gebundene und synchrone Kanäle sorgen dafür, dass der aktuelle Thread durch „Senden“ blockiert " -"wird:" +"Gebundene und synchrone Kanäle sorgen dafür, dass der aktuelle Thread durch " +"„Senden“ blockiert wird:" #: src/concurrency/channels/bounded.md:5 msgid "" @@ -15617,50 +16873,57 @@ msgstr "# `Senden` und `Synchronisieren`" #: src/concurrency/send-sync.md:3 #, fuzzy -msgid "How does Rust know to forbid shared access across thread? The answer is in two traits:" +msgid "" +"How does Rust know to forbid shared access across thread? The answer is in " +"two traits:" msgstr "" -"Woher weiß Rust, dass es den gemeinsamen Zugriff über Threads verbieten soll? Die Antwort liegt in " -"zwei Merkmalen:" +"Woher weiß Rust, dass es den gemeinsamen Zugriff über Threads verbieten " +"soll? Die Antwort liegt in zwei Merkmalen:" #: src/concurrency/send-sync.md:5 #, fuzzy msgid "" -"* [`Send`][1]: a type `T` is `Send` if it is safe to move a `T` across a thread\n" +"* [`Send`][1]: a type `T` is `Send` if it is safe to move a `T` across a " +"thread\n" " boundary.\n" -"* [`Sync`][2]: a type `T` is `Sync` if it is safe to move a `&T` across a thread\n" +"* [`Sync`][2]: a type `T` is `Sync` if it is safe to move a `&T` across a " +"thread\n" " boundary." msgstr "" -"* [`Send`][1]: ein Typ `T` ist `Send`, wenn es sicher ist, ein `T` über einen Thread zu bewegen\n" +"* [`Send`][1]: ein Typ `T` ist `Send`, wenn es sicher ist, ein `T` über " +"einen Thread zu bewegen\n" " Grenze.\n" -"* [`Sync`][2]: ein Typ `T` ist `Sync`, wenn es sicher ist, ein `&T` über einen Thread zu " -"verschieben\n" +"* [`Sync`][2]: ein Typ `T` ist `Sync`, wenn es sicher ist, ein `&T` über " +"einen Thread zu verschieben\n" " Grenze." #: src/concurrency/send-sync.md:10 #, fuzzy msgid "" -"`Send` and `Sync` are [unsafe traits][3]. The compiler will automatically derive them for your " -"types\n" -"as long as they only contain `Send` and `Sync` types. You can also implement them manually when " -"you\n" +"`Send` and `Sync` are [unsafe traits][3]. The compiler will automatically " +"derive them for your types\n" +"as long as they only contain `Send` and `Sync` types. You can also implement " +"them manually when you\n" "know it is valid." msgstr "" -"„Senden“ und „Synchronisieren“ sind [unsichere Eigenschaften][3]. Der Compiler leitet sie " -"automatisch für Ihre Typen ab\n" -"solange sie nur die Typen `Send` und `Sync` enthalten. Sie können sie auch manuell implementieren, " -"wenn Sie\n" +"„Senden“ und „Synchronisieren“ sind [unsichere Eigenschaften][3]. Der " +"Compiler leitet sie automatisch für Ihre Typen ab\n" +"solange sie nur die Typen `Send` und `Sync` enthalten. Sie können sie auch " +"manuell implementieren, wenn Sie\n" "wissen, dass es gültig ist." #: src/concurrency/send-sync.md:20 #, fuzzy msgid "" -"* One can think of these traits as markers that the type has certain thread-safety properties.\n" +"* One can think of these traits as markers that the type has certain thread-" +"safety properties.\n" "* They can be used in the generic constraints as normal traits.\n" " " msgstr "" -"* Man kann sich diese Eigenschaften als Markierungen dafür vorstellen, dass der Typ bestimmte " -"Thread-Sicherheitseigenschaften hat.\n" -"* Sie können in den generischen Einschränkungen als normale Merkmale verwendet werden.\n" +"* Man kann sich diese Eigenschaften als Markierungen dafür vorstellen, dass " +"der Typ bestimmte Thread-Sicherheitseigenschaften hat.\n" +"* Sie können in den generischen Einschränkungen als normale Merkmale " +"verwendet werden.\n" " \n" "" @@ -15671,26 +16934,32 @@ msgstr "# `Senden`" #: src/concurrency/send-sync/send.md:3 #, fuzzy -msgid "> A type `T` is [`Send`][1] if it is safe to move a `T` value to another thread." +msgid "" +"> A type `T` is [`Send`][1] if it is safe to move a `T` value to another " +"thread." msgstr "" -"> Ein Typ `T` ist [`Send`][1], wenn es sicher ist, einen `T`-Wert in einen anderen Thread zu " -"verschieben." +"> Ein Typ `T` ist [`Send`][1], wenn es sicher ist, einen `T`-Wert in einen " +"anderen Thread zu verschieben." #: src/concurrency/send-sync/send.md:5 #, fuzzy msgid "" -"The effect of moving ownership to another thread is that _destructors_ will run\n" -"in that thread. So the question is when you can allocate a value in one thread\n" +"The effect of moving ownership to another thread is that _destructors_ will " +"run\n" +"in that thread. So the question is when you can allocate a value in one " +"thread\n" "and deallocate it in another." msgstr "" -"Das Verschieben der Eigentümerschaft auf einen anderen Thread hat zur Folge, dass _destructors_ " -"ausgeführt wird\n" -"in diesem Thread. Die Frage ist also, wann Sie einen Wert in einem Thread zuweisen können\n" +"Das Verschieben der Eigentümerschaft auf einen anderen Thread hat zur Folge, " +"dass _destructors_ ausgeführt wird\n" +"in diesem Thread. Die Frage ist also, wann Sie einen Wert in einem Thread " +"zuweisen können\n" "und es in einem anderen freigeben." #: src/concurrency/send-sync/send.md:13 msgid "" -"As an example, a connection to the SQLite library must only be accessed from a\n" +"As an example, a connection to the SQLite library must only be accessed from " +"a\n" "single thread." msgstr "" @@ -15702,10 +16971,12 @@ msgstr "# `Synchronisieren`" #: src/concurrency/send-sync/sync.md:3 #, fuzzy msgid "" -"> A type `T` is [`Sync`][1] if it is safe to access a `T` value from multiple\n" +"> A type `T` is [`Sync`][1] if it is safe to access a `T` value from " +"multiple\n" "> threads at the same time." msgstr "" -"> Ein Typ `T` ist [`Sync`][1], wenn es sicher ist, von mehreren auf einen `T`-Wert zuzugreifen\n" +"> Ein Typ `T` ist [`Sync`][1], wenn es sicher ist, von mehreren auf einen " +"`T`-Wert zuzugreifen\n" "> Threads gleichzeitig." #: src/concurrency/send-sync/sync.md:6 @@ -15721,26 +16992,29 @@ msgstr "> `T` ist `Sync` genau dann, wenn `&T` `Send` ist" #: src/concurrency/send-sync/sync.md:14 #, fuzzy msgid "" -"This statement is essentially a shorthand way of saying that if a type is thread-safe for shared " -"use, it is also thread-safe to pass references of it across threads." +"This statement is essentially a shorthand way of saying that if a type is " +"thread-safe for shared use, it is also thread-safe to pass references of it " +"across threads." msgstr "" -"Diese Anweisung ist im Wesentlichen eine Kurzform dafür, dass ein Typ, der für die gemeinsame " -"Verwendung Thread-sicher ist, auch Thread-sicher ist, Verweise auf ihn über Threads hinweg zu " -"übergeben." +"Diese Anweisung ist im Wesentlichen eine Kurzform dafür, dass ein Typ, der " +"für die gemeinsame Verwendung Thread-sicher ist, auch Thread-sicher ist, " +"Verweise auf ihn über Threads hinweg zu übergeben." #: src/concurrency/send-sync/sync.md:16 #, fuzzy msgid "" -"This is because if a type is Sync it means that it can be shared across multiple threads without " -"the risk of data races or other synchronization issues, so it is safe to move it to another " -"thread. A reference to the type is also safe to move to another thread, because the data it " -"references can be accessed from any thread safely." +"This is because if a type is Sync it means that it can be shared across " +"multiple threads without the risk of data races or other synchronization " +"issues, so it is safe to move it to another thread. A reference to the type " +"is also safe to move to another thread, because the data it references can " +"be accessed from any thread safely." msgstr "" -"Denn wenn ein Typ Sync ist, bedeutet dies, dass er von mehreren Threads gemeinsam genutzt werden " -"kann, ohne das Risiko von Datenrennen oder anderen Synchronisierungsproblemen, sodass es sicher " -"ist, ihn in einen anderen Thread zu verschieben. Ein Verweis auf den Typ kann auch sicher in einen " -"anderen Thread verschoben werden, da auf die Daten, auf die er verweist, von jedem Thread aus " -"sicher zugegriffen werden kann." +"Denn wenn ein Typ Sync ist, bedeutet dies, dass er von mehreren Threads " +"gemeinsam genutzt werden kann, ohne das Risiko von Datenrennen oder anderen " +"Synchronisierungsproblemen, sodass es sicher ist, ihn in einen anderen " +"Thread zu verschieben. Ein Verweis auf den Typ kann auch sicher in einen " +"anderen Thread verschoben werden, da auf die Daten, auf die er verweist, von " +"jedem Thread aus sicher zugegriffen werden kann." #: src/concurrency/send-sync/examples.md:1 #, fuzzy @@ -15773,7 +17047,8 @@ msgid "" "The generic types are typically `Send + Sync` when the type parameters are\n" "`Send + Sync`." msgstr "" -"Die generischen Typen sind typischerweise `Send + Sync`, wenn es die Typparameter sind\n" +"Die generischen Typen sind typischerweise `Send + Sync`, wenn es die " +"Typparameter sind\n" "„Senden + Synchronisieren“." #: src/concurrency/send-sync/examples.md:17 @@ -15787,7 +17062,8 @@ msgid "" "These types can be moved to other threads, but they're not thread-safe.\n" "Typically because of interior mutability:" msgstr "" -"Diese Typen können in andere Threads verschoben werden, sind aber nicht Thread-sicher.\n" +"Diese Typen können in andere Threads verschoben werden, sind aber nicht " +"Thread-sicher.\n" "Typischerweise wegen innerer Mutabilität:" #: src/concurrency/send-sync/examples.md:22 @@ -15810,17 +17086,21 @@ msgstr "## `!Senden + Synchronisieren`" #: src/concurrency/send-sync/examples.md:29 #, fuzzy -msgid "These types are thread-safe, but they cannot be moved to another thread:" -msgstr "Diese Typen sind Thread-sicher, können aber nicht in einen anderen Thread verschoben werden:" +msgid "" +"These types are thread-safe, but they cannot be moved to another thread:" +msgstr "" +"Diese Typen sind Thread-sicher, können aber nicht in einen anderen Thread " +"verschoben werden:" #: src/concurrency/send-sync/examples.md:31 #, fuzzy msgid "" -"* `MutexGuard`: Uses OS level primitives which must be deallocated on the\n" +"* `MutexGuard`: Uses OS level primitives which must be deallocated on " +"the\n" " thread which created them." msgstr "" -"* `MutexGuard`: Verwendet Primitive auf Betriebssystemebene, die auf dem freigegeben werden " -"müssen\n" +"* `MutexGuard`: Verwendet Primitive auf Betriebssystemebene, die auf dem " +"freigegeben werden müssen\n" " Thread, der sie erstellt hat." #: src/concurrency/send-sync/examples.md:34 @@ -15831,7 +17111,9 @@ msgstr "## `!Senden + !Sync`" #: src/concurrency/send-sync/examples.md:36 #, fuzzy msgid "These types are not thread-safe and cannot be moved to other threads:" -msgstr "Diese Typen sind nicht Thread-sicher und können nicht in andere Threads verschoben werden:" +msgstr "" +"Diese Typen sind nicht Thread-sicher und können nicht in andere Threads " +"verschoben werden:" #: src/concurrency/send-sync/examples.md:38 #, fuzzy @@ -15841,9 +17123,11 @@ msgid "" "* `*const T`, `*mut T`: Rust assumes raw pointers may have special\n" " concurrency considerations." msgstr "" -"* `Rc`: Jedes `Rc` hat eine Referenz auf eine `RcBox`, die eine enthält\n" +"* `Rc`: Jedes `Rc` hat eine Referenz auf eine `RcBox`, die eine " +"enthält\n" " nicht-atomarer Referenzzähler.\n" -"* `*const T`, `*mut T`: Rust geht davon aus, dass Rohzeiger möglicherweise etwas Besonderes haben\n" +"* `*const T`, `*mut T`: Rust geht davon aus, dass Rohzeiger möglicherweise " +"etwas Besonderes haben\n" " Parallelitätsüberlegungen." #: src/concurrency/shared_state.md:1 @@ -15854,24 +17138,28 @@ msgstr "# Geteilter Zustand" #: src/concurrency/shared_state.md:3 #, fuzzy msgid "" -"Rust uses the type system to enforce synchronization of shared data. This is\n" +"Rust uses the type system to enforce synchronization of shared data. This " +"is\n" "primarily done via two types:" msgstr "" -"Rust verwendet das Typsystem, um die Synchronisierung gemeinsam genutzter Daten zu erzwingen. Das " -"ist\n" +"Rust verwendet das Typsystem, um die Synchronisierung gemeinsam genutzter " +"Daten zu erzwingen. Das ist\n" "hauptsächlich über zwei Arten:" #: src/concurrency/shared_state.md:6 #, fuzzy msgid "" -"* [`Arc`][1], atomic reference counted `T`: handles sharing between threads and\n" +"* [`Arc`][1], atomic reference counted `T`: handles sharing between " +"threads and\n" " takes care to deallocate `T` when the last reference is dropped,\n" "* [`Mutex`][2]: ensures mutually exclusive access to the `T` value." msgstr "" -"* [`Arc`][1], Atomic Reference Counted `T`: handhabt die gemeinsame Nutzung zwischen Threads " -"und\n" -" sorgt dafür, dass `T` freigegeben wird, wenn die letzte Referenz gelöscht wird,\n" -"* [`Mutex`][2]: sorgt für den sich gegenseitig ausschließenden Zugriff auf den `T`-Wert." +"* [`Arc`][1], Atomic Reference Counted `T`: handhabt die gemeinsame " +"Nutzung zwischen Threads und\n" +" sorgt dafür, dass `T` freigegeben wird, wenn die letzte Referenz gelöscht " +"wird,\n" +"* [`Mutex`][2]: sorgt für den sich gegenseitig ausschließenden Zugriff " +"auf den `T`-Wert." #: src/concurrency/shared_state/arc.md:1 #, fuzzy @@ -15881,7 +17169,9 @@ msgstr "# `Bogen`" #: src/concurrency/shared_state/arc.md:3 #, fuzzy msgid "[`Arc`][1] allows shared read-only access via `Arc::clone`:" -msgstr "[`Arc`][1] ermöglicht den gemeinsamen Nur-Lese-Zugriff über seine `clone`-Methode:" +msgstr "" +"[`Arc`][1] ermöglicht den gemeinsamen Nur-Lese-Zugriff über seine `clone`-" +"Methode:" #: src/concurrency/shared_state/arc.md:5 msgid "" @@ -15909,27 +17199,30 @@ msgstr "" #: src/concurrency/shared_state/arc.md:29 #, fuzzy msgid "" -"* `Arc` stands for \"Atomic Reference Counted\", a thread safe version of `Rc` that uses atomic\n" +"* `Arc` stands for \"Atomic Reference Counted\", a thread safe version of " +"`Rc` that uses atomic\n" " operations.\n" -"* `Arc` implements `Clone` whether or not `T` does. It implements `Send` and `Sync` iff `T`\n" +"* `Arc` implements `Clone` whether or not `T` does. It implements `Send` " +"and `Sync` iff `T`\n" " implements them both.\n" -"* `Arc::clone()` has the cost of atomic operations that get executed, but after that the use of " -"the\n" +"* `Arc::clone()` has the cost of atomic operations that get executed, but " +"after that the use of the\n" " `T` is free.\n" -"* Beware of reference cycles, `Arc` does not use a garbage collector to detect them.\n" +"* Beware of reference cycles, `Arc` does not use a garbage collector to " +"detect them.\n" " * `std::sync::Weak` can help." msgstr "" -"* `Arc` steht für \"Atomic Reference Counted\", eine Thread-sichere Version von `Rc`, die atomar " -"verwendet\n" +"* `Arc` steht für \"Atomic Reference Counted\", eine Thread-sichere Version " +"von `Rc`, die atomar verwendet\n" " Operationen.\n" -"* `Arc` implementiert `Clone` unabhängig davon, ob `T` dies tut oder nicht. Es implementiert " -"`Send` und `Sync` iff `T`\n" +"* `Arc` implementiert `Clone` unabhängig davon, ob `T` dies tut oder " +"nicht. Es implementiert `Send` und `Sync` iff `T`\n" " setzt sie beide um.\n" -"* `Arc::clone()` hat die Kosten für atomare Operationen, die ausgeführt werden, aber danach die " -"Verwendung der\n" +"* `Arc::clone()` hat die Kosten für atomare Operationen, die ausgeführt " +"werden, aber danach die Verwendung der\n" " „T“ ist frei.\n" -"* Hüten Sie sich vor Referenzzyklen, `Arc` verwendet keinen Garbage Collector, um sie zu " -"erkennen.\n" +"* Hüten Sie sich vor Referenzzyklen, `Arc` verwendet keinen Garbage " +"Collector, um sie zu erkennen.\n" " * `std::sync::Weak` kann helfen." #: src/concurrency/shared_state/mutex.md:1 @@ -15943,7 +17236,8 @@ msgid "" "[`Mutex`][1] ensures mutual exclusion _and_ allows mutable access to `T`\n" "behind a read-only interface:" msgstr "" -"[`Mutex`][1] sorgt für gegenseitigen Ausschluss _und_ erlaubt veränderlichen Zugriff auf `T`\n" +"[`Mutex`][1] sorgt für gegenseitigen Ausschluss _und_ erlaubt " +"veränderlichen Zugriff auf `T`\n" "hinter einer Nur-Lese-Schnittstelle:" #: src/concurrency/shared_state/mutex.md:6 @@ -15971,42 +17265,48 @@ msgid "" "Notice how we have a [`impl Sync for Mutex`][2] blanket\n" "implementation." msgstr "" -"Beachten Sie, wie wir eine [`impl Sync for Mutex`][2] Blanket haben\n" +"Beachten Sie, wie wir eine [`impl Sync for Mutex`][2] Blanket " +"haben\n" "Implementierung." #: src/concurrency/shared_state/mutex.md:31 #, fuzzy msgid "" -"* `Mutex` in Rust looks like a collection with just one element - the protected data.\n" -" * It is not possible to forget to acquire the mutex before accessing the protected data.\n" -"* You can get an `&mut T` from an `&Mutex` by taking the lock. The `MutexGuard` ensures that " -"the\n" +"* `Mutex` in Rust looks like a collection with just one element - the " +"protected data.\n" +" * It is not possible to forget to acquire the mutex before accessing the " +"protected data.\n" +"* You can get an `&mut T` from an `&Mutex` by taking the lock. The " +"`MutexGuard` ensures that the\n" " `&mut T` doesn't outlive the lock being held.\n" "* `Mutex` implements both `Send` and `Sync` iff `T` implements `Send`.\n" "* A read-write lock counterpart - `RwLock`.\n" "* Why does `lock()` return a `Result`? \n" -" * If the thread that held the `Mutex` panicked, the `Mutex` becomes \"poisoned\" to signal " -"that\n" -" the data it protected might be in an inconsistent state. Calling `lock()` on a poisoned " -"mutex\n" -" fails with a [`PoisonError`]. You can call `into_inner()` on the error to recover the data\n" +" * If the thread that held the `Mutex` panicked, the `Mutex` becomes " +"\"poisoned\" to signal that\n" +" the data it protected might be in an inconsistent state. Calling " +"`lock()` on a poisoned mutex\n" +" fails with a [`PoisonError`]. You can call `into_inner()` on the error " +"to recover the data\n" " regardless." msgstr "" -"* `Mutex` in Rust sieht aus wie eine Sammlung mit nur einem Element - den geschützten Daten.\n" -" * Es ist nicht möglich, das Abrufen des Mutex zu vergessen, bevor auf die geschützten Daten " -"zugegriffen wird.\n" -"* Sie können ein `&mut T` von einem `&Mutex` erhalten, indem Sie die Sperre nehmen. Der " -"`MutexGuard` sorgt dafür, dass die\n" +"* `Mutex` in Rust sieht aus wie eine Sammlung mit nur einem Element - den " +"geschützten Daten.\n" +" * Es ist nicht möglich, das Abrufen des Mutex zu vergessen, bevor auf " +"die geschützten Daten zugegriffen wird.\n" +"* Sie können ein `&mut T` von einem `&Mutex` erhalten, indem Sie die " +"Sperre nehmen. Der `MutexGuard` sorgt dafür, dass die\n" " `&mut T` überlebt die gehaltene Sperre nicht.\n" -"* `Mutex` implementiert sowohl `Send` als auch `Sync`, wenn `T` `Send` implementiert.\n" +"* `Mutex` implementiert sowohl `Send` als auch `Sync`, wenn `T` `Send` " +"implementiert.\n" "* Ein Gegenstück zur Lese-Schreib-Sperre - `RwLock`.\n" "* Warum gibt `lock()` ein `Result` zurück?\n" -" * Wenn der Thread, der den `Mutex` enthielt, in Panik geriet, wird der `Mutex` \"vergiftet\", " -"um dies zu signalisieren\n" -" Die geschützten Daten befinden sich möglicherweise in einem inkonsistenten Zustand. Aufruf " -"von `lock()` auf einem vergifteten Mutex\n" -" schlägt mit einem [`PoisonError`] fehl. Sie können `into_inner()` für den Fehler aufrufen, " -"um die Daten wiederherzustellen\n" +" * Wenn der Thread, der den `Mutex` enthielt, in Panik geriet, wird der " +"`Mutex` \"vergiftet\", um dies zu signalisieren\n" +" Die geschützten Daten befinden sich möglicherweise in einem " +"inkonsistenten Zustand. Aufruf von `lock()` auf einem vergifteten Mutex\n" +" schlägt mit einem [`PoisonError`] fehl. Sie können `into_inner()` für " +"den Fehler aufrufen, um die Daten wiederherzustellen\n" " trotzdem." #: src/concurrency/shared_state/example.md:3 @@ -16071,19 +17371,24 @@ msgstr "" #: src/concurrency/shared_state/example.md:51 #, fuzzy msgid "" -"* `v` is wrapped in both `Arc` and `Mutex`, because their concerns are orthogonal.\n" -" * Wrapping a `Mutex` in an `Arc` is a common pattern to share mutable state between threads.\n" -"* `v: Arc<_>` needs to be cloned as `v2` before it can be moved into another thread. Note `move` " -"was added to the lambda signature.\n" -"* Blocks are introduced to narrow the scope of the `LockGuard` as much as possible." +"* `v` is wrapped in both `Arc` and `Mutex`, because their concerns are " +"orthogonal.\n" +" * Wrapping a `Mutex` in an `Arc` is a common pattern to share mutable " +"state between threads.\n" +"* `v: Arc<_>` needs to be cloned as `v2` before it can be moved into another " +"thread. Note `move` was added to the lambda signature.\n" +"* Blocks are introduced to narrow the scope of the `LockGuard` as much as " +"possible." msgstr "" -"* `v` ist sowohl in `Arc` als auch in `Mutex` eingeschlossen, weil ihre Anliegen orthogonal sind.\n" -" * Das Umhüllen eines `Mutex` in einen `Arc` ist ein gängiges Muster, um einen veränderlichen " -"Zustand zwischen Threads zu teilen.\n" -"* „v: Arc<_>“ muss als „v2“ geklont werden, bevor es in einen anderen Thread verschoben werden " -"kann. Der Lambda-Signatur wurde der Hinweis „move“ hinzugefügt.\n" -"* Blöcke werden eingeführt, um den Anwendungsbereich von `LockGuard` so weit wie möglich " -"einzuschränken.\n" +"* `v` ist sowohl in `Arc` als auch in `Mutex` eingeschlossen, weil ihre " +"Anliegen orthogonal sind.\n" +" * Das Umhüllen eines `Mutex` in einen `Arc` ist ein gängiges Muster, um " +"einen veränderlichen Zustand zwischen Threads zu teilen.\n" +"* „v: Arc<_>“ muss als „v2“ geklont werden, bevor es in einen anderen Thread " +"verschoben werden kann. Der Lambda-Signatur wurde der Hinweis „move“ " +"hinzugefügt.\n" +"* Blöcke werden eingeführt, um den Anwendungsbereich von `LockGuard` so weit " +"wie möglich einzuschränken.\n" "* Wir müssen noch den `Mutex` erwerben, um unseren `Vec` zu drucken." #: src/exercises/concurrency/morning.md:3 @@ -16099,7 +17404,8 @@ msgid "" "* Multi-threaded link checker: a larger project where you'll use Cargo to\n" " download dependencies and then check links in parallel." msgstr "" -"* Multithreaded Link Checker: ein größeres Projekt, für das Sie Cargo verwenden werden\n" +"* Multithreaded Link Checker: ein größeres Projekt, für das Sie Cargo " +"verwenden werden\n" " Abhängigkeiten herunterladen und dann parallel Links prüfen." #: src/exercises/concurrency/dining-philosophers.md:1 @@ -16110,39 +17416,54 @@ msgstr "# Speisende Philosophen" #: src/exercises/concurrency/dining-philosophers.md:3 #, fuzzy msgid "The dining philosophers problem is a classic problem in concurrency:" -msgstr "Das Dining-Philosophen-Problem ist ein klassisches Nebenläufigkeitsproblem:" +msgstr "" +"Das Dining-Philosophen-Problem ist ein klassisches Nebenläufigkeitsproblem:" #: src/exercises/concurrency/dining-philosophers.md:5 #, fuzzy msgid "" -"> Five philosophers dine together at the same table. Each philosopher has their\n" -"> own place at the table. There is a fork between each plate. The dish served is\n" -"> a kind of spaghetti which has to be eaten with two forks. Each philosopher can\n" -"> only alternately think and eat. Moreover, a philosopher can only eat their\n" -"> spaghetti when they have both a left and right fork. Thus two forks will only\n" -"> be available when their two nearest neighbors are thinking, not eating. After\n" +"> Five philosophers dine together at the same table. Each philosopher has " +"their\n" +"> own place at the table. There is a fork between each plate. The dish " +"served is\n" +"> a kind of spaghetti which has to be eaten with two forks. Each philosopher " +"can\n" +"> only alternately think and eat. Moreover, a philosopher can only eat " +"their\n" +"> spaghetti when they have both a left and right fork. Thus two forks will " +"only\n" +"> be available when their two nearest neighbors are thinking, not eating. " +"After\n" "> an individual philosopher finishes eating, they will put down both forks." msgstr "" -"> Fünf Philosophen speisen gemeinsam am selben Tisch. Jeder Philosoph hat seine\n" -"> eigener Platz am Tisch. Zwischen jedem Teller befindet sich eine Gabel. Das servierte Gericht " -"ist\n" -"> eine Art Spaghetti, die mit zwei Gabeln gegessen werden muss. Jeder Philosoph kann\n" -"> nur abwechselnd denken und essen. Außerdem kann ein Philosoph nur ihre essen\n" -"> Spaghetti, wenn sie sowohl eine linke als auch eine rechte Gabel haben. Also zwei Gabeln werden " -"nur\n" -"> verfügbar sein, wenn ihre beiden nächsten Nachbarn nachdenken, nicht essen. Nach\n" -"> ein einzelner Philosoph mit dem Essen fertig ist, legen sie beide Gabeln weg." +"> Fünf Philosophen speisen gemeinsam am selben Tisch. Jeder Philosoph hat " +"seine\n" +"> eigener Platz am Tisch. Zwischen jedem Teller befindet sich eine Gabel. " +"Das servierte Gericht ist\n" +"> eine Art Spaghetti, die mit zwei Gabeln gegessen werden muss. Jeder " +"Philosoph kann\n" +"> nur abwechselnd denken und essen. Außerdem kann ein Philosoph nur ihre " +"essen\n" +"> Spaghetti, wenn sie sowohl eine linke als auch eine rechte Gabel haben. " +"Also zwei Gabeln werden nur\n" +"> verfügbar sein, wenn ihre beiden nächsten Nachbarn nachdenken, nicht " +"essen. Nach\n" +"> ein einzelner Philosoph mit dem Essen fertig ist, legen sie beide Gabeln " +"weg." #: src/exercises/concurrency/dining-philosophers.md:13 #, fuzzy msgid "" -"You will need a local [Cargo installation](../../cargo/running-locally.md) for\n" -"this exercise. Copy the code below to a file called `src/main.rs`, fill out the\n" +"You will need a local [Cargo installation](../../cargo/running-locally.md) " +"for\n" +"this exercise. Copy the code below to a file called `src/main.rs`, fill out " +"the\n" "blanks, and test that `cargo run` does not deadlock:" msgstr "" -"Dazu benötigen Sie eine lokale [Cargo-Installation](../../cargo/running-locally.md).\n" -"diese Übung. Kopieren Sie den folgenden Code in die Datei `src/main.rs`, füllen Sie die Lücken " -"aus,\n" +"Dazu benötigen Sie eine lokale [Cargo-Installation](../../cargo/running-" +"locally.md).\n" +"diese Übung. Kopieren Sie den folgenden Code in die Datei `src/main.rs`, " +"füllen Sie die Lücken aus,\n" "und teste, dass `cargo run` keinen Deadlock verursacht:" #: src/exercises/concurrency/dining-philosophers.md:19 @@ -16212,15 +17533,19 @@ msgstr "# Multithreaded Link Checker" #: src/exercises/concurrency/link-checker.md:3 #, fuzzy msgid "" -"Let us use our new knowledge to create a multi-threaded link checker. It should\n" +"Let us use our new knowledge to create a multi-threaded link checker. It " +"should\n" "start at a webpage and check that links on the page are valid. It should\n" -"recursively check other pages on the same domain and keep doing this until all\n" +"recursively check other pages on the same domain and keep doing this until " +"all\n" "pages have been validated." msgstr "" -"Lassen Sie uns unser neues Wissen nutzen, um einen Multithread-Link-Checker zu erstellen. Es " -"sollte\n" -"Starten Sie auf einer Webseite und prüfen Sie, ob die Links auf der Seite gültig sind. Es sollte\n" -"Überprüfen Sie rekursiv andere Seiten auf derselben Domain und tun Sie dies so lange, bis alle\n" +"Lassen Sie uns unser neues Wissen nutzen, um einen Multithread-Link-Checker " +"zu erstellen. Es sollte\n" +"Starten Sie auf einer Webseite und prüfen Sie, ob die Links auf der Seite " +"gültig sind. Es sollte\n" +"Überprüfen Sie rekursiv andere Seiten auf derselben Domain und tun Sie dies " +"so lange, bis alle\n" "Seiten wurden validiert." #: src/exercises/concurrency/link-checker.md:8 @@ -16244,17 +17569,22 @@ msgstr "" #: src/exercises/concurrency/link-checker.md:17 #, fuzzy msgid "" -"> If `cargo add` fails with `error: no such subcommand`, then please edit the\n" +"> If `cargo add` fails with `error: no such subcommand`, then please edit " +"the\n" "> `Cargo.toml` file by hand. Add the dependencies listed below." msgstr "" -"> Wenn `cargo add` mit `error: no such subcommand` fehlschlägt, dann bearbeiten Sie bitte die\n" -"> `Cargo.toml`-Datei von Hand. Fügen Sie die unten aufgeführten Abhängigkeiten hinzu." +"> Wenn `cargo add` mit `error: no such subcommand` fehlschlägt, dann " +"bearbeiten Sie bitte die\n" +"> `Cargo.toml`-Datei von Hand. Fügen Sie die unten aufgeführten " +"Abhängigkeiten hinzu." #: src/exercises/concurrency/link-checker.md:20 #, fuzzy -msgid "You will also need a way to find links. We can use [`scraper`][2] for that:" +msgid "" +"You will also need a way to find links. We can use [`scraper`][2] for that:" msgstr "" -"Sie benötigen auch eine Möglichkeit, Links zu finden. Dafür können wir [`scraper`][2] verwenden:" +"Sie benötigen auch eine Möglichkeit, Links zu finden. Dafür können wir " +"[`scraper`][2] verwenden:" #: src/exercises/concurrency/link-checker.md:22 msgid "" @@ -16266,11 +17596,12 @@ msgstr "" #: src/exercises/concurrency/link-checker.md:26 #, fuzzy msgid "" -"Finally, we'll need some way of handling errors. We use [`thiserror`][3] for\n" +"Finally, we'll need some way of handling errors. We use [`thiserror`][3] " +"for\n" "that:" msgstr "" -"Schließlich brauchen wir eine Möglichkeit, mit Fehlern umzugehen. Wir verwenden [`thiserror`][3] " -"für\n" +"Schließlich brauchen wir eine Möglichkeit, mit Fehlern umzugehen. Wir " +"verwenden [`thiserror`][3] für\n" "Das:" #: src/exercises/concurrency/link-checker.md:29 @@ -16282,9 +17613,11 @@ msgstr "" #: src/exercises/concurrency/link-checker.md:33 #, fuzzy -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 "" -"Die `cargo add`-Aufrufe aktualisieren die `Cargo.toml`-Datei so, dass sie wie folgt aussieht:" +"Die `cargo add`-Aufrufe aktualisieren die `Cargo.toml`-Datei so, dass sie " +"wie folgt aussieht:" #: src/exercises/concurrency/link-checker.md:37 msgid "" @@ -16296,7 +17629,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" "```" @@ -16308,7 +17642,8 @@ msgid "" "You can now download the start page. Try with a small site such as\n" "`https://www.google.org/`." msgstr "" -"Sie können nun die Startseite herunterladen. Versuchen Sie es mit einer kleinen Website wie z\n" +"Sie können nun die Startseite herunterladen. Versuchen Sie es mit einer " +"kleinen Website wie z\n" "`https://www.google.org/`." #: src/exercises/concurrency/link-checker.md:53 @@ -16342,7 +17677,8 @@ msgid "" " match base_url.join(href) {\n" " Ok(url) => valid_urls.push(url),\n" " Err(err) => {\n" -" println!(\"On {base_url}: could not parse {href:?}: {err} (ignored)\",);\n" +" println!(\"On {base_url}: could not parse {href:?}: " +"{err} (ignored)\",);\n" " }\n" " }\n" " }\n" @@ -16374,7 +17710,8 @@ msgid "" "```" msgstr "" -#: src/exercises/concurrency/link-checker.md:106 src/exercises/concurrency/chat-app.md:140 +#: src/exercises/concurrency/link-checker.md:106 +#: src/exercises/concurrency/chat-app.md:140 #, fuzzy msgid "## Tasks" msgstr "## Aufgaben" @@ -16382,16 +17719,20 @@ msgstr "## Aufgaben" #: src/exercises/concurrency/link-checker.md:108 #, fuzzy msgid "" -"* Use threads to check the links in parallel: send the URLs to be checked to a\n" +"* Use threads to check the links in parallel: send the URLs to be checked to " +"a\n" " channel and let a few threads check the URLs in parallel.\n" "* Extend this to recursively extract links from all pages on the\n" -" `www.google.org` domain. Put an upper limit of 100 pages or so so that you\n" +" `www.google.org` domain. Put an upper limit of 100 pages or so so that " +"you\n" " don't end up being blocked by the site." msgstr "" -"* Verwenden Sie Threads, um die Links parallel zu prüfen: Senden Sie die zu prüfenden URLs an a\n" +"* Verwenden Sie Threads, um die Links parallel zu prüfen: Senden Sie die zu " +"prüfenden URLs an a\n" " Channel und lass ein paar Threads parallel die URLs prüfen.\n" "* Erweitern Sie dies, um Links von allen Seiten rekursiv zu extrahieren\n" -" `www.google.org`-Domain. Setzen Sie eine Obergrenze von 100 Seiten oder so, dass Sie\n" +" `www.google.org`-Domain. Setzen Sie eine Obergrenze von 100 Seiten oder " +"so, dass Sie\n" " am Ende nicht von der Seite blockiert werden." #: src/async.md:1 @@ -16401,18 +17742,25 @@ msgstr "# Warum Rost?" #: src/async.md:3 msgid "" -"\"Async\" is a concurrency model where multiple tasks are executed concurrently by\n" -"executing each task until it would block, then switching to another task that is\n" -"ready to make progress. The model allows running a larger number of tasks on a\n" -"limited number of threads. This is because the per-task overhead is typically\n" -"very low and operating systems provide primitives for efficiently identifying\n" +"\"Async\" is a concurrency model where multiple tasks are executed " +"concurrently by\n" +"executing each task until it would block, then switching to another task " +"that is\n" +"ready to make progress. The model allows running a larger number of tasks on " +"a\n" +"limited number of threads. This is because the per-task overhead is " +"typically\n" +"very low and operating systems provide primitives for efficiently " +"identifying\n" "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\n" -"may be completed in the future. Futures are \"polled\" until they signal that\n" +"Rust's asynchronous operation is based on \"futures\", which represent work " +"that\n" +"may be completed in the future. Futures are \"polled\" until they signal " +"that\n" "they are complete." msgstr "" @@ -16429,11 +17777,14 @@ msgstr "# Vergleich" #: src/async.md:19 msgid "" -" * Python has a similar model in its `asyncio`. However, its `Future` type is\n" -" callback-based, and not polled. Async Python programs require a \"loop\",\n" +" * Python has a similar model in its `asyncio`. However, its `Future` type " +"is\n" +" callback-based, and not polled. Async Python programs require a " +"\"loop\",\n" " similar to a runtime in Rust.\n" "\n" -" * JavaScript's `Promise` is similar, but again callback-based. The language\n" +" * JavaScript's `Promise` is similar, but again callback-based. The " +"language\n" " runtime implements the event loop, so many of the details of Promise\n" " resolution are hidden." msgstr "" @@ -16443,7 +17794,9 @@ msgid "# `async`/`await`" msgstr "" #: src/async/async-await.md:3 -msgid "At a high level, async Rust code looks very much like \"normal\" sequential code:" +msgid "" +"At a high level, async Rust code looks very much like \"normal\" sequential " +"code:" msgstr "" #: src/async/async-await.md:5 @@ -16469,22 +17822,27 @@ msgstr "" #: src/async/async-await.md:27 msgid "" -"* Note that this is a simplified example to show the syntax. There is no long\n" +"* Note that this is a simplified example to show the syntax. There is no " +"long\n" " running operation or any real concurrency in it!\n" "\n" "* What is the return type of an async call?\n" " * Use `let future: () = async_main(10);` in `main` to see the type.\n" "\n" -"* The \"async\" keyword is syntactic sugar. The compiler replaces the return type\n" +"* The \"async\" keyword is syntactic sugar. The compiler replaces the return " +"type\n" " with a future. \n" "\n" -"* You cannot make `main` async, without additional instructions to the compiler\n" +"* You cannot make `main` async, without additional instructions to the " +"compiler\n" " on how to use the returned future.\n" "\n" -"* You need an executor to run async code. `block_on` blocks the current thread\n" +"* You need an executor to run async code. `block_on` blocks the current " +"thread\n" " until the provided future has run to completion. \n" "\n" -"* `.await` asynchronously waits for the completion of another operation. Unlike\n" +"* `.await` asynchronously waits for the completion of another operation. " +"Unlike\n" " `block_on`, `.await` doesn't block the current thread.\n" "\n" "* `.await` can only be used inside an `async` function (or block; these are\n" @@ -16499,7 +17857,8 @@ msgstr "# Schließungen" #: src/async/futures.md:3 msgid "" "[`Future`](https://doc.rust-lang.org/std/future/trait.Future.html)\n" -"is a trait, implemented by objects that represent an operation that may not be\n" +"is a trait, implemented by objects that represent an operation that may not " +"be\n" "complete yet. A future can be polled, and `poll` returns a\n" "[`Poll`](https://doc.rust-lang.org/std/task/enum.Poll.html)." msgstr "" @@ -16512,7 +17871,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" @@ -16524,14 +17884,17 @@ msgstr "" #: src/async/futures.md:23 msgid "" -"An async function returns an `impl Future`. It's also possible (but uncommon) to\n" -"implement `Future` for your own types. For example, the `JoinHandle` returned\n" +"An async function returns an `impl Future`. It's also possible (but " +"uncommon) to\n" +"implement `Future` for your own types. For example, the `JoinHandle` " +"returned\n" "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\n" +"The `.await` keyword, applied to a Future, causes the current async function " +"to\n" "pause until that Future is ready, and then evaluates to its output." msgstr "" @@ -16546,8 +17909,10 @@ msgid "" " * `Context` allows a Future to schedule itself to be polled again when an\n" " event occurs.\n" "\n" -" * `Pin` ensures that the Future isn't moved in memory, so that pointers into\n" -" that future remain valid. This is required to allow references to remain\n" +" * `Pin` ensures that the Future isn't moved in memory, so that pointers " +"into\n" +" that future remain valid. This is required to allow references to " +"remain\n" " valid after an `.await`." msgstr "" @@ -16559,16 +17924,19 @@ msgstr "Laufzeiten" #: src/async/runtimes.md:3 msgid "" "A *runtime* provides support for performing operations asynchronously (a\n" -"*reactor*) and is responsible for executing futures (an *executor*). Rust does not have a\n" +"*reactor*) and is responsible for executing futures (an *executor*). Rust " +"does not have a\n" "\"built-in\" runtime, but several options are available:" msgstr "" #: src/async/runtimes.md:7 msgid "" -" * [Tokio](https://tokio.rs/) - performant, with a well-developed ecosystem of\n" +" * [Tokio](https://tokio.rs/) - performant, with a well-developed ecosystem " +"of\n" " functionality like [Hyper](https://hyper.rs/) for HTTP or\n" " [Tonic](https://github.com/hyperium/tonic) for gRPC.\n" -" * [async-std](https://async.rs/) - aims to be a \"std for async\", and includes a\n" +" * [async-std](https://async.rs/) - aims to be a \"std for async\", and " +"includes a\n" " basic runtime in `async::task`.\n" " * [smol](https://docs.rs/smol/latest/smol/) - simple and lightweight" msgstr "" @@ -16576,20 +17944,23 @@ msgstr "" #: src/async/runtimes.md:14 msgid "" "Several larger applications have their own runtimes. For example,\n" -"[Fuchsia](https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/src/lib/fuchsia-async/src/lib." -"rs)\n" +"[Fuchsia](https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/src/lib/" +"fuchsia-async/src/lib.rs)\n" "already has one." msgstr "" #: src/async/runtimes.md:20 msgid "" "* Note that of the listed runtimes, only Tokio is supported in the Rust\n" -" playground. The playground also does not permit any I/O, so most interesting\n" +" playground. The playground also does not permit any I/O, so most " +"interesting\n" " async things can't run in the playground.\n" "\n" -"* Futures are \"inert\" in that they do not do anything (not even start an I/O\n" +"* Futures are \"inert\" in that they do not do anything (not even start an I/" +"O\n" " operation) unless there is an executor polling them. This differs from JS\n" -" Promises, for example, which will run to completion even if they are never\n" +" Promises, for example, which will run to completion even if they are " +"never\n" " used." msgstr "" @@ -16648,7 +18019,8 @@ msgstr "" #: src/async/runtimes/tokio.md:41 msgid "" "* Why does `count_to` not (usually) get to 10? This is an example of async\n" -" cancellation. `tokio::spawn` returns a handle which can be awaited to wait\n" +" cancellation. `tokio::spawn` returns a handle which can be awaited to " +"wait\n" " until it finishes.\n" "\n" "* Try `count_to(10).await` instead of spawning.\n" @@ -16669,9 +18041,12 @@ msgstr "" #: src/async/tasks.md:6 msgid "" -"A task has a single top-level future which the executor polls to make progress.\n" -"That future may have one or more nested futures that its `poll` method polls,\n" -"corresponding loosely to a call stack. Concurrency within a task is possible by\n" +"A task has a single top-level future which the executor polls to make " +"progress.\n" +"That future may have one or more nested futures that its `poll` method " +"polls,\n" +"corresponding loosely to a call stack. Concurrency within a task is possible " +"by\n" "polling multiple child futures, such as racing a timer and an I/O operation." msgstr "" @@ -16700,7 +18075,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" @@ -16719,19 +18095,22 @@ msgid "" msgstr "" #: src/async/tasks.md:53 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:55 msgid "" -"* Ask students to visualize what the state of the example server would be with a\n" +"* Ask students to visualize what the state of the example server would be " +"with a\n" " few connected clients. What tasks exist? What are their Futures?\n" "\n" "* This is the first time we've seen an `async` block. This is similar to a\n" " closure, but does not take any arguments. Its return value is a Future,\n" " similar to an `async fn`. \n" "\n" -"* 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:1 @@ -16740,7 +18119,9 @@ msgid "# Async Channels" msgstr "# Kanäle" #: src/async/channels.md:3 -msgid "Several crates have support for `async`/`await`. For instance `tokio` channels:" +msgid "" +"Several crates have support for `async`/`await`. For instance `tokio` " +"channels:" msgstr "" #: src/async/channels.md:5 @@ -16769,7 +18150,8 @@ msgid "" " }\n" "\n" " std::mem::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 "" @@ -16784,10 +18166,12 @@ msgid "" "* Try removing the `std::mem::drop` call. What happens? Why?\n" "\n" "* The [Flume](https://docs.rs/flume/latest/flume/) crate has channels that\n" -" implement both `sync` and `async` `send` and `recv`. This can be convenient\n" +" implement both `sync` and `async` `send` and `recv`. This can be " +"convenient\n" " for complex applications with both IO and heavy CPU processing tasks.\n" "\n" -"* What makes working with `async` channels preferable is the ability to combine\n" +"* What makes working with `async` channels preferable is the ability to " +"combine\n" " them with other `future`s to combine them and create complex control flow." msgstr "" @@ -16798,7 +18182,8 @@ msgstr "# Kontrollfluss" #: src/async/control-flow.md:3 msgid "" -"Futures can be combined together to produce concurrent compute flow graphs. We\n" +"Futures can be combined together to produce concurrent compute flow graphs. " +"We\n" "have already seen tasks, that function as independent threads of execution." msgstr "" @@ -16851,17 +18236,21 @@ msgstr "" #: src/async/control-flow/join.md:38 msgid "" -"* For multiple futures of disjoint types, you can use `std::future::join!` but\n" +"* For multiple futures of disjoint types, you can use `std::future::join!` " +"but\n" " you must know how many futures you will have at compile time. This is\n" " currently in the `futures` crate, soon to be stabilised in `std::future`.\n" "\n" -"* The risk of `join` is that one of the futures may never resolve, this would\n" +"* The risk of `join` is that one of the futures may never resolve, this " +"would\n" " cause your program to stall. \n" "\n" -"* You can also combine `join_all` with `join!` for instance to join all requests\n" +"* You can also combine `join_all` with `join!` for instance to join all " +"requests\n" " to an http service as well as a database query. Try adding a\n" " `tokio::time::sleep` to the future, using `futures::join!`. This is not a\n" -" timeout (that requires `select!`, explained in the next chapter), but demonstrates `join!`." +" timeout (that requires `select!`, explained in the next chapter), but " +"demonstrates `join!`." msgstr "" #: src/async/control-flow/select.md:1 @@ -16871,7 +18260,8 @@ msgstr "# Aufstellen" #: src/async/control-flow/select.md:3 msgid "" -"A select operation waits until any of a set of futures is ready, and responds to\n" +"A select operation waits until any of a set of futures is ready, and " +"responds to\n" "that future's result. In JavaScript, this is similar to `Promise.race`. In\n" "Python, it compares to `asyncio.wait(task_set,\n" "return_when=asyncio.FIRST_COMPLETED)`." @@ -16879,8 +18269,10 @@ msgstr "" #: src/async/control-flow/select.md:8 msgid "" -"This is usually a macro, similar to match, with each arm of the form `pattern =\n" -"future => statement`. When the future is ready, the statement is executed with the\n" +"This is usually a macro, similar to match, with each arm of the form " +"`pattern =\n" +"future => statement`. When the future is ready, the statement is executed " +"with the\n" "variable bound to the future's result." msgstr "" @@ -16937,18 +18329,22 @@ msgstr "" #: src/async/control-flow/select.md:61 msgid "" "* In this example, we have a race between a cat and a dog.\n" -" `first_animal_to_finish_race` listens to both channels and will pick whichever\n" +" `first_animal_to_finish_race` listens to both channels and will pick " +"whichever\n" " arrives first. Since the dog takes 50ms, it wins against the cat that\n" " take 500ms seconds.\n" "\n" -"* You can use `oneshot` channels in this example as the channels are supposed to\n" +"* You can use `oneshot` channels in this example as the channels are " +"supposed to\n" " receive only one `send`.\n" "\n" -"* Try adding a deadline to the race, demonstrating selecting different sorts of\n" +"* Try adding a deadline to the race, demonstrating selecting different sorts " +"of\n" " futures.\n" "\n" "* Note that `select!` moves the values it is given. It is easiest to use\n" -" when every execution of `select!` creates new futures. An alternative is to\n" +" when every execution of `select!` creates new futures. An alternative is " +"to\n" " pass `&mut future` instead of the future itself, but this can lead to\n" " issues, further discussed in the pinning slide." msgstr "" @@ -16959,9 +18355,10 @@ msgstr "" #: src/async/pitfalls.md:3 msgid "" -"Async / await provides convenient and efficient abstraction for concurrent asynchronous " -"programming. However, the async/await model in Rust also comes with its share of pitfalls and " -"footguns. We illustrate some of them in this chapter:" +"Async / await provides convenient and efficient abstraction for concurrent " +"asynchronous programming. However, the async/await model in Rust also comes " +"with its share of pitfalls and footguns. We illustrate some of them in this " +"chapter:" msgstr "" #: src/async/pitfalls.md:5 @@ -16978,8 +18375,8 @@ msgstr "" #: src/async/pitfalls/blocking-executor.md:3 msgid "" "Most async runtimes only allow IO tasks to run concurrently.\n" -"This means that CPU blocking tasks will block the executor and prevent other tasks from being " -"executed.\n" +"This means that CPU blocking tasks will block the executor and prevent other " +"tasks from being executed.\n" "An easy workaround is to use async equivalent methods where possible." msgstr "" @@ -17011,22 +18408,30 @@ msgid "" "* Run the code and see that the sleeps happen consecutively rather than\n" " concurrently.\n" "\n" -"* The `\"current_thread\"` flavor puts all tasks on a single thread. This makes the\n" +"* The `\"current_thread\"` flavor puts all tasks on a single thread. This " +"makes the\n" " effect more obvious, but the bug is still present in the multi-threaded\n" " flavor.\n" "\n" -"* Switch the `std::thread::sleep` to `tokio::time::sleep` and await its result.\n" +"* Switch the `std::thread::sleep` to `tokio::time::sleep` and await its " +"result.\n" "\n" -"* Another fix would be to `tokio::task::spawn_blocking` which spawns an actual\n" -" thread and transforms its handle into a future without blocking the executor.\n" +"* Another fix would be to `tokio::task::spawn_blocking` which spawns an " +"actual\n" +" thread and transforms its handle into a future without blocking the " +"executor.\n" "\n" -"* You should not think of tasks as OS threads. They do not map 1 to 1 and most\n" +"* You should not think of tasks as OS threads. They do not map 1 to 1 and " +"most\n" " executors will allow many tasks to run on a single OS thread. This is\n" -" particularly problematic when interacting with other libraries via FFI, where\n" +" particularly problematic when interacting with other libraries via FFI, " +"where\n" " that library might depend on thread-local storage or map to specific OS\n" -" threads (e.g., CUDA). Prefer `tokio::task::spawn_blocking` in such situations.\n" +" threads (e.g., CUDA). Prefer `tokio::task::spawn_blocking` in such " +"situations.\n" "\n" -"* Use sync mutexes with care. Holding a mutex over an `.await` may cause another\n" +"* Use sync mutexes with care. Holding a mutex over an `.await` may cause " +"another\n" " task to block, and that task may be running on the same thread." msgstr "" @@ -17036,16 +18441,21 @@ msgstr "" #: src/async/pitfalls/pin.md:3 msgid "" -"When you await a future, all local variables (that would ordinarily be stored on\n" -"a stack frame) are instead stored in the Future for the current async block. If your\n" -"future has pointers to data on the stack, those pointers might get invalidated.\n" +"When you await a future, all local variables (that would ordinarily be " +"stored on\n" +"a stack frame) are instead stored in the Future for the current async block. " +"If your\n" +"future has pointers to data on the stack, those pointers might get " +"invalidated.\n" "This is unsafe." msgstr "" #: src/async/pitfalls/pin.md:8 msgid "" -"Therefore, you must guarantee that the addresses your future points to don't\n" -"change. That is why we need to `pin` futures. Using the same future repeatedly\n" +"Therefore, you must guarantee that the addresses your future points to " +"don't\n" +"change. That is why we need to `pin` futures. Using the same future " +"repeatedly\n" "in a `select!` often leads to issues with pinned values." msgstr "" @@ -17111,13 +18521,16 @@ msgid "" "* You may recognize this as an example of the actor pattern. Actors\n" " typically call `select!` in a loop.\n" "\n" -"* This serves as a summation of a few of the previous lessons, so take your time\n" +"* This serves as a summation of a few of the previous lessons, so take your " +"time\n" " with it.\n" "\n" -" * Naively add a `_ = sleep(Duration::from_millis(100)) => { println!(..) }`\n" +" * Naively add a `_ = sleep(Duration::from_millis(100)) => { println!" +"(..) }`\n" " to the `select!`. This will never execute. Why?\n" "\n" -" * Instead, add a `timeout_fut` containing that future outside of the `loop`:\n" +" * Instead, add a `timeout_fut` containing that future outside of the " +"`loop`:\n" "\n" " ```rust,compile_fail\n" " let mut timeout_fut = sleep(Duration::from_millis(100));\n" @@ -17128,7 +18541,8 @@ msgid "" " }\n" " }\n" " ```\n" -" * This still doesn't work. Follow the compiler errors, adding `&mut` to the\n" +" * This still doesn't work. Follow the compiler errors, adding `&mut` to " +"the\n" " `timeout_fut` in the `select!` to work around the move, then using\n" " `Box::pin`:\n" "\n" @@ -17142,16 +18556,18 @@ msgid "" " }\n" " ```\n" "\n" -" * This compiles, but once the timeout expires it is `Poll::Ready` on every\n" +" * This compiles, but once the timeout expires it is `Poll::Ready` on " +"every\n" " iteration (a fused future would help with this). Update to reset\n" " `timeout_fut` every time it expires.\n" "\n" "* Box allocates on the heap. In some cases, `std::pin::pin!` (only recently\n" -" stabilized, with older code often using `tokio::pin!`) is also an option, but\n" +" stabilized, with older code often using `tokio::pin!`) is also an option, " +"but\n" " that is difficult to use for a future that is reassigned.\n" "\n" -"* 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:1 @@ -17161,15 +18577,16 @@ msgstr "# Züge" #: src/async/pitfalls/async-traits.md:3 msgid "" -"Async methods in traits are not yet supported in the stable channel ([An experimental feature " -"exists in nightly and should be stabilized in the mid term.](https://blog.rust-lang.org/inside-" -"rust/2022/11/17/async-fn-in-trait-nightly.html))" +"Async methods in traits are not yet supported in the stable channel ([An " +"experimental feature exists in nightly and should be stabilized in the mid " +"term.](https://blog.rust-lang.org/inside-rust/2022/11/17/async-fn-in-trait-" +"nightly.html))" msgstr "" #: src/async/pitfalls/async-traits.md:5 msgid "" -"The crate [async_trait](https://docs.rs/async-trait/latest/async_trait/) provides a workaround " -"through a macro:" +"The crate [async_trait](https://docs.rs/async-trait/latest/async_trait/) " +"provides a workaround through a macro:" msgstr "" #: src/async/pitfalls/async-traits.md:7 @@ -17195,7 +18612,8 @@ msgid "" " }\n" "}\n" "\n" -"async fn run_all_sleepers_multiple_times(sleepers: Vec>, n_times: usize) {\n" +"async fn run_all_sleepers_multiple_times(sleepers: Vec>, " +"n_times: usize) {\n" " for _ in 0..n_times {\n" " println!(\"running all sleepers..\");\n" " for sleeper in &sleepers {\n" @@ -17224,26 +18642,31 @@ msgstr "
" #: src/async/pitfalls/async-traits.md:51 msgid "" -"* `async_trait` is easy to use, but note that it's using heap allocations to\n" +"* `async_trait` is easy to use, but note that it's using heap allocations " +"to\n" " achieve this. This heap allocation has performance overhead.\n" "\n" "* The challenges in language support for `async trait` are deep Rust and\n" " probably not worth describing in-depth. Niko Matsakis did a good job of\n" " explaining them in [this\n" -" post](https://smallcultfollowing.com/babysteps/blog/2019/10/26/async-fn-in-traits-are-hard/)\n" +" post](https://smallcultfollowing.com/babysteps/blog/2019/10/26/async-fn-in-" +"traits-are-hard/)\n" " if you are interested in digging deeper.\n" "\n" -"* Try creating a new sleeper struct that will sleep for a random amount of time\n" +"* Try creating a new sleeper struct that will sleep for a random amount of " +"time\n" " and adding it to the Vec." 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\n" +"* Dining philosophers: we already saw this problem in the morning. This " +"time\n" " you are going to implement it with Async Rust.\n" "\n" "* A Broadcast Chat Application: this is a larger project that allows you\n" @@ -17265,13 +18688,16 @@ msgstr "" #, fuzzy msgid "" "As before, you will need a local\n" -"[Cargo installation](../../cargo/running-locally.md) for this exercise. Copy\n" -"the code below to a file called `src/main.rs`, fill out the blanks, and test\n" +"[Cargo installation](../../cargo/running-locally.md) for this exercise. " +"Copy\n" +"the code below to a file called `src/main.rs`, fill out the blanks, and " +"test\n" "that `cargo run` does not deadlock:" msgstr "" -"Dazu benötigen Sie eine lokale [Cargo-Installation](../../cargo/running-locally.md).\n" -"diese Übung. Kopieren Sie den folgenden Code in die Datei `src/main.rs`, füllen Sie die Lücken " -"aus,\n" +"Dazu benötigen Sie eine lokale [Cargo-Installation](../../cargo/running-" +"locally.md).\n" +"diese Übung. Kopieren Sie den folgenden Code in die Datei `src/main.rs`, " +"füllen Sie die Lücken aus,\n" "und teste, dass `cargo run` keinen Deadlock verursacht:" #: src/exercises/concurrency/dining-philosophers-async.md:13 @@ -17294,7 +18720,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" @@ -17336,7 +18763,8 @@ 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 "" @@ -17357,7 +18785,8 @@ msgstr "" #: src/exercises/concurrency/chat-app.md:3 msgid "" "In this exercise, we want to use our new knowledge to implement a broadcast\n" -"chat application. We have a chat server that the clients connect to and publish\n" +"chat application. We have a chat server that the clients connect to and " +"publish\n" "their messages. The client reads user messages from the standard input, and\n" "sends them to the server. The chat server broadcasts each message that it\n" "receives to all the clients." @@ -17401,7 +18830,8 @@ msgstr "" #: src/exercises/concurrency/chat-app.md:33 msgid "" "You are going to need the following functions from `tokio` and\n" -"[`tokio_websockets`][2]. Spend a few minutes to familiarize yourself with the\n" +"[`tokio_websockets`][2]. Spend a few minutes to familiarize yourself with " +"the\n" "API. " msgstr "" @@ -17424,7 +18854,8 @@ msgstr "# Rust-Binärdateien" #: src/exercises/concurrency/chat-app.md:48 msgid "" "Normally in a Cargo project, you can have only one binary, and one\n" -"`src/main.rs` file. In this project, we need two binaries. One for the client,\n" +"`src/main.rs` file. In this project, we need two binaries. One for the " +"client,\n" "and one for the server. You could potentially make them two separate Cargo\n" "projects, but we are going to put them in a single Cargo project with two\n" "binaries. For this to work, the client and the server code should go under\n" @@ -17438,7 +18869,8 @@ msgid "" "described below. " msgstr "" -#: src/exercises/concurrency/chat-app.md:59 src/exercises/concurrency/solutions-afternoon.md:117 +#: src/exercises/concurrency/chat-app.md:59 +#: src/exercises/concurrency/solutions-afternoon.md:117 #, fuzzy msgid "`src/bin/server.rs`:" msgstr "_hello_rust/src/main.rs_:" @@ -17489,7 +18921,8 @@ msgid "" "```" msgstr "" -#: src/exercises/concurrency/chat-app.md:102 src/exercises/concurrency/solutions-afternoon.md:202 +#: src/exercises/concurrency/chat-app.md:102 +#: src/exercises/concurrency/solutions-afternoon.md:202 #, fuzzy msgid "`src/bin/client.rs`:" msgstr "_hello_rust/src/main.rs_:" @@ -17508,7 +18941,8 @@ msgid "" "\n" "#[tokio::main]\n" "async fn main() -> Result<(), tokio_websockets::Error> {\n" -" let mut ws_stream = ClientBuilder::from_uri(Uri::from_static(\"ws://127.0.0.1:2000\"))\n" +" let mut ws_stream = ClientBuilder::from_uri(Uri::" +"from_static(\"ws://127.0.0.1:2000\"))\n" " .connect()\n" " .await?;\n" "\n" @@ -17553,12 +18987,15 @@ msgstr "" msgid "" "* Implement the `handle_connection` function in `src/bin/server.rs`.\n" " * Hint: Use `tokio::select!` for concurrently performing two tasks in a\n" -" continuous loop. One task receives messages from the client and broadcasts\n" +" continuous loop. One task receives messages from the client and " +"broadcasts\n" " them. The other sends messages received by the server to the client.\n" "* Complete the main function in `src/bin/client.rs`.\n" -" * Hint: As before, use `tokio::select!` in a continuous loop for concurrently\n" +" * Hint: As before, use `tokio::select!` in a continuous loop for " +"concurrently\n" " performing two tasks: (1) reading user messages from standard input and\n" -" sending them to the server, and (2) receiving messages from the server, and\n" +" sending them to the server, and (2) receiving messages from the server, " +"and\n" " displaying them for the user.\n" "* Optional: Once you are done, change the code to broadcast messages to all\n" " clients, but the sender of the message." @@ -17572,26 +19009,33 @@ msgstr "# Danke!" #: src/thanks.md:3 #, fuzzy msgid "" -"_Thank you for taking Comprehensive Rust 🦀!_ We hope you enjoyed it and that it\n" +"_Thank you for taking Comprehensive Rust 🦀!_ We hope you enjoyed it and " +"that it\n" "was useful." msgstr "" -"_Vielen Dank, dass Sie Comprehensive Rust 🦀 genommen haben!_ Wir hoffen, dass es Ihnen gefallen " -"hat und dass es\n" +"_Vielen Dank, dass Sie Comprehensive Rust 🦀 genommen haben!_ Wir hoffen, " +"dass es Ihnen gefallen hat und dass es\n" "war nützlich." #: src/thanks.md:6 #, fuzzy msgid "" -"We've had a lot of fun putting the course together. The course is not perfect,\n" -"so if you spotted any mistakes or have ideas for improvements, please get in\n" +"We've had a lot of fun putting the course together. The course is not " +"perfect,\n" +"so if you spotted any mistakes or have ideas for improvements, please get " +"in\n" "[contact with us on\n" -"GitHub](https://github.com/google/comprehensive-rust/discussions). We would love\n" +"GitHub](https://github.com/google/comprehensive-rust/discussions). We would " +"love\n" "to hear from you." msgstr "" -"Es hat uns viel Spaß gemacht, den Kurs zusammenzustellen. Der Kurs ist nicht perfekt,\n" -"Wenn Sie also Fehler entdeckt haben oder Verbesserungsvorschläge haben, melden Sie sich bitte\n" +"Es hat uns viel Spaß gemacht, den Kurs zusammenzustellen. Der Kurs ist nicht " +"perfekt,\n" +"Wenn Sie also Fehler entdeckt haben oder Verbesserungsvorschläge haben, " +"melden Sie sich bitte\n" "[Kontakt mit uns auf\n" -"GitHub](https://github.com/google/comprehensive-rust/discussions). Wir würden lieben\n" +"GitHub](https://github.com/google/comprehensive-rust/discussions). Wir " +"würden lieben\n" "von dir zu hören." #: src/other-resources.md:1 @@ -17605,7 +19049,8 @@ msgid "" "The Rust community has created a wealth of high-quality and free resources\n" "online." msgstr "" -"Die Rust-Community hat eine Fülle hochwertiger und kostenloser Ressourcen geschaffen\n" +"Die Rust-Community hat eine Fülle hochwertiger und kostenloser Ressourcen " +"geschaffen\n" "online." #: src/other-resources.md:6 @@ -17616,60 +19061,85 @@ msgstr "## Offizielle Dokumentation" #: src/other-resources.md:8 #, fuzzy msgid "The Rust project hosts many resources. These cover Rust in general:" -msgstr "Das Rust-Projekt beherbergt viele Ressourcen. Diese decken Rust im Allgemeinen ab:" +msgstr "" +"Das Rust-Projekt beherbergt viele Ressourcen. Diese decken Rust im " +"Allgemeinen ab:" #: src/other-resources.md:10 #, fuzzy msgid "" "* [The Rust Programming Language](https://doc.rust-lang.org/book/): the\n" -" canonical free book about Rust. Covers the language in detail and includes a\n" +" canonical free book about Rust. Covers the language in detail and includes " +"a\n" " few projects for people to build.\n" -"* [Rust By Example](https://doc.rust-lang.org/rust-by-example/): covers the Rust\n" -" syntax via a series of examples which showcase different constructs. Sometimes\n" +"* [Rust By Example](https://doc.rust-lang.org/rust-by-example/): covers the " +"Rust\n" +" syntax via a series of examples which showcase different constructs. " +"Sometimes\n" " includes small exercises where you are asked to expand on the code in the\n" " examples.\n" -"* [Rust Standard Library](https://doc.rust-lang.org/std/): full documentation of\n" +"* [Rust Standard Library](https://doc.rust-lang.org/std/): full " +"documentation of\n" " the standard library for Rust.\n" -"* [The Rust Reference](https://doc.rust-lang.org/reference/): an incomplete book\n" +"* [The Rust Reference](https://doc.rust-lang.org/reference/): an incomplete " +"book\n" " which describes the Rust grammar and memory model." msgstr "" "* [Die Programmiersprache Rust](https://doc.rust-lang.org/book/): die\n" -" Kanonisches kostenloses Buch über Rust. Deckt die Sprache im Detail ab und enthält a\n" +" Kanonisches kostenloses Buch über Rust. Deckt die Sprache im Detail ab und " +"enthält a\n" " wenige Projekte für Menschen zu bauen.\n" -"* [Rust By Example](https://doc.rust-lang.org/rust-by-example/): deckt den Rust ab\n" -" Syntax über eine Reihe von Beispielen, die verschiedene Konstrukte demonstrieren. Manchmal\n" -" enthält kleine Übungen, in denen Sie aufgefordert werden, den Code in der zu erweitern\n" +"* [Rust By Example](https://doc.rust-lang.org/rust-by-example/): deckt den " +"Rust ab\n" +" Syntax über eine Reihe von Beispielen, die verschiedene Konstrukte " +"demonstrieren. Manchmal\n" +" enthält kleine Übungen, in denen Sie aufgefordert werden, den Code in der " +"zu erweitern\n" " Beispiele.\n" -"* [Rust Standard Library](https://doc.rust-lang.org/std/): vollständige Dokumentation von\n" +"* [Rust Standard Library](https://doc.rust-lang.org/std/): vollständige " +"Dokumentation von\n" " die Standardbibliothek für Rust.\n" -"* [The Rust Reference](https://doc.rust-lang.org/reference/): ein unvollständiges Buch\n" +"* [The Rust Reference](https://doc.rust-lang.org/reference/): ein " +"unvollständiges Buch\n" " das die Rust-Grammatik und das Speichermodell beschreibt." #: src/other-resources.md:22 #, fuzzy msgid "More specialized guides hosted on the official Rust site:" -msgstr "Weitere spezialisierte Guides, die auf der offiziellen Rust-Website gehostet werden:" +msgstr "" +"Weitere spezialisierte Guides, die auf der offiziellen Rust-Website gehostet " +"werden:" #: src/other-resources.md:24 #, fuzzy msgid "" -"* [The Rustonomicon](https://doc.rust-lang.org/nomicon/): covers unsafe Rust,\n" +"* [The Rustonomicon](https://doc.rust-lang.org/nomicon/): covers unsafe " +"Rust,\n" " including working with raw pointers and interfacing with other languages\n" " (FFI).\n" -"* [Asynchronous Programming in Rust](https://rust-lang.github.io/async-book/):\n" -" covers the new asynchronous programming model which was introduced after the\n" +"* [Asynchronous Programming in Rust](https://rust-lang.github.io/async-" +"book/):\n" +" covers the new asynchronous programming model which was introduced after " +"the\n" " Rust Book was written.\n" -"* [The Embedded Rust Book](https://doc.rust-lang.org/stable/embedded-book/): an\n" +"* [The Embedded Rust Book](https://doc.rust-lang.org/stable/embedded-book/): " +"an\n" " introduction to using Rust on embedded devices without an operating system." msgstr "" -"* [The Rustonomicon](https://doc.rust-lang.org/nomicon/): deckt unsicheres Rust ab,\n" -" einschließlich der Arbeit mit rohen Zeigern und der Anbindung an andere Sprachen\n" +"* [The Rustonomicon](https://doc.rust-lang.org/nomicon/): deckt unsicheres " +"Rust ab,\n" +" einschließlich der Arbeit mit rohen Zeigern und der Anbindung an andere " +"Sprachen\n" " (FFI).\n" -"* [Asynchrone Programmierung in Rust](https://rust-lang.github.io/async-book/):\n" -" deckt das neue asynchrone Programmiermodell ab, das nach dem eingeführt wurde\n" +"* [Asynchrone Programmierung in Rust](https://rust-lang.github.io/async-" +"book/):\n" +" deckt das neue asynchrone Programmiermodell ab, das nach dem eingeführt " +"wurde\n" " Rust Book wurde geschrieben.\n" -"* [Das eingebettete Rust-Buch] (https://doc.rust-lang.org/stable/embedded-book/): an\n" -" Einführung in die Verwendung von Rust auf eingebetteten Geräten ohne Betriebssystem." +"* [Das eingebettete Rust-Buch] (https://doc.rust-lang.org/stable/embedded-" +"book/): an\n" +" Einführung in die Verwendung von Rust auf eingebetteten Geräten ohne " +"Betriebssystem." #: src/other-resources.md:33 #, fuzzy @@ -17684,62 +19154,84 @@ msgstr "Eine kleine Auswahl an weiteren Guides und Tutorials für Rust:" #: src/other-resources.md:37 #, fuzzy msgid "" -"* [Learn Rust the Dangerous Way](http://cliffle.com/p/dangerust/): covers Rust\n" +"* [Learn Rust the Dangerous Way](http://cliffle.com/p/dangerust/): covers " +"Rust\n" " from the perspective of low-level C programmers.\n" "* [Rust for Embedded C\n" -" Programmers](https://docs.opentitan.org/doc/ug/rust_for_c/): covers Rust from\n" +" Programmers](https://docs.opentitan.org/doc/ug/rust_for_c/): covers Rust " +"from\n" " the perspective of developers who write firmware in C.\n" "* [Rust for professionals](https://overexact.com/rust-for-professionals/):\n" -" covers the syntax of Rust using side-by-side comparisons with other languages\n" +" covers the syntax of Rust using side-by-side comparisons with other " +"languages\n" " such as C, C++, Java, JavaScript, and Python.\n" -"* [Rust on Exercism](https://exercism.org/tracks/rust): 100+ exercises to help\n" +"* [Rust on Exercism](https://exercism.org/tracks/rust): 100+ exercises to " +"help\n" " you learn Rust.\n" "* [Ferrous Teaching\n" -" Material](https://ferrous-systems.github.io/teaching-material/index.html): a\n" -" series of small presentations covering both basic and advanced part of the\n" +" Material](https://ferrous-systems.github.io/teaching-material/index.html): " +"a\n" +" series of small presentations covering both basic and advanced part of " +"the\n" " Rust language. Other topics such as WebAssembly, and async/await are also\n" " covered.\n" "* [Beginner's Series to\n" -" Rust](https://docs.microsoft.com/en-us/shows/beginners-series-to-rust/) and\n" +" Rust](https://docs.microsoft.com/en-us/shows/beginners-series-to-rust/) " +"and\n" " [Take your first steps with\n" -" Rust](https://docs.microsoft.com/en-us/learn/paths/rust-first-steps/): two\n" -" Rust guides aimed at new developers. The first is a set of 35 videos and the\n" -" second is a set of 11 modules which covers Rust syntax and basic constructs.\n" +" Rust](https://docs.microsoft.com/en-us/learn/paths/rust-first-steps/): " +"two\n" +" Rust guides aimed at new developers. The first is a set of 35 videos and " +"the\n" +" second is a set of 11 modules which covers Rust syntax and basic " +"constructs.\n" "* [Learn Rust With Entirely Too Many Linked\n" " Lists](https://rust-unofficial.github.io/too-many-lists/): in-depth\n" " exploration of Rust's memory management rules, through implementing a few\n" " different types of list structures." msgstr "" -"* [Learn Rust the Dangerous Way](http://cliffle.com/p/dangerust/): deckt Rust ab\n" +"* [Learn Rust the Dangerous Way](http://cliffle.com/p/dangerust/): deckt " +"Rust ab\n" " aus der Perspektive von Low-Level-C-Programmierern.\n" "* [Rost für eingebettetes C\n" -" Programmierer] (https://docs.opentitan.org/doc/ug/rust_for_c/): deckt Rust ab\n" +" Programmierer] (https://docs.opentitan.org/doc/ug/rust_for_c/): deckt Rust " +"ab\n" " die Perspektive von Entwicklern, die Firmware in C schreiben.\n" "* [Rost für Profis](https://overexact.com/rust-for-professionals/):\n" -" deckt die Syntax von Rust durch Side-by-Side-Vergleiche mit anderen Sprachen ab\n" +" deckt die Syntax von Rust durch Side-by-Side-Vergleiche mit anderen " +"Sprachen ab\n" " wie C, C++, Java, JavaScript und Python.\n" -"* [Rust on Exercism](https://exercism.org/tracks/rust): Über 100 hilfreiche Übungen\n" +"* [Rust on Exercism](https://exercism.org/tracks/rust): Über 100 hilfreiche " +"Übungen\n" " Sie lernen Rost.\n" "* [Eisenlehre\n" -" Material](https://ferrous-systems.github.io/teaching-material/index.html): a\n" -" Reihe von kleinen Präsentationen, die sowohl den grundlegenden als auch den fortgeschrittenen " -"Teil des\n" -" Rostige Sprache. Andere Themen wie WebAssembly und async/await sind ebenfalls enthalten\n" +" Material](https://ferrous-systems.github.io/teaching-material/index.html): " +"a\n" +" Reihe von kleinen Präsentationen, die sowohl den grundlegenden als auch " +"den fortgeschrittenen Teil des\n" +" Rostige Sprache. Andere Themen wie WebAssembly und async/await sind " +"ebenfalls enthalten\n" " bedeckt.\n" "* [Anfängerserie bis\n" -" Rust](https://docs.microsoft.com/en-us/shows/beginners-series-to-rust/) und\n" +" Rust](https://docs.microsoft.com/en-us/shows/beginners-series-to-rust/) " +"und\n" " [Machen Sie Ihre ersten Schritte mit\n" -" Rust](https://docs.microsoft.com/en-us/learn/paths/rust-first-steps/): zwei\n" -" Rust-Leitfäden für neue Entwickler. Die erste ist eine Reihe von 35 Videos und die\n" -" Das zweite ist ein Satz von 11 Modulen, der die Rust-Syntax und grundlegende Konstrukte abdeckt." +" Rust](https://docs.microsoft.com/en-us/learn/paths/rust-first-steps/): " +"zwei\n" +" Rust-Leitfäden für neue Entwickler. Die erste ist eine Reihe von 35 Videos " +"und die\n" +" Das zweite ist ein Satz von 11 Modulen, der die Rust-Syntax und " +"grundlegende Konstrukte abdeckt." #: src/other-resources.md:63 #, fuzzy msgid "" -"Please see the [Little Book of Rust Books](https://lborb.github.io/book/) for\n" +"Please see the [Little Book of Rust Books](https://lborb.github.io/book/) " +"for\n" "even more Rust books." msgstr "" -"Weitere Informationen finden Sie im [Little Book of Rust Books] (https://lborb.github.io/book/).\n" +"Weitere Informationen finden Sie im [Little Book of Rust Books] (https://" +"lborb.github.io/book/).\n" "noch mehr Rust-Bücher." #: src/credits.md:1 @@ -17750,22 +19242,27 @@ msgstr "# Credits" #: src/credits.md:3 #, fuzzy msgid "" -"The material here builds on top of the many great sources of Rust documentation.\n" -"See the page on [other resources](other-resources.md) for a full list of useful\n" +"The material here builds on top of the many great sources of Rust " +"documentation.\n" +"See the page on [other resources](other-resources.md) for a full list of " +"useful\n" "resources." msgstr "" -"Das Material hier baut auf den vielen großartigen Quellen der Rust-Dokumentation auf.\n" -"Auf der Seite [andere Ressourcen] (other-resources.md) finden Sie eine vollständige Liste " -"nützlicher Ressourcen\n" +"Das Material hier baut auf den vielen großartigen Quellen der Rust-" +"Dokumentation auf.\n" +"Auf der Seite [andere Ressourcen] (other-resources.md) finden Sie eine " +"vollständige Liste nützlicher Ressourcen\n" "Ressourcen." #: src/credits.md:7 #, fuzzy msgid "" -"The material of Comprehensive Rust is licensed under the terms of the Apache 2.0\n" +"The material of Comprehensive Rust is licensed under the terms of the Apache " +"2.0\n" "license, please see [`LICENSE`](../LICENSE) for details." msgstr "" -"Das Material von Comprehensive Rust ist unter den Bedingungen von Apache 2.0 lizenziert\n" +"Das Material von Comprehensive Rust ist unter den Bedingungen von Apache 2.0 " +"lizenziert\n" "Lizenz finden Sie unter [`LICENSE`](../LICENSE) für Einzelheiten." #: src/credits.md:10 @@ -17782,8 +19279,10 @@ msgid "" "terms." msgstr "" "Einige Beispiele und Übungen wurden aus [Rust by\n" -"Beispiel](https://doc.rust-lang.org/rust-by-example/). Bitte sehen Sie sich ... an\n" -"`third_party/rust-by-example/`-Verzeichnis für Details, einschließlich der Lizenz\n" +"Beispiel](https://doc.rust-lang.org/rust-by-example/). Bitte sehen Sie " +"sich ... an\n" +"`third_party/rust-by-example/`-Verzeichnis für Details, einschließlich der " +"Lizenz\n" "Bedingungen." #: src/credits.md:17 @@ -17796,12 +19295,14 @@ msgstr "## Rost auf Übung" msgid "" "Some exercises have been copied and adapted from [Rust on\n" "Exercism](https://exercism.org/tracks/rust). Please see the\n" -"`third_party/rust-on-exercism/` directory for details, including the license\n" +"`third_party/rust-on-exercism/` directory for details, including the " +"license\n" "terms." msgstr "" "Einige Übungen wurden von [Rust on\n" "Übung] (https://exercism.org/tracks/rust). Bitte sehen Sie sich ... an\n" -"`third_party/rust-on-exercism/`-Verzeichnis für Details, einschließlich der Lizenz\n" +"`third_party/rust-on-exercism/`-Verzeichnis für Details, einschließlich der " +"Lizenz\n" "Bedingungen." #: src/credits.md:24 @@ -17812,12 +19313,16 @@ msgstr "##CXX" #: src/credits.md:26 #, fuzzy msgid "" -"The [Interoperability with C++](android/interoperability/cpp.md) section uses an\n" -"image from [CXX](https://cxx.rs/). Please see the `third_party/cxx/` directory\n" +"The [Interoperability with C++](android/interoperability/cpp.md) section " +"uses an\n" +"image from [CXX](https://cxx.rs/). Please see the `third_party/cxx/` " +"directory\n" "for details, including the license terms." msgstr "" -"Der Abschnitt [Interoperability with C++](android/interoperability/cpp.md) verwendet eine\n" -"Bild von [CXX](https://cxx.rs/). Bitte sehen Sie sich das Verzeichnis `third_party/cxx/` an\n" +"Der Abschnitt [Interoperability with C++](android/interoperability/cpp.md) " +"verwendet eine\n" +"Bild von [CXX](https://cxx.rs/). Bitte sehen Sie sich das Verzeichnis " +"`third_party/cxx/` an\n" "für Details, einschließlich der Lizenzbedingungen." #: src/exercises/solutions.md:1 @@ -17833,11 +19338,13 @@ msgstr "Auf den folgenden Seiten finden Sie Lösungen zu den Aufgaben." #: src/exercises/solutions.md:5 msgid "" "Feel free to ask questions about the solutions [on\n" -"GitHub](https://github.com/google/comprehensive-rust/discussions). Let us know\n" +"GitHub](https://github.com/google/comprehensive-rust/discussions). Let us " +"know\n" "if you have a different or better solution than what is presented here." msgstr "" "Habe keine falsche Scheu, fragen zu den Lösungen [auf\n" -"GitHub](https://github.com/google/comprehensive-rust/discussions) zu stellen. Lass uns wissen\n" +"GitHub](https://github.com/google/comprehensive-rust/discussions) zu " +"stellen. Lass uns wissen\n" "wenn Du eine andere oder bessere Lösung als die hier vorgestellte hast." #: src/exercises/solutions.md:10 @@ -17846,8 +19353,10 @@ msgid "" "> comments you see in the solutions. They are there to make it possible to\n" "> re-use parts of the solutions as the exercises." msgstr "" -"> **Hinweis:** Bitte ignoriere `// ANCHOR: label` und `// ANCHOR_END: label`\n" -"> Kommentare, die Du in den Lösungen siehst. Sie sind da, um es zu ermöglichen\n" +"> **Hinweis:** Bitte ignoriere `// ANCHOR: label` und `// ANCHOR_END: " +"label`\n" +"> Kommentare, die Du in den Lösungen siehst. Sie sind da, um es zu " +"ermöglichen\n" "> Teile der Lösungen als Aufgaben wiederverwenden." #: src/exercises/day-1/solutions-morning.md:1 @@ -17947,30 +19456,32 @@ msgstr "" #: src/exercises/day-1/solutions-morning.md:80 #, fuzzy 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 "" -"Es funktioniert ehrlich gesagt nicht so gut. Es scheint, als könnten wir ein Slice-of-Slices " -"(`&[&[i32]]`) als Eingabetyp für die Transponierung verwenden und unsere Funktion so dazu bringen, " -"jede Matrixgröße zu handhaben. Dies bricht jedoch schnell zusammen: Der Rückgabetyp kann nicht " +"Es funktioniert ehrlich gesagt nicht so gut. Es scheint, als könnten wir ein " +"Slice-of-Slices (`&[&[i32]]`) als Eingabetyp für die Transponierung " +"verwenden und unsere Funktion so dazu bringen, jede Matrixgröße zu " +"handhaben. Dies bricht jedoch schnell zusammen: Der Rückgabetyp kann nicht " "`&[&[i32]]` sein, da er die von Ihnen zurückgegebenen Daten besitzen muss." #: src/exercises/day-1/solutions-morning.md:82 msgid "" -"You can attempt to use something like `Vec>`, but this doesn't work out-of-the-box " -"either: it's hard to convert from `Vec>` to `&[&[i32]]` so now you cannot easily use " -"`pretty_print` either." +"You can attempt to use something like `Vec>`, but this doesn't work " +"out-of-the-box either: it's hard to convert from `Vec>` to " +"`&[&[i32]]` so now you cannot easily use `pretty_print` either." msgstr "" -"Du kannst versuchen, so etwas wie `Vec>` zu verwenden, aber das funktioniert auch nicht " -"sehr gut: Es ist schwierig, `Vec>` in `&[&[i32]] umzuwandeln. ` also kannst Du jetzt auch " -"`pretty_print` nicht einfach verwenden." +"Du kannst versuchen, so etwas wie `Vec>` zu verwenden, aber das " +"funktioniert auch nicht sehr gut: Es ist schwierig, `Vec>` in " +"`&[&[i32]] umzuwandeln. ` also kannst Du jetzt auch `pretty_print` nicht " +"einfach verwenden." #: src/exercises/day-1/solutions-morning.md:84 msgid "" -"Once we get to traits and generics, we'll be able to use the [`std::convert::AsRef`][1] trait to " -"abstract over anything that can be referenced as a slice." +"Once we get to traits and generics, we'll be able to use the [`std::convert::" +"AsRef`][1] trait to abstract over anything that can be referenced as a slice." msgstr "" #: src/exercises/day-1/solutions-morning.md:86 @@ -18006,11 +19517,12 @@ msgstr "" #: src/exercises/day-1/solutions-morning.md:113 #, fuzzy 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 "" -"Außerdem würde der Typ selbst nicht erzwingen, dass die untergeordneten Slices dieselbe Länge " -"haben, sodass eine solche Variable eine ungültige Matrix enthalten könnte." +"Außerdem würde der Typ selbst nicht erzwingen, dass die untergeordneten " +"Slices dieselbe Länge haben, sodass eine solche Variable eine ungültige " +"Matrix enthalten könnte." #: src/exercises/day-1/solutions-afternoon.md:1 #, fuzzy @@ -18108,7 +19620,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" @@ -18149,7 +19662,8 @@ msgid "" " //println!(\"The library is empty: {}\", 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" " //\n" " //println!(\"The library is no longer empty: {}\", library.is_empty());\n" " //\n" @@ -18173,7 +19687,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" @@ -18191,7 +19706,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" @@ -18208,7 +19724,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" @@ -18501,7 +20018,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" @@ -18625,12 +20143,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" @@ -18648,7 +20169,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" @@ -18835,7 +20357,8 @@ msgid "" "// ANCHOR: main\n" "fn main() {\n" " let mut window = Window::new(\"Rust GUI Demo 1.23\");\n" -" window.add_widget(Box::new(Label::new(\"This is a small text GUI demo.\")));\n" +" window.add_widget(Box::new(Label::new(\"This is a small text GUI demo." +"\")));\n" " window.add_widget(Box::new(Button::new(\n" " \"Click me!\",\n" " Box::new(|| println!(\"You clicked the button!\")),\n" @@ -18888,10 +20411,12 @@ msgid "" " #[repr(C)]\n" " pub struct DIR {\n" " _data: [u8; 0],\n" -" _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,\n" +" _marker: core::marker::PhantomData<(*mut u8, core::marker::" +"PhantomPinned)>,\n" " }\n" "\n" -" // Layout as per readdir(3) and definitions in /usr/include/x86_64-linux-gnu.\n" +" // Layout as per readdir(3) and definitions in /usr/include/x86_64-linux-" +"gnu.\n" " #[cfg(not(target_os = \"macos\"))]\n" " #[repr(C)]\n" " pub struct dirent {\n" @@ -18937,7 +20462,8 @@ msgid "" " // Call opendir and return a Ok value if that worked,\n" " // otherwise return Err with a message.\n" " // ANCHOR_END: DirectoryIterator\n" -" let path = CString::new(path).map_err(|err| format!(\"Invalid path: {err}\"))?;\n" +" let path = CString::new(path).map_err(|err| format!(\"Invalid path: " +"{err}\"))?;\n" " // SAFETY: path.as_ptr() cannot be NULL.\n" " let dir = unsafe { ffi::opendir(path.as_ptr()) };\n" " if dir.is_null() {\n" @@ -19016,7 +20542,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" @@ -19024,7 +20551,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" @@ -19101,7 +20629,8 @@ msgid "" " // Set up the I2C controller and Inertial Measurement Unit.\n" " // ANCHOR_END: main\n" " writeln!(serial, \"Setting up IMU...\").unwrap();\n" -" let i2c = Twim::new(board.TWIM0, board.i2c_internal.into(), FREQUENCY_A::K100);\n" +" let i2c = Twim::new(board.TWIM0, board.i2c_internal.into(), FREQUENCY_A::" +"K100);\n" " let mut imu = Lsm303agr::new_with_i2c(i2c);\n" " imu.init().unwrap();\n" " imu.set_mag_odr(MagOutputDataRate::Hz50).unwrap();\n" @@ -19141,8 +20670,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" @@ -19164,7 +20695,8 @@ msgid "" " image[y][x] = 255;\n" " display.show(&mut timer, image, 100);\n" "\n" -" // If button A is pressed, switch to the next mode and briefly blink all LEDs on.\n" +" // If button A is pressed, switch to the next mode and briefly blink " +"all LEDs on.\n" " if board.buttons.button_a.is_low().unwrap() {\n" " if !button_pressed {\n" " mode = mode.next();\n" @@ -19192,7 +20724,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" @@ -19281,21 +20814,25 @@ msgid "" "// ANCHOR: main\n" "#[no_mangle]\n" "extern \"C\" fn main(x0: u64, x1: u64, x2: u64, x3: u64) {\n" -" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 device,\n" +" // Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 " +"device,\n" " // and nothing else accesses that address range.\n" " let uart = unsafe { Uart::new(PL011_BASE_ADDRESS) };\n" " logger::init(uart, LevelFilter::Trace).unwrap();\n" "\n" " info!(\"main({:#x}, {:#x}, {:#x}, {:#x})\", x0, x1, x2, x3);\n" "\n" -" // Safe because `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the base\n" +" // Safe because `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the " +"base\n" " // addresses of a GICv3 distributor and redistributor respectively, and\n" " // nothing else accesses those address ranges.\n" -" let mut gic = unsafe { GicV3::new(GICD_BASE_ADDRESS, GICR_BASE_ADDRESS) };\n" +" let mut gic = unsafe { GicV3::new(GICD_BASE_ADDRESS, " +"GICR_BASE_ADDRESS) };\n" " gic.setup();\n" " // ANCHOR_END: main\n" "\n" -" // Safe because `PL031_BASE_ADDRESS` is the base address of a PL031 device,\n" +" // Safe because `PL031_BASE_ADDRESS` is the base address of a PL031 " +"device,\n" " // and nothing else accesses that address range.\n" " let mut rtc = unsafe { Rtc::new(PL031_BASE_ADDRESS) };\n" " let timestamp = rtc.read();\n" @@ -19423,13 +20960,16 @@ msgid "" "}\n" "\n" "impl Rtc {\n" -" /// Constructs a new instance of the RTC driver for a PL031 device at the\n" +" /// Constructs a new instance of the RTC driver for a PL031 device at " +"the\n" " /// given base address.\n" " ///\n" " /// # Safety\n" " ///\n" -" /// The given base address must point to the MMIO control registers of a\n" -" /// PL031 device, which must be mapped into the address space of the process\n" +" /// The given base address must point to the MMIO control registers of " +"a\n" +" /// PL031 device, which must be mapped into the address space of the " +"process\n" " /// as device memory and not have any other aliases.\n" " pub unsafe fn new(base_address: *mut u32) -> Self {\n" " Self {\n" @@ -19444,7 +20984,8 @@ msgid "" " unsafe { addr_of!((*self.registers).dr).read_volatile() }\n" " }\n" "\n" -" /// Writes a match value. When the RTC value matches this then an interrupt\n" +" /// Writes a match value. When the RTC value matches this then an " +"interrupt\n" " /// will be generated (if it is enabled).\n" " pub fn set_match(&mut self, value: u32) {\n" " // Safe because we know that self.registers points to the control\n" @@ -19452,12 +20993,14 @@ msgid "" " unsafe { addr_of_mut!((*self.registers).mr).write_volatile(value) }\n" " }\n" "\n" -" /// Returns whether the match register matches the RTC value, whether or not\n" +" /// Returns whether the match register matches the RTC value, whether or " +"not\n" " /// the interrupt is enabled.\n" " pub fn matched(&self) -> bool {\n" " // Safe because we know that self.registers points to the control\n" " // registers of a PL031 device which is appropriately mapped.\n" -" let ris = unsafe { addr_of!((*self.registers).ris).read_volatile() };\n" +" let ris = unsafe { addr_of!((*self.registers).ris)." +"read_volatile() };\n" " (ris & 0x01) != 0\n" " }\n" "\n" @@ -19468,19 +21011,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" @@ -19664,7 +21210,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" @@ -19674,7 +21221,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" @@ -19697,7 +21245,8 @@ msgid "" " // ANCHOR_END: Philosopher-eat-end\n" " // Create forks\n" " let mut forks = vec![];\n" -" (0..PHILOSOPHERS.len()).for_each(|_| forks.push(Arc::new(Mutex::new(Fork))));\n" +" (0..PHILOSOPHERS.len()).for_each(|_| forks.push(Arc::new(Mutex::" +"new(Fork))));\n" "\n" " // Create philosophers\n" " let (philosophers, mut rx) = {\n" @@ -19708,8 +21257,10 @@ msgid "" " let right_fork = forks[(i + 1) % PHILOSOPHERS.len()].clone();\n" " philosophers.push(Philosopher {\n" " name: name.to_string(),\n" -" left_fork: if i % 2 == 0 { left_fork.clone() } else { right_fork.clone() },\n" -" right_fork: if i % 2 == 0 { right_fork } else { left_fork },\n" +" left_fork: if i % 2 == 0 { left_fork.clone() } else " +"{ right_fork.clone() },\n" +" right_fork: if i % 2 == 0 { right_fork } else " +"{ left_fork },\n" " thoughts: tx.clone(),\n" " });\n" " }\n" @@ -19784,7 +21335,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" @@ -19856,7 +21408,8 @@ msgid "" "\n" "#[tokio::main]\n" "async fn main() -> Result<(), tokio_websockets::Error> {\n" -" let mut ws_stream = ClientBuilder::from_uri(Uri::from_static(\"ws://127.0.0.1:2000\"))\n" +" let mut ws_stream = ClientBuilder::from_uri(Uri::" +"from_static(\"ws://127.0.0.1:2000\"))\n" " .connect()\n" " .await?;\n" "\n" @@ -19870,7 +21423,8 @@ msgid "" " tokio::select! {\n" " incoming = ws_stream.next() => {\n" " match incoming {\n" -" Some(Ok(msg)) => println!(\"From server: {}\", msg.as_text()?),\n" +" Some(Ok(msg)) => println!(\"From server: {}\", msg." +"as_text()?),\n" " Some(Err(err)) => return Err(err.into()),\n" " None => return Ok(()),\n" " }\n" @@ -19878,7 +21432,8 @@ msgid "" " res = stdin.read_line(&mut line) => {\n" " match res {\n" " Ok(0) => return Ok(()),\n" -" Ok(_) => ws_stream.send(Message::text(line.trim_end().to_string())).await?,\n" +" Ok(_) => ws_stream.send(Message::text(line.trim_end()." +"to_string())).await?,\n" " Err(err) => return Err(err.into()),\n" " }\n" " }\n" @@ -19920,51 +21475,64 @@ msgstr "" #~ "* Interoperabilität mit C, C++ und Java." #~ msgid "" -#~ "It is important to note that this course does not cover Android **application** \n" -#~ "development in Rust, and that the Android-specific parts are specifically about\n" +#~ "It is important to note that this course does not cover Android " +#~ "**application** \n" +#~ "development in Rust, and that the Android-specific parts are specifically " +#~ "about\n" #~ "writing code for Android itself, the operating system. " #~ msgstr "" -#~ "Es ist wichtig zu beachten, dass dieser Kurs keine Android **Anwendungsentwicklung** abdeckt \n" +#~ "Es ist wichtig zu beachten, dass dieser Kurs keine Android " +#~ "**Anwendungsentwicklung** abdeckt \n" #~ "und dass es bei den Android-spezifischen Teilen um das \n" #~ "Schreiben von Code für das Betriebssystem Android geht. " #~ msgid "" #~ "* Learn how to use async Rust --- we'll only mention async Rust when\n" #~ " covering traditional concurrency primitives. Please see [Asynchronous\n" -#~ " Programming in Rust](https://rust-lang.github.io/async-book/) instead for\n" +#~ " Programming in Rust](https://rust-lang.github.io/async-book/) instead " +#~ "for\n" #~ " details on this topic.\n" #~ "* Learn how to develop macros, please see [Chapter 19.5 in the Rust\n" #~ " Book](https://doc.rust-lang.org/book/ch19-06-macros.html) and [Rust by\n" #~ " Example](https://doc.rust-lang.org/rust-by-example/macros.html) instead." #~ msgstr "" -#~ "* Lernen, wie man asynchrones Rust verwendet – wir erwähnen asynchrones Rust nur dann, wenn\n" -#~ " wir traditionelle Nebenläufigkeitsprimitive abdecken. Siehe [Asynchronous\n" +#~ "* Lernen, wie man asynchrones Rust verwendet – wir erwähnen asynchrones " +#~ "Rust nur dann, wenn\n" +#~ " wir traditionelle Nebenläufigkeitsprimitive abdecken. Siehe " +#~ "[Asynchronous\n" #~ " Programmierung in Rust](https://rust-lang.github.io/async-book/) für\n" #~ " Details zu diesem Thema.\n" #~ "* Lernen, wie man Makros entwickelt, siehe [Kapitel 19.5 im Rust\n" -#~ " Buch](https://rust-lang-de.github.io/rustbook-de/ch19-06-macros.html) und [Rust by\n" +#~ " Buch](https://rust-lang-de.github.io/rustbook-de/ch19-06-macros.html) " +#~ "und [Rust by\n" #~ " Example](https://doc.rust-lang.org/rust-by-example/macros.html)." #~ msgid "# Day 4" #~ msgstr "# Tag 4" #~ msgid "" -#~ "The afternoon of the fourth day should cover a topic of your choice. Include\n" -#~ "the topic in the announcement of the course, so that participants know what to\n" +#~ "The afternoon of the fourth day should cover a topic of your choice. " +#~ "Include\n" +#~ "the topic in the announcement of the course, so that participants know " +#~ "what to\n" #~ "expect." #~ msgstr "" -#~ "Der Nachmittag des vierten Tages sollte ein von dir ausgewähltes Thema behandeln.\n" -#~ "Erwähne das ausgewählte Thema in der Kursankündigung, sodass Teilnehmer wissen was auf sie " -#~ "zukommt." +#~ "Der Nachmittag des vierten Tages sollte ein von dir ausgewähltes Thema " +#~ "behandeln.\n" +#~ "Erwähne das ausgewählte Thema in der Kursankündigung, sodass Teilnehmer " +#~ "wissen was auf sie zukommt." #~ msgid "" -#~ "This phase of the course is a chance for participants to see Rust in action on a\n" -#~ "codebase they might be familiar with. You can choose from the topics already\n" +#~ "This phase of the course is a chance for participants to see Rust in " +#~ "action on a\n" +#~ "codebase they might be familiar with. You can choose from the topics " +#~ "already\n" #~ "defined here, or plan your own." #~ msgstr "" -#~ "Dieser Abschnitt des Kurses ermöglicht es Teilnehmern Rust in einer Codebasis zu sehen die " -#~ "siemöglicherweise schon kennen. Du kannst entweder von den hier vorgeschlagenen Themen wählen, " -#~ "oder dein eigenes Thema planen." +#~ "Dieser Abschnitt des Kurses ermöglicht es Teilnehmern Rust in einer " +#~ "Codebasis zu sehen die siemöglicherweise schon kennen. Du kannst entweder " +#~ "von den hier vorgeschlagenen Themen wählen, oder dein eigenes Thema " +#~ "planen." #~ msgid "Some topics need additional preparation:" #~ msgstr "Manche Themen benötigen eine besondere Vorbereitung:" @@ -19989,10 +21557,12 @@ msgstr "" #~ " 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" #~ "\n" -#~ "fn fizzbuzz(n: u32) -> () { // No return value means returning the unit type `()`\n" +#~ "fn fizzbuzz(n: u32) -> () { // No return value means returning the unit " +#~ "type `()`\n" #~ " match (is_divisible_by(n, 3), is_divisible_by(n, 5)) {\n" #~ " (true, true) => println!(\"fizzbuzz\"),\n" #~ " (true, false) => println!(\"fizz\"),\n" @@ -20008,7 +21578,8 @@ msgstr "" #~ "}\n" #~ "```" #~ msgstr "" -#~ "fn fizzbuzz(n: u32) -> () { // Kein Rückgabewert bedeutet Rückgabe des Einheitentyps `()`\n" +#~ "fn fizzbuzz(n: u32) -> () { // Kein Rückgabewert bedeutet Rückgabe des " +#~ "Einheitentyps `()`\n" #~ " Übereinstimmung (ist_teilbar_durch(n, 3), ist_teilbar_durch(n, 5)) {\n" #~ " (true, true) => println!(\"fizzbuzz\"),\n" #~ " (wahr, falsch) => println!(\"fizz\"),\n" @@ -20032,12 +21603,17 @@ msgstr "" #~ msgstr "Sie verwenden \"if\" sehr ähnlich wie in anderen Sprachen:" #, fuzzy -#~ msgid "If you want to match a value against a pattern, you can use `if let`:" -#~ msgstr "Wenn Sie einen Wert mit einem Muster abgleichen möchten, können Sie `if let` verwenden:" +#~ msgid "" +#~ "If you want to match a value against a pattern, you can use `if let`:" +#~ msgstr "" +#~ "Wenn Sie einen Wert mit einem Muster abgleichen möchten, können Sie `if " +#~ "let` verwenden:" #, fuzzy #~ msgid "The `while` keyword works very similar to other languages:" -#~ msgstr "Das Schlüsselwort „while“ funktioniert sehr ähnlich wie in anderen Sprachen:" +#~ msgstr "" +#~ "Das Schlüsselwort „while“ funktioniert sehr ähnlich wie in anderen " +#~ "Sprachen:" #, fuzzy #~ msgid "# `for` expressions" @@ -20045,13 +21621,16 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "You will also want to browse the [`std::ffi`] module, particular for [`CStr`]\n" -#~ "and [`CString`] types which are used to hold NUL-terminated strings coming from\n" +#~ "You will also want to browse the [`std::ffi`] module, particular for " +#~ "[`CStr`]\n" +#~ "and [`CString`] types which are used to hold NUL-terminated strings " +#~ "coming from\n" #~ "C. The [Nomicon] also has a very useful chapter about FFI." #~ msgstr "" -#~ "Sie sollten auch das Modul [`std::ffi`] durchsuchen, insbesondere nach [`CStr`]\n" -#~ "und [`CString`]-Typen, die verwendet werden, um NUL-terminierte Zeichenfolgen zu halten, die " -#~ "von kommen\n" +#~ "Sie sollten auch das Modul [`std::ffi`] durchsuchen, insbesondere nach " +#~ "[`CStr`]\n" +#~ "und [`CString`]-Typen, die verwendet werden, um NUL-terminierte " +#~ "Zeichenfolgen zu halten, die von kommen\n" #~ "C. Das [Nomicon] hat auch ein sehr nützliches Kapitel über FFI." #, fuzzy @@ -20076,7 +21655,9 @@ msgstr "" #, fuzzy #~ msgid "Use `cargo run` to run the elevator simulation." -#~ msgstr "Verwenden Sie \"Cargo Test\", um die Komponententests zu finden und auszuführen." +#~ msgstr "" +#~ "Verwenden Sie \"Cargo Test\", um die Komponententests zu finden und " +#~ "auszuführen." #, fuzzy #~ msgid "## Exercises" @@ -20088,29 +21669,39 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "* `if let` can be more concise than `match`, e.g., when only one case is interesting. In " -#~ "contrast, `match` requires all branches to be covered.\n" -#~ " * For the similar use case consider demonstrating a newly stabilized [`let else`](https://" -#~ "github.com/rust-lang/rust/pull/93628) feature.\n" +#~ "* `if let` can be more concise than `match`, e.g., when only one case is " +#~ "interesting. In contrast, `match` requires all branches to be covered.\n" +#~ " * For the similar use case consider demonstrating a newly stabilized " +#~ "[`let else`](https://github.com/rust-lang/rust/pull/93628) feature.\n" #~ "* A common usage is handling `Some` values when working with `Option`.\n" -#~ "* Unlike `match`, `if let` does not support guard clauses for pattern matching." +#~ "* Unlike `match`, `if let` does not support guard clauses for pattern " +#~ "matching." #~ msgstr "" -#~ "* `if let` kann prägnanter sein als `match`, z. B. wenn nur ein Fall interessant ist. Im " -#~ "Gegensatz dazu erfordert \"Match\", dass alle Zweige abgedeckt werden.\n" -#~ " * Ziehen Sie für einen ähnlichen Anwendungsfall in Betracht, eine neu stabilisierte [`let " -#~ "else`](https://github.com/rust-lang/rust/pull/93628)-Funktion zu demonstrieren.\n" -#~ "* Eine übliche Verwendung ist die Handhabung von `Some`-Werten bei der Arbeit mit `Option`.\n" -#~ "* Im Gegensatz zu `match` unterstützt `if let` keine Schutzklauseln für den Mustervergleich." +#~ "* `if let` kann prägnanter sein als `match`, z. B. wenn nur ein Fall " +#~ "interessant ist. Im Gegensatz dazu erfordert \"Match\", dass alle Zweige " +#~ "abgedeckt werden.\n" +#~ " * Ziehen Sie für einen ähnlichen Anwendungsfall in Betracht, eine neu " +#~ "stabilisierte [`let else`](https://github.com/rust-lang/rust/pull/93628)-" +#~ "Funktion zu demonstrieren.\n" +#~ "* Eine übliche Verwendung ist die Handhabung von `Some`-Werten bei der " +#~ "Arbeit mit `Option`.\n" +#~ "* Im Gegensatz zu `match` unterstützt `if let` keine Schutzklauseln für " +#~ "den Mustervergleich." #, fuzzy -#~ msgid "We've seen how a function can take arguments which implement a trait:" +#~ msgid "" +#~ "We've seen how a function can take arguments which implement a trait:" #~ msgstr "" -#~ "Wir haben gesehen, wie eine Funktion Argumente annehmen kann, die ein Merkmal implementieren:" +#~ "Wir haben gesehen, wie eine Funktion Argumente annehmen kann, die ein " +#~ "Merkmal implementieren:" #, fuzzy -#~ msgid "However, how can we store a collection of mixed types which implement `Display`?" +#~ msgid "" +#~ "However, how can we store a collection of mixed types which implement " +#~ "`Display`?" #~ msgstr "" -#~ "Wie können wir jedoch eine Sammlung gemischter Typen speichern, die \"Display\" implementieren?" +#~ "Wie können wir jedoch eine Sammlung gemischter Typen speichern, die " +#~ "\"Display\" implementieren?" #, fuzzy #~ msgid "For this, we need _trait objects_:" @@ -20121,69 +21712,105 @@ msgstr "" #~ "Similarly, you need a trait object if you want to return different types\n" #~ "implementing a trait:" #~ msgstr "" -#~ "Ebenso benötigen Sie ein Trait-Objekt, wenn Sie andere Werte zurückgeben möchten\n" +#~ "Ebenso benötigen Sie ein Trait-Objekt, wenn Sie andere Werte zurückgeben " +#~ "möchten\n" #~ "Implementieren eines Merkmals:" #~ msgid "" -#~ "1. Make yourself familiar with the course material. We've included speaker notes\n" -#~ " on some of the pages to help highlight the key points (please help us by\n" -#~ " contributing more speaker notes!). You should make sure to open the speaker\n" -#~ " notes in a popup (click the link with a little arrow next to \"Speaker\n" +#~ "1. Make yourself familiar with the course material. We've included " +#~ "speaker notes\n" +#~ " on some of the pages to help highlight the key points (please help us " +#~ "by\n" +#~ " contributing more speaker notes!). You should make sure to open the " +#~ "speaker\n" +#~ " notes in a popup (click the link with a little arrow next to " +#~ "\"Speaker\n" #~ " Notes\"). This way you have a clean screen to present to the class." #~ msgstr "" -#~ "1. Mach dich mit dem Kursmaterial vertraut. Wir haben Sprechernotizen an einigen \n" -#~ " Stellen hinzugefügt, um die wichtigsten Punkte hervorzuheben (du hilfts uns sehr, \n" -#~ " wenn du weitere Sprechernotizen beisteuerst!). Du solltest die Sprechernotizeb in \n" -#~ " einem Popup öffnen (klicke dazu auf dem Link mit einem kleinen Pfeil neben \n" -#~ " \"Sprechernotizen\"). Auf diese Weise präsentierst du den Kursteilnehmern nur \n" +#~ "1. Mach dich mit dem Kursmaterial vertraut. Wir haben Sprechernotizen an " +#~ "einigen \n" +#~ " Stellen hinzugefügt, um die wichtigsten Punkte hervorzuheben (du " +#~ "hilfts uns sehr, \n" +#~ " wenn du weitere Sprechernotizen beisteuerst!). Du solltest die " +#~ "Sprechernotizeb in \n" +#~ " einem Popup öffnen (klicke dazu auf dem Link mit einem kleinen Pfeil " +#~ "neben \n" +#~ " \"Sprechernotizen\"). Auf diese Weise präsentierst du den " +#~ "Kursteilnehmern nur \n" #~ " das Kursmaterial." #~ msgid "" #~ "2. Decide on the dates. Since the course is large, we recommend that you\n" -#~ " schedule the four days over two weeks. Course participants have said that\n" -#~ " they find it helpful to have a gap in the course since it helps them process\n" +#~ " schedule the four days over two weeks. Course participants have said " +#~ "that\n" +#~ " they find it helpful to have a gap in the course since it helps them " +#~ "process\n" #~ " all the information we give them." #~ msgstr "" -#~ "2. Lege die Termine fest. Da der Kurs recht lang ist, empfehlen wir die 4 Tage \n" -#~ " verteilt über 2 Wochen zu legen. Bisherige Kursteilnehmer fanden es hilfreich, \n" -#~ " eine Lücke zwischen Kurstage zu haben, um das Material zu verinnerlichern." +#~ "2. Lege die Termine fest. Da der Kurs recht lang ist, empfehlen wir die 4 " +#~ "Tage \n" +#~ " verteilt über 2 Wochen zu legen. Bisherige Kursteilnehmer fanden es " +#~ "hilfreich, \n" +#~ " eine Lücke zwischen Kurstage zu haben, um das Material zu " +#~ "verinnerlichern." #~ msgid "" -#~ "3. Find a room large enough for your in-person participants. We recommend a\n" -#~ " class size of 15-20 people. That's small enough that people are comfortable\n" -#~ " asking questions --- it's also small enough that one instructor will have\n" +#~ "3. Find a room large enough for your in-person participants. We recommend " +#~ "a\n" +#~ " class size of 15-20 people. That's small enough that people are " +#~ "comfortable\n" +#~ " asking questions --- it's also small enough that one instructor will " +#~ "have\n" #~ " time to answer the questions." #~ msgstr "" -#~ "3. Finde einen Raum, der groß genug für alle in Person anwesenden Teilnehmer ist. \n" -#~ " Wir empfehlen eine Kursgröße von 15-20 Personen. Das ist klein genug, dass sich \n" -#~ " die Leute wohlfühlen Fragen stellen --- und es ist auch klein genug, dass der \n" +#~ "3. Finde einen Raum, der groß genug für alle in Person anwesenden " +#~ "Teilnehmer ist. \n" +#~ " Wir empfehlen eine Kursgröße von 15-20 Personen. Das ist klein genug, " +#~ "dass sich \n" +#~ " die Leute wohlfühlen Fragen stellen --- und es ist auch klein genug, " +#~ "dass der \n" #~ " Lehrende Zeit hat alle Fragen zu beantworten." #~ msgid "" -#~ "4. On the day of your course, show up to the room a little early to set things\n" -#~ " up. We recommend presenting directly using `mdbook serve` running on your\n" -#~ " laptop. This ensures optimal performance with no lag as you change pages.\n" -#~ " Using your laptop will also allow you to fix typos as you or the course\n" +#~ "4. On the day of your course, show up to the room a little early to set " +#~ "things\n" +#~ " up. We recommend presenting directly using `mdbook serve` running on " +#~ "your\n" +#~ " laptop. This ensures optimal performance with no lag as you change " +#~ "pages.\n" +#~ " Using your laptop will also allow you to fix typos as you or the " +#~ "course\n" #~ " participants spot them." #~ msgstr "" -#~ "4. Erscheine am Tag des Kurses etwas früher in dem Raum, um alles vorzubereiten. \n" -#~ " Wir empfehlen, direkt `mdbook serve` auf deinem Laptop laufen zu lassen, und so \n" -#~ " den Kurz zu präsentieren. Das minimiert Verzögerungen beim Seitenwechsel und \n" -#~ " ermöglicht es, Tippfehler, die von Teilnehmern entdeckt werden, gleich währende\n" +#~ "4. Erscheine am Tag des Kurses etwas früher in dem Raum, um alles " +#~ "vorzubereiten. \n" +#~ " Wir empfehlen, direkt `mdbook serve` auf deinem Laptop laufen zu " +#~ "lassen, und so \n" +#~ " den Kurz zu präsentieren. Das minimiert Verzögerungen beim " +#~ "Seitenwechsel und \n" +#~ " ermöglicht es, Tippfehler, die von Teilnehmern entdeckt werden, gleich " +#~ "währende\n" #~ " des Kurses zu korrigieren." #~ msgid "" -#~ "5. Let people solve the exercises by themselves or in small groups. Make sure to\n" -#~ " ask people if they're stuck or if there is anything you can help with. When\n" -#~ " you see that several people have the same problem, call it out to the class\n" -#~ " and offer a solution, e.g., by showing people where to find the relevant\n" +#~ "5. Let people solve the exercises by themselves or in small groups. Make " +#~ "sure to\n" +#~ " ask people if they're stuck or if there is anything you can help with. " +#~ "When\n" +#~ " you see that several people have the same problem, call it out to the " +#~ "class\n" +#~ " and offer a solution, e.g., by showing people where to find the " +#~ "relevant\n" #~ " information in the standard library." #~ msgstr "" -#~ "5. Lass die Teilnehmer die Übungen alleine oder in kleinen Gruppen lösen. Frage ab und zu " -#~ "nach,\n" -#~ " ob jemand nicht weiterkommt und ob es etwas gibt, wo du helfen kannst. Wenn du merkst,\n" -#~ " dass mehrere Personen die gleichen Probleme haben, solltest du dies im Kurs ansprechen\n" -#~ " und Hinweise geben, wo relevante Informationen (wie z.B. Teile der Standardbibliothek) zu \n" +#~ "5. Lass die Teilnehmer die Übungen alleine oder in kleinen Gruppen lösen. " +#~ "Frage ab und zu nach,\n" +#~ " ob jemand nicht weiterkommt und ob es etwas gibt, wo du helfen kannst. " +#~ "Wenn du merkst,\n" +#~ " dass mehrere Personen die gleichen Probleme haben, solltest du dies im " +#~ "Kurs ansprechen\n" +#~ " und Hinweise geben, wo relevante Informationen (wie z.B. Teile der " +#~ "Standardbibliothek) zu \n" #~ " finden sind." #~ msgid "" @@ -20198,12 +21825,15 @@ msgstr "" #~ "[4]: https://github.com/google/comprehensive-rust/discussions/100" #~ msgid "" -#~ "> **Exercise for Day 4:** Do you interface with some C/C++ code in your project\n" -#~ "> which we could attempt to move to Rust? The fewer dependencies the better.\n" +#~ "> **Exercise for Day 4:** Do you interface with some C/C++ code in your " +#~ "project\n" +#~ "> which we could attempt to move to Rust? The fewer dependencies the " +#~ "better.\n" #~ "> Parsing code would be ideal." #~ msgstr "" #~ "> **Übung für Tag 4:** Arbeitest du in deinem Projekt mit C/C++-Code,\n" -#~ "> den wir versuchen könnten nach Rust zu verschieben? Je weniger Abhängigkeiten, desto besser.\n" +#~ "> den wir versuchen könnten nach Rust zu verschieben? Je weniger " +#~ "Abhängigkeiten, desto besser.\n" #~ "> Parser-Code wäre ideal." #~ msgid "" @@ -20220,23 +21850,30 @@ msgstr "" #~ "[5]: https://www.jetbrains.com/rust/" #~ msgid "" -#~ "* `rustc`: the Rust compiler which turns `.rs` files into binaries and other\n" +#~ "* `rustc`: the Rust compiler which turns `.rs` files into binaries and " +#~ "other\n" #~ " intermediate formats[^rustc]." #~ msgstr "" -#~ "* „rustc“: der Rust-Compiler, der „.rs“-Dateien in Binärdateien und andere \n" +#~ "* „rustc“: der Rust-Compiler, der „.rs“-Dateien in Binärdateien und " +#~ "andere \n" #~ " Zwischenformate umwandelt [^rustc]." #, fuzzy #~ msgid "" -#~ "* `cargo`: the Rust dependency manager and build tool. Cargo knows how to\n" -#~ " download dependencies hosted on and it will pass them to\n" -#~ " `rustc` when building your project. Cargo also comes with a built-in test\n" +#~ "* `cargo`: the Rust dependency manager and build tool. Cargo knows how " +#~ "to\n" +#~ " download dependencies hosted on and it will pass " +#~ "them to\n" +#~ " `rustc` when building your project. Cargo also comes with a built-in " +#~ "test\n" #~ " runner which is used to execute unit tests[^cargo]." #~ msgstr "" -#~ "* `cargo`: der Rust-Abhängigkeitsmanager und Build-Tool. Cargo weiß, wie es geht\n" -#~ " Laden Sie Abhängigkeiten herunter, die auf gehostet werden, und es wird " -#~ "sie an sie weitergeben\n" -#~ " `rustc`, wenn Sie Ihr Projekt erstellen. Cargo kommt auch mit einem eingebauten Test\n" +#~ "* `cargo`: der Rust-Abhängigkeitsmanager und Build-Tool. Cargo weiß, wie " +#~ "es geht\n" +#~ " Laden Sie Abhängigkeiten herunter, die auf gehostet " +#~ "werden, und es wird sie an sie weitergeben\n" +#~ " `rustc`, wenn Sie Ihr Projekt erstellen. Cargo kommt auch mit einem " +#~ "eingebauten Test\n" #~ " Runner, der zum Ausführen von Unit-Tests[^cargo] verwendet wird." #, fuzzy @@ -20245,21 +21882,25 @@ msgstr "" #~ " every six weeks. New releases maintain backwards compatibility with\n" #~ " old releases --- plus they enable new functionality." #~ msgstr "" -#~ "* Rust hat einen schnellen Veröffentlichungszeitplan mit einer neuen Veröffentlichung, die " -#~ "herauskommt\n" -#~ " alle sechs Wochen. Neue Releases behalten die Abwärtskompatibilität mit\n" +#~ "* Rust hat einen schnellen Veröffentlichungszeitplan mit einer neuen " +#~ "Veröffentlichung, die herauskommt\n" +#~ " alle sechs Wochen. Neue Releases behalten die Abwärtskompatibilität " +#~ "mit\n" #~ " alte Versionen --- und sie ermöglichen neue Funktionen." #, fuzzy -#~ msgid "* There are three release channels: \"stable\", \"beta\", and \"nightly\"." -#~ msgstr "* Es gibt drei Veröffentlichungskanäle: „Stable“, „Beta“ und „Nightly“." +#~ msgid "" +#~ "* There are three release channels: \"stable\", \"beta\", and \"nightly\"." +#~ msgstr "" +#~ "* Es gibt drei Veröffentlichungskanäle: „Stable“, „Beta“ und „Nightly“." #, fuzzy #~ msgid "" #~ "* New features are being tested on \"nightly\", \"beta\" is what becomes\n" #~ " \"stable\" every six weeks." #~ msgstr "" -#~ "* Neue Funktionen werden auf \"Nightly\" getestet, \"Beta\" ist das, was wird\n" +#~ "* Neue Funktionen werden auf \"Nightly\" getestet, \"Beta\" ist das, was " +#~ "wird\n" #~ " \"stabil\" alle sechs Wochen." #, fuzzy @@ -20283,7 +21924,8 @@ msgstr "" #~ " * To prevent breaking code, editions are opt-in: you select the\n" #~ " edition for your crate via the `Cargo.toml` file." #~ msgstr "" -#~ " * Um das Brechen von Code zu verhindern, sind Editionen Opt-in: Sie wählen die aus\n" +#~ " * Um das Brechen von Code zu verhindern, sind Editionen Opt-in: Sie " +#~ "wählen die aus\n" #~ " Edition für Ihre Kiste über die Datei `Cargo.toml`." #, fuzzy @@ -20291,38 +21933,44 @@ msgstr "" #~ " * To avoid splitting the ecosystem, Rust compilers can mix code\n" #~ " written for different editions." #~ msgstr "" -#~ " * Um eine Aufspaltung des Ökosystems zu vermeiden, können Rust-Compiler Code mischen\n" +#~ " * Um eine Aufspaltung des Ökosystems zu vermeiden, können Rust-Compiler " +#~ "Code mischen\n" #~ " für verschiedene Editionen geschrieben." #, fuzzy #~ msgid "" -#~ " * Mention that it is quite rare to ever use the compiler directly not through `cargo` (most " -#~ "users never do)." +#~ " * Mention that it is quite rare to ever use the compiler directly not " +#~ "through `cargo` (most users never do)." #~ msgstr "" -#~ " * Erwähnen Sie, dass es ziemlich selten vorkommt, den Compiler jemals direkt zu verwenden, " -#~ "nicht über `cargo` (die meisten Benutzer tun dies nie)." +#~ " * Erwähnen Sie, dass es ziemlich selten vorkommt, den Compiler jemals " +#~ "direkt zu verwenden, nicht über `cargo` (die meisten Benutzer tun dies " +#~ "nie)." #, fuzzy #~ 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: \n" +#~ " * 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: \n" #~ " * Project/package structure\n" #~ " * [workspaces]\n" #~ " * Dev Dependencies and Runtime Dependency management/caching\n" #~ " * [build scripting]\n" #~ " * [global installation]\n" -#~ " * It is also extensible with sub command plugins as well (such as [cargo clippy]).\n" +#~ " * It is also extensible with sub command plugins as well (such as " +#~ "[cargo clippy]).\n" #~ " * Read more from the [official Cargo Book]" #~ msgstr "" -#~ " * Es könnte erwähnenswert sein, dass Cargo selbst ein äußerst leistungsfähiges und " -#~ "umfassendes Werkzeug ist. Es verfügt über viele erweiterte Funktionen, einschließlich, aber " -#~ "nicht beschränkt auf:\n" +#~ " * Es könnte erwähnenswert sein, dass Cargo selbst ein äußerst " +#~ "leistungsfähiges und umfassendes Werkzeug ist. Es verfügt über viele " +#~ "erweiterte Funktionen, einschließlich, aber nicht beschränkt auf:\n" #~ " * Projekt-/Paketstruktur\n" #~ " * [Arbeitsbereiche]\n" -#~ " * Verwaltung/Caching von Entwicklungsabhängigkeiten und Laufzeitabhängigkeiten\n" +#~ " * Verwaltung/Caching von Entwicklungsabhängigkeiten und " +#~ "Laufzeitabhängigkeiten\n" #~ " * [Skript erstellen]\n" #~ " * [globale Installation]\n" -#~ " * Es ist auch mit Unterbefehls-Plugins erweiterbar (wie [cargo clippy]).\n" +#~ " * Es ist auch mit Unterbefehls-Plugins erweiterbar (wie [cargo " +#~ "clippy]).\n" #~ " * Lesen Sie mehr aus dem [offiziellen Frachtbuch]" #, fuzzy @@ -20330,16 +21978,27 @@ msgstr "" #~ msgstr "[Ausgaben]: https://doc.rust-lang.org/edition-guide/" #, fuzzy -#~ msgid "[workspaces]: https://doc.rust-lang.org/cargo/reference/workspaces.html" -#~ msgstr "[Arbeitsbereiche]: https://doc.rust-lang.org/cargo/reference/workspaces.html" +#~ msgid "" +#~ "[workspaces]: https://doc.rust-lang.org/cargo/reference/workspaces.html" +#~ msgstr "" +#~ "[Arbeitsbereiche]: https://doc.rust-lang.org/cargo/reference/workspaces." +#~ "html" #, fuzzy -#~ msgid "[build scripting]: https://doc.rust-lang.org/cargo/reference/build-scripts.html" -#~ msgstr "[Build-Scripting]: https://doc.rust-lang.org/cargo/reference/build-scripts.html" +#~ msgid "" +#~ "[build scripting]: https://doc.rust-lang.org/cargo/reference/build-" +#~ "scripts.html" +#~ msgstr "" +#~ "[Build-Scripting]: https://doc.rust-lang.org/cargo/reference/build-" +#~ "scripts.html" #, fuzzy -#~ msgid "[global installation]: https://doc.rust-lang.org/cargo/commands/cargo-install.html" -#~ msgstr "[globale Installation]: https://doc.rust-lang.org/cargo/commands/cargo-install.html" +#~ msgid "" +#~ "[global installation]: https://doc.rust-lang.org/cargo/commands/cargo-" +#~ "install.html" +#~ msgstr "" +#~ "[globale Installation]: https://doc.rust-lang.org/cargo/commands/cargo-" +#~ "install.html" #, fuzzy #~ msgid "[cargo clippy]: https://github.com/rust-lang/rust-clippy" @@ -20354,63 +22013,82 @@ msgstr "" #~ "* The embedded playgrounds cannot execute unit tests. Copy-paste the\n" #~ " code and open it in the real Playground to demonstrate unit tests." #~ msgstr "" -#~ "* Die eingebetteten Playgrounds können keine Unit-Tests ausführen. Kopieren Sie die\n" -#~ " code und öffnen Sie ihn im realen Playground, um Unit-Tests zu demonstrieren." - -#, fuzzy -#~ msgid "1. Click the \"Copy to clipboard\" button on the example you want to copy." -#~ msgstr "" -#~ "1. Klicken Sie bei dem Beispiel, das Sie kopieren möchten, auf die Schaltfläche \"In die " -#~ "Zwischenablage kopieren\"." - -#, fuzzy -#~ msgid "2. Use `cargo new exercise` to create a new `exercise/` directory for your code:" -#~ msgstr "" -#~ "2. Verwenden Sie `cargo new Exercise`, um ein neues `exercise/`-Verzeichnis für Ihren Code zu " -#~ "erstellen:" - -#, fuzzy -#~ msgid "3. Navigate into `exercise/` and use `cargo run` to build and run your binary:" -#~ msgstr "" -#~ "3. Navigieren Sie zu „exercise/“ und verwenden Sie „cargo run“, um Ihre Binärdatei zu erstellen " -#~ "und auszuführen:" +#~ "* Die eingebetteten Playgrounds können keine Unit-Tests ausführen. " +#~ "Kopieren Sie die\n" +#~ " code und öffnen Sie ihn im realen Playground, um Unit-Tests zu " +#~ "demonstrieren." #, fuzzy #~ msgid "" -#~ "4. Replace the boiler-plate code in `src/main.rs` with your own code. For\n" -#~ " example, using the example on the previous page, make `src/main.rs` look like" +#~ "1. Click the \"Copy to clipboard\" button on the example you want to copy." #~ msgstr "" -#~ "4. Ersetzen Sie den Standardcode in `src/main.rs` durch Ihren eigenen Code. Für\n" -#~ " Verwenden Sie beispielsweise das Beispiel auf der vorherigen Seite und lassen Sie `src/main." -#~ "rs` so aussehen" +#~ "1. Klicken Sie bei dem Beispiel, das Sie kopieren möchten, auf die " +#~ "Schaltfläche \"In die Zwischenablage kopieren\"." + +#, fuzzy +#~ msgid "" +#~ "2. Use `cargo new exercise` to create a new `exercise/` directory for " +#~ "your code:" +#~ msgstr "" +#~ "2. Verwenden Sie `cargo new Exercise`, um ein neues `exercise/`-" +#~ "Verzeichnis für Ihren Code zu erstellen:" + +#, fuzzy +#~ msgid "" +#~ "3. Navigate into `exercise/` and use `cargo run` to build and run your " +#~ "binary:" +#~ msgstr "" +#~ "3. Navigieren Sie zu „exercise/“ und verwenden Sie „cargo run“, um Ihre " +#~ "Binärdatei zu erstellen und auszuführen:" + +#, fuzzy +#~ msgid "" +#~ "4. Replace the boiler-plate code in `src/main.rs` with your own code. " +#~ "For\n" +#~ " example, using the example on the previous page, make `src/main.rs` " +#~ "look like" +#~ msgstr "" +#~ "4. Ersetzen Sie den Standardcode in `src/main.rs` durch Ihren eigenen " +#~ "Code. Für\n" +#~ " Verwenden Sie beispielsweise das Beispiel auf der vorherigen Seite und " +#~ "lassen Sie `src/main.rs` so aussehen" #, fuzzy #~ msgid "5. Use `cargo run` to build and run your updated binary:" #~ msgstr "" -#~ "5. Verwenden Sie „cargo run“, um Ihre aktualisierte Binärdatei zu erstellen und auszuführen:" +#~ "5. Verwenden Sie „cargo run“, um Ihre aktualisierte Binärdatei zu " +#~ "erstellen und auszuführen:" #, fuzzy #~ msgid "" -#~ "6. Use `cargo check` to quickly check your project for errors, use `cargo build`\n" -#~ " to compile it without running it. You will find the output in `target/debug/`\n" -#~ " for a normal debug build. Use `cargo build --release` to produce an optimized\n" +#~ "6. Use `cargo check` to quickly check your project for errors, use `cargo " +#~ "build`\n" +#~ " to compile it without running it. You will find the output in `target/" +#~ "debug/`\n" +#~ " for a normal debug build. Use `cargo build --release` to produce an " +#~ "optimized\n" #~ " release build in `target/release/`." #~ msgstr "" -#~ "6. Verwenden Sie „Cargo Check“, um Ihr Projekt schnell auf Fehler zu überprüfen, verwenden Sie " -#~ "„Cargo Build“.\n" -#~ " um es zu kompilieren, ohne es auszuführen. Die Ausgabe finden Sie in `target/debug/`\n" -#~ " für einen normalen Debug-Build. Verwenden Sie `cargo build --release`, um eine optimierte\n" +#~ "6. Verwenden Sie „Cargo Check“, um Ihr Projekt schnell auf Fehler zu " +#~ "überprüfen, verwenden Sie „Cargo Build“.\n" +#~ " um es zu kompilieren, ohne es auszuführen. Die Ausgabe finden Sie in " +#~ "`target/debug/`\n" +#~ " für einen normalen Debug-Build. Verwenden Sie `cargo build --release`, " +#~ "um eine optimierte\n" #~ " Release-Build in `target/release/`." #, fuzzy #~ msgid "" -#~ "7. You can add dependencies for your project by editing `Cargo.toml`. When you\n" -#~ " run `cargo` commands, it will automatically download and compile missing\n" +#~ "7. You can add dependencies for your project by editing `Cargo.toml`. " +#~ "When you\n" +#~ " run `cargo` commands, it will automatically download and compile " +#~ "missing\n" #~ " dependencies for you." #~ msgstr "" -#~ "7. Sie können Abhängigkeiten für Ihr Projekt hinzufügen, indem Sie `Cargo.toml` bearbeiten. " -#~ "Wenn du\n" -#~ " Führen Sie \"Cargo\"-Befehle aus, es wird automatisch heruntergeladen und kompiliert\n" +#~ "7. Sie können Abhängigkeiten für Ihr Projekt hinzufügen, indem Sie `Cargo." +#~ "toml` bearbeiten. Wenn du\n" +#~ " Führen Sie \"Cargo\"-Befehle aus, es wird automatisch heruntergeladen " +#~ "und kompiliert\n" #~ " Abhängigkeiten für Sie." #, fuzzy @@ -20419,33 +22097,44 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "* Basic Rust syntax: variables, scalar and compound types, enums, structs,\n" +#~ "* Basic Rust syntax: variables, scalar and compound types, enums, " +#~ "structs,\n" #~ " references, functions, and methods." #~ msgstr "" -#~ "* Grundlegende Rust-Syntax: Variablen, skalare und zusammengesetzte Typen, Aufzählungen, " -#~ "Strukturen,\n" +#~ "* Grundlegende Rust-Syntax: Variablen, skalare und zusammengesetzte " +#~ "Typen, Aufzählungen, Strukturen,\n" #~ " Referenzen, Funktionen und Methoden." #, fuzzy #~ msgid "" -#~ "* Memory management: stack vs heap, manual memory management, scope-based memory\n" +#~ "* Memory management: stack vs heap, manual memory management, scope-based " +#~ "memory\n" #~ " management, and garbage collection." #~ msgstr "" -#~ "* Speicherverwaltung: Stack vs. Heap, manuelle Speicherverwaltung, bereichsbasierter Speicher\n" +#~ "* Speicherverwaltung: Stack vs. Heap, manuelle Speicherverwaltung, " +#~ "bereichsbasierter Speicher\n" #~ " Verwaltung und Garbage Collection." #, fuzzy -#~ msgid "* Ownership: move semantics, copying and cloning, borrowing, and lifetimes." -#~ msgstr "* Eigentum: Verschieben von Semantik, Kopieren und Klonen, Ausleihen und Lebensdauern." +#~ msgid "" +#~ "* Ownership: move semantics, copying and cloning, borrowing, and " +#~ "lifetimes." +#~ msgstr "" +#~ "* Eigentum: Verschieben von Semantik, Kopieren und Klonen, Ausleihen und " +#~ "Lebensdauern." #, fuzzy #~ msgid "" -#~ "* Rust is very much like other languages in the C/C++/Java tradition. It is\n" -#~ " imperative (not functional) and it doesn't try to reinvent things unless\n" +#~ "* Rust is very much like other languages in the C/C++/Java tradition. It " +#~ "is\n" +#~ " imperative (not functional) and it doesn't try to reinvent things " +#~ "unless\n" #~ " absolutely necessary." #~ msgstr "" -#~ "* Rust ist anderen Sprachen in der C/C++/Java-Tradition sehr ähnlich. Es ist\n" -#~ " Imperativ (nicht funktional) und es versucht nicht, Dinge neu zu erfinden, es sei denn\n" +#~ "* Rust ist anderen Sprachen in der C/C++/Java-Tradition sehr ähnlich. Es " +#~ "ist\n" +#~ " Imperativ (nicht funktional) und es versucht nicht, Dinge neu zu " +#~ "erfinden, es sei denn\n" #~ " absolut notwendig." #, fuzzy @@ -20454,22 +22143,27 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "* Rust uses macros for situations where you want to have a variable number of\n" -#~ " arguments (no function [overloading](basic-syntax/functions-interlude.md))." +#~ "* Rust uses macros for situations where you want to have a variable " +#~ "number of\n" +#~ " arguments (no function [overloading](basic-syntax/functions-interlude." +#~ "md))." #~ msgstr "" -#~ "* Rust verwendet Makros für Situationen, in denen Sie eine variable Anzahl von Makros haben " -#~ "möchten\n" -#~ " Argumente (keine Funktion [Überladen] (Grundsyntax/Funktionen-Zwischenspiel.md))." +#~ "* Rust verwendet Makros für Situationen, in denen Sie eine variable " +#~ "Anzahl von Makros haben möchten\n" +#~ " Argumente (keine Funktion [Überladen] (Grundsyntax/Funktionen-" +#~ "Zwischenspiel.md))." #, fuzzy #~ msgid "" -#~ "* Explain that all variables are statically typed. Try removing `i32` to trigger\n" -#~ " type inference. Try with `i8` instead and trigger a runtime integer overflow." +#~ "* Explain that all variables are statically typed. Try removing `i32` to " +#~ "trigger\n" +#~ " type inference. Try with `i8` instead and trigger a runtime integer " +#~ "overflow." #~ msgstr "" -#~ "* Erklären Sie, dass alle Variablen statisch typisiert sind. Versuchen Sie, „i32“ zu entfernen, " -#~ "um auszulösen\n" -#~ " Typ Inferenz. Versuchen Sie es stattdessen mit \"i8\" und lösen Sie einen Integer-Überlauf " -#~ "zur Laufzeit aus." +#~ "* Erklären Sie, dass alle Variablen statisch typisiert sind. Versuchen " +#~ "Sie, „i32“ zu entfernen, um auszulösen\n" +#~ " Typ Inferenz. Versuchen Sie es stattdessen mit \"i8\" und lösen Sie " +#~ "einen Integer-Überlauf zur Laufzeit aus." #, fuzzy #~ msgid "* Change `let mut x` to `let x`, discuss the compiler error." @@ -20477,11 +22171,12 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "* Show how `print!` gives a compilation error if the arguments don't match the\n" +#~ "* Show how `print!` gives a compilation error if the arguments don't " +#~ "match the\n" #~ " format string." #~ msgstr "" -#~ "* Zeigen Sie, wie `print!` einen Kompilierungsfehler ausgibt, wenn die Argumente nicht " -#~ "übereinstimmen\n" +#~ "* Zeigen Sie, wie `print!` einen Kompilierungsfehler ausgibt, wenn die " +#~ "Argumente nicht übereinstimmen\n" #~ " Zeichenfolge formatieren." #, fuzzy @@ -20489,41 +22184,54 @@ msgstr "" #~ "* Show how you need to use `{}` as a placeholder if you want to print an\n" #~ " expression which is more complex than just a single variable." #~ msgstr "" -#~ "* Zeigen Sie, wie Sie `{}` als Platzhalter verwenden müssen, wenn Sie eine drucken möchten\n" +#~ "* Zeigen Sie, wie Sie `{}` als Platzhalter verwenden müssen, wenn Sie " +#~ "eine drucken möchten\n" #~ " Ausdruck, der komplexer ist als nur eine einzelne Variable." #, fuzzy #~ msgid "" -#~ "* Show the students the standard library, show them how to search for `std::fmt`\n" -#~ " which has the rules of the formatting mini-language. It's important that the\n" +#~ "* Show the students the standard library, show them how to search for " +#~ "`std::fmt`\n" +#~ " which has the rules of the formatting mini-language. It's important " +#~ "that the\n" #~ " students become familiar with searching in the standard library." #~ msgstr "" -#~ "* Zeigen Sie den Schülern die Standardbibliothek, zeigen Sie ihnen, wie man nach `std::fmt` " -#~ "sucht\n" +#~ "* Zeigen Sie den Schülern die Standardbibliothek, zeigen Sie ihnen, wie " +#~ "man nach `std::fmt` sucht\n" #~ " die die Regeln der Formatierungsminisprache hat. Wichtig ist, dass die\n" #~ " Die Schüler lernen die Suche in der Standardbibliothek kennen." #, fuzzy #~ msgid "" -#~ "* Experience with C or C++: Rust eliminates a whole class of _runtime errors_\n" -#~ " via the borrow checker. You get performance like in C and C++, but you don't\n" -#~ " have the memory unsafety issues. In addition, you get a modern language with\n" +#~ "* Experience with C or C++: Rust eliminates a whole class of _runtime " +#~ "errors_\n" +#~ " via the borrow checker. You get performance like in C and C++, but you " +#~ "don't\n" +#~ " have the memory unsafety issues. In addition, you get a modern language " +#~ "with\n" #~ " constructs like pattern matching and built-in dependency management." #~ msgstr "" -#~ "* Erfahrung mit C oder C++: Rust eliminiert eine ganze Klasse von _Laufzeitfehlern_\n" -#~ " über den Ausleihprüfer. Sie erhalten eine Leistung wie in C und C++, aber Sie tun es nicht\n" -#~ " habe die Speicherunsicherheitsprobleme. Außerdem bekommt man eine moderne Sprache mit\n" +#~ "* Erfahrung mit C oder C++: Rust eliminiert eine ganze Klasse von " +#~ "_Laufzeitfehlern_\n" +#~ " über den Ausleihprüfer. Sie erhalten eine Leistung wie in C und C++, " +#~ "aber Sie tun es nicht\n" +#~ " habe die Speicherunsicherheitsprobleme. Außerdem bekommt man eine " +#~ "moderne Sprache mit\n" #~ " Konstrukte wie Musterabgleich und integriertes Abhängigkeitsmanagement." #, fuzzy #~ msgid "" -#~ "[`Box::leak`]: https://doc.rust-lang.org/std/boxed/struct.Box.html#method.leak\n" +#~ "[`Box::leak`]: https://doc.rust-lang.org/std/boxed/struct.Box.html#method." +#~ "leak\n" #~ "[`std::mem::forget`]: https://doc.rust-lang.org/std/mem/fn.forget.html\n" -#~ "[reference cycle]: https://doc.rust-lang.org/book/ch15-06-reference-cycles.html" +#~ "[reference cycle]: https://doc.rust-lang.org/book/ch15-06-reference-" +#~ "cycles.html" #~ msgstr "" -#~ "[`Box::leak`]: https://doc.rust-lang.org/std/boxed/struct.Box.html#method.leak\n" +#~ "[`Box::leak`]: https://doc.rust-lang.org/std/boxed/struct.Box.html#method." +#~ "leak\n" #~ "[`std::mem::forget`]: https://doc.rust-lang.org/std/mem/fn.forget.html\n" -#~ "[Referenzzyklus]: https://doc.rust-lang.org/book/ch15-06-reference-cycles.html" +#~ "[Referenzzyklus]: https://doc.rust-lang.org/book/ch15-06-reference-cycles." +#~ "html" #, fuzzy #~ msgid "" @@ -20532,53 +22240,73 @@ msgstr "" #~ " `unsafe` allows you to call functions such as `slice::get_unchecked`\n" #~ " which does not do bounds checking." #~ msgstr "" -#~ "* Die Begrenzungsprüfung kann nicht mit einem Compiler-Flag deaktiviert werden. Es kann auch\n" -#~ " nicht direkt mit dem Schlüsselwort „unsafe“ deaktiviert werden. Jedoch,\n" -#~ " `unsafe` erlaubt Ihnen, Funktionen wie `slice::get_unchecked` aufzurufen\n" +#~ "* Die Begrenzungsprüfung kann nicht mit einem Compiler-Flag deaktiviert " +#~ "werden. Es kann auch\n" +#~ " nicht direkt mit dem Schlüsselwort „unsafe“ deaktiviert werden. " +#~ "Jedoch,\n" +#~ " `unsafe` erlaubt Ihnen, Funktionen wie `slice::get_unchecked` " +#~ "aufzurufen\n" #~ " die keine Begrenzungsprüfung durchführt." #, fuzzy #~ msgid "" -#~ "* Zero-cost abstractions, similar to C++, means that you don't have to 'pay'\n" -#~ " for higher-level programming constructs with memory or CPU. For example,\n" +#~ "* Zero-cost abstractions, similar to C++, means that you don't have to " +#~ "'pay'\n" +#~ " for higher-level programming constructs with memory or CPU. For " +#~ "example,\n" #~ " writing a loop using `for` should result in roughly the same low level\n" #~ " instructions as using the `.iter().fold()` construct." #~ msgstr "" -#~ "* Zero-Cost-Abstraktionen, ähnlich wie C++, bedeutet, dass Sie nicht „bezahlen“ müssen\n" -#~ " für übergeordnete Programmierkonstrukte mit Speicher oder CPU. Zum Beispiel,\n" -#~ " Das Schreiben einer Schleife mit `for` sollte ungefähr den gleichen niedrigen Pegel ergeben\n" +#~ "* Zero-Cost-Abstraktionen, ähnlich wie C++, bedeutet, dass Sie nicht " +#~ "„bezahlen“ müssen\n" +#~ " für übergeordnete Programmierkonstrukte mit Speicher oder CPU. Zum " +#~ "Beispiel,\n" +#~ " Das Schreiben einer Schleife mit `for` sollte ungefähr den gleichen " +#~ "niedrigen Pegel ergeben\n" #~ " Anweisungen wie die Verwendung des `.iter().fold()`-Konstrukts." #, fuzzy #~ msgid "" -#~ "* It may be worth mentioning that Rust enums are 'Algebraic Data Types', also\n" -#~ " known as 'sum types', which allow the type system to express things like\n" +#~ "* It may be worth mentioning that Rust enums are 'Algebraic Data Types', " +#~ "also\n" +#~ " known as 'sum types', which allow the type system to express things " +#~ "like\n" #~ " `Option` and `Result`." #~ msgstr "" -#~ "* Es sollte erwähnt werden, dass Rust-Enumerationen auch 'algebraische Datentypen' sind\n" -#~ " bekannt als \"Summentypen\", die es dem Typsystem ermöglichen, Dinge wie auszudrücken\n" +#~ "* Es sollte erwähnt werden, dass Rust-Enumerationen auch 'algebraische " +#~ "Datentypen' sind\n" +#~ " bekannt als \"Summentypen\", die es dem Typsystem ermöglichen, Dinge " +#~ "wie auszudrücken\n" #~ " `Option` und `Ergebnis`." #, fuzzy #~ msgid "" -#~ "* Remind people to read the errors --- many developers have gotten used to\n" -#~ " ignore lengthy compiler output. The Rust compiler is significantly more\n" -#~ " talkative than other compilers. It will often provide you with _actionable_\n" +#~ "* Remind people to read the errors --- many developers have gotten used " +#~ "to\n" +#~ " ignore lengthy compiler output. The Rust compiler is significantly " +#~ "more\n" +#~ " talkative than other compilers. It will often provide you with " +#~ "_actionable_\n" #~ " feedback, ready to copy-paste into your code." #~ msgstr "" -#~ "* Erinnere die Leute daran, die Fehler zu lesen --- viele Entwickler haben sich daran gewöhnt\n" +#~ "* Erinnere die Leute daran, die Fehler zu lesen --- viele Entwickler " +#~ "haben sich daran gewöhnt\n" #~ " Ignoriere lange Compiler-Ausgaben. Der Rust-Compiler ist deutlich mehr\n" #~ " gesprächiger als andere Compiler. Es wird Ihnen oft _umsetzbare_\n" #~ " Feedback, bereit zum Kopieren und Einfügen in Ihren Code." #, fuzzy #~ msgid "" -#~ "* The Rust standard library is small compared to languages like Java, Python,\n" -#~ " and Go. Rust does not come with several things you might consider standard and\n" +#~ "* The Rust standard library is small compared to languages like Java, " +#~ "Python,\n" +#~ " and Go. Rust does not come with several things you might consider " +#~ "standard and\n" #~ " essential:" #~ msgstr "" -#~ "* Die Rust-Standardbibliothek ist klein im Vergleich zu Sprachen wie Java, Python,\n" -#~ " Los geht. Rust kommt nicht mit einigen Dingen, die Sie als Standard betrachten könnten und\n" +#~ "* Die Rust-Standardbibliothek ist klein im Vergleich zu Sprachen wie " +#~ "Java, Python,\n" +#~ " Los geht. Rust kommt nicht mit einigen Dingen, die Sie als Standard " +#~ "betrachten könnten und\n" #~ " essentiell:" #, fuzzy @@ -20593,43 +22321,53 @@ msgstr "" #, fuzzy #~ msgid "" -#~ " The reasoning behind this is that functionality in the standard library cannot\n" +#~ " The reasoning behind this is that functionality in the standard library " +#~ "cannot\n" #~ " go away, so it has to be very stable. For the examples above, the Rust\n" -#~ " community is still working on finding the best solution --- and perhaps there\n" +#~ " community is still working on finding the best solution --- and perhaps " +#~ "there\n" #~ " isn't a single \"best solution\" for some of these things." #~ msgstr "" -#~ " Der Grund dafür ist, dass die Funktionalität in der Standardbibliothek dies nicht kann\n" -#~ " weggehen, also muss es sehr stabil sein. Für die obigen Beispiele ist die Rust\n" -#~ " Die Community arbeitet immer noch daran, die beste Lösung zu finden --- und vielleicht gibt " -#~ "es sie\n" +#~ " Der Grund dafür ist, dass die Funktionalität in der Standardbibliothek " +#~ "dies nicht kann\n" +#~ " weggehen, also muss es sehr stabil sein. Für die obigen Beispiele ist " +#~ "die Rust\n" +#~ " Die Community arbeitet immer noch daran, die beste Lösung zu finden --- " +#~ "und vielleicht gibt es sie\n" #~ " ist für einige dieser Dinge keine einzige \"beste Lösung\"." #, fuzzy #~ msgid "" -#~ " Rust comes with a built-in package manager in the form of Cargo and this makes\n" -#~ " it trivial to download and compile third-party crates. A consequence of this\n" +#~ " Rust comes with a built-in package manager in the form of Cargo and " +#~ "this makes\n" +#~ " it trivial to download and compile third-party crates. A consequence of " +#~ "this\n" #~ " is that the standard library can be smaller." #~ msgstr "" -#~ " Rust kommt mit einem eingebauten Paketmanager in Form von Cargo und macht das\n" -#~ " Es ist trivial, Crates von Drittanbietern herunterzuladen und zu kompilieren. Eine Folge " -#~ "davon\n" +#~ " Rust kommt mit einem eingebauten Paketmanager in Form von Cargo und " +#~ "macht das\n" +#~ " Es ist trivial, Crates von Drittanbietern herunterzuladen und zu " +#~ "kompilieren. Eine Folge davon\n" #~ " ist, dass die Standardbibliothek kleiner sein kann." #, fuzzy #~ msgid "" #~ " Discovering good third-party crates can be a problem. Sites like\n" -#~ " help with this by letting you compare health metrics for\n" +#~ " help with this by letting you compare health metrics " +#~ "for\n" #~ " crates to find a good and trusted one.\n" #~ " \n" #~ "* [rust-analyzer] is a well supported LSP implementation used in major\n" #~ " IDEs and text editors." #~ msgstr "" -#~ " Das Entdecken guter Kisten von Drittanbietern kann ein Problem sein. Seiten wie\n" -#~ " hilft dabei, indem es Ihnen ermöglicht, Gesundheitsmetriken für zu " -#~ "vergleichen\n" +#~ " Das Entdecken guter Kisten von Drittanbietern kann ein Problem sein. " +#~ "Seiten wie\n" +#~ " hilft dabei, indem es Ihnen ermöglicht, " +#~ "Gesundheitsmetriken für zu vergleichen\n" #~ " Kisten, um eine gute und vertrauenswürdige zu finden.\n" #~ " \n" -#~ "* [rust-analyzer] ist eine gut unterstützte LSP-Implementierung, die in Major verwendet wird\n" +#~ "* [rust-analyzer] ist eine gut unterstützte LSP-Implementierung, die in " +#~ "Major verwendet wird\n" #~ " IDEs und Texteditoren." #, fuzzy @@ -20650,80 +22388,98 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "* In the main function, the print statement asks for the debug implementation with the `?` " -#~ "format\n" -#~ " parameter: `{}` gives the default output, `{:?}` gives the debug output. We\n" -#~ " could also have used `{a}` and `{a:?}` without specifying the value after the\n" +#~ "* In the main function, the print statement asks for the debug " +#~ "implementation with the `?` format\n" +#~ " parameter: `{}` gives the default output, `{:?}` gives the debug " +#~ "output. We\n" +#~ " could also have used `{a}` and `{a:?}` without specifying the value " +#~ "after the\n" #~ " format string." #~ msgstr "" -#~ "* In der main-Funktion fragt die print-Anweisung nach der Debug-Implementierung mit dem `?`-" -#~ "Format\n" -#~ " Parameter: `{}` gibt die Standardausgabe, `{:?}` gibt die Debug-Ausgabe. Wir\n" -#~ " hätte auch `{a}` und `{a:?}` verwenden können, ohne den Wert nach dem anzugeben\n" +#~ "* In der main-Funktion fragt die print-Anweisung nach der Debug-" +#~ "Implementierung mit dem `?`-Format\n" +#~ " Parameter: `{}` gibt die Standardausgabe, `{:?}` gibt die Debug-" +#~ "Ausgabe. Wir\n" +#~ " hätte auch `{a}` und `{a:?}` verwenden können, ohne den Wert nach dem " +#~ "anzugeben\n" #~ " Zeichenfolge formatieren." #, fuzzy #~ msgid "" -#~ "* Adding `#`, eg `{a:#?}`, invokes a \"pretty printing\" format, which can be easier to read." +#~ "* Adding `#`, eg `{a:#?}`, invokes a \"pretty printing\" format, which " +#~ "can be easier to read." #~ msgstr "" -#~ "* Das Hinzufügen von `#`, z. B. `{a:#?}`, ruft ein \"hübsches Druckformat\" auf, das einfacher " -#~ "zu lesen sein kann." +#~ "* Das Hinzufügen von `#`, z. B. `{a:#?}`, ruft ein \"hübsches " +#~ "Druckformat\" auf, das einfacher zu lesen sein kann." #, fuzzy #~ msgid "* Like arrays, tuples have a fixed length." #~ msgstr "* Tupel haben wie Arrays eine feste Länge." -#, fuzzy -#~ msgid "* Tuples group together values of different types into a compound type." -#~ msgstr "* Tupel fassen Werte verschiedener Typen zu einem zusammengesetzten Typ zusammen." - #, fuzzy #~ msgid "" -#~ "* Fields of a tuple can be accessed by the period and the index of the value, e.g. `t.0`, `t.1`." +#~ "* Tuples group together values of different types into a compound type." #~ msgstr "" -#~ "* Auf Felder eines Tupels kann über den Punkt und den Index des Werts zugegriffen werden, z. " -#~ "„t.0“, „t.1“." +#~ "* Tupel fassen Werte verschiedener Typen zu einem zusammengesetzten Typ " +#~ "zusammen." #, fuzzy #~ msgid "" -#~ "* We create a slice by borrowing `a` and specifying the starting and ending indexes in brackets." +#~ "* Fields of a tuple can be accessed by the period and the index of the " +#~ "value, e.g. `t.0`, `t.1`." #~ msgstr "" -#~ "* Wir erstellen einen Slice, indem wir `a` ausleihen und den Anfangs- und Endindex in Klammern " -#~ "angeben." +#~ "* Auf Felder eines Tupels kann über den Punkt und den Index des Werts " +#~ "zugegriffen werden, z. „t.0“, „t.1“." #, fuzzy #~ 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.\n" +#~ "* We create a slice by borrowing `a` and specifying the starting and " +#~ "ending indexes in brackets." +#~ msgstr "" +#~ "* Wir erstellen einen Slice, indem wir `a` ausleihen und den Anfangs- und " +#~ "Endindex in Klammern angeben." + +#, fuzzy +#~ 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.\n" #~ " \n" -#~ "* The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are identical." +#~ "* The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` " +#~ "are identical." #~ msgstr "" -#~ "* Wenn der Slice bei Index 0 beginnt, erlaubt uns die Range-Syntax von Rust, den Startindex " -#~ "wegzulassen, was bedeutet, dass `&a[0..a.len()]` und `&a[..a.len()]` identisch sind .\n" +#~ "* Wenn der Slice bei Index 0 beginnt, erlaubt uns die Range-Syntax von " +#~ "Rust, den Startindex wegzulassen, was bedeutet, dass `&a[0..a.len()]` und " +#~ "`&a[..a.len()]` identisch sind .\n" #~ " \n" -#~ "* Dasselbe gilt für den letzten Index, also sind `&a[2..a.len()]` und `&a[2..]` identisch." - -#, fuzzy -#~ msgid "* To easily create a slice of the full array, we can therefore use `&a[..]`." -#~ msgstr "" -#~ "* Um einfach einen Teil des gesamten Arrays zu erstellen, können wir daher `&a[..]` verwenden." +#~ "* Dasselbe gilt für den letzten Index, also sind `&a[2..a.len()]` und " +#~ "`&a[2..]` identisch." #, fuzzy #~ msgid "" -#~ "* `&str` introduces a string slice, which is an immutable reference to UTF-8 encoded string " -#~ "data \n" -#~ " stored in a block of memory. String literals (`”Hello”`), are stored in the program’s binary." +#~ "* To easily create a slice of the full array, we can therefore use " +#~ "`&a[..]`." #~ msgstr "" -#~ "* `&str` führt ein String-Slice ein, das eine unveränderliche Referenz auf UTF-8-codierte " -#~ "String-Daten ist\n" -#~ " in einem Speicherblock gespeichert. String-Literale (`”Hallo”`) werden in der Binärdatei des " -#~ "Programms gespeichert." +#~ "* Um einfach einen Teil des gesamten Arrays zu erstellen, können wir " +#~ "daher `&a[..]` verwenden." + +#, fuzzy +#~ msgid "" +#~ "* `&str` introduces a string slice, which is an immutable reference to " +#~ "UTF-8 encoded string data \n" +#~ " stored in a block of memory. String literals (`”Hello”`), are stored in " +#~ "the program’s binary." +#~ msgstr "" +#~ "* `&str` führt ein String-Slice ein, das eine unveränderliche Referenz " +#~ "auf UTF-8-codierte String-Daten ist\n" +#~ " in einem Speicherblock gespeichert. String-Literale (`”Hallo”`) werden " +#~ "in der Binärdatei des Programms gespeichert." #, fuzzy #~ msgid " (Type annotations added for clarity, but they can be elided.)" #~ msgstr "" -#~ " (Typ-Anmerkungen wurden der Übersichtlichkeit halber hinzugefügt, können aber entfernt " -#~ "werden.)" +#~ " (Typ-Anmerkungen wurden der Übersichtlichkeit halber hinzugefügt, " +#~ "können aber entfernt werden.)" #, fuzzy #~ msgid "" @@ -20755,13 +22511,15 @@ msgstr "" #, fuzzy #~ msgid "1. Execute the above program and look at the compiler error." -#~ msgstr "1. Führen Sie das obige Programm aus und sehen Sie sich den Compiler-Fehler an." +#~ msgstr "" +#~ "1. Führen Sie das obige Programm aus und sehen Sie sich den Compiler-" +#~ "Fehler an." #, fuzzy #~ msgid "2. Update the code above to use `into()` to do the conversion." #~ msgstr "" -#~ "2. Aktualisieren Sie den obigen Code, um `into()` zu verwenden, um die Konvertierung " -#~ "durchzuführen." +#~ "2. Aktualisieren Sie den obigen Code, um `into()` zu verwenden, um die " +#~ "Konvertierung durchzuführen." #, fuzzy #~ msgid "" @@ -20791,34 +22549,40 @@ msgstr "" #, fuzzy #~ 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 "" -#~ "* Erwähnen Sie, dass ein `String` von einem `Vec` unterstützt wird, sodass er eine Kapazität " -#~ "und Länge hat und wachsen kann, wenn er durch Neuzuweisung auf dem Haufen veränderbar ist." +#~ "* Erwähnen Sie, dass ein `String` von einem `Vec` unterstützt wird, " +#~ "sodass er eine Kapazität und Länge hat und wachsen kann, wenn er durch " +#~ "Neuzuweisung auf dem Haufen veränderbar ist." #, fuzzy #~ msgid "" -#~ "* If students ask about it, you can mention that the underlying memory is heap allocated using " -#~ "the [System Allocator] and custom allocators can be implemented using the [Allocator API]" +#~ "* If students ask about it, you can mention that the underlying memory is " +#~ "heap allocated using the [System Allocator] and custom allocators can be " +#~ "implemented using the [Allocator API]" #~ msgstr "" -#~ "* Wenn die Schüler danach fragen, können Sie erwähnen, dass der zugrunde liegende Speicher mit " -#~ "dem [System Allocator] Heap zugewiesen wird und benutzerdefinierte Allokatoren mit der " -#~ "[Allocator API] implementiert werden können." +#~ "* Wenn die Schüler danach fragen, können Sie erwähnen, dass der zugrunde " +#~ "liegende Speicher mit dem [System Allocator] Heap zugewiesen wird und " +#~ "benutzerdefinierte Allokatoren mit der [Allocator API] implementiert " +#~ "werden können." #, fuzzy #~ msgid "" -#~ "[System Allocator]: https://doc.rust-lang.org/std/alloc/struct.System.html\n" +#~ "[System Allocator]: https://doc.rust-lang.org/std/alloc/struct.System." +#~ "html\n" #~ "[Allocator API]: https://doc.rust-lang.org/std/alloc/index.html" #~ msgstr "" #~ "[Systemzuordner]: https://doc.rust-lang.org/std/alloc/struct.System.html\n" #~ "[Allocator-API]: https://doc.rust-lang.org/std/alloc/index.html" #, fuzzy -#~ msgid "* You may be asked about destructors here, the [Drop] trait is the Rust equivalent." +#~ msgid "" +#~ "* You may be asked about destructors here, the [Drop] trait is the Rust " +#~ "equivalent." #~ msgstr "" -#~ "* Möglicherweise werden Sie hier nach Destruktoren gefragt, die Eigenschaft [Drop] ist das Rust-" -#~ "Äquivalent." +#~ "* Möglicherweise werden Sie hier nach Destruktoren gefragt, die " +#~ "Eigenschaft [Drop] ist das Rust-Äquivalent." #, fuzzy #~ msgid "" @@ -20849,15 +22613,17 @@ msgstr "" #~ "}" #~ 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]. In " -#~ "the \"DEBUG\" optimization level, the addresses should change, while the stay the same when " -#~ "changing to the \"RELEASE\" setting:" +#~ "* Demonstrate that the return from `add` is cheap because the compiler " +#~ "can eliminate the copy operation. Change the above code to print stack " +#~ "addresses and run it on the [Playground]. In the \"DEBUG\" optimization " +#~ "level, the addresses should change, while the stay the same when changing " +#~ "to the \"RELEASE\" setting:" #~ msgstr "" -#~ "* Zeigen Sie, dass die Rückgabe von `add` billig ist, weil der Compiler den Kopiervorgang " -#~ "eliminieren kann. Ändern Sie den obigen Code, um Stapeladressen zu drucken, und führen Sie ihn " -#~ "auf dem [Playground] aus. In der Optimierungsstufe „DEBUG“ sollen sich die Adressen ändern, " -#~ "während sie beim Wechsel in die Einstellung „RELEASE“ gleich bleiben:" +#~ "* Zeigen Sie, dass die Rückgabe von `add` billig ist, weil der Compiler " +#~ "den Kopiervorgang eliminieren kann. Ändern Sie den obigen Code, um " +#~ "Stapeladressen zu drucken, und führen Sie ihn auf dem [Playground] aus. " +#~ "In der Optimierungsstufe „DEBUG“ sollen sich die Adressen ändern, während " +#~ "sie beim Wechsel in die Einstellung „RELEASE“ gleich bleiben:" #, fuzzy #~ msgid "[Playground]: https://play.rust-lang.org/" @@ -21021,22 +22787,28 @@ msgstr "" #, fuzzy #~ msgid "* Pattern matching: destructuring enums, structs, and arrays." -#~ msgstr "* Mustervergleich: Destrukturierung von Aufzählungen, Strukturen und Arrays." +#~ msgstr "" +#~ "* Mustervergleich: Destrukturierung von Aufzählungen, Strukturen und " +#~ "Arrays." #, fuzzy #~ msgid "" -#~ "* Control flow constructs: `if`, `if let`, `while`, `while let`, `break`, and\n" +#~ "* Control flow constructs: `if`, `if let`, `while`, `while let`, `break`, " +#~ "and\n" #~ " `continue`." #~ msgstr "" -#~ "* Kontrollflusskonstrukte: `if`, `if let`, `while`, `while let`, `break` und\n" +#~ "* Kontrollflusskonstrukte: `if`, `if let`, `while`, `while let`, `break` " +#~ "und\n" #~ " \"weitermachen\"." #, fuzzy #~ msgid "" -#~ "* The Standard Library: `String`, `Option` and `Result`, `Vec`, `HashMap`, `Rc`\n" +#~ "* The Standard Library: `String`, `Option` and `Result`, `Vec`, " +#~ "`HashMap`, `Rc`\n" #~ " and `Arc`." #~ msgstr "" -#~ "* Die Standardbibliothek: `String`, `Option` und `Result`, `Vec`, `HashMap`, `Rc`\n" +#~ "* Die Standardbibliothek: `String`, `Option` und `Result`, `Vec`, " +#~ "`HashMap`, `Rc`\n" #~ " und \"Bogen\"." #, fuzzy @@ -21065,23 +22837,26 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "Newtypes are a great way to encode additional information about the value in a primitive type, " -#~ "for example:\n" +#~ "Newtypes are a great way to encode additional information about the value " +#~ "in a primitive type, for example:\n" #~ msgstr "" -#~ "Newtypes sind eine großartige Möglichkeit, zusätzliche Informationen über den Wert in einem " -#~ "primitiven Typ zu codieren, zum Beispiel:\n" +#~ "Newtypes sind eine großartige Möglichkeit, zusätzliche Informationen über " +#~ "den Wert in einem primitiven Typ zu codieren, zum Beispiel:\n" #~ msgid "" -#~ " * The number is measured in some units: `Newtons` in the example above.\n" -#~ " * 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)`.\n" +#~ " * The number is measured in some units: `Newtons` in the example " +#~ "above.\n" +#~ " * 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)`.\n" #~ " \n" #~ "
" #~ msgstr "" -#~ " * Die Zahl wird in einigen Einheiten gemessen: „Newton“ im obigen Beispiel.\n" -#~ " * Der Wert hat bei seiner Erstellung einige Validierungen durchlaufen, sodass Sie ihn nicht " -#~ "mehr bei jeder Verwendung erneut validieren müssen: 'PhoneNumber(String)' oder " -#~ "'OddNumber(u32)'.\n" +#~ " * Die Zahl wird in einigen Einheiten gemessen: „Newton“ im obigen " +#~ "Beispiel.\n" +#~ " * Der Wert hat bei seiner Erstellung einige Validierungen durchlaufen, " +#~ "sodass Sie ihn nicht mehr bei jeder Verwendung erneut validieren müssen: " +#~ "'PhoneNumber(String)' oder 'OddNumber(u32)'.\n" #~ " \n" #~ "" @@ -21101,11 +22876,11 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "The `new` function could be written using `Self` as a type, as it is interchangeable with the " -#~ "struct type name" +#~ "The `new` function could be written using `Self` as a type, as it is " +#~ "interchangeable with the struct type name" #~ msgstr "" -#~ "Die „neue“ Funktion könnte unter Verwendung von „Self“ als Typ geschrieben werden, da sie mit " -#~ "dem Namen des Strukturtyps austauschbar ist" +#~ "Die „neue“ Funktion könnte unter Verwendung von „Self“ als Typ " +#~ "geschrieben werden, da sie mit dem Namen des Strukturtyps austauschbar ist" #, fuzzy #~ msgid "" @@ -21128,7 +22903,8 @@ msgstr "" #~ " match event {\n" #~ " WebEvent::PageLoad => println!(\"page loaded\"),\n" #~ " WebEvent::KeyPress(c) => println!(\"pressed '{c}'\"),\n" -#~ " WebEvent::Click { x, y } => println!(\"clicked at x={x}, y={y}\"),\n" +#~ " WebEvent::Click { x, y } => println!(\"clicked at x={x}, " +#~ "y={y}\"),\n" #~ " }\n" #~ "}" #~ msgstr "" @@ -21137,24 +22913,26 @@ msgstr "" #~ " Spielereignis {\n" #~ " WebEvent::PageLoad => println!(\"Seite geladen\"),\n" #~ " WebEvent::KeyPress(c) => println!(\"pressed '{c}'\"),\n" -#~ " WebEvent::Click { x, y } => println!(\"clicked at x={x}, y={y}\"),\n" +#~ " WebEvent::Click { x, y } => println!(\"clicked at x={x}, " +#~ "y={y}\"),\n" #~ " }\n" #~ "}" #, fuzzy #~ msgid "" -#~ "* In the above example, accessing the `char` in `KeyPress`, or `x` and `y` in `Click` only " -#~ "works within a `match` statement.\n" +#~ "* In the above example, accessing the `char` in `KeyPress`, or `x` and " +#~ "`y` in `Click` only works within a `match` statement.\n" #~ "* `match` inspects a hidden discriminant field in the `enum`.\n" -#~ "* `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 "" -#~ "* Im obigen Beispiel funktioniert der Zugriff auf „char“ in „KeyPress“ oder „x“ und „y“ in " -#~ "„Click“ nur innerhalb einer „match“-Anweisung.\n" +#~ "* Im obigen Beispiel funktioniert der Zugriff auf „char“ in „KeyPress“ " +#~ "oder „x“ und „y“ in „Click“ nur innerhalb einer „match“-Anweisung.\n" #~ "* „match“ untersucht ein verstecktes Diskriminanzfeld in „enum“.\n" -#~ "* `WebEvent::Click { ... }` ist nicht genau dasselbe wie `WebEvent::Click(Click)` mit einem Top-" -#~ "Level-`struct Click { ... }`. Die Inline-Version kann beispielsweise keine Traits " -#~ "implementieren." +#~ "* `WebEvent::Click { ... }` ist nicht genau dasselbe wie `WebEvent::" +#~ "Click(Click)` mit einem Top-Level-`struct Click { ... }`. Die Inline-" +#~ "Version kann beispielsweise keine Traits implementieren." #, fuzzy #~ msgid "" @@ -21186,28 +22964,33 @@ msgstr "" #, fuzzy #~ msgid "" -#~ " * Internally Rust is using a field (discriminant) to keep track of the enum variant.\n" -#~ " * `Bar` enum demonstrates that there is a way to control the discriminant value and type. If " -#~ "`repr` is removed, the discriminant type takes 2 bytes, becuase 10001 fits 2 bytes.\n" -#~ " * As a niche optimization an enum discriminant is merged with the pointer so that " -#~ "`Option<&Foo>` is the same size as `&Foo`.\n" +#~ " * Internally Rust is using a field (discriminant) to keep track of the " +#~ "enum variant.\n" +#~ " * `Bar` enum demonstrates that there is a way to control the " +#~ "discriminant value and type. If `repr` is removed, the discriminant type " +#~ "takes 2 bytes, becuase 10001 fits 2 bytes.\n" +#~ " * As a niche optimization an enum discriminant is merged with the " +#~ "pointer so that `Option<&Foo>` is the same size as `&Foo`.\n" #~ " * `Option` is another example of tight packing.\n" -#~ " * For [some types](https://doc.rust-lang.org/std/option/#representation), Rust guarantees that " -#~ "`size_of::()` equals `size_of::>()`.\n" -#~ " * Zero-sized types allow for efficient implementation of `HashSet` using `HashMap` with `()` " -#~ "as the value." +#~ " * For [some types](https://doc.rust-lang.org/std/option/" +#~ "#representation), Rust guarantees that `size_of::()` equals `size_of::" +#~ ">()`.\n" +#~ " * Zero-sized types allow for efficient implementation of `HashSet` using " +#~ "`HashMap` with `()` as the value." #~ msgstr "" -#~ " * Rust verwendet intern ein Feld (Discriminant), um die Enum-Variante zu verfolgen.\n" -#~ " * `Bar` enum demonstriert, dass es eine Möglichkeit gibt, den Diskriminanzwert und -typ zu " -#~ "steuern. Wenn \"repr\" entfernt wird, nimmt der Diskriminantentyp 2 Bytes ein, da 10001 auf 2 " -#~ "Bytes passt.\n" -#~ " * Als Nischenoptimierung wird eine Enum-Diskriminante mit dem Zeiger zusammengeführt, sodass " -#~ "`Option<&Foo>` die gleiche Größe wie `&Foo` hat.\n" +#~ " * Rust verwendet intern ein Feld (Discriminant), um die Enum-Variante zu " +#~ "verfolgen.\n" +#~ " * `Bar` enum demonstriert, dass es eine Möglichkeit gibt, den " +#~ "Diskriminanzwert und -typ zu steuern. Wenn \"repr\" entfernt wird, nimmt " +#~ "der Diskriminantentyp 2 Bytes ein, da 10001 auf 2 Bytes passt.\n" +#~ " * Als Nischenoptimierung wird eine Enum-Diskriminante mit dem Zeiger " +#~ "zusammengeführt, sodass `Option<&Foo>` die gleiche Größe wie `&Foo` hat.\n" #~ " * `Option` ist ein weiteres Beispiel für Tight Packing.\n" -#~ " * Für [einige Typen](https://doc.rust-lang.org/std/option/#representation) garantiert Rust, " -#~ "dass „size_of::()“ gleich „size_of::“ ist >()`.\n" -#~ " * Typen mit der Größe Null ermöglichen eine effiziente Implementierung von `HashSet` unter " -#~ "Verwendung von `HashMap` mit `()` als Wert." +#~ " * Für [einige Typen](https://doc.rust-lang.org/std/option/" +#~ "#representation) garantiert Rust, dass „size_of::()“ gleich „size_of::" +#~ "“ ist >()`.\n" +#~ " * Typen mit der Größe Null ermöglichen eine effiziente Implementierung " +#~ "von `HashSet` unter Verwendung von `HashMap` mit `()` als Wert." #, fuzzy #~ msgid "" @@ -21217,7 +23000,8 @@ msgstr "" #~ " }" #~ msgstr "" #~ "impl Rennen {\n" -#~ " fn new(name: &str) -> Race { // Kein Empfänger, eine statische Methode\n" +#~ " fn new(name: &str) -> Race { // Kein Empfänger, eine statische " +#~ "Methode\n" #~ " Rennen { Name: String::from(Name), Runden: Vec::new() }\n" #~ " }" @@ -21227,7 +23011,8 @@ msgstr "" #~ " if n % 2 == 0 {\n" #~ " Result::Ok(n / 2)\n" #~ " } else {\n" -#~ " Result::Err(format!(\"cannot divide {} into two equal parts\", n))\n" +#~ " Result::Err(format!(\"cannot divide {} into two equal parts\", " +#~ "n))\n" #~ " }\n" #~ "}" #~ msgstr "" @@ -21235,7 +23020,8 @@ msgstr "" #~ " wenn n % 2 == 0 {\n" #~ " Ergebnis::Okay(n / 2)\n" #~ " } anders {\n" -#~ " Ergebnis::Err(format!(\"kann {} nicht in zwei gleiche Teile teilen\", n))\n" +#~ " Ergebnis::Err(format!(\"kann {} nicht in zwei gleiche Teile " +#~ "teilen\", n))\n" #~ " }\n" #~ "}" @@ -21405,16 +23191,20 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "* [`Option` and `Result`](std/option-result.md) types: used for optional values\n" +#~ "* [`Option` and `Result`](std/option-result.md) types: used for optional " +#~ "values\n" #~ " and [error handling](error-handling.md)." #~ msgstr "" -#~ "* Typen von [`Option` und `Result`](std/option-result.md): Wird für optionale Werte verwendet\n" +#~ "* Typen von [`Option` und `Result`](std/option-result.md): Wird für " +#~ "optionale Werte verwendet\n" #~ " und [Fehlerbehandlung](error-handling.md)." #, fuzzy -#~ msgid "* [`String`](std/string.md): the default string type used for owned data." +#~ msgid "" +#~ "* [`String`](std/string.md): the default string type used for owned data." #~ msgstr "" -#~ "* [`String`](std/string.md): der Standard-String-Typ, der für eigene Daten verwendet wird." +#~ "* [`String`](std/string.md): der Standard-String-Typ, der für eigene " +#~ "Daten verwendet wird." #, fuzzy #~ msgid "* [`Vec`](std/vec.md): a standard extensible vector." @@ -21422,41 +23212,50 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "* [`HashMap`](std/hashmap.md): a hash map type with a configurable hashing\n" +#~ "* [`HashMap`](std/hashmap.md): a hash map type with a configurable " +#~ "hashing\n" #~ " algorithm." #~ msgstr "" -#~ "* [`HashMap`](std/hashmap.md): ein Hash-Map-Typ mit konfigurierbarem Hashing\n" +#~ "* [`HashMap`](std/hashmap.md): ein Hash-Map-Typ mit konfigurierbarem " +#~ "Hashing\n" #~ " Algorithmus." #, fuzzy #~ msgid "* [`Box`](std/box.md): an owned pointer for heap-allocated data." -#~ msgstr "* [`Box`](std/box.md): ein eigener Zeiger für Heap-zugewiesene Daten." +#~ msgstr "" +#~ "* [`Box`](std/box.md): ein eigener Zeiger für Heap-zugewiesene Daten." #, fuzzy -#~ msgid "* [`Rc`](std/rc.md): a shared reference-counted pointer for heap-allocated data." +#~ msgid "" +#~ "* [`Rc`](std/rc.md): a shared reference-counted pointer for heap-" +#~ "allocated data." #~ msgstr "" -#~ "* [`Rc`](std/rc.md): ein gemeinsam genutzter referenzgezählter Zeiger für Heap-zugeordnete " -#~ "Daten." +#~ "* [`Rc`](std/rc.md): ein gemeinsam genutzter referenzgezählter Zeiger für " +#~ "Heap-zugeordnete Daten." #, fuzzy #~ msgid "" #~ "[1]: https://doc.rust-lang.org/std/string/struct.String.html\n" -#~ "[2]: https://doc.rust-lang.org/std/string/struct.String.html#deref-methods-str" +#~ "[2]: https://doc.rust-lang.org/std/string/struct.String.html#deref-" +#~ "methods-str" #~ msgstr "" #~ "[1]: https://doc.rust-lang.org/std/string/struct.String.html\n" -#~ "[2]: https://doc.rust-lang.org/std/string/struct.String.html#deref-methods-str" +#~ "[2]: https://doc.rust-lang.org/std/string/struct.String.html#deref-" +#~ "methods-str" #, fuzzy #~ msgid "" -#~ "* `len` returns the size of the `String` in bytes, not its length in characters.\n" +#~ "* `len` returns the size of the `String` in bytes, not its length in " +#~ "characters.\n" #~ "* `chars` returns an iterator over the actual characters.\n" -#~ "* `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 "" -#~ "* `len` gibt die Größe des `String` in Bytes zurück, nicht seine Länge in Zeichen.\n" +#~ "* `len` gibt die Größe des `String` in Bytes zurück, nicht seine Länge in " +#~ "Zeichen.\n" #~ "* `chars` gibt einen Iterator über die eigentlichen Zeichen zurück.\n" -#~ "* `String` implementiert `Deref`, wodurch es transparent Zugriff auf die Methoden " -#~ "von `str` erhält." +#~ "* `String` implementiert `Deref`, wodurch es transparent " +#~ "Zugriff auf die Methoden von `str` erhält." #, fuzzy #~ msgid "" @@ -21469,39 +23268,43 @@ msgstr "" #, fuzzy #~ msgid "" #~ "[1]: https://doc.rust-lang.org/std/boxed/struct.Box.html\n" -#~ "[2]: https://doc.rust-lang.org/std/ops/trait.Deref.html#more-on-deref-coercion" +#~ "[2]: https://doc.rust-lang.org/std/ops/trait.Deref.html#more-on-deref-" +#~ "coercion" #~ msgstr "" #~ "[1]: https://doc.rust-lang.org/std/boxed/struct.Box.html\n" -#~ "[2]: https://doc.rust-lang.org/std/ops/trait.Deref.html#more-on-deref-coercion" +#~ "[2]: https://doc.rust-lang.org/std/ops/trait.Deref.html#more-on-deref-" +#~ "coercion" #, fuzzy #~ msgid "" #~ "* `Box` is like `std::unique_ptr` in C++.\n" -#~ "* In the above example, you can even leave out the `*` in the `println!` statement thanks to " -#~ "`Deref`." +#~ "* In the above example, you can even leave out the `*` in the `println!` " +#~ "statement thanks to `Deref`." #~ msgstr "" #~ "* `Box` ist wie `std::unique_ptr` in C++.\n" -#~ "* Im obigen Beispiel können Sie dank `Deref` sogar das `*` in der `println!`-Anweisung " -#~ "weglassen." +#~ "* Im obigen Beispiel können Sie dank `Deref` sogar das `*` in der " +#~ "`println!`-Anweisung weglassen." #, fuzzy #~ msgid "" -#~ "If the `Box` was not used here and we attempted to embed a `List` directly into the `List`,\n" -#~ "the compiler would not compute a fixed size of the struct in memory, it would look infinite.\n" +#~ "If the `Box` was not used here and we attempted to embed a `List` " +#~ "directly into the `List`,\n" +#~ "the compiler would not compute a fixed size of the struct in memory, it " +#~ "would look infinite.\n" #~ msgstr "" -#~ "`Box` löst dieses Problem, da es die gleiche Größe wie ein normaler Zeiger hat und nur auf den " -#~ "nächsten zeigt\n" +#~ "`Box` löst dieses Problem, da es die gleiche Größe wie ein normaler " +#~ "Zeiger hat und nur auf den nächsten zeigt\n" #~ "Element der `Liste` im Heap.\n" #~ msgid "" -#~ "`Box` solves this problem as it has the same size as a regular pointer and just points at the " -#~ "next\n" +#~ "`Box` solves this problem as it has the same size as a regular pointer " +#~ "and just points at the next\n" #~ "element of the `List` in the heap. \n" #~ msgstr "" -#~ "Wenn die `Box` hier nicht verwendet wurde und wir versucht haben, eine `List` direkt in die " -#~ "`List` einzubetten,\n" -#~ "Der Compiler würde keine feste Größe der Struktur im Speicher berechnen, es würde unendlich " -#~ "aussehen.\n" +#~ "Wenn die `Box` hier nicht verwendet wurde und wir versucht haben, eine " +#~ "`List` direkt in die `List` einzubetten,\n" +#~ "Der Compiler würde keine feste Größe der Struktur im Speicher berechnen, " +#~ "es würde unendlich aussehen.\n" #, fuzzy #~ msgid "" @@ -21516,16 +23319,16 @@ msgstr "" #, fuzzy #~ msgid "" #~ "* Like C++'s `std::shared_ptr`.\n" -#~ "* `clone` is cheap: creates a pointer to the same allocation and increases the reference " -#~ "count.\n" -#~ "* `make_mut` actually clones the inner value if necessary (\"clone-on-write\") and returns a " -#~ "mutable reference." +#~ "* `clone` is cheap: creates a pointer to the same allocation and " +#~ "increases the reference count.\n" +#~ "* `make_mut` actually clones the inner value if necessary (\"clone-on-" +#~ "write\") and returns a mutable reference." #~ msgstr "" #~ "* Wie `std::shared_ptr` von C++.\n" -#~ "* `clone` ist billig: erstellt einen Zeiger auf die gleiche Zuweisung und erhöht die " -#~ "Referenzanzahl.\n" -#~ "* `make_mut` klont bei Bedarf tatsächlich den inneren Wert (\"clone-on-write\") und gibt eine " -#~ "veränderliche Referenz zurück." +#~ "* `clone` ist billig: erstellt einen Zeiger auf die gleiche Zuweisung und " +#~ "erhöht die Referenzanzahl.\n" +#~ "* `make_mut` klont bei Bedarf tatsächlich den inneren Wert (\"clone-on-" +#~ "write\") und gibt eine veränderliche Referenz zurück." #, fuzzy #~ msgid "" @@ -21539,24 +23342,28 @@ msgstr "" #, fuzzy #~ msgid "* Ignore all spaces. Reject number with less than two digits." -#~ msgstr "* Ignoriere alle Leerzeichen. Ablehnungsnummer mit weniger als zwei Ziffern." +#~ msgstr "" +#~ "* Ignoriere alle Leerzeichen. Ablehnungsnummer mit weniger als zwei " +#~ "Ziffern." #, fuzzy #~ msgid "" -#~ "* Moving from right to left, double every second digit: for the number `1234`,\n" +#~ "* Moving from right to left, double every second digit: for the number " +#~ "`1234`,\n" #~ " we double `3` and `1`." #~ msgstr "" -#~ "* Bewegen Sie sich von rechts nach links, verdoppeln Sie jede zweite Ziffer: für die Zahl " -#~ "\"1234\",\n" +#~ "* Bewegen Sie sich von rechts nach links, verdoppeln Sie jede zweite " +#~ "Ziffer: für die Zahl \"1234\",\n" #~ " wir verdoppeln `3` und `1`." #, fuzzy #~ msgid "" -#~ "* After doubling a digit, sum the digits. So doubling `7` becomes `14` which\n" +#~ "* After doubling a digit, sum the digits. So doubling `7` becomes `14` " +#~ "which\n" #~ " becomes `5`." #~ msgstr "" -#~ "* Nachdem Sie eine Ziffer verdoppelt haben, addieren Sie die Ziffern. Das Verdoppeln von '7' " -#~ "wird also zu '14', was\n" +#~ "* Nachdem Sie eine Ziffer verdoppelt haben, addieren Sie die Ziffern. Das " +#~ "Verdoppeln von '7' wird also zu '14', was\n" #~ " wird \"5\"." #, fuzzy @@ -21589,18 +23396,22 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "* Traits: deriving traits, default methods, and important standard library\n" +#~ "* Traits: deriving traits, default methods, and important standard " +#~ "library\n" #~ " traits." #~ msgstr "" -#~ "* Merkmale: Ableitung von Merkmalen, Standardmethoden und wichtige Standardbibliothek\n" +#~ "* Merkmale: Ableitung von Merkmalen, Standardmethoden und wichtige " +#~ "Standardbibliothek\n" #~ " Züge." #, fuzzy #~ msgid "" -#~ "* Generics: generic data types, generic methods, monomorphization, and trait\n" +#~ "* Generics: generic data types, generic methods, monomorphization, and " +#~ "trait\n" #~ " objects." #~ msgstr "" -#~ "* Generics: generische Datentypen, generische Methoden, Monomorphisierung und Eigenschaften\n" +#~ "* Generics: generische Datentypen, generische Methoden, Monomorphisierung " +#~ "und Eigenschaften\n" #~ " Objekte." #, fuzzy @@ -21609,14 +23420,17 @@ msgstr "" #, fuzzy #~ msgid "* Testing: unit tests, documentation tests, and integration tests." -#~ msgstr "* Testen: Einheitentests, Dokumentationstests und Integrationstests." +#~ msgstr "" +#~ "* Testen: Einheitentests, Dokumentationstests und Integrationstests." #, fuzzy #~ msgid "" -#~ "* Unsafe Rust: raw pointers, static variables, unsafe functions, and extern\n" +#~ "* Unsafe Rust: raw pointers, static variables, unsafe functions, and " +#~ "extern\n" #~ " functions." #~ msgstr "" -#~ "* Unsicherer Rost: rohe Zeiger, statische Variablen, unsichere Funktionen und extern\n" +#~ "* Unsicherer Rost: rohe Zeiger, statische Variablen, unsichere Funktionen " +#~ "und extern\n" #~ " Funktionen." #, fuzzy @@ -21645,27 +23459,30 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "* `IntoIterator` is the trait that makes for loops work. It is implemented by collection types " -#~ "such as\n" -#~ " `Vec` and references to them such as `&Vec` and `&[T]`. Ranges also implement it.\n" -#~ "* The `Iterator` trait implements many common functional programming operations over " -#~ "collections \n" -#~ " (e.g. `map`, `filter`, `reduce`, etc). This is the trait where you can find all the " -#~ "documentation\n" -#~ " about them. In Rust these functions should produce the code as efficient as equivalent " -#~ "imperative\n" +#~ "* `IntoIterator` is the trait that makes for loops work. It is " +#~ "implemented by collection types such as\n" +#~ " `Vec` and references to them such as `&Vec` and `&[T]`. Ranges " +#~ "also implement it.\n" +#~ "* The `Iterator` trait implements many common functional programming " +#~ "operations over collections \n" +#~ " (e.g. `map`, `filter`, `reduce`, etc). This is the trait where you can " +#~ "find all the documentation\n" +#~ " about them. In Rust these functions should produce the code as " +#~ "efficient as equivalent imperative\n" #~ " implementations.\n" #~ " \n" #~ "" #~ msgstr "" -#~ "* `IntoIterator` ist die Eigenschaft, die dafür sorgt, dass for-Schleifen funktionieren. Es " -#~ "wird durch Sammlungstypen wie implementiert\n" -#~ " `Vec` und Verweise darauf wie `&Vec` und `&[T]`. Ranges implementieren es auch.\n" -#~ "* Die Eigenschaft „Iterator“ implementiert viele gängige funktionale Programmieroperationen " -#~ "über Sammlungen\n" -#~ " (z. B. `map`, `filter`, `reduce`, etc). Dies ist die Eigenschaft, in der Sie die gesamte " -#~ "Dokumentation finden können\n" -#~ " über sie. In Rust sollten diese Funktionen den Code so effizient wie gleichwertig erzeugen\n" +#~ "* `IntoIterator` ist die Eigenschaft, die dafür sorgt, dass for-Schleifen " +#~ "funktionieren. Es wird durch Sammlungstypen wie implementiert\n" +#~ " `Vec` und Verweise darauf wie `&Vec` und `&[T]`. Ranges " +#~ "implementieren es auch.\n" +#~ "* Die Eigenschaft „Iterator“ implementiert viele gängige funktionale " +#~ "Programmieroperationen über Sammlungen\n" +#~ " (z. B. `map`, `filter`, `reduce`, etc). Dies ist die Eigenschaft, in " +#~ "der Sie die gesamte Dokumentation finden können\n" +#~ " über sie. In Rust sollten diese Funktionen den Code so effizient wie " +#~ "gleichwertig erzeugen\n" #~ " Implementierungen.\n" #~ " \n" #~ "" @@ -21904,7 +23721,8 @@ msgstr "" #~ " 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" #~ "}" @@ -21913,8 +23731,8 @@ msgstr "" #~ " fn fmt(&self, f: &mut Formatter) -> fmt::Result {\n" #~ " mit sich selbst übereinstimmen {\n" #~ " Self::IoError(e) => write!(f, \"IO error: {}\", e),\n" -#~ " Self::EmptyUsername(filename) => write!(f, \"Keinen Benutzernamen gefunden in {}\", " -#~ "filename),\n" +#~ " Self::EmptyUsername(filename) => write!(f, \"Keinen " +#~ "Benutzernamen gefunden in {}\", filename),\n" #~ " }\n" #~ " }\n" #~ "}" @@ -21997,7 +23815,8 @@ msgstr "" #~ msgstr "" #~ "impl DirectoryIterator {\n" #~ " fn new(path: &str) -> Ergebnis {\n" -#~ " // Opendir aufrufen und einen Ok-Wert zurückgeben, wenn das funktioniert hat,\n" +#~ " // Opendir aufrufen und einen Ok-Wert zurückgeben, wenn das " +#~ "funktioniert hat,\n" #~ " // andernfalls Err mit einer Nachricht zurückgeben.\n" #~ " nicht implementiert!()\n" #~ " }\n" @@ -22025,45 +23844,54 @@ msgstr "" #, fuzzy #~ msgid "* Concurrency: threads, channels, shared state, `Send` and `Sync`." -#~ msgstr "* Gleichzeitigkeit: Threads, Kanäle, gemeinsamer Status, „Senden“ und „Synchronisieren“." +#~ msgstr "" +#~ "* Gleichzeitigkeit: Threads, Kanäle, gemeinsamer Status, „Senden“ und " +#~ "„Synchronisieren“." #, fuzzy #~ msgid "" #~ "* Android: building binaries and libraries, using AIDL, logging, and\n" #~ " interoperability with C, C++, and Java." #~ msgstr "" -#~ "* Android: Erstellung von Binärdateien und Bibliotheken, Verwendung von AIDL, Protokollierung " -#~ "und\n" +#~ "* Android: Erstellung von Binärdateien und Bibliotheken, Verwendung von " +#~ "AIDL, Protokollierung und\n" #~ " Interoperabilität mit C, C++ und Java." #, fuzzy #~ msgid "" -#~ "* Notice that the thread is stopped before it reaches 10 — the main thread is\n" +#~ "* Notice that the thread is stopped before it reaches 10 — the main " +#~ "thread is\n" #~ " not waiting." #~ msgstr "" -#~ "* Beachten Sie, dass der Thread gestoppt wird, bevor er 10 erreicht – der Haupt-Thread ist es\n" +#~ "* Beachten Sie, dass der Thread gestoppt wird, bevor er 10 erreicht – der " +#~ "Haupt-Thread ist es\n" #~ " nicht warten." #, fuzzy #~ msgid "" -#~ "* Use `let handle = thread::spawn(...)` and later `handle.join()` to wait for\n" +#~ "* Use `let handle = thread::spawn(...)` and later `handle.join()` to wait " +#~ "for\n" #~ " the thread to finish." #~ msgstr "" -#~ "* Verwenden Sie `let handle = thread::spawn(...)` und später `handle.join()`, um darauf zu " -#~ "warten\n" +#~ "* Verwenden Sie `let handle = thread::spawn(...)` und später `handle." +#~ "join()`, um darauf zu warten\n" #~ " den Thread zu beenden." #, fuzzy -#~ msgid "* Trigger a panic in the thread, notice how this doesn't affect `main`." -#~ msgstr "* Lösen Sie eine Panik im Thread aus, beachten Sie, dass dies `main` nicht betrifft." +#~ msgid "" +#~ "* Trigger a panic in the thread, notice how this doesn't affect `main`." +#~ msgstr "" +#~ "* Lösen Sie eine Panik im Thread aus, beachten Sie, dass dies `main` " +#~ "nicht betrifft." #, fuzzy #~ msgid "" -#~ "* Use the `Result` return value from `handle.join()` to get access to the panic\n" +#~ "* Use the `Result` return value from `handle.join()` to get access to the " +#~ "panic\n" #~ " payload. This is a good time to talk about [`Any`]." #~ msgstr "" -#~ "* Verwenden Sie den `Result`-Rückgabewert von `handle.join()`, um Zugriff auf die Panik zu " -#~ "erhalten\n" +#~ "* Verwenden Sie den `Result`-Rückgabewert von `handle.join()`, um Zugriff " +#~ "auf die Panik zu erhalten\n" #~ " Nutzlast. Dies ist ein guter Zeitpunkt, um über [`Any`] zu sprechen." #, fuzzy @@ -22089,20 +23917,24 @@ msgstr "" #, fuzzy #~ msgid "" #~ "[1]: https://doc.rust-lang.org/std/sync/struct.Mutex.html\n" -#~ "[2]: https://doc.rust-lang.org/std/sync/struct.Mutex.html#impl-Sync-for-Mutex%3CT%3E\n" +#~ "[2]: https://doc.rust-lang.org/std/sync/struct.Mutex.html#impl-Sync-for-" +#~ "Mutex%3CT%3E\n" #~ "[3]: https://doc.rust-lang.org/std/sync/struct.Arc.html" #~ msgstr "" #~ "[1]: https://doc.rust-lang.org/std/sync/struct.Mutex.html\n" -#~ "[2]: https://doc.rust-lang.org/std/sync/struct.Mutex.html#impl-Sync-for-Mutex%3CT%3E\n" +#~ "[2]: https://doc.rust-lang.org/std/sync/struct.Mutex.html#impl-Sync-for-" +#~ "Mutex%3CT%3E\n" #~ "[3]: https://doc.rust-lang.org/std/sync/struct.Arc.html" #, fuzzy #~ msgid "" -#~ "[`PoisonError`]: https://doc.rust-lang.org/std/sync/struct.PoisonError.html \n" +#~ "[`PoisonError`]: https://doc.rust-lang.org/std/sync/struct.PoisonError." +#~ "html \n" #~ " \n" #~ "" #~ msgstr "" -#~ "[`PoisonError`]: https://doc.rust-lang.org/std/sync/struct.PoisonError.html\n" +#~ "[`PoisonError`]: https://doc.rust-lang.org/std/sync/struct.PoisonError." +#~ "html\n" #~ " \n" #~ "" @@ -22194,9 +24026,11 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "[crates]: https://cs.android.com/android/platform/superproject/+/master:external/rust/crates/" +#~ "[crates]: https://cs.android.com/android/platform/superproject/+/master:" +#~ "external/rust/crates/" #~ msgstr "" -#~ "[Kisten]: https://cs.android.com/android/platform/superproject/+/master:external/rust/crates/" +#~ "[Kisten]: https://cs.android.com/android/platform/superproject/+/master:" +#~ "external/rust/crates/" #, fuzzy #~ msgid "impl binder::Interface for BirthdayService {}" @@ -22205,12 +24039,14 @@ msgstr "" #, fuzzy #~ msgid "" #~ "/// Connect to the BirthdayService.\n" -#~ "pub fn connect() -> Result, binder::StatusCode> {\n" +#~ "pub fn connect() -> Result, binder::" +#~ "StatusCode> {\n" #~ " binder::get_interface(SERVICE_IDENTIFIER)\n" #~ "}" #~ msgstr "" #~ "/// Mit dem Geburtstagsdienst verbinden.\n" -#~ "pub fn connect() -> Ergebnis, binder::StatusCode> {\n" +#~ "pub fn connect() -> Ergebnis, " +#~ "binder::StatusCode> {\n" #~ " binder::get_interface(SERVICE_IDENTIFIER)\n" #~ "}" @@ -22224,7 +24060,8 @@ msgstr "" #, fuzzy #~ msgid "* Call your AIDL service with a client written in Rust." -#~ msgstr "* Rufen Sie Ihren AIDL-Service mit einem in Rust geschriebenen Client an." +#~ msgstr "" +#~ "* Rufen Sie Ihren AIDL-Service mit einem in Rust geschriebenen Client an." #, fuzzy #~ msgid ""