msgid ""
msgstr ""
"Project-Id-Version: Comprehensive Rust 🦀\n"
"POT-Creation-Date: 2023-09-19\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/SUMMARY.md:4 src/index.md:1
msgid "Welcome to Comprehensive Rust 🦀"
msgstr "Willkommen bei Comprehensive Rust 🦀"
#: src/SUMMARY.md:5 src/running-the-course.md:1
msgid "Running the Course"
msgstr "Ablauf des Kurses"
#: src/SUMMARY.md:6 src/running-the-course/course-structure.md:1
msgid "Course Structure"
msgstr "Kursstruktur"
#: src/SUMMARY.md:7 src/running-the-course/keyboard-shortcuts.md:1
msgid "Keyboard Shortcuts"
msgstr "Tastaturkürzel"
#: src/SUMMARY.md:8 src/running-the-course/translations.md:1
msgid "Translations"
msgstr "Übersetzungen"
#: src/SUMMARY.md:9 src/cargo.md:1
msgid "Using Cargo"
msgstr "Cargo verwenden"
#: src/SUMMARY.md:10
msgid "Rust Ecosystem"
msgstr "Rust Ökosystem"
#: src/SUMMARY.md:11
msgid "Code Samples"
msgstr "Codebeispiele"
#: src/SUMMARY.md:12
msgid "Running Cargo Locally"
msgstr "Cargo lokal ausführen"
#: src/SUMMARY.md:15
msgid "Day 1: Morning"
msgstr "Tag 1: Morgens"
#: src/SUMMARY.md:19 src/SUMMARY.md:79 src/SUMMARY.md:134 src/SUMMARY.md:192
#: src/SUMMARY.md:218 src/SUMMARY.md:268
msgid "Welcome"
msgstr "Willkommen"
#: src/SUMMARY.md:20 src/welcome-day-1/what-is-rust.md:1
msgid "What is Rust?"
msgstr "Was ist Rust?"
#: src/SUMMARY.md:21 src/hello-world.md:1
msgid "Hello World!"
msgstr "Hallo Welt!"
#: src/SUMMARY.md:22 src/hello-world/small-example.md:1
msgid "Small Example"
msgstr "Ein kleines Beispiel"
#: src/SUMMARY.md:23 src/why-rust.md:1
msgid "Why Rust?"
msgstr "Warum Rust?"
#: src/SUMMARY.md:24 src/why-rust/compile-time.md:1
msgid "Compile Time Guarantees"
msgstr "Kompilierzeitgarantien"
#: src/SUMMARY.md:25 src/why-rust/runtime.md:1
msgid "Runtime Guarantees"
msgstr "Laufzeitgarantien"
#: src/SUMMARY.md:26 src/why-rust/modern.md:1
msgid "Modern Features"
msgstr "Moderne Merkmale"
#: src/SUMMARY.md:27 src/basic-syntax.md:1
msgid "Basic Syntax"
msgstr "Grundlegende Syntax"
#: src/SUMMARY.md:28 src/basic-syntax/scalar-types.md:1
msgid "Scalar Types"
msgstr "Skalare Typen"
#: src/SUMMARY.md:29 src/basic-syntax/compound-types.md:1
msgid "Compound Types"
msgstr "Verbundtypen"
#: src/SUMMARY.md:30 src/basic-syntax/references.md:1
msgid "References"
msgstr "Referenzen"
#: src/SUMMARY.md:31 src/basic-syntax/references-dangling.md:1
msgid "Dangling References"
msgstr "Hängende Referenzen"
#: src/SUMMARY.md:32 src/basic-syntax/slices.md:1
msgid "Slices"
msgstr "Anteilstypen"
#: src/SUMMARY.md:33
msgid "String vs str"
msgstr "String vs. str"
#: src/SUMMARY.md:34 src/basic-syntax/functions.md:1
msgid "Functions"
msgstr "Funktionen"
#: src/SUMMARY.md:35 src/basic-syntax/rustdoc.md:1
msgid "Rustdoc"
msgstr "Rustdoc"
#: src/SUMMARY.md:36 src/SUMMARY.md:102 src/basic-syntax/methods.md:1
#: src/methods.md:1
msgid "Methods"
msgstr "Methoden"
#: src/SUMMARY.md:37
msgid "Overloading"
msgstr "Überladen"
#: src/SUMMARY.md:38 src/SUMMARY.md:71 src/SUMMARY.md:105 src/SUMMARY.md:125
#: src/SUMMARY.md:154 src/SUMMARY.md:184 src/SUMMARY.md:211 src/SUMMARY.md:232
#: src/SUMMARY.md:260 src/SUMMARY.md:282 src/SUMMARY.md:303
#: 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/concurrency/afternoon.md:1
msgid "Exercises"
msgstr "Übungen"
#: src/SUMMARY.md:39 src/exercises/day-1/implicit-conversions.md:1
msgid "Implicit Conversions"
msgstr "Implizite Konvertierungen"
#: src/SUMMARY.md:40
msgid "Arrays and for Loops"
msgstr "Arrays und for-Schleifen"
#: src/SUMMARY.md:42
msgid "Day 1: Afternoon"
msgstr "Tag 1: Nachmittags"
#: src/SUMMARY.md:44 src/SUMMARY.md:295 src/control-flow.md:1
msgid "Control Flow"
msgstr "Kontrollfluss"
#: src/SUMMARY.md:45 src/control-flow/blocks.md:1
msgid "Blocks"
msgstr "Blöcke"
#: src/SUMMARY.md:46
msgid "if expressions"
msgstr "if-Ausdrücke"
#: src/SUMMARY.md:47
msgid "for expressions"
msgstr "for-Ausdrücke"
#: src/SUMMARY.md:48
msgid "while expressions"
msgstr "while-Ausdrücke"
#: src/SUMMARY.md:49
msgid "break & continue"
msgstr "break & continue"
#: src/SUMMARY.md:50
msgid "loop expressions"
msgstr "loop-Ausdrücke"
#: src/SUMMARY.md:52 src/basic-syntax/variables.md:1
msgid "Variables"
msgstr "Variablen"
#: src/SUMMARY.md:53 src/basic-syntax/type-inference.md:1
msgid "Type Inference"
msgstr "Typinferenz"
#: src/SUMMARY.md:54
msgid "static & const"
msgstr "static & const"
#: src/SUMMARY.md:55 src/basic-syntax/scopes-shadowing.md:1
msgid "Scopes and Shadowing"
msgstr "Gültigkeitsbereiche und Verschattungen"
#: src/SUMMARY.md:56 src/enums.md:1
msgid "Enums"
msgstr "Aufzählungstypen"
#: src/SUMMARY.md:57 src/enums/variant-payloads.md:1
msgid "Variant Payloads"
msgstr "Varianteninhalte"
#: src/SUMMARY.md:58 src/enums/sizes.md:1
msgid "Enum Sizes"
msgstr "Größen von Aufzählungstypen"
#: src/SUMMARY.md:60 src/control-flow/novel.md:1
#, fuzzy
msgid "Novel Control Flow"
msgstr "Kontrollfluss"
#: src/SUMMARY.md:61
msgid "if let expressions"
msgstr "if let-Ausdrücke"
#: src/SUMMARY.md:62
msgid "while let expressions"
msgstr "while let-Ausdrücke"
#: src/SUMMARY.md:63
msgid "match expressions"
msgstr "match-Ausdrücke"
#: src/SUMMARY.md:65 src/pattern-matching.md:1
msgid "Pattern Matching"
msgstr "Musterabgleich"
#: src/SUMMARY.md:66 src/pattern-matching/destructuring-enums.md:1
msgid "Destructuring Enums"
msgstr "Aufzählungstypen destrukturieren"
#: src/SUMMARY.md:67 src/pattern-matching/destructuring-structs.md:1
msgid "Destructuring Structs"
msgstr "Strukturen destrukturieren"
#: src/SUMMARY.md:68 src/pattern-matching/destructuring-arrays.md:1
msgid "Destructuring Arrays"
msgstr "Arrays destrukturieren"
#: src/SUMMARY.md:69 src/pattern-matching/match-guards.md:1
msgid "Match Guards"
msgstr "Abgleichsbedingungen"
#: src/SUMMARY.md:72 src/exercises/day-1/luhn.md:1
#: src/exercises/day-1/solutions-afternoon.md:3
msgid "Luhn Algorithm"
msgstr "Luhn-Algorithmus"
#: src/SUMMARY.md:73
#, fuzzy
msgid "Pattern Matching (TBD)"
msgstr "Musterabgleich"
#: src/SUMMARY.md:75
msgid "Day 2: Morning"
msgstr "Tag 2: Morgens"
#: src/SUMMARY.md:81 src/memory-management.md:1
msgid "Memory Management"
msgstr "Speicherverwaltung"
#: src/SUMMARY.md:82
msgid "Stack vs Heap"
msgstr "Stapelspeicher vs. Haldenspeicher"
#: src/SUMMARY.md:83
msgid "Stack Memory"
msgstr "Stapelspeicher"
#: src/SUMMARY.md:84 src/memory-management/manual.md:1
msgid "Manual Memory Management"
msgstr "Manuelle Speicherverwaltung"
#: src/SUMMARY.md:85 src/memory-management/scope-based.md:1
msgid "Scope-Based Memory Management"
msgstr "Gültigkeitsbereichbasierte Speicherverwaltung"
#: src/SUMMARY.md:86
msgid "Garbage Collection"
msgstr "Automatische Speicherbereinigung"
#: src/SUMMARY.md:87
msgid "Rust Memory Management"
msgstr "Rust Speicherverwaltung"
#: src/SUMMARY.md:88 src/ownership.md:1
msgid "Ownership"
msgstr "Eigentümerschaft"
#: src/SUMMARY.md:89 src/ownership/move-semantics.md:1
msgid "Move Semantics"
msgstr "Semantik des Verschiebens"
#: src/SUMMARY.md:90 src/ownership/moved-strings-rust.md:1
msgid "Moved Strings in Rust"
msgstr "Verschieben von String in Rust"
#: src/SUMMARY.md:91
msgid "Double Frees in Modern C++"
msgstr "Doppel-Freigabe-Fehler in modernem C++"
#: src/SUMMARY.md:92 src/ownership/moves-function-calls.md:1
msgid "Moves in Function Calls"
msgstr "Verschieben in Funktionsaufrufen"
#: src/SUMMARY.md:93 src/ownership/copy-clone.md:1
msgid "Copying and Cloning"
msgstr "Kopieren und Klonen"
#: src/SUMMARY.md:94 src/ownership/borrowing.md:1
msgid "Borrowing"
msgstr "Ausleihen"
#: src/SUMMARY.md:95 src/ownership/shared-unique-borrows.md:1
msgid "Shared and Unique Borrows"
msgstr "Geteiltes und einmaliges Ausleihen"
#: src/SUMMARY.md:96 src/ownership/lifetimes.md:1
msgid "Lifetimes"
msgstr "Lebensdauern"
#: src/SUMMARY.md:97 src/ownership/lifetimes-function-calls.md:1
msgid "Lifetimes in Function Calls"
msgstr "Lebensdauern in Funktionsaufrufen"
#: src/SUMMARY.md:98 src/ownership/lifetimes-data-structures.md:1
msgid "Lifetimes in Data Structures"
msgstr "Lebensdauern in Datenstrukturen"
#: src/SUMMARY.md:99 src/structs.md:1
msgid "Structs"
msgstr "Strukturen"
#: src/SUMMARY.md:100 src/structs/tuple-structs.md:1
msgid "Tuple Structs"
msgstr "Tupelstrukturen"
#: src/SUMMARY.md:101 src/structs/field-shorthand.md:1
msgid "Field Shorthand Syntax"
msgstr "Feld Abkürzungs Syntax"
#: src/SUMMARY.md:103 src/methods/receiver.md:1
msgid "Method Receiver"
msgstr "Methodenempfänger"
#: src/SUMMARY.md:104 src/SUMMARY.md:166 src/SUMMARY.md:281
#: src/methods/example.md:1 src/concurrency/shared_state/example.md:1
msgid "Example"
msgstr "Beispiel"
#: src/SUMMARY.md:106 src/exercises/day-2/book-library.md:1
#, fuzzy
msgid "Storing Books"
msgstr "`&str`"
#: src/SUMMARY.md:107 src/exercises/day-2/health-statistics.md:1
msgid "Health Statistics"
msgstr "Gesundheitsstatistiken"
#: src/SUMMARY.md:109
msgid "Day 2: Afternoon"
msgstr "Tag 2: Nachmittags"
#: src/SUMMARY.md:111 src/std.md:1
msgid "Standard Library"
msgstr "Standardbibliothek"
#: src/SUMMARY.md:112
msgid "Option and Result"
msgstr "Option und Result"
#: src/SUMMARY.md:113 src/std/string.md:1
msgid "String"
msgstr "String"
#: src/SUMMARY.md:114
msgid "Vec"
msgstr "Vec"
#: src/SUMMARY.md:115
msgid "HashMap"
msgstr "HashMap"
#: src/SUMMARY.md:116
msgid "Box"
msgstr "Box"
#: src/SUMMARY.md:117
msgid "Recursive Data Types"
msgstr "Rekursive Datentypen"
#: src/SUMMARY.md:118 src/std/box-niche.md:1
msgid "Niche Optimization"
msgstr "Nischenoptimierung"
#: src/SUMMARY.md:119
msgid "Rc"
msgstr "Rc"
#: src/SUMMARY.md:120
msgid "Cell/RefCell"
msgstr ""
#: src/SUMMARY.md:121 src/modules.md:1
msgid "Modules"
msgstr "Module"
#: src/SUMMARY.md:122 src/modules/visibility.md:1
msgid "Visibility"
msgstr "Sichtbarkeit"
#: src/SUMMARY.md:123 src/modules/paths.md:1
msgid "Paths"
msgstr "Pfade"
#: src/SUMMARY.md:124 src/modules/filesystem.md:1
msgid "Filesystem Hierarchy"
msgstr "Dateisystemhierarchie"
#: src/SUMMARY.md:126 src/exercises/day-2/iterators-and-ownership.md:1
msgid "Iterators and Ownership"
msgstr "Iteratoren und Eigentümerschaft"
#: src/SUMMARY.md:127 src/exercises/day-2/strings-iterators.md:1
#: src/exercises/day-2/solutions-afternoon.md:3
msgid "Strings and Iterators"
msgstr "Strings und Iteratoren"
#: src/SUMMARY.md:130
msgid "Day 3: Morning"
msgstr "Tag 3: Morgens"
#: src/SUMMARY.md:135 src/generics.md:1
msgid "Generics"
msgstr "Generische Datentypen und Methoden"
#: src/SUMMARY.md:136 src/generics/data-types.md:1
msgid "Generic Data Types"
msgstr "Generische Datentypen"
#: src/SUMMARY.md:137 src/generics/methods.md:1
msgid "Generic Methods"
msgstr "Generische Methoden"
#: src/SUMMARY.md:138 src/generics/monomorphization.md:1
msgid "Monomorphization"
msgstr "Monomorphisierung"
#: src/SUMMARY.md:139 src/traits.md:1
msgid "Traits"
msgstr "Merkmale"
#: src/SUMMARY.md:140 src/traits/trait-objects.md:1
msgid "Trait Objects"
msgstr "Merkmalsobjekte"
#: src/SUMMARY.md:141 src/traits/deriving-traits.md:1
msgid "Deriving Traits"
msgstr "Ableitung von Merkmalen"
#: src/SUMMARY.md:142 src/traits/default-methods.md:1
msgid "Default Methods"
msgstr "Standardmethoden"
#: src/SUMMARY.md:143 src/traits/trait-bounds.md:1
msgid "Trait Bounds"
msgstr "Merkmalsgrenzen"
#: src/SUMMARY.md:144
msgid "impl Trait"
msgstr "impl Merkmal"
#: src/SUMMARY.md:145 src/traits/important-traits.md:1
msgid "Important Traits"
msgstr "Wichtige Merkmale"
#: src/SUMMARY.md:146
msgid "Iterator"
msgstr "Iterator"
#: src/SUMMARY.md:147 src/traits/from-iterator.md:1
msgid "FromIterator"
msgstr "FromIterator"
#: src/SUMMARY.md:148
msgid "From and Into"
msgstr "From und Into"
#: src/SUMMARY.md:149
msgid "Read and Write"
msgstr "Read und Write"
#: src/SUMMARY.md:150
msgid "Drop"
msgstr "Drop"
#: src/SUMMARY.md:151
msgid "Default"
msgstr "Default Merkmal"
#: src/SUMMARY.md:152
msgid "Operators: Add, Mul, ..."
msgstr "Operatoren: Add, Mul, ..."
#: src/SUMMARY.md:153
msgid "Closures: Fn, FnMut, FnOnce"
msgstr ""
#: src/SUMMARY.md:155 src/exercises/day-3/simple-gui.md:1
#: src/exercises/day-3/solutions-morning.md:3
msgid "A Simple GUI Library"
msgstr "Eine einfache GUI-Bibliothek"
#: src/SUMMARY.md:156 src/exercises/day-3/solutions-morning.md:145
msgid "Points and Polygons"
msgstr "Punkte und Polygone"
#: src/SUMMARY.md:158
msgid "Day 3: Afternoon"
msgstr "Tag 3: Nachmittags"
#: src/SUMMARY.md:160 src/error-handling.md:1
msgid "Error Handling"
msgstr "Fehlerbehandlung"
#: src/SUMMARY.md:161 src/error-handling/panics.md:1
msgid "Panics"
msgstr "Laufzeitabbrüche"
#: src/SUMMARY.md:162
msgid "Catching Stack Unwinding"
msgstr "Abfangen der Auflösung des Stapelspeichers"
#: src/SUMMARY.md:163
msgid "Structured Error Handling"
msgstr "Strukturierte Fehlerbehandlung"
#: src/SUMMARY.md:164
msgid "Propagating Errors with ?"
msgstr "Weitergabe von Fehlern mit ?"
#: src/SUMMARY.md:165 src/error-handling/converting-error-types.md:1
#: src/error-handling/converting-error-types-example.md:1
msgid "Converting Error Types"
msgstr "Fehlertypen konvertieren"
#: src/SUMMARY.md:167 src/error-handling/deriving-error-enums.md:1
msgid "Deriving Error Enums"
msgstr "Ableiten von Fehleraufzählungen"
#: src/SUMMARY.md:168 src/error-handling/dynamic-errors.md:1
msgid "Dynamic Error Types"
msgstr "Dynamische Fehlertypen"
#: src/SUMMARY.md:169 src/error-handling/error-contexts.md:1
msgid "Adding Context to Errors"
msgstr "Kontext zu Fehlern hinzufügen"
#: src/SUMMARY.md:170 src/testing.md:1
msgid "Testing"
msgstr "Testen"
#: src/SUMMARY.md:171 src/testing/unit-tests.md:1
msgid "Unit Tests"
msgstr "Unit-Tests"
#: src/SUMMARY.md:172 src/testing/test-modules.md:1
msgid "Test Modules"
msgstr "Testmodule"
#: src/SUMMARY.md:173 src/testing/doc-tests.md:1
msgid "Documentation Tests"
msgstr "Dokumentationstests"
#: src/SUMMARY.md:174 src/testing/integration-tests.md:1
msgid "Integration Tests"
msgstr "Integrationstests"
#: src/SUMMARY.md:175 src/bare-metal/useful-crates.md:1
msgid "Useful crates"
msgstr "Nützliche Kisten (Crates)"
#: src/SUMMARY.md:176 src/unsafe.md:1
msgid "Unsafe Rust"
msgstr "Unsicheres Rust"
#: src/SUMMARY.md:177 src/unsafe/raw-pointers.md:1
msgid "Dereferencing Raw Pointers"
msgstr "Roh-zeiger dereferenzieren"
#: src/SUMMARY.md:178 src/unsafe/mutable-static-variables.md:1
msgid "Mutable Static Variables"
msgstr "Veränderbare statische Variablen"
#: src/SUMMARY.md:179 src/unsafe/unions.md:1
msgid "Unions"
msgstr "Vereinigungen"
#: src/SUMMARY.md:180 src/unsafe/calling-unsafe-functions.md:1
msgid "Calling Unsafe Functions"
msgstr "Unsichere Funktionen aufrufen"
#: src/SUMMARY.md:181 src/unsafe/writing-unsafe-functions.md:1
msgid "Writing Unsafe Functions"
msgstr "Unsichere Funktionen schreiben"
#: src/SUMMARY.md:182
msgid "Extern Functions"
msgstr "Externe Funktionen"
#: src/SUMMARY.md:183 src/unsafe/unsafe-traits.md:1
msgid "Implementing Unsafe Traits"
msgstr "Unsichere Merkmale implementieren"
#: src/SUMMARY.md:185 src/exercises/day-3/safe-ffi-wrapper.md:1
#: src/exercises/day-3/solutions-afternoon.md:3
msgid "Safe FFI Wrapper"
msgstr "Sicherer FFI-Wrapper"
#: src/SUMMARY.md:188 src/SUMMARY.md:258 src/bare-metal/android.md:1
msgid "Android"
msgstr "Android"
#: src/SUMMARY.md:193 src/android/setup.md:1
msgid "Setup"
msgstr "Einrichtung"
#: src/SUMMARY.md:194 src/android/build-rules.md:1
msgid "Build Rules"
msgstr "Regeln beim Bauen"
#: src/SUMMARY.md:195
msgid "Binary"
msgstr "Binärdatei"
#: src/SUMMARY.md:196
msgid "Library"
msgstr "Bibliothek"
#: src/SUMMARY.md:197 src/android/aidl.md:1
msgid "AIDL"
msgstr "AIDL"
#: src/SUMMARY.md:198
msgid "Interface"
msgstr "Schnittstelle"
#: src/SUMMARY.md:199
msgid "Implementation"
msgstr "Implementierung"
#: src/SUMMARY.md:200
msgid "Server"
msgstr "Server"
#: src/SUMMARY.md:201 src/android/aidl/deploy.md:1
msgid "Deploy"
msgstr "Einsetzen"
#: src/SUMMARY.md:202
msgid "Client"
msgstr "Klient"
#: src/SUMMARY.md:203 src/android/aidl/changing.md:1
msgid "Changing API"
msgstr "API verändern"
#: src/SUMMARY.md:204 src/SUMMARY.md:248 src/android/logging.md:1
#: src/bare-metal/aps/logging.md:1
msgid "Logging"
msgstr "Protokollierung"
#: src/SUMMARY.md:205 src/android/interoperability.md:1
msgid "Interoperability"
msgstr "Interoperabilität"
#: src/SUMMARY.md:206
msgid "With C"
msgstr "Mit C"
#: src/SUMMARY.md:207
msgid "Calling C with Bindgen"
msgstr "Aufruf von C-Funktionen mit Bindgen"
#: src/SUMMARY.md:208
msgid "Calling Rust from C"
msgstr "Aufruf von Rust aus C"
#: src/SUMMARY.md:209 src/android/interoperability/cpp.md:1
msgid "With C++"
msgstr "Mit C++"
#: src/SUMMARY.md:210
msgid "With Java"
msgstr "Mit Java"
#: src/SUMMARY.md:214
msgid "Bare Metal: Morning"
msgstr "Hardwarenahes Rust: Morgens"
#: src/SUMMARY.md:219
msgid "no_std"
msgstr ""
#: src/SUMMARY.md:220
msgid "A Minimal Example"
msgstr "Kleines Beispiel"
#: src/SUMMARY.md:221
msgid "alloc"
msgstr ""
#: src/SUMMARY.md:222 src/bare-metal/microcontrollers.md:1
msgid "Microcontrollers"
msgstr "Mikrokontroller"
#: src/SUMMARY.md:223 src/bare-metal/microcontrollers/mmio.md:1
msgid "Raw MMIO"
msgstr "MMIO"
#: src/SUMMARY.md:224
msgid "PACs"
msgstr ""
#: src/SUMMARY.md:225
msgid "HAL Crates"
msgstr "HAL Kisten"
#: src/SUMMARY.md:226
msgid "Board Support Crates"
msgstr "Helfer Kisten"
#: src/SUMMARY.md:227
msgid "The Type State Pattern"
msgstr "Das Typzustandsmuster"
#: src/SUMMARY.md:228
msgid "embedded-hal"
msgstr ""
#: src/SUMMARY.md:229
msgid "probe-rs, cargo-embed"
msgstr ""
#: src/SUMMARY.md:230 src/bare-metal/microcontrollers/debugging.md:1
msgid "Debugging"
msgstr "Debugging"
#: src/SUMMARY.md:231 src/SUMMARY.md:251
msgid "Other Projects"
msgstr "Andere Ressourcen"
#: src/SUMMARY.md:233 src/exercises/bare-metal/compass.md:1
#: src/exercises/bare-metal/solutions-morning.md:3
msgid "Compass"
msgstr "Kompass"
#: src/SUMMARY.md:235
msgid "Bare Metal: Afternoon"
msgstr "Bare-Metal: Nachmittags"
#: src/SUMMARY.md:237
msgid "Application Processors"
msgstr "Applikationsprozessoren"
#: src/SUMMARY.md:238 src/bare-metal/aps/entry-point.md:1
msgid "Getting Ready to Rust"
msgstr ""
#: src/SUMMARY.md:239
msgid "Inline Assembly"
msgstr ""
#: src/SUMMARY.md:240
msgid "MMIO"
msgstr ""
#: src/SUMMARY.md:241
msgid "Let's Write a UART Driver"
msgstr "Schreiben eines UART Treibers"
#: src/SUMMARY.md:242
msgid "More Traits"
msgstr "Noch mehr Merkmale"
#: src/SUMMARY.md:243
msgid "A Better UART Driver"
msgstr "Ein besserer UART Treiber"
#: src/SUMMARY.md:244 src/bare-metal/aps/better-uart/bitflags.md:1
msgid "Bitflags"
msgstr ""
#: src/SUMMARY.md:245
msgid "Multiple Registers"
msgstr "Mehrere Register"
#: src/SUMMARY.md:246 src/bare-metal/aps/better-uart/driver.md:1
msgid "Driver"
msgstr "Treiber"
#: src/SUMMARY.md:247 src/SUMMARY.md:249
msgid "Using It"
msgstr "Benutzung"
#: src/SUMMARY.md:250 src/bare-metal/aps/exceptions.md:1
#, fuzzy
msgid "Exceptions"
msgstr "Funktionen"
#: src/SUMMARY.md:252
msgid "Useful Crates"
msgstr "Nützliche Kisten"
#: src/SUMMARY.md:253
msgid "zerocopy"
msgstr ""
#: src/SUMMARY.md:254
msgid "aarch64-paging"
msgstr ""
#: src/SUMMARY.md:255
msgid "buddy_system_allocator"
msgstr ""
#: src/SUMMARY.md:256
msgid "tinyvec"
msgstr ""
#: src/SUMMARY.md:257
msgid "spin"
msgstr ""
#: src/SUMMARY.md:259 src/bare-metal/android/vmbase.md:1
msgid "vmbase"
msgstr ""
#: src/SUMMARY.md:261
msgid "RTC Driver"
msgstr "RTC Treiber"
#: src/SUMMARY.md:264
msgid "Concurrency: Morning"
msgstr "Nebenläufigkeit: Morgens"
#: src/SUMMARY.md:269 src/concurrency/threads.md:1
msgid "Threads"
msgstr "Ausführungsstrang"
#: src/SUMMARY.md:270 src/concurrency/scoped-threads.md:1
msgid "Scoped Threads"
msgstr "Ausführungsstrang mit Sichtbarkeitsbereich"
#: src/SUMMARY.md:271 src/concurrency/channels.md:1
msgid "Channels"
msgstr "Kanäle"
#: src/SUMMARY.md:272 src/concurrency/channels/unbounded.md:1
msgid "Unbounded Channels"
msgstr "Unbegrenzte Kanäle"
#: src/SUMMARY.md:273 src/concurrency/channels/bounded.md:1
msgid "Bounded Channels"
msgstr "Unbeschränkte Kanäle"
#: src/SUMMARY.md:274
msgid "Send and Sync"
msgstr "Send und Sync"
#: src/SUMMARY.md:274
msgid "Send"
msgstr "Send"
#: src/SUMMARY.md:274
msgid "Sync"
msgstr "Sync"
#: src/SUMMARY.md:277 src/concurrency/send-sync/examples.md:1
msgid "Examples"
msgstr "Beispiele"
#: src/SUMMARY.md:278 src/concurrency/shared_state.md:1
msgid "Shared State"
msgstr "Geteilter Zustand"
#: src/SUMMARY.md:279
msgid "Arc"
msgstr "Arc"
#: src/SUMMARY.md:280
msgid "Mutex"
msgstr "Mutex"
#: src/SUMMARY.md:283 src/SUMMARY.md:304
#: src/exercises/concurrency/dining-philosophers.md:1
#: src/exercises/concurrency/solutions-morning.md:3
msgid "Dining Philosophers"
msgstr "Philosophenproblem"
#: src/SUMMARY.md:284 src/exercises/concurrency/link-checker.md:1
msgid "Multi-threaded Link Checker"
msgstr "Link Überprüfung mit mehreren Ausführungssträngen"
#: src/SUMMARY.md:286
msgid "Concurrency: Afternoon"
msgstr "Nebenläufigkeit: Nachmittags"
#: src/SUMMARY.md:288
msgid "Async Basics"
msgstr "Async Grundlagen"
#: src/SUMMARY.md:289
msgid "async/await"
msgstr ""
#: src/SUMMARY.md:290 src/async/futures.md:1
#, fuzzy
msgid "Futures"
msgstr "Schließungen"
#: src/SUMMARY.md:291 src/async/runtimes.md:1
msgid "Runtimes"
msgstr "Laufzeiten"
#: src/SUMMARY.md:292 src/async/runtimes/tokio.md:1
msgid "Tokio"
msgstr ""
#: src/SUMMARY.md:293 src/exercises/concurrency/link-checker.md:126
#: src/async/tasks.md:1 src/exercises/concurrency/chat-app.md:143
msgid "Tasks"
msgstr "Aufgaben"
#: src/SUMMARY.md:294 src/async/channels.md:1
msgid "Async Channels"
msgstr "Async Kanäle"
#: src/SUMMARY.md:296 src/async/control-flow/join.md:1
msgid "Join"
msgstr ""
#: src/SUMMARY.md:297 src/async/control-flow/select.md:1
#, fuzzy
msgid "Select"
msgstr "Aufstellen"
#: src/SUMMARY.md:298
msgid "Pitfalls"
msgstr "Tücken"
#: src/SUMMARY.md:299
msgid "Blocking the Executor"
msgstr "Blockieren des Ausführers"
#: src/SUMMARY.md:300 src/async/pitfalls/pin.md:1
msgid "Pin"
msgstr ""
#: src/SUMMARY.md:301 src/async/pitfalls/async-traits.md:1
msgid "Async Traits"
msgstr "Async Merkmale"
#: src/SUMMARY.md:302 src/async/pitfalls/cancellation.md:1
#, fuzzy
msgid "Cancellation"
msgstr "Installation"
#: src/SUMMARY.md:305 src/exercises/concurrency/chat-app.md:1
#: src/exercises/concurrency/solutions-afternoon.md:95
msgid "Broadcast Chat Application"
msgstr ""
#: src/SUMMARY.md:308
msgid "Final Words"
msgstr "Letzte Worte"
#: src/SUMMARY.md:312 src/thanks.md:1
msgid "Thanks!"
msgstr "Danke!"
#: src/SUMMARY.md:313
msgid "Other Resources"
msgstr "Andere Ressourcen"
#: src/SUMMARY.md:314 src/credits.md:1
msgid "Credits"
msgstr "Würdigungen"
#: src/SUMMARY.md:317 src/exercises/solutions.md:1
msgid "Solutions"
msgstr "Lösungen"
#: src/SUMMARY.md:322
msgid "Day 1 Morning"
msgstr "Tag 1 Morgens"
#: src/SUMMARY.md:323
msgid "Day 1 Afternoon"
msgstr "Tag 1 Nachmittags"
#: src/SUMMARY.md:324
msgid "Day 2 Morning"
msgstr "Tag 2 Morgens"
#: src/SUMMARY.md:325
msgid "Day 2 Afternoon"
msgstr "Tag 2 Nachmittags"
#: src/SUMMARY.md:326
msgid "Day 3 Morning"
msgstr "Tag 3 Morgens"
#: src/SUMMARY.md:327
msgid "Day 3 Afternoon"
msgstr "Tag 3 Nachmittags"
#: src/SUMMARY.md:328
msgid "Bare Metal Rust Morning"
msgstr "Hardwarenahes Rust: Morgens"
#: src/SUMMARY.md:329 src/exercises/bare-metal/solutions-afternoon.md:1
msgid "Bare Metal Rust Afternoon"
msgstr "Hadwarenahes Rust: Nachmittags"
#: src/SUMMARY.md:330
msgid "Concurrency Morning"
msgstr "Nebenläufigkeit Morgens"
#: src/SUMMARY.md:331
msgid "Concurrency Afternoon"
msgstr "Nebenläufigkeit Nachmittags"
#: src/index.md:3
msgid ""
"[![Build workflow](https://img.shields.io/github/actions/workflow/status/"
"google/comprehensive-rust/build.yml?style=flat-square)](https://github.com/"
"google/comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain) [!"
"[GitHub contributors](https://img.shields.io/github/contributors/google/"
"comprehensive-rust?style=flat-square)](https://github.com/google/"
"comprehensive-rust/graphs/contributors) [![GitHub stars](https://img.shields."
"io/github/stars/google/comprehensive-rust?style=flat-square)](https://github."
"com/google/comprehensive-rust/stargazers)"
msgstr ""
#: src/index.md:7
#, fuzzy
msgid ""
"This is a free Rust course developed by the Android team at Google. The "
"course covers the full spectrum of Rust, from basic syntax to advanced "
"topics like generics and error handling."
msgstr ""
"Dies ist ein dreitägiger Rust-Kurs, der vom Android-Team entwickelt wurde. "
"Der Kurs umfasst das gesamte Spektrum von Rust, von grundlegender Syntax bis "
"hin zu fortgeschrittenen Themen wie generischen Methoden und Datentypen "
"sowie Fehlerbehandlung. Am letzten Tag werden auch Android-spezifische "
"Inhalte behandelt."
#: src/index.md:11
msgid ""
"The latest version of the course can be found at . If you are reading somewhere else, please check there "
"for updates."
msgstr ""
#: src/index.md:15
msgid ""
"The goal of the course is to teach you Rust. We assume you don't know "
"anything 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:"
#: src/index.md:18
msgid "Give you a comprehensive understanding of the Rust syntax and language."
msgstr ""
"Dir ein umfassendes Verständnis der Rust-Syntax und -Sprache zu vermitteln."
#: src/index.md:19
msgid "Enable you to modify existing programs and write new programs in Rust."
msgstr ""
"Es dir ermöglichen, bestehende Programme zu modifizieren und neue Programme "
"in Rust zu schreiben."
#: src/index.md:20
msgid "Show you common Rust idioms."
msgstr "Dir gängige Rust-Idiome zu zeigen."
#: src/index.md:22
msgid "We call the first three course days Rust Fundamentals."
msgstr ""
#: src/index.md:24
#, fuzzy
msgid ""
"Building on this, you're 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 sich mit einem oder mehreren Spezialthemen zu befassen:"
#: src/index.md:26
msgid ""
"[Android](android.md): a half-day course on using Rust for Android platform "
"development (AOSP). This includes interoperability with C, C++, and Java."
msgstr ""
"[Android](android.md): ein halbtägiger Kurs zur Verwendung von Rust für die "
"Android-Plattform Entwicklung (AOSP). Dazu gehört die Interoperabilität mit "
"C, C++ und Java."
#: src/index.md:28
#, fuzzy
msgid ""
"[Bare-metal](bare-metal.md): a whole-day class on using Rust for bare-metal "
"(embedded) development. Both microcontrollers and application processors are "
"covered."
msgstr ""
"[Bare-Metal](bare-metal.md): ein ganztägiger Kurs über die Verwendung von "
"Rust für Bare-Metal (eingebettete) Entwicklung. Sowohl Mikrocontroller als "
"auch Anwendungsprozessoren bedeckt."
#: src/index.md:31
#, fuzzy
msgid ""
"[Concurrency](concurrency.md): a whole-day class on concurrency in Rust. We "
"cover both classical concurrency (preemptively scheduling using threads and "
"mutexes) and async/await concurrency (cooperative multitasking using "
"futures)."
msgstr ""
"[Concurrency](concurrency.md): ein ganztägiger Kurs zum Thema Parallelität "
"in Rust. Wir decken sowohl die klassische Parallelität ab (präventive "
"Planung mithilfe von Threads als auch Mutexe) und Async/Await-Parallelität "
"(kooperatives Multitasking mit Futures)."
#: src/index.md:37
msgid "Non-Goals"
msgstr "Nicht-Ziele"
#: src/index.md:39
msgid ""
"Rust is a large language and we won't be able to cover all of it in a few "
"days. Some non-goals of this course are:"
msgstr ""
"Rust ist eine große Sprache und wir werden sie in ein paar Tagen nicht "
"vollständig abdecken können. Einige Nicht-Ziele dieses Kurses sind:"
#: src/index.md:42
#, fuzzy
msgid ""
"Learning how to develop macros: please see [Chapter 19.5 in the Rust Book]"
"(https://doc.rust-lang.org/book/ch19-06-macros.html) and [Rust by Example]"
"(https://doc.rust-lang.org/rust-by-example/macros.html) instead."
msgstr ""
"Um zu erfahren, wie Du Makros entwickelst, siehe [Kapitel 19.5 im Rust Buch]"
"(https://doc.rust-lang.org/book/ch19-06-macros.html) und [Rust im Beispiel]"
"(https://doc.rust-lang.org/rust-by-example/macros.html)."
#: src/index.md:46
msgid "Assumptions"
msgstr "Annahmen"
#: src/index.md:48
#, fuzzy
msgid ""
"The course assumes that you already know how to program. Rust is a "
"statically-typed language and we will sometimes make comparisons with C and "
"C++ to better explain or contrast the Rust approach."
msgstr ""
"Der Kurs setzt voraus, dass du bereits Programmierkenntnisse besitzt. Rust "
"ist eine statisch typisierte Sprache und wir werden manchmal Vergleiche mit "
"C und C++ machen, um besser den Rust-Ansatz zu erklären oder "
"gegenüberzustellen."
#: src/index.md:52
#, fuzzy
msgid ""
"If you know how to program in a dynamically-typed language such as Python or "
"JavaScript, then you will be able to follow along just fine too."
msgstr ""
"Aber auch wenn du Vorwissen in einer dynamisch typisierten Sprache wie "
"Python oder JavaScript hast, wirst du problemlos folgen können."
#: src/index.md:57
msgid ""
"This is an example of a _speaker note_. We will use these to add additional "
"information to the slides. This could be key points which the instructor "
"should cover as well as answers to typical questions which come up in class."
msgstr ""
"Dies ist ein Beispiel für eine _Sprechernotiz_, welche wir verwenden, um "
"weitere Informationen zu den Folien hinzuzufügen. Sprechernotizen können "
"wichtige Punkte beinhalten, die vom Kursleiter erwähnt werden sollten, oder "
"auch Antworten auf Fragen, die typischerweise im Kurs vorkommen."
#: src/running-the-course.md:3 src/running-the-course/course-structure.md:3
msgid "This page is for the course instructor."
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 internally at Google."
msgstr ""
"Hier ein paar Hintergrundinformationen darüber, wie wir den Kurs intern bei "
"Google durchführen."
#: src/running-the-course.md:8
msgid ""
"We typically run classes from 10:00 am to 4:00 pm, with a 1 hour lunch break "
"in the middle. This leaves 2.5 hours for the morning class and 2.5 hours for "
"the afternoon class. Note that this is just a recommendation: you can also "
"spend 3 hour on the morning session to give people more time for exercises. "
"The downside of longer session is that people can become very tired after 6 "
"full hours of class in the afternoon."
msgstr ""
#: src/running-the-course.md:16
msgid "Before you run the course, you will want to:"
msgstr "Bevor du den Kurs vorstellst solltest du:"
#: src/running-the-course.md:18
#, fuzzy
msgid ""
"Make yourself familiar with the course material. We've included speaker "
"notes to help highlight the key points (please help us by contributing more "
"speaker notes!). When presenting, you should make sure to open the speaker "
"notes in a popup (click the link with a little arrow next to \"Speaker "
"Notes\"). This way you have a clean screen to present to the class."
msgstr ""
"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."
#: src/running-the-course.md:24
#, fuzzy
msgid ""
"Decide on the dates. Since the course takes at least three full days, we "
"recommend that you schedule the days over two weeks. Course participants "
"have said that they find it helpful to have a gap in the course since it "
"helps them process all the information we give them."
msgstr ""
"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."
#: src/running-the-course.md:29
#, fuzzy
msgid ""
"Find a room large enough for your in-person participants. We recommend a "
"class size of 15-25 people. That's small enough that people are comfortable "
"asking questions --- it's also small enough that one instructor will have "
"time to answer the questions. Make sure the room has _desks_ for yourself "
"and for the students: you will all need to be able to sit and work with your "
"laptops. In particular, you will be doing a lot of live-coding as an "
"instructor, so a lectern won't be very helpful for you."
msgstr ""
"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."
#: src/running-the-course.md:37
#, fuzzy
msgid ""
"On the day of your course, show up to the room a little early to set things "
"up. We recommend presenting directly using `mdbook serve` running on your "
"laptop (see the [installation instructions](https://github.com/google/"
"comprehensive-rust#building)). This ensures optimal performance with no lag "
"as you change pages. Using your laptop will also allow you to fix typos as "
"you or the course participants spot them."
msgstr ""
"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."
#: src/running-the-course.md:43
#, fuzzy
msgid ""
"Let people solve the exercises by themselves or in small groups. We "
"typically spend 30-45 minutes on exercises in the morning and in the "
"afternoon (including time to review the solutions). Make sure to ask people "
"if they're stuck or if there is anything you can help with. When you see "
"that several people have the same problem, call it out to the class and "
"offer a solution, e.g., by showing people where to find the relevant "
"information in the standard library."
msgstr ""
"Sei schon etwas vor dem ersten Termin da, um alles vorzubereiten. Wir "
"schlagen vor, dass du `mdbook serve` direkt präsentierst (siehe "
"[Installationsanleitung](https://github.com/google/comprehensive-"
"rust#building)). 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"
"\n"
"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"
"\n"
"Bereite alles vor was du am Nachmittag des vierten Tages behandeln möchtest."
#: src/running-the-course.md:51
msgid ""
"That is all, good luck running the course! We hope it will be as much fun "
"for you as it has been for us!"
msgstr ""
"Das ist alles, viel Glück bei der Durchführung des Kurses! Wir hoffen, dass "
"es dir genauso viel Spaß machen wird wie uns!"
#: src/running-the-course.md:54
msgid ""
"Please [provide feedback](https://github.com/google/comprehensive-rust/"
"discussions/86) afterwards so that we can keep improving the course. We "
"would love to hear what worked well for you and what can be made better. "
"Your students are also very welcome to [send us feedback](https://github.com/"
"google/comprehensive-rust/discussions/100)!"
msgstr ""
"Bitte [gib anschließend Rückmeldung](https://github.com/google/comprehensive-"
"rust/discussions/86), damit wir den Kurs weiter verbessern können. Was uns "
"besonders interessieren würde ist was gut funktioniert hat aber auch was wir "
"verbessern könnten. Deine Teilnehmer sind natürlich auch herzlich "
"eingeladen, [uns Rückmeldung zu geben](https://github.com/google/"
"comprehensive-rust/discussions/100)!"
#: src/running-the-course/course-structure.md:5
#, fuzzy
msgid "Rust Fundamentals"
msgstr "Rust-Binärdateien"
#: src/running-the-course/course-structure.md:7
msgid ""
"The first three days make up [Rust Fundaments](../welcome-day-1.md). The "
"days are fast paced and we cover a lot of ground:"
msgstr ""
#: src/running-the-course/course-structure.md:10
msgid "Day 1: Basic Rust, syntax, control flow, creating and consuming values."
msgstr ""
#: src/running-the-course/course-structure.md:11
#, fuzzy
msgid ""
"Day 2: Memory management, ownership, compound data types, and the standard "
"library."
msgstr ""
"Tag 2: Zusammengesetzte Datentypen, Musterabgleich, die Standardbibliothek."
#: src/running-the-course/course-structure.md:12
#, fuzzy
msgid "Day 3: Generics, traits, error handling, testing, and unsafe Rust."
msgstr ""
"Tag 3: Merkmale und Generika, Fehlerbehandlung, Testen, unsicheres Rust."
#: src/running-the-course/course-structure.md:14
msgid "Deep Dives"
msgstr "Vertiefungen"
#: src/running-the-course/course-structure.md:16
msgid ""
"In addition to the 3-day class on Rust Fundamentals, we cover some more "
"specialized topics:"
msgstr ""
"Zusätzlich zu den Rust-Grundlagen behandeln wir noch einiges mehr "
"Spezialthemen nach Tag 3:"
#: src/running-the-course/course-structure.md:19
#, fuzzy
msgid "Rust in Android"
msgstr "Willkommen zu Tag 1"
#: src/running-the-course/course-structure.md:21
#, fuzzy
msgid ""
"The [Rust in Android](../android.md) deep dive is a half-day course on using "
"Rust for Android platform development. This includes interoperability with "
"C, C++, and Java."
msgstr ""
"Der [Android Deep Dive](../android.md) ist ein halbtägiger Kurs zur "
"Verwendung von Rust für Entwicklung der Android-Plattform. Dazu gehört die "
"Interoperabilität mit C, C++ und Java."
#: src/running-the-course/course-structure.md:25
msgid ""
"You will need an [AOSP checkout](https://source.android.com/docs/setup/"
"download/downloading). Make a checkout of the [course repository](https://"
"github.com/google/comprehensive-rust) on the same machine and move the `src/"
"android/` directory into the root of your AOSP checkout. This will ensure "
"that the Android build system sees the `Android.bp` files in `src/android/`."
msgstr ""
"Du wirst eine lokale Arbeitskopie von [AOSP](https://source.android.com/docs/"
"setup/download/downloading) benötigen. Mache eine Arbeitskopie des [Kurses]"
"(https://github.com/google/comprehensive-rust) auf deinem Laptop und "
"verschiebe das Verzeichnis `src/android/` in das Stammverzeichnis Deiner "
"AOSP Arbeitskopie. Dadurch wird sichergestellt, dass das Android-"
"Buildsystem die `Android.bp`\\-Dateien in `src/android/` sehen kann."
#: src/running-the-course/course-structure.md:30
msgid ""
"Ensure that `adb sync` works with your emulator or real device and pre-build "
"all Android examples using `src/android/build_all.sh`. Read the script to "
"see the commands it runs and make sure they work when you run them by hand."
msgstr ""
"Stelle sicher, dass `adb sync` auf deinem Emulator oder Rechner "
"funktioniert. Erstelle bereits vor dem Kurs alle Android-Beispiele mit `src/"
"android/build_all.sh`. Schaue auch in das Skript rein und probiere aus, ob "
"alle Befehle, die es ausführt auch von Hand ausgeführt funktionieren."
#: src/running-the-course/course-structure.md:37
#, fuzzy
msgid "Bare-Metal Rust"
msgstr "Bare-Metal"
#: src/running-the-course/course-structure.md:39
#, fuzzy
msgid ""
"The [Bare-Metal Rust](../bare-metal.md) deep dive is a full day class on "
"using Rust for bare-metal (embedded) development. Both microcontrollers and "
"application processors are covered."
msgstr ""
"Der [Bare-Metal Deep Dive](../bare-metal.md): ein ganztägiger Kurs über die "
"Verwendung von Rust für Bare-Metal-Entwicklung (eingebettet). Sowohl "
"Mikrocontroller als auch Anwendungen Prozessoren sind abgedeckt."
#: src/running-the-course/course-structure.md:43
msgid ""
"For the microcontroller part, you will need to buy the [BBC micro:bit]"
"(https://microbit.org/) v2 development board ahead of time. Everybody will "
"need to install a number of packages as described on the [welcome page](../"
"bare-metal.md)."
msgstr ""
"Für den Mikrocontroller-Teil solltest Du das [BBC micro:bit](https://"
"microbit.org/) v2-Entwicklungsboard im Voraus kaufen. Alle müssen eine Reihe "
"von Paketen installieren, wie auf der [Willkommens Seite](../bare-metal.md) "
"beschrieben."
#: src/running-the-course/course-structure.md:48
#, fuzzy
msgid "Concurrency in Rust"
msgstr "Willkommen bei Comprehensive Rust 🦀"
#: src/running-the-course/course-structure.md:50
#, fuzzy
msgid ""
"The [Concurrency in Rust](../concurrency.md) deep dive is a full day class "
"on classical as well as `async`/`await` concurrency."
msgstr ""
"Der [Nebensläufgkeitsvertiefung](../concurrency.md) ist ein ganztägiger Kurs "
"zur klassischen sowie „async“/„await“-Parallelität."
#: src/running-the-course/course-structure.md:53
msgid ""
"You will need a fresh crate set up and the dependencies downloaded and ready "
"to go. You can then copy/paste the examples into `src/main.rs` to experiment "
"with them:"
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:"
#: src/running-the-course/course-structure.md:64
msgid "Format"
msgstr "Format"
#: src/running-the-course/course-structure.md:66
msgid ""
"The course is meant to be very interactive and we recommend letting the "
"questions drive the exploration of Rust!"
msgstr ""
"Der Kurs soll sehr interaktiv ablaufen und wir empfehlen, durch Fragen die "
"Erkundung von Rust voranzutreiben!"
#: src/running-the-course/keyboard-shortcuts.md:3
msgid "There are several useful keyboard shortcuts in mdBook:"
msgstr "Es gibt mehrere nützliche Tastaturkürzel in mdBook:"
#: src/running-the-course/keyboard-shortcuts.md:5
msgid "Arrow-Left"
msgstr "Pfeil-links"
#: src/running-the-course/keyboard-shortcuts.md:5
msgid ": Navigate to the previous page."
msgstr ": Zur vorherigen Seite navigieren."
#: src/running-the-course/keyboard-shortcuts.md:6
msgid "Arrow-Right"
msgstr "Pfeil-rechts"
#: src/running-the-course/keyboard-shortcuts.md:6
msgid ": Navigate to the next page."
msgstr ": Zur nächsten Seite navigieren."
#: src/running-the-course/keyboard-shortcuts.md:7 src/cargo/code-samples.md:19
msgid "Ctrl + Enter"
msgstr "Strg + Eingabe"
#: src/running-the-course/keyboard-shortcuts.md:7
msgid ": Execute the code sample that has focus."
msgstr ": Führe das Codebeispiel aus, das aktuell den Fokus hat."
#: src/running-the-course/keyboard-shortcuts.md:8
msgid "s"
msgstr "s"
#: src/running-the-course/keyboard-shortcuts.md:8
msgid ": Activate the search bar."
msgstr ": Suchleiste aktivieren."
#: src/running-the-course/translations.md:3
msgid ""
"The course has been translated into other languages by a set of wonderful "
"volunteers:"
msgstr "Der Kurs wurde auch in andere Sprachen übersetzt:"
#: src/running-the-course/translations.md:6
#, fuzzy
msgid ""
"[Brazilian Portuguese](https://google.github.io/comprehensive-rust/pt-BR/) "
"by [@rastringer](https://github.com/rastringer), [@hugojacob](https://github."
"com/hugojacob), [@joaovicmendes](https://github.com/joaovicmendes), and "
"[@henrif75](https://github.com/henrif75)."
msgstr ""
"[Brasilianisches Portugiesisch](https://google.github.io/comprehensive-rust/"
"pt-BR/) von [@rastringer](https://github.com/rastringer) und [@hugojacob]"
"(https://github.com/hugojacob)."
#: src/running-the-course/translations.md:7
#, fuzzy
msgid ""
"[Korean](https://google.github.io/comprehensive-rust/ko/) by [@keispace]"
"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp), and "
"[@jooyunghan](https://github.com/jooyunghan)."
msgstr ""
"[Koreanisch](https://google.github.io/comprehensive-rust/ko/) von [@keispace]"
"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp) und "
"[@jooyunghan](https://github.com/jooyunghan)."
#: src/running-the-course/translations.md:8
#, fuzzy
msgid ""
"[Spanish](https://google.github.io/comprehensive-rust/es/) by [@deavid]"
"(https://github.com/deavid)."
msgstr ""
"[Brasilianisches Portugiesisch](https://google.github.io/comprehensive-rust/"
"pt-BR/) von [@rastringer](https://github.com/rastringer) und [@hugojacob]"
"(https://github.com/hugojacob)."
#: src/running-the-course/translations.md:10
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:12
msgid "Incomplete Translations"
msgstr "Angefangene Übersetzungen"
#: src/running-the-course/translations.md:14
msgid ""
"There is a large number of in-progress translations. We link to the most "
"recently updated translations:"
msgstr ""
#: src/running-the-course/translations.md:17
#, fuzzy
msgid ""
"[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol]"
"(https://github.com/raselmandol)."
msgstr ""
"[Brasilianisches Portugiesisch](https://google.github.io/comprehensive-rust/"
"pt-BR/) von [@rastringer](https://github.com/rastringer) und [@hugojacob]"
"(https://github.com/hugojacob)."
#: src/running-the-course/translations.md:18
#, fuzzy
msgid ""
"[Chinese (Traditional)](https://google.github.io/comprehensive-rust/zh-TW/) "
"by [@hueich](https://github.com/hueich), [@victorhsieh](https://github.com/"
"victorhsieh), [@mingyc](https://github.com/mingyc), and [@johnathan79717]"
"(https://github.com/johnathan79717)."
msgstr ""
"[Koreanisch](https://google.github.io/comprehensive-rust/ko/) von [@keispace]"
"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp) und "
"[@jooyunghan](https://github.com/jooyunghan)."
#: src/running-the-course/translations.md:19
#, fuzzy
msgid ""
"[Chinese (Simplified)](https://google.github.io/comprehensive-rust/zh-CN/) "
"by [@suetfei](https://github.com/suetfei), [@wnghl](https://github.com/"
"wnghl), [@anlunx](https://github.com/anlunx), [@kongy](https://github.com/"
"kongy), [@noahdragon](https://github.com/noahdragon), and [@superwhd]"
"(https://github.com/superwhd)."
msgstr ""
"[Koreanisch](https://google.github.io/comprehensive-rust/ko/) von [@keispace]"
"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp) und "
"[@jooyunghan](https://github.com/jooyunghan)."
#: src/running-the-course/translations.md:20
msgid ""
"[French](https://google.github.io/comprehensive-rust/fr/) by [@KookaS]"
"(https://github.com/KookaS) and [@vcaen](https://github.com/vcaen)."
msgstr ""
#: src/running-the-course/translations.md:21
msgid ""
"[German](https://google.github.io/comprehensive-rust/de/) by [@Throvn]"
"(https://github.com/Throvn) and [@ronaldfw](https://github.com/ronaldfw)."
msgstr ""
#: src/running-the-course/translations.md:22
msgid ""
"[Japanese](https://google.github.io/comprehensive-rust/ja/) by [@CoinEZ-JPN]"
"(https://github.com/CoinEZ) and [@momotaro1105](https://github.com/"
"momotaro1105)."
msgstr ""
#: src/running-the-course/translations.md:24
msgid ""
"If you want to help with this effort, please see [our instructions](https://"
"github.com/google/comprehensive-rust/blob/main/TRANSLATIONS.md) for how to "
"get going. Translations are coordinated on the [issue tracker](https://"
"github.com/google/comprehensive-rust/issues/282)."
msgstr ""
"Wenn du uns hierbei unterstützen möchtest, lies dir bitte [unsere "
"Anweisungen](https://github.com/google/comprehensive-rust/blob/main/"
"TRANSLATIONS.md) durch. Übersetzungen werden mit dem [Issue-Tracker](https://"
"github.com/google/comprehensive-rust/issues/282) koordiniert."
#: src/cargo.md:3
msgid ""
"When you start reading about Rust, you will soon meet [Cargo](https://doc."
"rust-lang.org/cargo/), the standard tool used in the Rust ecosystem to build "
"and run Rust applications. Here we want to give a brief overview of what "
"Cargo is and how it fits into the wider ecosystem and how it fits into this "
"training."
msgstr ""
"Wenn du anfängst über Rust zu lesen, wirst du sehr bald [Cargo](https://doc."
"rust-lang.org/cargo/), ein Standardwerkzeug, welches im Rust-Ökosystem "
"verwendet wird, um Rust-Anwendungen zu erstellen und auszuführen, "
"kennenlernen. Hier wollen wir einen kurzen Überblick geben, was Cargo ist "
"und wie es in das breitere Ökosystem und in dieses Training passt."
#: src/cargo.md:8
msgid "Installation"
msgstr "Installation"
#: src/cargo.md:10
msgid "**Please follow the instructions on .**"
msgstr ""
#: src/cargo.md:12
#, fuzzy
msgid ""
"This will give you the Cargo build tool (`cargo`) and the Rust compiler "
"(`rustc`). You will also get `rustup`, a command line utility that you can "
"use to install to different compiler versions."
msgstr ""
"Neben cargo und rustc installiert sich rustup selbst als "
"Befehlszeilenprogramm, mit welchem du Toolchains installieren/wechseln, oder "
"cross-Kompilierung einrichten kannst."
#: src/cargo.md:14
msgid ""
"After installing Rust, you should configure your editor or IDE to work with "
"Rust. Most editors do this by talking to [rust-analyzer](https://rust-"
"analyzer.github.io/), which provides auto-completion and jump-to-definition "
"functionality for [VS Code](https://code.visualstudio.com/), [Emacs](https://"
"rust-analyzer.github.io/manual.html#emacs), [Vim/Neovim](https://rust-"
"analyzer.github.io/manual.html#vimneovim), and many others. There is also a "
"different IDE available called [RustRover](https://www.jetbrains.com/rust/)."
msgstr ""
#: src/cargo.md:18
#, fuzzy
msgid ""
"On Debian/Ubuntu, you can also install Cargo, the Rust source and the [Rust "
"formatter](https://github.com/rust-lang/rustfmt) via `apt`. However, this "
"gets you an outdated rust version and may lead to unexpected behavior. The "
"command would be:"
msgstr ""
"Auf Debian/Ubuntu kannst du Cargo und den Rust Quellcode wie folgt "
"installieren"
#: 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:"
msgstr ""
"Das Rust-Ökosystem besteht aus einer Reihe von Werkzeugen, von denen die "
"wichtigsten die Folgenden sind:"
#: src/cargo/rust-ecosystem.md:5
#, fuzzy
msgid ""
"`rustc`: the Rust compiler which turns `.rs` files into binaries and other "
"intermediate formats."
msgstr ""
"`rustc`: der Rust-Compiler, der `.rs`\\-Dateien in Binärdateien und andere "
"Zwischenformate umwandelt"
#: src/cargo/rust-ecosystem.md:8
#, fuzzy
msgid ""
"`cargo`: the Rust dependency manager and build tool. Cargo knows how to "
"download dependencies, usually hosted on , and it will "
"pass them to `rustc` when building your project. Cargo also comes with a "
"built-in test runner which is used to execute unit tests."
msgstr ""
"`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 `rustc` beim Erstellen Ihres Projekts. Cargo verfügt außerdem über einen "
"integrierten Testausführer, der zum Ausführen von Unit-Tests verwendet wird."
#: src/cargo/rust-ecosystem.md:13
msgid ""
"`rustup`: the Rust toolchain installer and updater. This tool is used to "
"install and update `rustc` and `cargo` when new versions of Rust is "
"released. In addition, `rustup` can also download documentation for the "
"standard library. You can have multiple versions of Rust installed at once "
"and `rustup` will let you switch between them as needed."
msgstr ""
#: 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/ownership/double-free-modern-cpp.md:55
#: 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:"
#: src/cargo/rust-ecosystem.md:23
msgid ""
"Rust has a rapid release schedule with a new release coming out every six "
"weeks. New releases maintain backwards compatibility with old releases --- "
"plus they enable new functionality."
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."
#: src/cargo/rust-ecosystem.md:27
msgid ""
"There are three release channels: \"stable\", \"beta\", and \"nightly\"."
msgstr "Es gibt drei Veröffentlichungskanäle: „stable“, „beta“ und „nightly“."
#: src/cargo/rust-ecosystem.md:29
msgid ""
"New features are being tested on \"nightly\", \"beta\" is what becomes "
"\"stable\" every six weeks."
msgstr ""
"Neue Funktionen werden in „nightly“ getestet. „Beta“ wird alle sechs Wochen "
"„stabil“."
#: src/cargo/rust-ecosystem.md:32
msgid ""
"Dependencies can also be resolved from alternative [registries](https://doc."
"rust-lang.org/cargo/reference/registries.html), git, folders, and more."
msgstr ""
#: src/cargo/rust-ecosystem.md:34
msgid ""
"Rust also has [editions](https://doc.rust-lang.org/edition-guide/): the "
"current edition is Rust 2021. Previous editions were Rust 2015 and Rust 2018."
msgstr ""
"Rust hat auch \\[Editionen\\]: Die aktuelle Edition ist Rust 2021. Vorherige "
"Editionen waren Rust 2015 und Rust 2018."
#: src/cargo/rust-ecosystem.md:37
msgid ""
"The editions are allowed to make backwards incompatible changes to the "
"language."
msgstr "Editionen dürfen rückwärtsinkompatible Änderungen vornehmen."
#: src/cargo/rust-ecosystem.md:40
msgid ""
"To prevent breaking code, editions are opt-in: you select the edition for "
"your crate via the `Cargo.toml` file."
msgstr ""
"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`"
#: src/cargo/rust-ecosystem.md:43
msgid ""
"To avoid splitting the ecosystem, Rust compilers can mix code written for "
"different editions."
msgstr ""
"Um eine Aufspaltung des Ökosystems zu vermeiden, können Rust-Compiler Code "
"der für verschiedene Editionen geschrieben wurde vermischen."
#: src/cargo/rust-ecosystem.md:46
msgid ""
"Mention that it is quite rare to ever use the compiler directly not through "
"`cargo` (most users never do)."
msgstr ""
"Erwähne, dass es ziemlich selten vorkommt, dass der Compiler jemals direkt "
"und nicht über `cargo` verwendet wird (die meisten Benutzer tun dies nie)."
#: src/cargo/rust-ecosystem.md:48
msgid ""
"It might be worth alluding that Cargo itself is an extremely powerful and "
"comprehensive tool. It is capable of many advanced features including but "
"not limited to: "
msgstr ""
"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:"
#: src/cargo/rust-ecosystem.md:49
msgid "Project/package structure"
msgstr "Projekt-/Paketstruktur"
#: src/cargo/rust-ecosystem.md:50
msgid "[workspaces](https://doc.rust-lang.org/cargo/reference/workspaces.html)"
msgstr "\\[Arbeitsbereiche\\]"
#: src/cargo/rust-ecosystem.md:51
msgid "Dev Dependencies and Runtime Dependency management/caching"
msgstr ""
"Verwaltung/Caching von Entwicklungsabhängigkeiten und Laufzeitabhängigkeiten"
#: src/cargo/rust-ecosystem.md:52
msgid ""
"[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts."
"html)"
msgstr "\\[Build-Skripting\\]"
#: src/cargo/rust-ecosystem.md:53
msgid ""
"[global installation](https://doc.rust-lang.org/cargo/commands/cargo-install."
"html)"
msgstr "\\[globale Installation\\]"
#: src/cargo/rust-ecosystem.md:54
msgid ""
"It is also extensible with sub command plugins as well (such as [cargo "
"clippy](https://github.com/rust-lang/rust-clippy))."
msgstr ""
"Es ist auch mit Unterbefehls-Plugins erweiterbar (z. B. [cargo clippy]"
"(https://github.com/rust-lang/rust-clippy))."
#: src/cargo/rust-ecosystem.md:55
msgid ""
"Read more from the [official Cargo Book](https://doc.rust-lang.org/cargo/)"
msgstr "Lese mehr aus dem \\[offiziellen Cargo Buch\\]"
#: src/cargo/code-samples.md:1
msgid "Code Samples in This Training"
msgstr "Codebeispiele in diesem Training"
#: src/cargo/code-samples.md:3
msgid ""
"For this training, we will mostly explore the Rust language through examples "
"which can be executed through your browser. This makes the setup much easier "
"and ensures a consistent experience for everyone."
msgstr ""
"In diesem Training werden wir die Rust-Sprache hauptsächlich anhand von "
"Beispielen erkunden die über Ihren Browser ausgeführt werden können. Dies "
"erleichtert die Einrichtung erheblich und 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 exercises. On the last day, we will do a larger exercise which shows you "
"how to work with dependencies and for that you need Cargo."
msgstr ""
"Die Installation von Cargo wird dennoch empfohlen: Es wird Dir die "
"Bearbeitung der Übungen erleichtern. Am letzten Tag werden wir eine größere "
"Übung machen, die zeigt, wie Du mit Abhängigkeiten (dependencies) arbeitest "
"und dafür benötigst Du Cargo."
#: src/cargo/code-samples.md:11
msgid "The code blocks in this course are fully interactive:"
msgstr "Die Codeblöcke in diesem Kurs sind vollständig interaktiv:"
#: src/cargo/code-samples.md:13
msgid ""
"```rust,editable\n"
"fn main() {\n"
" println!(\"Edit me!\");\n"
"}\n"
"```"
msgstr ""
#: src/cargo/code-samples.md:19
msgid "You can use "
msgstr "Du kannst "
#: src/cargo/code-samples.md:19
msgid " to execute the code when focus is in the text box."
msgstr ""
" 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 are not "
"editable for various reasons:"
msgstr ""
"Die meisten Codebeispiele können wie oben gezeigt bearbeitet werden. Ein "
"paar Codebeispiele sind aus verschiedenen Gründen nicht editierbar:"
#: src/cargo/code-samples.md:27
msgid ""
"The embedded playgrounds cannot execute unit tests. Copy-paste the code and "
"open it in the real Playground to demonstrate unit tests."
msgstr ""
"Die eingebetteten Testumgebungen (embedded Playgrounds) können keine Unit-"
"Tests durchführen. Kopiere die Datei und füge den Code in der echten "
"Testumgebung ein, um Unit-Tests zu demonstrieren."
#: src/cargo/code-samples.md:30
msgid ""
"The embedded playgrounds lose their state the moment you navigate away from "
"the page! This is the reason that the students should solve the exercises "
"using a local Rust installation or via the Playground."
msgstr ""
"Die eingebetteten Testumgebungen verlieren ihren Zustand, sobald Du von der "
"Seite weg navigierst! Aus diesem Grund sollten die Schüler die Übungen mit "
"einer lokalen Rust-Installation oder in der lokalen Testumgebung lösen."
#: src/cargo/running-locally.md:1
msgid "Running Code Locally with Cargo"
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 to first install Rust. Do this by following the [instructions in the "
"Rust Book](https://doc.rust-lang.org/book/ch01-01-installation.html). This "
"should give you a working `rustc` and `cargo`. At the time of writing, the "
"latest stable Rust release has these version numbers:"
msgstr ""
"Wenn Du mit dem Code auf Deinem eigenen System experimentieren möchten, "
"solltest Du zuerst Rust installieren. Befolge dazu die \\[Anweisungen in dem "
"Rust Buch 1\\]. Dies sollte ein funktionierendes `rustc` und `cargo` "
"hervorbringen. Zum Verfassungszeitpunkt hat die neueste stabile Rust-Version "
"folgende Versionsnummer:"
#: src/cargo/running-locally.md:15
msgid ""
"You can use any later version too since Rust maintains backwards "
"compatibility."
msgstr ""
#: src/cargo/running-locally.md:17
msgid ""
"With this in place, follow these steps to build a Rust binary from one 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:"
#: src/cargo/running-locally.md:20
msgid "Click the \"Copy to clipboard\" button on the example you want to copy."
msgstr ""
"Klicke bei dem Beispiel, dass Du kopieren möchtest, auf die Schaltfläche „In "
"die Zwischenablage kopieren“."
#: src/cargo/running-locally.md:22
msgid ""
"Use `cargo new exercise` to create a new `exercise/` directory for your code:"
msgstr ""
"Verwende `cargo new exercise`, um ein neues `exercise/`\\-Verzeichnis für "
"Deinen Code zu erstellen:"
#: src/cargo/running-locally.md:29
msgid ""
"Navigate into `exercise/` and use `cargo run` to build and run your binary:"
msgstr ""
"Navigiere zu `exercise/` und verwende \\`cargo run, um eine Binärdatei zu "
"erstellen und auszuführen:"
#: src/cargo/running-locally.md:40
msgid ""
"Replace the boiler-plate code in `src/main.rs` with your own code. For "
"example, using the example on the previous page, make `src/main.rs` look like"
msgstr ""
"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:"
#: src/cargo/running-locally.md:43
msgid ""
"```rust\n"
"fn main() {\n"
" println!(\"Edit me!\");\n"
"}\n"
"```"
msgstr ""
"```rust\n"
"fn main() {\n"
" println!(\"Edit me!\");\n"
"}\n"
"```"
#: src/cargo/running-locally.md:49
msgid "Use `cargo run` to build and run your updated binary:"
msgstr ""
"Verwende `cargo run`, um die neue Binärdatei zu erstellen und auszuführen:"
#: src/cargo/running-locally.md:59
msgid ""
"Use `cargo check` to quickly check your project for errors, use `cargo "
"build` to compile it without running it. You will find the output in `target/"
"debug/` for a normal debug build. Use `cargo build --release` to produce an "
"optimized release build in `target/release/`."
msgstr ""
"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."
#: src/cargo/running-locally.md:64
msgid ""
"You can add dependencies for your project by editing `Cargo.toml`. When you "
"run `cargo` commands, it will automatically download and compile missing "
"dependencies for you."
msgstr ""
"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:72
msgid ""
"Try to encourage the class participants to install Cargo and use a local "
"editor. It will make their life easier since they will have a normal "
"development environment."
msgstr ""
"Versuche, die Kursteilnehmer zu ermutigen, Cargo zu installieren und einen "
"lokalen Texteditor zu verwenden Es wird Dein Leben einfacher machen, wenn "
"alle eine lokale Entwicklungsumgebung haben."
#: src/welcome-day-1.md:1
msgid "Welcome to Day 1"
msgstr "Willkommen zu Tag 1"
#: src/welcome-day-1.md:3
#, fuzzy
msgid ""
"This is the first day of Rust Fundamentals. We will cover a lot of ground "
"today:"
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, "
"references, functions, and methods."
msgstr ""
"Grundlegende Rust-Syntax: Variablen, Skalar- und zusammengesetzte Typen "
"(scalar-types, union-types) , Aufzählungen (enums), Strukturen (structs), "
"Referenzen (references), Funktionen (functions) und Methoden (methods)."
#: src/welcome-day-1.md:9
msgid ""
"Control flow constructs: `if`, `if let`, `while`, `while let`, `break`, and "
"`continue`."
msgstr ""
#: src/welcome-day-1.md:12
msgid "Pattern matching: destructuring enums, structs, and arrays."
msgstr ""
#: src/welcome-day-1.md:16
msgid "Please remind the students that:"
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."
msgstr ""
"Sie sollten Fragen stellen, sobald ihnen welche einfallen, und nicht bis zum "
"Ende warten."
#: src/welcome-day-1.md:19
msgid ""
"The class is meant to be interactive and discussions are very much "
"encouraged!"
msgstr "Der Unterricht soll interaktiv sein und Diskussionen sind erwünscht!"
#: src/welcome-day-1.md:20
msgid ""
"As an instructor, you should try to keep the discussions relevant, i.e., "
"keep the discussions related to how Rust does things vs some other "
"language. It can be hard to find the right balance, but err on the side of "
"allowing discussions since they engage people much more than one-way "
"communication."
msgstr ""
"Als Dozent sollten Sie versuchen, die Diskussionen relevant zu halten, d. h. "
"Behalten Sie den Bezug dazu bei, wie Rust Dinge im Vergleich zu einer "
"anderen Sprache tut. Es kann schwer sein, die richtige Balance zu finden, "
"aber lassen Sie lieber Diskussionen zu, um Kursteilnehmer einzubeziehen und "
"lange Monologe zu vermeiden."
#: src/welcome-day-1.md:24
msgid ""
"The questions will likely mean that we talk about things ahead of the slides."
msgstr ""
"Bei Fragen wird es wahrscheinlich dazu kommen, dass wir über die Dinge vor "
"den eigentlichen Folien sprechen."
#: src/welcome-day-1.md:25
msgid ""
"This is perfectly okay! Repetition is an important part of learning. "
"Remember that the slides are just a support and you are free to skip them as "
"you like."
msgstr ""
"Das ist vollkommen in Ordnung! Wiederholung ist ein wichtiger Teil des "
"Lernens. 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 about the famous borrow checker. The way Rust handles memory is a "
"major feature 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. Die Art und "
"Weise, wie Rust mit Speicher umgeht, ist ein wichtiges Merkmal und das "
"solltest Du den Kursteilnehmern direkt zeigen."
#: src/welcome-day-1.md:33
msgid ""
"If you're teaching this in a classroom, this is a good place to go over the "
"schedule. We suggest splitting the day into two parts (following the slides):"
msgstr ""
"Wenn Du in einem Klassenzimmer unterrichtest, ist dies ein guter Ort, um "
"über den Zeitplan zu gehen. Wir empfehlen, den Tag in zwei Teile aufzuteilen "
"(nach den Folien):"
#: src/welcome-day-1.md:36
msgid "Morning: 9:00 to 12:00,"
msgstr "Morgens: 9:00 bis 12:00 Uhr,"
#: src/welcome-day-1.md:37
msgid "Afternoon: 13:00 to 16:00."
msgstr "Nachmittag: 13:00 bis 16:00 Uhr."
#: src/welcome-day-1.md:39
msgid ""
"You can of course adjust this as necessary. Please make sure to include "
"breaks, we recommend a break every hour!"
msgstr ""
"Dies kannst Du natürlich bei Bedarf anpassen. Bitte achte darauf, Pausen "
"einzuplanen. Wir empfehlen jede Stunde eine Pause!"
#: src/welcome-day-1/what-is-rust.md:3
msgid ""
"Rust is a new programming language which had its [1.0 release in 2015]"
"(https://blog.rust-lang.org/2015/05/15/Rust-1.0.html):"
msgstr ""
"Rust 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++"
msgstr ""
"Rust ist eine statisch kompilierte Sprache in einer ähnlichen Rolle wie C++"
#: src/welcome-day-1/what-is-rust.md:6
msgid "`rustc` uses LLVM as its backend."
msgstr "`rustc` verwendet LLVM als Backend."
#: src/welcome-day-1/what-is-rust.md:7
msgid ""
"Rust supports many [platforms and architectures](https://doc.rust-lang.org/"
"nightly/rustc/platform-support.html):"
msgstr ""
"Rust unterstützt viele \\[Plattformen und Architekturen\\] (https://doc.rust-"
"lang.org/nightly/rustc/platform-support.html):"
#: src/welcome-day-1/what-is-rust.md:9
msgid "x86, ARM, WebAssembly, ..."
msgstr "x86, ARM, WebAssembly, ..."
#: src/welcome-day-1/what-is-rust.md:10
msgid "Linux, Mac, Windows, ..."
msgstr "Linux, Mac, Windows, ..."
#: src/welcome-day-1/what-is-rust.md:11
msgid "Rust is used for a wide range of devices:"
msgstr "Rust wird für eine Vielzahl von Geräten verwendet:"
#: src/welcome-day-1/what-is-rust.md:12
msgid "firmware and boot loaders,"
msgstr "Firmware und Bootloader,"
#: src/welcome-day-1/what-is-rust.md:13
msgid "smart displays,"
msgstr "intelligente Displays,"
#: src/welcome-day-1/what-is-rust.md:14
msgid "mobile phones,"
msgstr "Mobiltelefone,"
#: src/welcome-day-1/what-is-rust.md:15
msgid "desktops,"
msgstr "Desktops,"
#: src/welcome-day-1/what-is-rust.md:16
msgid "servers."
msgstr "Server."
#: src/welcome-day-1/what-is-rust.md:21
msgid "Rust fits in the same area as C++:"
msgstr "Rust passt in den gleichen Bereich wie C++:"
#: src/welcome-day-1/what-is-rust.md:23
msgid "High flexibility."
msgstr "Hohe Flexibilität."
#: src/welcome-day-1/what-is-rust.md:24
msgid "High level of control."
msgstr "Hohes Maß an Kontrolle."
#: src/welcome-day-1/what-is-rust.md:25
#, fuzzy
msgid ""
"Can be scaled down to very constrained devices such as microcontrollers."
msgstr ""
"Kann auf sehr eingeschränkte Geräte wie Mobiltelefone herunterskaliert "
"werden."
#: src/welcome-day-1/what-is-rust.md:26
msgid "Has no runtime or garbage collection."
msgstr "Hat keine Laufzeit oder Speicherbereinigung (garbage collection)."
#: src/welcome-day-1/what-is-rust.md:27
msgid "Focuses on reliability and safety without sacrificing performance."
msgstr ""
"Konzentriert sich auf Zuverlässigkeit und Sicherheit ohne Leistungseinbußen."
#: src/hello-world.md:3
msgid ""
"Let us jump into the simplest possible Rust program, a classic Hello World "
"program:"
msgstr ""
"Lasst uns in das einfachste Rust-Programm einsteigen, ein klassisches Hallo "
"Welt Programm:"
#: src/hello-world.md:6
msgid ""
"```rust,editable\n"
"fn main() {\n"
" println!(\"Hello 🌍!\");\n"
"}\n"
"```"
msgstr ""
#: src/hello-world.md:12
msgid "What you see:"
msgstr "Du siehst:"
#: src/hello-world.md:14
msgid "Functions are introduced with `fn`."
msgstr "Funktionen beginnen mit `fn`."
#: src/hello-world.md:15
msgid "Blocks are delimited by curly braces like in C and C++."
msgstr "Blöcke werden wie in C und C++ durch geschweifte Klammern getrennt."
#: src/hello-world.md:16
msgid "The `main` function is the entry point of the program."
msgstr "Die `main`\\-Funktion ist der Einstiegspunkt des Programms."
#: src/hello-world.md:17
msgid "Rust has hygienic macros, `println!` is an example of this."
msgstr ""
"Rust hat hygienische (hygienic) Makros, `println!` ist ein Beispiel dafür."
#: src/hello-world.md:18
msgid "Rust strings are UTF-8 encoded and can contain any Unicode character."
msgstr ""
"Rust-Strings sind UTF-8-codiert und können beliebige Unicode-Zeichen "
"enthalten."
#: src/hello-world.md:22
#, fuzzy
msgid ""
"This slide tries to make the students comfortable with Rust code. They will "
"see a ton of it over the next three days so we start small with something "
"familiar."
msgstr ""
"Diese Folie versucht, die Schüler mit Rust-Code vertraut zu machen. Sie "
"werden viel davon in den nächsten vier Tagen sehen, also fangen wir klein "
"und mit etwas Vertrautem an."
#: src/hello-world.md:27
#, fuzzy
msgid ""
"Rust is very much like other languages in the C/C++/Java tradition. It is "
"imperative and it doesn't try to reinvent things unless absolutely necessary."
msgstr ""
"Rust ist anderen Sprachen in der C/C++/Java-Tradition sehr ähnlich. Es ist "
"Imperativ (nicht funktional) und es wird nicht versucht, Dinge neu zu "
"erfinden, es sei denn es ist absolut notwendig."
#: src/hello-world.md:31
msgid "Rust is modern with full support for things like Unicode."
msgstr "Rust ist modern und unterstützt Dinge wie Unicode vollständig."
#: src/hello-world.md:33
msgid ""
"Rust uses macros for situations where you want to have a variable number of "
"arguments (no function [overloading](basic-syntax/functions-interlude.md))."
msgstr ""
"Rust verwendet Makros für Situationen, in denen Du eine variable Anzahl von "
"Argumenten haben möchtest (keine [Funktionüberladung](basic-syntax/functions-"
"interlude.md))."
#: src/hello-world.md:36
msgid ""
"Macros being 'hygienic' means they don't accidentally capture identifiers "
"from the scope they are used in. Rust macros are actually only [partially "
"hygienic](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene."
"html)."
msgstr ""
"Makros sind „hygienisch“, was bedeutet, dass sie nicht versehentlich "
"Identifikatoren in ihrem Umfang (scope) in dem sie verwendet werden erfassen "
"Rust-Makros sind eigentlich nur [teilweise hygienisch](https://veykril."
"github.io/tlborm/decl-macros/minutiae/hygiene.html)."
#: src/hello-world.md:40
msgid ""
"Rust is multi-paradigm. For example, it has powerful [object-oriented "
"programming features](https://doc.rust-lang.org/book/ch17-00-oop.html), and, "
"while it is not a functional language, it includes a range of [functional "
"concepts](https://doc.rust-lang.org/book/ch13-00-functional-features.html)."
msgstr ""
#: src/hello-world/small-example.md:3
msgid "Here is a small example program in Rust:"
msgstr "Hier ein kleines Beispielprogramm in Rust:"
#: src/hello-world/small-example.md:5
msgid ""
"```rust,editable\n"
"fn main() { // Program entry point\n"
" let mut x: i32 = 6; // Mutable variable binding\n"
" print!(\"{x}\"); // Macro for printing, like printf\n"
" while x != 1 { // No parenthesis around expression\n"
" if x % 2 == 0 { // Math like in other languages\n"
" x = x / 2;\n"
" } else {\n"
" x = 3 * x + 1;\n"
" }\n"
" print!(\" -> {x}\");\n"
" }\n"
" println!();\n"
"}\n"
"```"
msgstr ""
#: src/hello-world/small-example.md:23
msgid ""
"The code implements the Collatz conjecture: it is believed that the loop "
"will always end, but this is not yet proved. Edit the code and play with "
"different inputs."
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."
#: src/hello-world/small-example.md:29
msgid ""
"Explain that all variables are statically typed. Try removing `i32` to "
"trigger type inference. Try with `i8` instead and trigger a runtime integer "
"overflow."
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."
#: src/hello-world/small-example.md:32
msgid "Change `let mut x` to `let x`, discuss the compiler error."
msgstr "Ändere `let mut x` in `let x`, und bespreche den Compilerfehler."
#: src/hello-world/small-example.md:34
msgid ""
"Show how `print!` gives a compilation error if the arguments don't match the "
"format string."
msgstr ""
"Zeige, wie `print!` einen Kompilierungsfehler ausgibt, wenn die Argumente "
"nicht mit dem Format-String übereinstimmen."
#: src/hello-world/small-example.md:37
msgid ""
"Show how you need to use `{}` as a placeholder if you want to print an "
"expression which is more complex than just a single variable."
msgstr ""
"Zeige, wie Du `{}` als Platzhalter verwenden musst, wenn Du einen Ausdruck "
"(Expression) drucken möchtest, der komplexer als nur eine einzelne Variable "
"ist."
#: src/hello-world/small-example.md:40
msgid ""
"Show the students the standard library, show them how to search for `std::"
"fmt` which has the rules of the formatting mini-language. It's important "
"that the students become familiar with searching in the standard library."
msgstr ""
"Zeige den Kursteilnehmern die Standardbibliothek (standard library) und "
"zeige ihnen, wie sie nach `std::fmt` suchen welches die Regeln der "
"Formatierungs-Minisprache enthält. Es ist wichtig, dass die Kursteilnehmer "
"mit der Suche in der Standardbibliothek vertraut gemacht werden."
#: src/hello-world/small-example.md:44
msgid ""
"In a shell `rustup doc std::fmt` will open a browser on the local std::fmt "
"documentation"
msgstr ""
#: src/why-rust.md:3
msgid "Some unique selling points of Rust:"
msgstr "Einige Alleinstellungsmerkmale von Rust:"
#: src/why-rust.md:5
msgid "Compile time memory safety."
msgstr "Kompilierzeit-Speichersicherheit."
#: src/why-rust.md:6
msgid "Lack of undefined runtime behavior."
msgstr "Mangel in undefiniertem Laufzeitverhalten."
#: src/why-rust.md:7
msgid "Modern language features."
msgstr "Moderne Sprachfunktionen."
#: src/why-rust.md:11
msgid ""
"Make sure to ask the class which languages they have experience with. "
"Depending on the answer you can highlight different features of Rust:"
msgstr ""
"Frage den Kurs unbedingt, mit welchen Programmiersprachen sie Erfahrung "
"haben. Abhängig 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_ "
"via the borrow checker. You get performance like in C and C++, but you don't "
"have the memory unsafety issues. In addition, you get a modern language with "
"constructs like pattern matching and built-in dependency management."
msgstr ""
"Erfahrung mit C oder C++: Rust eliminiert eine ganze Klasse von "
"_Laufzeitfehlern (runtime Errors)_ über den Ausleihenprüfer (borrow "
"checker). Du erhältst eine ähnliche Leistung wie in C und C++, aber hast "
"keine Probleme mit der Speicherunsicherheit. Darüber hinaus erhältst Du eine "
"moderne Sprache mit Konstrukten wie Mustervergleich (Pattern matching) und "
"integriertes Abhängigkeitsmanagement (dependency management)."
#: src/why-rust.md:19
msgid ""
"Experience with Java, Go, Python, JavaScript...: You get the same memory "
"safety as in those languages, plus a similar high-level language feeling. In "
"addition you get fast and predictable performance like C and C++ (no garbage "
"collector) as well as access to low-level hardware (should you need it)"
msgstr ""
"Erfahrung mit Java, Go, Python, JavaScript...: Du erhältst die gleiche "
"Speichersicherheit wie in diesen Sprachen, dazu ein ähnlich hohes "
"Sprachgefühl. Zusätzlich erhältst Du eine schnelle und vorhersehbare "
"Leistung wie in C und C++ (keine Speicherbereinigung (garbage collector)) "
"sowie Zugriff auf Low-Level-Hardware (falls benötigt)."
#: src/why-rust/compile-time.md:3
msgid "Static memory management at compile time:"
msgstr "Statische Speicherverwaltung zur Kompilierzeit:"
#: src/why-rust/compile-time.md:5
msgid "No uninitialized variables."
msgstr "Keine nicht initialisierten (uninitialized) Variablen."
#: src/why-rust/compile-time.md:6
msgid "No memory leaks (_mostly_, see notes)."
msgstr "Keine Speicherlecks (_meistens_, siehe Anmerkungen)."
#: src/why-rust/compile-time.md:7
msgid "No double-frees."
msgstr "Keine Doppelbefreiungen (double-frees)."
#: src/why-rust/compile-time.md:8
msgid "No use-after-free."
msgstr "Keine Nachnutzung (use-after-free)."
#: src/why-rust/compile-time.md:9
msgid "No `NULL` pointers."
msgstr "Keine `NULL`\\-Zeiger (null Pointer)."
#: src/why-rust/compile-time.md:10
msgid "No forgotten locked mutexes."
msgstr "Keine vergessenen gesperrten Mutexe."
#: src/why-rust/compile-time.md:11
msgid "No data races between threads."
msgstr "Keine Datenrennen (data races) zwischen Ausführungssträngen (threads)."
#: src/why-rust/compile-time.md:12
msgid "No iterator invalidation."
msgstr "Keine Invalidierung des Iterators."
#: src/why-rust/compile-time.md:16
msgid ""
"It is possible to produce memory leaks in (safe) Rust. Some examples are:"
msgstr ""
"Es ist möglich, Speicherlecks in (sicherem) Rust zu erzeugen. Einige "
"Beispiele sind:"
#: src/why-rust/compile-time.md:19
msgid ""
"You can use [`Box::leak`](https://doc.rust-lang.org/std/boxed/struct.Box."
"html#method.leak) to leak a pointer. A use of this could be to get runtime-"
"initialized and runtime-sized static variables"
msgstr ""
"Du kannst [`Box::leak`](https://doc.rust-lang.org/std/boxed/struct.Box."
"html#method.leak) verwenden, um einen Zeiger zu verlieren. Eine Nutzung "
"dieser könnte sein, um zur Laufzeit initialisierte statische Variablen in "
"Laufzeitgröße zu erhalten"
#: src/why-rust/compile-time.md:21
msgid ""
"You can use [`std::mem::forget`](https://doc.rust-lang.org/std/mem/fn.forget."
"html) to make the compiler \"forget\" about a value (meaning the destructor "
"is never run)."
msgstr ""
"Du kannst [`std::mem::forget`](https://doc.rust-lang.org/std/mem/fn.forget."
"html) verwenden, um den Compiler einen Wert \"vergessen\" zu lassen (was "
"bedeutet, dass der Destruktor niemals ausgeführt wird)."
#: src/why-rust/compile-time.md:23
msgid ""
"You can also accidentally create a [reference cycle](https://doc.rust-lang."
"org/book/ch15-06-reference-cycles.html) with `Rc` or `Arc`."
msgstr ""
"Du kannst auch versehentlich einen \\[Referenzzyklus\\] mit `Rc` oder `Arc` "
"erstellen"
#: src/why-rust/compile-time.md:25
msgid ""
"In fact, some will consider infinitely populating a collection a memory leak "
"and Rust does not protect from those."
msgstr ""
"In der Tat werden einige in Betracht ziehen, eine Sammlung (Collection) "
"unendlich zu befüllen Rust schützt nicht vor sowelchen Speicherlecks "
"(memory leaks)."
#: src/why-rust/compile-time.md:28
msgid ""
"For the purpose of this course, \"No memory leaks\" should be understood as "
"\"Pretty much no _accidental_ memory leaks\"."
msgstr ""
"\"Keine Speicherlecks\" sollten somit verstanden werden als \"so gut wie "
"keine _versehentlichen_ Speicherlecks\"."
#: src/why-rust/runtime.md:3
msgid "No undefined behavior at runtime:"
msgstr "Kein undefiniertes Verhalten (undefined behavior) zur Laufzeit:"
#: src/why-rust/runtime.md:5
msgid "Array access is bounds checked."
msgstr "Der Array-Zugriff wird auf Grenzen geprüft."
#: src/why-rust/runtime.md:6
#, fuzzy
msgid "Integer overflow is defined (panic or wrap-around)."
msgstr "Ganzzahlüberlauf ist definiert."
#: src/why-rust/runtime.md:12
#, fuzzy
msgid ""
"Integer overflow is defined via the [`overflow-checks`](https://doc.rust-"
"lang.org/rustc/codegen-options/index.html#overflow-checks) compile-time "
"flag. If enabled, the program will panic (a controlled crash of the "
"program), otherwise you get wrap-around semantics. By default, you get "
"panics in debug mode (`cargo build`) and wrap-around in release mode (`cargo "
"build --release`)."
msgstr ""
"Ganzzahlüberlauf (integer overflow) wird über ein Flag zur Kompilierzeit "
"definiert. Die Optionen sind entweder ein kontrollierter Abbruch des "
"Programms (panic) oder eine Wrap-Around Semantik. Standardmäßig erhältst Du "
"einen Abbruch (panic) im Debug-Modus (`cargo build`) und ein Wrap-Around im "
"Release-Modus (`cargo build --release`)."
#: src/why-rust/runtime.md:18
msgid ""
"Bounds checking cannot be disabled with a compiler flag. It can also not be "
"disabled directly with the `unsafe` keyword. However, `unsafe` allows you to "
"call functions such as `slice::get_unchecked` which does not do bounds "
"checking."
msgstr ""
"Die Grenzüberprüfung (bounds checking) kann nicht mit einem Compiler-Flag "
"deaktiviert werden. Es kann auch nicht direkt mit dem Schlüsselwort „unsafe“ "
"deaktiviert werden. Jedoch kannst Du Funktionen wie `slice::get_unchecked` "
"mit `unsafe` aufrufen was keine Grenzenprüfung durchführt."
#: src/why-rust/modern.md:3
#, fuzzy
msgid "Rust is built with all the experience gained in the last decades."
msgstr "Rust wurde mit vielen Erfahrungen aus den letzten 40 Jahren gebaut."
#: src/why-rust/modern.md:5
msgid "Language Features"
msgstr "Sprachmerkmale"
#: src/why-rust/modern.md:7
msgid "Enums and pattern matching."
msgstr "Enums und Musterabgleich (pattern matching)."
#: src/why-rust/modern.md:8
msgid "Generics."
msgstr "Generika."
#: src/why-rust/modern.md:9
msgid "No overhead FFI."
msgstr "Kein Overhead-FFI."
#: src/why-rust/modern.md:10
msgid "Zero-cost abstractions."
msgstr "Nullkosten-Abstraktionen."
#: src/why-rust/modern.md:12
msgid "Tooling"
msgstr "Werkzeuge (Tools)"
#: src/why-rust/modern.md:14
msgid "Great compiler errors."
msgstr "Gute Compiler-Fehler."
#: src/why-rust/modern.md:15
msgid "Built-in dependency manager."
msgstr "Eingebauter Paketmanager."
#: src/why-rust/modern.md:16
msgid "Built-in support for testing."
msgstr "Eingebaute Unterstützung für Tests."
#: src/why-rust/modern.md:17
msgid "Excellent Language Server Protocol support."
msgstr "Hervorragende Unterstützung des Language Server Protokolls."
#: src/why-rust/modern.md:23
msgid ""
"Zero-cost abstractions, similar to C++, means that you don't have to 'pay' "
"for higher-level programming constructs with memory or CPU. For example, "
"writing a loop using `for` should result in roughly the same low level "
"instructions as using the `.iter().fold()` construct."
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()`."
#: src/why-rust/modern.md:28
msgid ""
"It may be worth mentioning that Rust enums are 'Algebraic Data Types', also "
"known as 'sum types', which allow the type system to express things like "
"`Option` and `Result`."
msgstr ""
"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."
#: src/why-rust/modern.md:32
msgid ""
"Remind people to read the errors --- many developers have gotten used to "
"ignore lengthy compiler output. The Rust compiler is significantly more "
"talkative than other compilers. It will often provide you with _actionable_ "
"feedback, ready to copy-paste into your code."
msgstr ""
"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."
#: src/why-rust/modern.md:37
msgid ""
"The Rust standard library is small compared to languages like Java, Python, "
"and Go. Rust does not come with several things you might consider standard "
"and essential:"
msgstr ""
"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:"
#: src/why-rust/modern.md:41
msgid "a random number generator, but see [rand](https://docs.rs/rand/)."
msgstr "ein Zufallszahlengenerator, siehe aber [rand](https://docs.rs/rand/)."
#: src/why-rust/modern.md:42
msgid "support for SSL or TLS, but see [rusttls](https://docs.rs/rustls/)."
msgstr ""
"Unterstützung für SSL oder TLS, siehe jedoch [rusttls](https://docs.rs/"
"rustls/)."
#: src/why-rust/modern.md:43
msgid "support for JSON, but see [serde_json](https://docs.rs/serde_json/)."
msgstr ""
"Unterstützung für JSON, siehe jedoch [serde_json](https://docs.rs/"
"serde_json/)."
#: src/why-rust/modern.md:45
msgid ""
"The reasoning behind this is that functionality in the standard library "
"cannot go away, so it has to be very stable. For the examples above, the "
"Rust community is still working on finding the best solution --- and perhaps "
"there isn't a single \"best solution\" for some of these things."
msgstr ""
"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“."
#: src/why-rust/modern.md:50
msgid ""
"Rust comes with a built-in package manager in the form of Cargo and this "
"makes it trivial to download and compile third-party crates. A consequence "
"of this is that the standard library can be smaller."
msgstr ""
"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."
#: src/why-rust/modern.md:54
msgid ""
"Discovering good third-party crates can be a problem. Sites like help with this by letting you compare health metrics for crates to "
"find a good and trusted one."
msgstr ""
"Das Auffinden guter Kisten von Drittanbietern kann ein Problem sein. "
"Websites wie hilft Dir dabei, indem es Dir ermöglicht, "
"Gesundheitsmetriken für Kisten zu vergleichen, um eine gute und "
"vertrauenswürdige zu finden."
#: src/why-rust/modern.md:58
msgid ""
"[rust-analyzer](https://rust-analyzer.github.io/) is a well supported LSP "
"implementation used in major IDEs and text editors."
msgstr ""
"[rust-analyzer](https://rust-analyzer.github.io/) ist eine gut unterstützte "
"LSP-Implementierung, die in wichtigen IDEs und Texteditoren verwendet wird."
#: src/basic-syntax.md:3
msgid "Much of the Rust syntax will be familiar to you from C, C++ or Java:"
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."
msgstr ""
"Blöcke und Bereiche (scopes) werden durch geschweifte Klammern getrennt."
#: src/basic-syntax.md:6
msgid ""
"Line comments are started with `//`, block comments are delimited by `/* ... "
"*/`."
msgstr ""
"Zeilenkommentare beginnen mit `//`, Blockkommentare werden mit `/* ... */` "
"begrenzt"
#: src/basic-syntax.md:8
msgid "Keywords like `if` and `while` work the same."
msgstr "Schlüsselwörter (keywords) wie `if` und `while` funktionieren gleich."
#: src/basic-syntax.md:9
msgid "Variable assignment is done with `=`, comparison is done with `==`."
msgstr "Variablenzuweisung erfolgt mit `=`, Vergleich erfolgt mit `==`."
#: src/basic-syntax/scalar-types.md:3 src/basic-syntax/compound-types.md:3
#: src/exercises/day-3/safe-ffi-wrapper.md:16
#, fuzzy
msgid "Types"
msgstr "Typen"
#: src/basic-syntax/scalar-types.md:3 src/basic-syntax/compound-types.md:3
#, fuzzy
msgid "Literals"
msgstr "Literale"
#: src/basic-syntax/scalar-types.md:5
#, fuzzy
msgid "Signed integers"
msgstr "Ganzzahlen mit Vorzeichen"
#: src/basic-syntax/scalar-types.md:5
#, fuzzy
msgid "`i8`, `i16`, `i32`, `i64`, `i128`, `isize`"
msgstr "`i8`, `i16`, `i32`, `i64`, `i128`, `isize`"
#: src/basic-syntax/scalar-types.md:5
#, fuzzy
msgid "`-10`, `0`, `1_000`, `123_i64`"
msgstr "`-10`, `0`, `1_000`, `123i64`"
#: src/basic-syntax/scalar-types.md:6
#, fuzzy
msgid "Unsigned integers"
msgstr "Ganzzahlen ohne Vorzeichen `u8`, `u16`, `u32`, `u64`, `u128`, `usize`"
#: src/basic-syntax/scalar-types.md:6
#, fuzzy
msgid "`u8`, `u16`, `u32`, `u64`, `u128`, `usize`"
msgstr "`0`, `123`, `10u16`"
#: src/basic-syntax/scalar-types.md:6
#, fuzzy
msgid "`0`, `123`, `10_u16`"
msgstr "Fließkommazahlen"
#: src/basic-syntax/scalar-types.md:7
#, fuzzy
msgid "Floating point numbers"
msgstr "`f32`, `f64`"
#: src/basic-syntax/scalar-types.md:7
#, fuzzy
msgid "`f32`, `f64`"
msgstr "`3.14`, `-10.0e20`, `2f32`"
#: src/basic-syntax/scalar-types.md:7
#, fuzzy
msgid "`3.14`, `-10.0e20`, `2_f32`"
msgstr "Zeichenketten (Strings)"
#: src/basic-syntax/scalar-types.md:8
#, fuzzy
msgid "Strings"
msgstr "`&str`"
#: src/basic-syntax/scalar-types.md:8
#, fuzzy
msgid "`&str`"
msgstr "`\"foo\"`, `\"two\\nlines\"`"
#: src/basic-syntax/scalar-types.md:8
#, fuzzy
msgid "`\"foo\"`, `\"two\\nlines\"`"
msgstr "Unicode-Skalarwerte"
#: src/basic-syntax/scalar-types.md:9
#, fuzzy
msgid "Unicode scalar values"
msgstr "`char`"
#: src/basic-syntax/scalar-types.md:9
#, fuzzy
msgid "`char`"
msgstr "`'a'`, `'α'`, `'∞'`"
#: src/basic-syntax/scalar-types.md:9
#, fuzzy
msgid "`'a'`, `'α'`, `'∞'`"
msgstr "Wahrheitswerte (booleans)"
#: src/basic-syntax/scalar-types.md:10
#, fuzzy
msgid "Booleans"
msgstr "`bool`"
#: src/basic-syntax/scalar-types.md:10
#, fuzzy
msgid "`bool`"
msgstr "`true`, `false`"
#: src/basic-syntax/scalar-types.md:10
msgid "`true`, `false`"
msgstr ""
#: src/basic-syntax/scalar-types.md:12
msgid "The types have widths as follows:"
msgstr "Die Typen haben folgende Breiten:"
#: src/basic-syntax/scalar-types.md:14
msgid "`iN`, `uN`, and `fN` are _N_ bits wide,"
msgstr "`iN`, `uN` und `fN` sind _N_ Bits breit,"
#: src/basic-syntax/scalar-types.md:15
msgid "`isize` and `usize` are the width of a pointer,"
msgstr "`isize` und `usize` sind die Breite eines Zeigers,"
#: src/basic-syntax/scalar-types.md:16
#, fuzzy
msgid "`char` is 32 bits wide,"
msgstr "`char` ist 32 Bit breit,"
#: src/basic-syntax/scalar-types.md:17
#, fuzzy
msgid "`bool` is 8 bits wide."
msgstr "`bool` ist 8 Bit breit."
#: src/basic-syntax/scalar-types.md:21
msgid "There are a few syntaxes which are not shown above:"
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\"`. You can embed double-quotes by using an equal "
"amount of `#` on either side of the quotes:"
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:"
#: src/basic-syntax/scalar-types.md:27
msgid ""
"```rust,editable\n"
"fn main() {\n"
" println!(r#\"link\"#);\n"
" println!(\"link\");\n"
"}\n"
"```"
msgstr ""
"```rust,editable\n"
"fn main() {\n"
" println!(r#\"link\"#);\n"
" println!(\"link\");\n"
"}\n"
"```"
#: src/basic-syntax/scalar-types.md:34
msgid "Byte strings allow you to create a `&[u8]` value directly:"
msgstr "Mit Byte-Strings kannst Du direkt einen „&\\[u8\\]“-Wert erstellen:"
#: src/basic-syntax/scalar-types.md:36
msgid ""
"```rust,editable\n"
"fn main() {\n"
" println!(\"{:?}\", b\"abc\");\n"
" println!(\"{:?}\", &[97, 98, 99]);\n"
"}\n"
"```"
msgstr ""
"```rust,editable\n"
"fn main() {\n"
" println!(\"{:?}\", b\"abc\");\n"
" println!(\"{:?}\", &[97, 98, 99]);\n"
"}\n"
"```"
#: src/basic-syntax/scalar-types.md:43
msgid ""
"All underscores in numbers can be left out, they are for legibility only. So "
"`1_000` can be written as `1000` (or `10_00`), and `123_i64` can be written "
"as `123i64`."
msgstr ""
#: src/basic-syntax/compound-types.md:5
msgid "Arrays"
msgstr "Arrays"
#: src/basic-syntax/compound-types.md:5
msgid "`[T; N]`"
msgstr "`[T; N]`"
#: src/basic-syntax/compound-types.md:5
msgid "`[20, 30, 40]`, `[0; 3]`"
msgstr "`[20, 30, 40]`, `[0; 3]`"
#: src/basic-syntax/compound-types.md:6
msgid "Tuples"
msgstr "Tupel"
#: src/basic-syntax/compound-types.md:6
msgid "`()`, `(T,)`, `(T1, T2)`, ..."
msgstr "`()`, `(T,)`, `(T1, T2)`, ..."
#: src/basic-syntax/compound-types.md:6
msgid "`()`, `('x',)`, `('x', 1.2)`, ..."
msgstr "`()`, `('x',)`, `('x', 1.2)`, ..."
#: src/basic-syntax/compound-types.md:8
msgid "Array assignment and access:"
msgstr "Array-Zuordnung und Zugriff:"
#: src/basic-syntax/compound-types.md:10
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let mut a: [i8; 10] = [42; 10];\n"
" a[5] = 0;\n"
" println!(\"a: {:?}\", a);\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/compound-types.md:18
msgid "Tuple assignment and access:"
msgstr "Tupel-Zuweisung und Zugriff:"
#: src/basic-syntax/compound-types.md:20
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let t: (i8, bool) = (7, true);\n"
" println!(\"1st index: {}\", t.0);\n"
" println!(\"2nd index: {}\", t.1);\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/compound-types.md:32
msgid "Arrays:"
msgstr "Arrays:"
#: src/basic-syntax/compound-types.md:34
#, fuzzy
msgid ""
"A value of the array type `[T; N]` holds `N` (a compile-time constant) "
"elements of the same type `T`. Note that the length of the array is _part of "
"its type_, which means that `[u8; 3]` and `[u8; 4]` are considered two "
"different types."
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."
#: src/basic-syntax/compound-types.md:38
msgid "We can use literals to assign values to arrays."
msgstr "Wir können Literale verwenden, um Arrays Werte zuzuweisen."
#: src/basic-syntax/compound-types.md:40
msgid ""
"In the main function, the print statement asks for the debug implementation "
"with the `?` format parameter: `{}` gives the default output, `{:?}` gives "
"the debug output. We could also have used `{a}` and `{a:?}` without "
"specifying the value after the format string."
msgstr ""
"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."
#: src/basic-syntax/compound-types.md:45
msgid ""
"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“ (pretty print) auf, das einfacher zu lesen ist."
#: src/basic-syntax/compound-types.md:47
msgid "Tuples:"
msgstr "Tupel:"
#: src/basic-syntax/compound-types.md:49
msgid "Like arrays, tuples have a fixed length."
msgstr "Wie Arrays haben Tupel eine feste Länge."
#: src/basic-syntax/compound-types.md:51
msgid "Tuples group together values of different types into a compound type."
msgstr ""
"Tupel gruppieren Werte unterschiedlicher Typen zu einem zusammengesetzten "
"Typ."
#: src/basic-syntax/compound-types.md:53
msgid ""
"Fields of a tuple can be accessed by the period and the index of the value, "
"e.g. `t.0`, `t.1`."
msgstr ""
"Auf Felder eines Tupels kann durch einen Punkt gefolgt von dem Index des "
"Werts zugegriffen werden, z. B. „t.0“, „t.1“."
#: src/basic-syntax/compound-types.md:55
msgid ""
"The empty tuple `()` is also known as the \"unit type\". It is both a type, "
"and the only valid value of that type - that is to say both the type and its "
"value are expressed as `()`. It is used to indicate, for example, that a "
"function or expression has no return value, as we'll see in a future slide. "
msgstr ""
"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."
#: src/basic-syntax/compound-types.md:59
msgid ""
"You can think of it as `void` that can be familiar to you from other "
"programming languages."
msgstr ""
"Du kannst es Dir als `void` vorstellen, das Dir aus anderen "
"Programmiersprachen bekannt sein könnte."
#: src/basic-syntax/references.md:3
msgid "Like C++, Rust has references:"
msgstr "Wie C++ hat Rust Referenzen:"
#: src/basic-syntax/references.md:5
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let mut x: i32 = 10;\n"
" let ref_x: &mut i32 = &mut x;\n"
" *ref_x = 20;\n"
" println!(\"x: {x}\");\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/references.md:14
msgid "Some notes:"
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."
msgstr ""
"Wir müssen `ref_x` beim Zuweisen dereferenzieren, ähnlich wie bei C und C++-"
"Zeigern."
#: src/basic-syntax/references.md:17
msgid ""
"Rust will auto-dereference in some cases, in particular when invoking "
"methods (try `ref_x.count_ones()`)."
msgstr ""
"Rust wird in einigen Fällen automatisch dereferenzieren, insbesondere beim "
"Aufrufen von Methoden (probiere `ref_x.count_ones()`)."
#: src/basic-syntax/references.md:19
msgid ""
"References that are declared as `mut` can be bound to different values over "
"their lifetime."
msgstr ""
"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: "
"&mut i32`. The first one represents a mutable reference which can be bound "
"to different values, while the second represents a reference to a mutable "
"value."
msgstr ""
"Beachte unbedingt den Unterschied zwischen `let mut ref_x: &i32` und `let "
"ref_x: &mut i32`. Das erste stellt eine veränderliche Referenz (mutable "
"reference) dar, an die unterschiedliche Werte gebunden werden können, "
"während das zweite Beispiel einen Verweis auf einen veränderlichen Wert "
"darstellt."
#: src/basic-syntax/references-dangling.md:3
msgid "Rust will statically forbid dangling references:"
msgstr "Rust verbietet hängende Referenzen statisch:"
#: src/basic-syntax/references-dangling.md:5
msgid ""
"```rust,editable,compile_fail\n"
"fn main() {\n"
" let ref_x: &i32;\n"
" {\n"
" let x: i32 = 10;\n"
" ref_x = &x;\n"
" }\n"
" println!(\"ref_x: {ref_x}\");\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/references-dangling.md:16
msgid "A reference is said to \"borrow\" the value it refers to."
msgstr ""
"Eine Referenz \"leiht\" (borrows) sich den Wert, auf den sie sich bezieht, ."
#: src/basic-syntax/references-dangling.md:17
msgid ""
"Rust is tracking the lifetimes of all references to ensure they live long "
"enough."
msgstr ""
"Rust verfolgt die Lebensdauer aller Referenzen, um sicherzustellen, dass sie "
"lange genug leben"
#: src/basic-syntax/references-dangling.md:19
msgid "We will talk more about borrowing when we get to ownership."
msgstr ""
"Wir werden mehr über das Ausleihen (borrowing) sprechen, wenn wir zum "
"Eigentum (ownership) kommen."
#: 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):"
#: src/basic-syntax/slices.md:5
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let mut a: [i32; 6] = [10, 20, 30, 40, 50, 60];\n"
" println!(\"a: {a:?}\");\n"
"\n"
" let s: &[i32] = &a[2..4];\n"
"\n"
" println!(\"s: {s:?}\");\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/slices.md:16
msgid "Slices borrow data from the sliced type."
msgstr "Anteilstypen (slices) borgen (borrow) Daten vom Sliced-Typ."
#: src/basic-syntax/slices.md:17
#, fuzzy
msgid "Question: What happens if you modify `a[3]` right before printing `s`?"
msgstr "Frage: Was passiert, wenn Du `a[3]` änderst?"
#: src/basic-syntax/slices.md:21
msgid ""
"We create a slice by borrowing `a` and specifying the starting and ending "
"indexes in brackets."
msgstr ""
"Wir erstellen ein Anteilstyp, indem wir `a` ausleihen (borrow) und den "
"Start- und Endindex in Klammern angeben."
#: src/basic-syntax/slices.md:23
msgid ""
"If the slice starts at index 0, Rust’s range syntax allows us to drop the "
"starting index, meaning that `&a[0..a.len()]` and `&a[..a.len()]` are "
"identical."
msgstr ""
"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."
#: src/basic-syntax/slices.md:25
msgid ""
"The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are "
"identical."
msgstr ""
"Das Gleiche gilt für den letzten Index, daher sind `&a[2..a.len()]` und "
"`&a[2..]` identisch."
#: src/basic-syntax/slices.md:27
msgid ""
"To easily create a slice of the full array, we can therefore use `&a[..]`."
msgstr ""
"Um einfach einen Anteilstyp des gesamten Arrays zu erstellen, können wir "
"daher „&a\\[..\\]“ verwenden."
#: src/basic-syntax/slices.md:29
msgid ""
"`s` is a reference to a slice of `i32`s. Notice that the type of `s` "
"(`&[i32]`) no longer mentions the array length. This allows us to perform "
"computation on slices of different sizes."
msgstr ""
"`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."
#: src/basic-syntax/slices.md:31
msgid ""
"Slices always borrow from another object. In this example, `a` has to remain "
"'alive' (in scope) for at least as long as our slice. "
msgstr ""
"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."
#: src/basic-syntax/slices.md:33
#, fuzzy
msgid ""
"The question about modifying `a[3]` can spark an interesting discussion, but "
"the answer is that for memory safety reasons you cannot do it through `a` at "
"this point in the execution, but you can read the data from both `a` and `s` "
"safely. It works before you created the slice, and again after the "
"`println`, when the slice is no longer used. More details will be explained "
"in the borrow checker section."
msgstr ""
"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. Weitere Einzelheiten werden im Abschnitt "
"„Ausleihenprüfer“ (borrow checker) erläutert."
#: src/basic-syntax/string-slices.md:1
msgid "`String` vs `str`"
msgstr "`String` vs `str`"
#: src/basic-syntax/string-slices.md:3
msgid "We can now understand the two string types in Rust:"
msgstr "Kommen wir jetzt zu den beiden String-Typen in Rust:"
#: src/basic-syntax/string-slices.md:5
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let s1: &str = \"World\";\n"
" println!(\"s1: {s1}\");\n"
"\n"
" let mut s2: String = String::from(\"Hello \");\n"
" println!(\"s2: {s2}\");\n"
" s2.push_str(s1);\n"
" println!(\"s2: {s2}\");\n"
" \n"
" let s3: &str = &s2[6..];\n"
" println!(\"s3: {s3}\");\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/string-slices.md:20
msgid "Rust terminology:"
msgstr "Rust-Terminologie:"
#: src/basic-syntax/string-slices.md:22
msgid "`&str` an immutable reference to a string slice."
msgstr ""
"`&str` eine unveränderliche (immutable) Referenz auf einen String-Slice."
#: src/basic-syntax/string-slices.md:23
msgid "`String` a mutable string buffer."
msgstr "`String` ein veränderlicher String-Puffer (mutable string buffer)."
#: src/basic-syntax/string-slices.md:27
msgid ""
"`&str` introduces a string slice, which is an immutable reference to UTF-8 "
"encoded string data stored in a block of memory. String literals "
"(`”Hello”`), are stored in the program’s binary."
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."
#: src/basic-syntax/string-slices.md:30
msgid ""
"Rust’s `String` type is a wrapper around a vector of bytes. As with a "
"`Vec`, it is owned."
msgstr ""
"Der `String`\\-Typ von Rust ist eine Verpackung (wrapper) um einen Byte-"
"Vektor. Wie bei einem `Vec` ist es im Besitz."
#: src/basic-syntax/string-slices.md:32
msgid ""
"As with many other types `String::from()` creates a string from a string "
"literal; `String::new()` creates a new empty string, to which string data "
"can be added using the `push()` and `push_str()` methods."
msgstr ""
"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."
#: src/basic-syntax/string-slices.md:35
msgid ""
"The `format!()` macro is a convenient way to generate an owned string from "
"dynamic values. It accepts the same format specification as `println!()`."
msgstr ""
"Das Makro `format!()` ist eine praktische Möglichkeit, einen aneigenbaren "
"(owned) String aus dynamischen Werten zu generieren. Es akzeptiert die "
"gleiche Formatspezifikation wie `println!()`."
#: src/basic-syntax/string-slices.md:38
msgid ""
"You can borrow `&str` slices from `String` via `&` and optionally range "
"selection."
msgstr ""
"Du kannst `&str`\\-Slices von `String` über `&` und optional eine "
"Bereichsauswahl (range selection) ausleihen."
#: src/basic-syntax/string-slices.md:40
msgid ""
"For C++ programmers: think of `&str` as `const char*` from C++, but the one "
"that always points to a valid string in memory. Rust `String` is a rough "
"equivalent of `std::string` from C++ (main difference: it can only contain "
"UTF-8 encoded bytes and will never use a small-string optimization)."
msgstr ""
"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:3
msgid ""
"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:"
#: src/basic-syntax/functions.md:5
msgid ""
"```rust,editable\n"
"fn main() {\n"
" print_fizzbuzz_to(20);\n"
"}\n"
"\n"
"fn is_divisible(n: u32, divisor: u32) -> bool {\n"
" if divisor == 0 {\n"
" return false;\n"
" }\n"
" n % divisor == 0\n"
"}\n"
"\n"
"fn fizzbuzz(n: u32) -> String {\n"
" let fizz = if is_divisible(n, 3) { \"fizz\" } else { \"\" };\n"
" let buzz = if is_divisible(n, 5) { \"buzz\" } else { \"\" };\n"
" if fizz.is_empty() && buzz.is_empty() {\n"
" return format!(\"{n}\");\n"
" }\n"
" format!(\"{fizz}{buzz}\")\n"
"}\n"
"\n"
"fn print_fizzbuzz_to(n: u32) {\n"
" for i in 1..=n {\n"
" println!(\"{}\", fizzbuzz(i));\n"
" }\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/functions.md:35
msgid ""
"We refer in `main` to a function written below. Neither forward declarations "
"nor headers are necessary. "
msgstr ""
"Wir beziehen uns in `main` auf eine unten beschriebene Funktion. Es sind "
"weder Forward-Deklarationen noch Header erforderlich."
#: src/basic-syntax/functions.md:36
msgid ""
"Declaration parameters are followed by a type (the reverse of some "
"programming languages), then a return type."
msgstr ""
"Auf Deklarationsparameter folgt ein Typ (das Gegenteil einiger "
"Programmiersprachen) und dann ein Rückgabetyp."
#: src/basic-syntax/functions.md:37
msgid ""
"The last expression in a function body (or any block) becomes the return "
"value. Simply omit the `;` at the end of the expression."
msgstr ""
"Der letzte Ausdruck in einem Funktionskörper (oder einem beliebigen Block) "
"wird zum Rückgabewert. Lasse einfach das `;` am Ende des Ausdrucks weg."
#: src/basic-syntax/functions.md:38
msgid ""
"Some functions have no return value, and return the 'unit type', `()`. The "
"compiler will infer this if the `-> ()` return type is omitted."
msgstr ""
"Einige Funktionen haben keinen Rückgabewert und geben den `Einheitentyp` "
"(Unittyp) `()` zurück. Der Compiler schließt daraus, wenn der Rückgabetyp `-"
">()` weggelassen wird."
#: src/basic-syntax/functions.md:39
msgid ""
"The range expression in the `for` loop in `print_fizzbuzz_to()` contains "
"`=n`, which causes it to include the upper bound."
msgstr ""
"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: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."
#: src/basic-syntax/rustdoc.md:5
msgid ""
"```rust,editable\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"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/rustdoc.md:17
msgid ""
"The contents are treated as Markdown. All published Rust library crates are "
"automatically documented at [`docs.rs`](https://docs.rs) using the [rustdoc]"
"(https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) tool. It is "
"idiomatic to document all public items in an API using this pattern."
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."
#: src/basic-syntax/rustdoc.md:24
msgid ""
"Show students the generated docs for the `rand` crate at [`docs.rs/rand`]"
"(https://docs.rs/rand)."
msgstr ""
"Zeige den Schülern die generierten Dokumente für die Kiste (crate) `rand` "
"unter [`docs.rs/rand`](https://docs.rs/rand)."
#: src/basic-syntax/rustdoc.md:27
msgid ""
"This course does not include rustdoc on slides, just to save space, but in "
"real code they should be present."
msgstr ""
"Dieser Kurs enthält keine Rustdocs auf Folien, um Platz zu sparen, aber im "
"echten Code sollten Rustdoc-Kommentare vorhanden sein."
#: src/basic-syntax/rustdoc.md:30
msgid ""
"Inner doc comments are discussed later (in the page on modules) and need not "
"be addressed here."
msgstr ""
"Inner doc Kommentare werden später besprochen (auf der Seite zu Modulen) und "
"müssen hier nicht behandelt werden."
#: src/basic-syntax/rustdoc.md:33
msgid ""
"Rustdoc comments can contain code snippets that we can run and test using "
"`cargo test`. We will discuss these tests in the [Testing section](../"
"testing/doc-tests.html)."
msgstr ""
#: src/basic-syntax/methods.md:3
msgid ""
"Methods are functions associated with a type. The `self` argument of a "
"method is an instance of the type it is associated with:"
msgstr ""
"Methoden sind Funktionen, die einem bestimmten Typ zugeordnet sind. Das "
"`self`\\-Argument einer Methode ist die Instanz des Typs, dem sie zugeordnet "
"ist:"
#: src/basic-syntax/methods.md:6
msgid ""
"```rust,editable\n"
"struct Rectangle {\n"
" width: u32,\n"
" height: u32,\n"
"}\n"
"\n"
"impl Rectangle {\n"
" fn area(&self) -> u32 {\n"
" self.width * self.height\n"
" }\n"
"\n"
" fn inc_width(&mut self, delta: u32) {\n"
" self.width += delta;\n"
" }\n"
"}\n"
"\n"
"fn main() {\n"
" let mut rect = Rectangle { width: 10, height: 5 };\n"
" println!(\"old area: {}\", rect.area());\n"
" rect.inc_width(5);\n"
" println!(\"new area: {}\", rect.area());\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/methods.md:30
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."
#: src/basic-syntax/methods.md:34
#, fuzzy
msgid "Add a static method called `Rectangle::new` and call this from `main`:"
msgstr ""
"Füge einen `Rectangle::new`\\-Konstruktor hinzu und rufe diesen von `main` "
"aus auf:"
#: src/basic-syntax/methods.md:42
msgid ""
"While _technically_, Rust does not have custom constructors, static methods "
"are commonly used to initialize structs (but don't have to). The actual "
"constructor, `Rectangle { width, height }`, could be called directly. See "
"the [Rustnomicon](https://doc.rust-lang.org/nomicon/constructors.html)."
msgstr ""
#: src/basic-syntax/methods.md:45
#, fuzzy
msgid ""
"Add a `Rectangle::square(width: u32)` constructor to illustrate that such "
"static methods can take arbitrary parameters."
msgstr ""
"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"
msgstr "Funktionsüberladung"
#: src/basic-syntax/functions-interlude.md:3
msgid "Overloading is not supported:"
msgstr "Überladen wird nicht unterstützt:"
#: src/basic-syntax/functions-interlude.md:5
msgid "Each function has a single implementation:"
msgstr "Jede Funktion hat eine einzige Implementierung:"
#: src/basic-syntax/functions-interlude.md:6
msgid "Always takes a fixed number of parameters."
msgstr "Akzeptiert immer eine feste Anzahl von Parametern."
#: src/basic-syntax/functions-interlude.md:7
msgid "Always takes a single set of parameter types."
msgstr "Akzeptiert immer einen einzelnen Satz von Parametertypen."
#: src/basic-syntax/functions-interlude.md:8
msgid "Default values are not supported:"
msgstr "Standardwerte werden nicht unterstützt:"
#: src/basic-syntax/functions-interlude.md:9
msgid "All call sites have the same number of arguments."
msgstr ""
"Alle Aufrufstellen (call sites) haben die gleiche Anzahl von Argumenten."
#: src/basic-syntax/functions-interlude.md:10
msgid "Macros are sometimes used as an alternative."
msgstr "Makros werden manchmal als Alternative verwendet."
#: src/basic-syntax/functions-interlude.md:12
msgid "However, function parameters can be generic:"
msgstr "Funktionsparameter können jedoch generisch sein:"
#: src/basic-syntax/functions-interlude.md:14
msgid ""
"```rust,editable\n"
"fn pick_one(a: T, b: T) -> T {\n"
" if std::process::id() % 2 == 0 { a } else { b }\n"
"}\n"
"\n"
"fn main() {\n"
" println!(\"coin toss: {}\", pick_one(\"heads\", \"tails\"));\n"
" println!(\"cash prize: {}\", pick_one(500, 1000));\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/functions-interlude.md:27
msgid ""
"When using generics, the standard library's `Into` can provide a kind of "
"limited polymorphism on argument types. We will see more details in a later "
"section."
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."
#: src/exercises/day-1/morning.md:1
msgid "Day 1: Morning Exercises"
msgstr "Tag 1: Übungen am Morgen"
#: src/exercises/day-1/morning.md:3
msgid "In these exercises, we will explore two parts of Rust:"
msgstr "In diesen Übungen werden wir zwei Teile von Rust erkunden:"
#: src/exercises/day-1/morning.md:5
msgid "Implicit conversions between types."
msgstr "Implizite Konvertierungen zwischen Typen."
#: src/exercises/day-1/morning.md:7
msgid "Arrays and `for` loops."
msgstr "Arrays und `for`\\-Schleifen."
#: src/exercises/day-1/morning.md:11
msgid "A few things to consider while solving the exercises:"
msgstr "Ein paar Dinge, die Du beim Lösen der Aufgaben beachten solltest:"
#: src/exercises/day-1/morning.md:13
msgid ""
"Use a local Rust installation, if possible. This way you can get auto-"
"completion in your editor. See the page about [Using Cargo](../../cargo.md) "
"for details on installing Rust."
msgstr ""
"Verwende nach Möglichkeit eine lokale Rust-Installation. Auf diese Weise "
"kannst Du Autovervollständigung in Deinem Editor erhalten. Weitere "
"Informationen findest Du auf der Seite: \\[Cargo verwenden\\]."
#: src/exercises/day-1/morning.md:17
msgid "Alternatively, use the Rust Playground."
msgstr "Alternativ kannst du den Rust Spielplatz verwenden."
#: src/exercises/day-1/morning.md:19
msgid ""
"The code snippets are not editable on purpose: the inline code snippets lose "
"their state if you navigate away from the page."
msgstr ""
"Die Code-Snippets sind absichtlich nicht editierbar: die Inline-Code-"
"Snippets verlieren Deine Änderungen, sobald Du die Seite verlässt."
#: src/exercises/day-1/morning.md:22 src/exercises/day-2/morning.md:11
#: src/exercises/day-3/morning.md:9 src/exercises/bare-metal/morning.md:7
#: src/exercises/concurrency/morning.md:12
#, fuzzy
msgid ""
"After looking at the exercises, you can look at the [solutions](solutions-"
"morning.md) provided."
msgstr ""
"Nachdem Sie sich die Übung angesehen haben, können Sie sich die "
"bereitgestellte \\[Lösung\\] ansehen."
#: src/exercises/day-1/implicit-conversions.md:3
msgid ""
"Rust will not automatically apply _implicit conversions_ between types "
"([unlike C++](https://en.cppreference.com/w/cpp/language/"
"implicit_conversion)). You can see this in a program like this:"
msgstr ""
"Rust wendet nicht automatisch _implizite Konvertierungen_ zwischen Typen an "
"(\\[anders als C++[3](https://en.cppreference.com/w/cpp/language/"
"implicit_conversion)). Das kannst Du an einem Programm wie diesem sehen:"
#: src/exercises/day-1/implicit-conversions.md:6
msgid ""
"```rust,editable,compile_fail\n"
"fn multiply(x: i16, y: i16) -> i16 {\n"
" x * y\n"
"}\n"
"\n"
"fn main() {\n"
" let x: i8 = 15;\n"
" let y: i16 = 1000;\n"
"\n"
" println!(\"{x} * {y} = {}\", multiply(x, y));\n"
"}\n"
"```"
msgstr ""
#: src/exercises/day-1/implicit-conversions.md:19
msgid ""
"The Rust integer types all implement the [`From`](https://doc.rust-lang."
"org/std/convert/trait.From.html) and [`Into`](https://doc.rust-lang.org/"
"std/convert/trait.Into.html) traits to let us convert between them. The "
"`From` trait has a single `from()` method and similarly, the `Into` "
"trait has a single `into()` method. Implementing these traits is how a type "
"expresses that it can be converted into another type."
msgstr ""
"Alle Rust-Integer-Typen implementieren die [`From`](https://doc.rust-lang."
"org/std/convert/trait.From.html)\\- und [`Into`](https://doc.rust-lang."
"org/std/convert/trait.Into.html)\\-Merkmale (traits), um zwischen ihnen "
"umzuwandeln. Das `From`\\-Merkmal (trait) hat eine einzige `from()` \\-"
"Methode und ähnlicherweise hat das `Into`\\-Merkmal auch nur eine einzige "
"`into()`\\-Methode. Durch die Implementierung dieser Merkmale (traits) "
"drückt ein Typ aus, zu welchen anderen Typen dieser umgewandelt werden kann."
#: src/exercises/day-1/implicit-conversions.md:25
msgid ""
"The standard library has an implementation of `From for i16`, which "
"means that we can convert a variable `x` of type `i8` to an `i16` by "
"calling `i16::from(x)`. Or, simpler, with `x.into()`, because `From for "
"i16` implementation automatically create an implementation of `Into for "
"i8`."
msgstr ""
"Die Standardbibliothek enthält eine Implementierung von `From for i16`, "
"was bedeutet dass wir eine Variable `x` vom Typ `i8` in ein `i16` durch "
"`i16::from(x)` umwandeln können. Alternativ geht dies mit `x.into()`, denn "
"die `From for i16`\\-Implementierung erstellt automatisch eine "
"`Into for i8`\\-Implementierung."
#: src/exercises/day-1/implicit-conversions.md:30
msgid ""
"The same applies for your own `From` implementations for your own types, so "
"it is sufficient to only implement `From` to get a respective `Into` "
"implementation automatically."
msgstr ""
"Dasselbe gilt für `From`\\-Implementierungen für Deine eigenen Typen. Es "
"reicht also aus, nur `From` zu implementieren, um automatisch eine "
"entsprechende `Into`\\-Implementierung zu erhalten."
#: src/exercises/day-1/implicit-conversions.md:33
msgid "Execute the above program and look at the compiler error."
msgstr "Führe das obige Programm aus und schau Dir den Compiler-Fehler an."
#: src/exercises/day-1/implicit-conversions.md:35
msgid "Update the code above to use `into()` to do the conversion."
msgstr ""
"Aktualisiere den obigen Code, um `into()` für die Konvertierung zu verwenden."
#: src/exercises/day-1/implicit-conversions.md:37
msgid ""
"Change the types of `x` and `y` to other things (such as `f32`, `bool`, "
"`i128`) to see which types you can convert to which other types. Try "
"converting small types to big types and the other way around. Check the "
"[standard library documentation](https://doc.rust-lang.org/std/convert/trait."
"From.html) to see if `From` is implemented for the pairs you check."
msgstr ""
"Ändere die Typen von `x` und `y` in andere Typen (z. B. `f32`, `bool`, "
"`i128`), um zu sehen, welche Typen Du in welche anderen Typen konvertieren "
"kannst. Versuche, kleine Typen in große Typen umzuwandeln und umgekehrt. "
"Schau in der [Standardbibliotheksdokumentation](https://doc.rust-lang.org/"
"std/convert/trait.From.html) nach, ob `From` für die von Dir überprüften "
"Paare implementiert sind."
#: src/exercises/day-1/for-loops.md:1
#: src/exercises/day-1/solutions-morning.md:3
msgid "Arrays and `for` Loops"
msgstr "Arrays und `for`\\-Schleifen"
#: src/exercises/day-1/for-loops.md:3
msgid "We saw that an array can be declared like this:"
msgstr "Wir haben gesehen, dass ein Array wie folgt deklariert werden kann:"
#: src/exercises/day-1/for-loops.md:9
msgid ""
"You can print such an array by asking for its debug representation with `{:?}"
"`:"
msgstr ""
"Du kannst ein solches Array drucken (print), indem Du mit `{:?}` nach der "
"Debug-Darstellung fragst:"
#: src/exercises/day-1/for-loops.md:11
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let array = [10, 20, 30];\n"
" println!(\"array: {array:?}\");\n"
"}\n"
"```"
msgstr ""
#: src/exercises/day-1/for-loops.md:18
msgid ""
"Rust lets you iterate over things like arrays and ranges using the `for` "
"keyword:"
msgstr ""
"Mit Rust kannst Du über Dinge wie Arrays und Ranges iterieren, indem Du "
"`for` verwendest:"
#: src/exercises/day-1/for-loops.md:21
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let array = [10, 20, 30];\n"
" print!(\"Iterating over array:\");\n"
" for n in &array {\n"
" print!(\" {n}\");\n"
" }\n"
" println!();\n"
"\n"
" print!(\"Iterating over range:\");\n"
" for i in 0..3 {\n"
" print!(\" {}\", array[i]);\n"
" }\n"
" println!();\n"
"}\n"
"```"
msgstr ""
#: src/exercises/day-1/for-loops.md:38
msgid ""
"Use the above to write a function `pretty_print` which pretty-print a matrix "
"and a function `transpose` which will transpose a matrix (turn rows into "
"columns):"
msgstr ""
"Verwende den obigen Code, um eine Funktion `pretty_print` zu schreiben, die "
"eine Matrix formatiert druckt und schreibe eine Funktion `transpose`, die "
"eine Matrix transponiert (Zeilen in Spalten umwandelt):"
#: src/exercises/day-1/for-loops.md:41
msgid ""
"```bob\n"
" ⎛⎡1 2 3⎤⎞ ⎡1 4 7⎤\n"
"\"transpose\"⎜⎢4 5 6⎥⎟ \"==\"⎢2 5 8⎥\n"
" ⎝⎣7 8 9⎦⎠ ⎣3 6 9⎦\n"
"```"
msgstr ""
#: src/exercises/day-1/for-loops.md:47
msgid "Hard-code both functions to operate on 3 × 3 matrices."
msgstr "Beide Funktionen müssen dabei nur mit 3 × 3-Matrizen arbeiten."
#: src/exercises/day-1/for-loops.md:49
msgid ""
"Copy the code below to and implement the "
"functions:"
msgstr ""
"Kopiere den folgenden Code nach und "
"implementiere die Funktionen:"
#: src/exercises/day-1/for-loops.md:52
msgid ""
"```rust,should_panic\n"
"// TODO: remove this when you're done with your implementation.\n"
"#![allow(unused_variables, dead_code)]\n"
"\n"
"fn transpose(matrix: [[i32; 3]; 3]) -> [[i32; 3]; 3] {\n"
" unimplemented!()\n"
"}\n"
"\n"
"fn pretty_print(matrix: &[[i32; 3]; 3]) {\n"
" unimplemented!()\n"
"}\n"
"\n"
"fn main() {\n"
" let matrix = [\n"
" [101, 102, 103], // <-- the comment makes rustfmt add a newline\n"
" [201, 202, 203],\n"
" [301, 302, 303],\n"
" ];\n"
"\n"
" println!(\"matrix:\");\n"
" pretty_print(&matrix);\n"
"\n"
" let transposed = transpose(matrix);\n"
" println!(\"transposed:\");\n"
" pretty_print(&transposed);\n"
"}\n"
"```"
msgstr ""
#: src/exercises/day-1/for-loops.md:80
msgid "Bonus Question"
msgstr "Bonus-Frage"
#: src/exercises/day-1/for-loops.md:82
msgid ""
"Could you use `&[i32]` slices instead of hard-coded 3 × 3 matrices for your "
"argument and return types? Something like `&[&[i32]]` for a two-dimensional "
"slice-of-slices. Why or why not?"
msgstr ""
"Könntest Du den `&[i32]`\\-Anteilstyp anstelle von fest codierten 3 × 3-"
"Matrizen als Argument- und Rückgabetypen verwenden? Oder etwas wie "
"`&[&[i32]]` für einen zweidimensionalen Anteilstyp? Warum oder warum nicht?"
#: src/exercises/day-1/for-loops.md:87
msgid ""
"See the [`ndarray` crate](https://docs.rs/ndarray/) for a production quality "
"implementation."
msgstr ""
"Teste die [`ndarray`\\-Kiste](https://docs.rs/ndarray/) für eine "
"produktionsfertige Implementierung."
#: src/exercises/day-1/for-loops.md:92
msgid ""
"The solution and the answer to the bonus section are available in the "
"[Solution](solutions-morning.md#arrays-and-for-loops) section."
msgstr ""
"Die Lösung und die Antwort zum Bonusteil findest Du im Abschnitt [Lösung]"
"(solutions-morning.md#arrays-and-for-loops)."
#: src/exercises/day-1/for-loops.md:95
msgid ""
"The use of the reference `&array` within `for n in &array` is a subtle "
"preview of issues of ownership that will come later in the afternoon."
msgstr ""
#: src/exercises/day-1/for-loops.md:98
msgid "Without the `&`..."
msgstr ""
#: src/exercises/day-1/for-loops.md:99
msgid ""
"The loop would have been one that consumes the array. This is a change "
"[introduced in the 2021 Edition](https://doc.rust-lang.org/edition-guide/"
"rust-2021/IntoIterator-for-arrays.html)."
msgstr ""
#: src/exercises/day-1/for-loops.md:102
msgid ""
"An implicit array copy would have occurred. Since `i32` is a copy type, "
"then `[i32; 3]` is also a copy type."
msgstr ""
#: src/control-flow.md:3
#, fuzzy
msgid ""
"As we have seen, `if` is an expression in Rust. It is used to conditionally "
"evaluate one of two blocks, but the blocks can have a value which then "
"becomes the value of the `if` expression. Other control flow expressions "
"work similarly in Rust."
msgstr ""
"Wie wir gesehen haben, ist `if` ein Ausdruck in Rust. Es ist bedingt gewohnt "
"einen von zwei Blöcken auswerten, aber die Blöcke können einen Wert haben, "
"der dann wird der Wert des `if`\\-Ausdrucks. Andere "
"Ablaufsteuerungsausdrücke funktionieren ähnlich in Rost."
#: src/control-flow/blocks.md:3
#, fuzzy
msgid ""
"A block in Rust contains a sequence of expressions. Each block has a value "
"and a type, which are those of the last expression of the block:"
msgstr ""
"Ein Block in Rust hat einen Wert und einen Typ: Der Wert ist der letzte "
"Ausdruck der Block:"
#: src/control-flow/blocks.md:7
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let x = {\n"
" let y = 10;\n"
" println!(\"y: {y}\");\n"
" let z = {\n"
" let w = {\n"
" 3 + 4\n"
" };\n"
" println!(\"w: {w}\");\n"
" y * w\n"
" };\n"
" println!(\"z: {z}\");\n"
" z - y\n"
" };\n"
" println!(\"x: {x}\");\n"
"}\n"
"```"
msgstr ""
#: src/control-flow/blocks.md:26
msgid ""
"If the last expression ends with `;`, then the resulting value and type is "
"`()`."
msgstr ""
#: src/control-flow/blocks.md:28
#, fuzzy
msgid ""
"The same rule is used for functions: the value of the function body is the "
"return value:"
msgstr ""
"Die gleiche Regel gilt für Funktionen: Der Wert des Funktionskörpers ist der "
"Rückgabewert:"
#: src/control-flow/blocks.md:31
msgid ""
"```rust,editable\n"
"fn double(x: i32) -> i32 {\n"
" x + x\n"
"}\n"
"\n"
"fn main() {\n"
" println!(\"doubled: {}\", double(7));\n"
"}\n"
"```"
msgstr ""
#: src/control-flow/blocks.md:43 src/enums.md:34 src/enums/sizes.md:28
#: src/pattern-matching.md:25 src/pattern-matching/match-guards.md:22
#: src/structs.md:31 src/methods.md:30 src/methods/example.md:46
#, fuzzy
msgid "Key Points:"
msgstr "Wichtige Punkte:"
#: src/control-flow/blocks.md:44
#, fuzzy
msgid ""
"The point of this slide is to show that blocks have a type and value in "
"Rust. "
msgstr ""
"Der Zweck dieser Folie ist es zu zeigen, dass Blöcke in Rust einen Typ und "
"einen Wert haben."
#: src/control-flow/blocks.md:45
#, fuzzy
msgid ""
"You can show how the value of the block changes by changing the last line in "
"the block. For instance, adding/removing a semicolon or using a `return`."
msgstr ""
"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`."
#: src/control-flow/if-expressions.md:1
#, fuzzy
msgid "`if` expressions"
msgstr "`if`\\-Ausdrücke"
#: src/control-flow/if-expressions.md:3
msgid ""
"You use [`if` expressions](https://doc.rust-lang.org/reference/expressions/"
"if-expr.html#if-expressions) exactly like `if` statements in other languages:"
msgstr ""
#: src/control-flow/if-expressions.md:18
#, fuzzy
msgid ""
"In addition, you can use `if` as an expression. The last expression of each "
"block becomes the value of the `if` expression:"
msgstr ""
"Darüber hinaus können Sie es als Ausdruck verwenden. Das macht dasselbe wie "
"oben:"
#: 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."
msgstr ""
#: src/control-flow/for-expressions.md:1
#, fuzzy
msgid "`for` loops"
msgstr "`for`\\-Schleifen"
#: src/control-flow/for-expressions.md:3
#, fuzzy
msgid ""
"The [`for` loop](https://doc.rust-lang.org/std/keyword.for.html) is closely "
"related to the [`while let` loop](while-let-expressions.md). It will "
"automatically call `into_iter()` on the expression and then iterate over it:"
msgstr ""
"Der „for“-Ausdruck ist eng verwandt mit dem „while let“-Ausdruck. Es wird "
"Rufen Sie automatisch `into_iter()` für den Ausdruck auf und iterieren Sie "
"dann darüber:"
#: src/control-flow/for-expressions.md:7
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let v = vec![10, 20, 30];\n"
"\n"
" for x in v {\n"
" println!(\"x: {x}\");\n"
" }\n"
" \n"
" for i in (0..10).step_by(2) {\n"
" println!(\"i: {i}\");\n"
" }\n"
"}\n"
"```"
msgstr ""
#: src/control-flow/for-expressions.md:21
#, fuzzy
msgid "You can use `break` and `continue` here as usual."
msgstr "Sie können hier wie gewohnt `break` und `continue` verwenden."
#: src/control-flow/for-expressions.md:25
#, fuzzy
msgid "Index iteration is not a special syntax in Rust for just that case."
msgstr ""
"Index-Iteration ist in Rust keine spezielle Syntax für genau diesen Fall."
#: src/control-flow/for-expressions.md:26
#, fuzzy
msgid "`(0..10)` is a range that implements an `Iterator` trait. "
msgstr "„(0..10)“ ist ein Bereich, der ein „Iterator“-Merkmal implementiert."
#: src/control-flow/for-expressions.md:27
#, fuzzy
msgid ""
"`step_by` is a method that returns another `Iterator` that skips every other "
"element. "
msgstr ""
"„step_by“ ist eine Methode, die einen weiteren „Iterator“ zurückgibt, der "
"jedes andere Element überspringt."
#: src/control-flow/for-expressions.md:28
msgid ""
"Modify the elements in the vector and explain the compiler errors. Change "
"vector `v` to be mutable and the for loop to `for x in v.iter_mut()`."
msgstr ""
#: src/control-flow/while-expressions.md:1
#, fuzzy
msgid "`while` loops"
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) works very similar to other languages:"
msgstr ""
#: src/control-flow/while-expressions.md:6
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let mut x = 10;\n"
" while x != 1 {\n"
" x = if x % 2 == 0 {\n"
" x / 2\n"
" } else {\n"
" 3 * x + 1\n"
" };\n"
" }\n"
" println!(\"Final x: {x}\");\n"
"}\n"
"```"
msgstr ""
#: src/control-flow/break-continue.md:1
#, fuzzy
msgid "`break` and `continue`"
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),"
msgstr ""
#: src/control-flow/break-continue.md:4
msgid ""
"If you want to immediately start the next iteration use [`continue`](https://"
"doc.rust-lang.org/reference/expressions/loop-expr.html#continue-expressions)."
msgstr ""
#: src/control-flow/break-continue.md:7
#, fuzzy
msgid ""
"Both `continue` and `break` can optionally take a label argument which is "
"used to break out of nested loops:"
msgstr ""
"Wenn Sie eine Schleife vorzeitig verlassen möchten, verwenden Sie `break`, "
"wenn Sie sofort beginnen möchten Verwenden Sie für die nächste Iteration "
"\"Continue\". Sowohl `Continue` als auch `Break` können optional verwendet "
"werden Nehmen Sie ein Label-Argument, das zum Ausbrechen aus verschachtelten "
"Schleifen verwendet wird:"
#: src/control-flow/break-continue.md:10
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let v = vec![10, 20, 30];\n"
" let mut iter = v.into_iter();\n"
" 'outer: while let Some(x) = iter.next() {\n"
" println!(\"x: {x}\");\n"
" let mut i = 0;\n"
" while i < x {\n"
" println!(\"x: {x}, i: {i}\");\n"
" i += 1;\n"
" if i == 3 {\n"
" break 'outer;\n"
" }\n"
" }\n"
" }\n"
"}\n"
"```"
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."
#: src/control-flow/loop-expressions.md:1
#, fuzzy
msgid "`loop` expressions"
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) which creates an endless loop."
msgstr ""
#: src/control-flow/loop-expressions.md:6
#, 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 entweder `break` oder `return`, um die Schleife zu "
"stoppen:"
#: src/control-flow/loop-expressions.md:8
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let mut x = 10;\n"
" loop {\n"
" x = if x % 2 == 0 {\n"
" x / 2\n"
" } else {\n"
" 3 * x + 1\n"
" };\n"
" if x == 1 {\n"
" break;\n"
" }\n"
" }\n"
" println!(\"Final x: {x}\");\n"
"}\n"
"```"
msgstr ""
#: src/control-flow/loop-expressions.md:27
msgid "Break the `loop` with a value (e.g. `break 8`) and print it out."
msgstr ""
#: src/control-flow/loop-expressions.md:28
msgid ""
"Note that `loop` is the only looping construct which returns a non-trivial "
"value. This is because it's guaranteed to be entered at least once (unlike "
"`while` and `for` loops)."
msgstr ""
#: src/basic-syntax/variables.md:3
msgid ""
"Rust provides type safety via static typing. Variable bindings are immutable "
"by default:"
msgstr ""
"Rust bietet Typsicherheit (type safety) durch statische Typisierung (static "
"typing). Bindungen an Variablen (variable bindings) sind standardmäßig "
"unveränderlich (immutable):"
#: src/basic-syntax/variables.md:6
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let x: i32 = 10;\n"
" println!(\"x: {x}\");\n"
" // x = 20;\n"
" // println!(\"x: {x}\");\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/variables.md:17
msgid ""
"Due to type inference the `i32` is optional. We will gradually show the "
"types less and less as the course progresses."
msgstr ""
"Aufgrund von Typ-Inferenz (type inference) ist `i32` optional. Wir werden "
"die Typen nach und nach immer öfter weglassen, je weiter der Kurs "
"fortschreitet."
#: src/basic-syntax/type-inference.md:3
msgid "Rust will look at how the variable is _used_ to determine the type:"
msgstr ""
"Rust wird sich ansehen, wie die Variable _benutzt_ wird, um den Typ zu "
"bestimmen:"
#: src/basic-syntax/type-inference.md:5
msgid ""
"```rust,editable\n"
"fn takes_u32(x: u32) {\n"
" println!(\"u32: {x}\");\n"
"}\n"
"\n"
"fn takes_i8(y: i8) {\n"
" println!(\"i8: {y}\");\n"
"}\n"
"\n"
"fn main() {\n"
" let x = 10;\n"
" let y = 20;\n"
"\n"
" takes_u32(x);\n"
" takes_i8(y);\n"
" // takes_u32(y);\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/type-inference.md:26
msgid ""
"This slide demonstrates how the Rust compiler infers types based on "
"constraints given by variable declarations and usages."
msgstr ""
"Diese Folie zeigt, wie der Rust-Compiler Typen basierend auf Einschränkungen "
"ableitet, die durch Variablendeklarationen und Verwendungen gegeben sind."
#: src/basic-syntax/type-inference.md:28
msgid ""
"It is very important to emphasize that variables declared like this are not "
"of some sort of dynamic \"any type\" that can hold any data. The machine "
"code generated by such declaration is identical to the explicit declaration "
"of a type. The compiler does the job for us and helps us write more concise "
"code."
msgstr ""
"Es ist sehr wichtig zu betonen, dass auf diese Weise deklarierte Variablen "
"**nicht** von einem dynamischem \"beliebigen Typ\" sind, der beliebige Daten "
"enthalten kann. Der durch eine solche Deklaration erzeugte Maschinencode ist "
"identisch mit der expliziten Deklaration eines Typs. Der Compiler erledigt "
"lediglich die Arbeit für uns und hilft uns prägnanteren Code zu schreiben."
#: src/basic-syntax/type-inference.md:32
msgid ""
"The following code tells the compiler to copy into a certain generic "
"container without the code ever explicitly specifying the contained type, "
"using `_` as a placeholder:"
msgstr ""
"Der folgende Code weist den Compiler an, in einen bestimmten generischen "
"Container zu kopieren, ohne dass jemals der enthaltene Typ explizit "
"angegeben wird. Der Unterstrich `_` wird dabei als Platzhalter verwendet:"
#: src/basic-syntax/type-inference.md:34
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let mut v = Vec::new();\n"
" v.push((10, false));\n"
" v.push((20, true));\n"
" println!(\"v: {v:?}\");\n"
"\n"
" let vv = v.iter().collect::>();\n"
" println!(\"vv: {vv:?}\");\n"
"}\n"
"```"
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`](https://doc.rust-lang.org/"
"std/iter/trait.FromIterator.html), which [`HashSet`](https://doc.rust-lang."
"org/std/collections/struct.HashSet.html#impl-FromIterator%3CT%3E-for-"
"HashSet%3CT,+S%3E) implements."
msgstr ""
"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator."
"html#method.collect) bezieht sich auf den `FromIterator`, den [`HashSet`]"
"(https://doc.rust-lang.org/std/iter/trait.FromIterator.html) implementiert."
#: src/basic-syntax/static-and-const.md:1
msgid "Static and Constant Variables"
msgstr "Statische und konstante Variablen"
#: src/basic-syntax/static-and-const.md:3
msgid ""
"Static and constant variables are two different ways to create globally-"
"scoped values that cannot be moved or reallocated during the execution of "
"the program. "
msgstr ""
#: src/basic-syntax/static-and-const.md:6
msgid "`const`"
msgstr "`const`"
#: src/basic-syntax/static-and-const.md:8
msgid ""
"Constant variables are evaluated at compile time and their values are "
"inlined wherever they are used:"
msgstr ""
#: src/basic-syntax/static-and-const.md:11
msgid ""
"```rust,editable\n"
"const DIGEST_SIZE: usize = 3;\n"
"const ZERO: Option = Some(42);\n"
"\n"
"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"
" }\n"
" digest\n"
"}\n"
"\n"
"fn main() {\n"
" let digest = compute_digest(\"Hello\");\n"
" println!(\"Digest: {digest:?}\");\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/static-and-const.md:29
msgid ""
"According to the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-"
"vs-static.html) these are inlined upon use."
msgstr ""
"Gemäß dem [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-vs-"
"static.html) werden diese bei der Verwendung eingefügt (inlined upon use)."
#: src/basic-syntax/static-and-const.md:31
msgid ""
"Only functions marked `const` can be called at compile time to generate "
"`const` values. `const` functions can however be called at runtime."
msgstr ""
#: src/basic-syntax/static-and-const.md:33
msgid "`static`"
msgstr "`static`"
#: src/basic-syntax/static-and-const.md:35
msgid ""
"Static variables will live during the whole execution of the program, and "
"therefore will not move:"
msgstr ""
#: src/basic-syntax/static-and-const.md:37
msgid ""
"```rust,editable\n"
"static BANNER: &str = \"Welcome to RustOS 3.14\";\n"
"\n"
"fn main() {\n"
" println!(\"{BANNER}\");\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/static-and-const.md:45
#, fuzzy
msgid ""
"As noted in the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-"
"vs-static.html), these are not inlined upon use and have an actual "
"associated memory location. This is useful for unsafe and embedded code, "
"and the variable lives through the entirety of the program execution. When a "
"globally-scoped value does not have a reason to need object identity, "
"`const` is generally preferred."
msgstr ""
"Wie im [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-vs-static."
"html) erwähnt, werden diese bei der Verwendung nicht inliniert und haben "
"einen tatsächlich zugeordneten Speicherort. Dies ist nützlich für unsicheren "
"(unsafe) und eingebetteten (embedded) Code. Die Variable existiert während "
"der gesamten Programmausführung."
#: src/basic-syntax/static-and-const.md:49
msgid ""
"Because `static` variables are accessible from any thread, they must be "
"`Sync`. Interior mutability is possible through a [`Mutex`](https://doc.rust-"
"lang.org/std/sync/struct.Mutex.html), atomic or similar. It is also possible "
"to have mutable statics, but they require manual synchronisation so any "
"access to them requires `unsafe` code. We will look at [mutable statics](../"
"unsafe/mutable-static-variables.md) in the chapter on Unsafe Rust."
msgstr ""
#: src/basic-syntax/static-and-const.md:57
msgid "Mention that `const` behaves semantically similar to C++'s `constexpr`."
msgstr ""
"Erwähne, dass sich `const` semantisch ähnlich wie `constexpr` in C++ verhält."
#: src/basic-syntax/static-and-const.md:58
msgid ""
"`static`, on the other hand, is much more similar to a `const` or mutable "
"global variable in C++."
msgstr ""
"`static` hingegen ist einer `const` oder veränderlichen (mutable) globalen "
"Variable in C++ viel ähnlicher."
#: src/basic-syntax/static-and-const.md:59
msgid ""
"`static` provides object identity: an address in memory and state as "
"required by types with interior mutability such as `Mutex`."
msgstr ""
#: src/basic-syntax/static-and-const.md:60
msgid ""
"It isn't super common that one would need a runtime evaluated constant, but "
"it is helpful and safer than using a static."
msgstr ""
"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/static-and-const.md:61
msgid "`thread_local` data can be created with the macro `std::thread_local`."
msgstr ""
#: src/basic-syntax/static-and-const.md:63
msgid "Properties table:"
msgstr ""
#: src/basic-syntax/static-and-const.md:65
msgid "Property"
msgstr ""
#: src/basic-syntax/static-and-const.md:65
#, fuzzy
msgid "Static"
msgstr "`static`"
#: src/basic-syntax/static-and-const.md:65
msgid "Constant"
msgstr ""
#: src/basic-syntax/static-and-const.md:67
msgid "Has an address in memory"
msgstr ""
#: src/basic-syntax/static-and-const.md:67
#: src/basic-syntax/static-and-const.md:68
#: src/basic-syntax/static-and-const.md:70
#: src/basic-syntax/static-and-const.md:71
msgid "Yes"
msgstr ""
#: src/basic-syntax/static-and-const.md:67
msgid "No (inlined)"
msgstr ""
#: src/basic-syntax/static-and-const.md:68
#, fuzzy
msgid "Lives for the entire duration of the program"
msgstr "Die `main`\\-Funktion ist der Einstiegspunkt des Programms."
#: src/basic-syntax/static-and-const.md:68
#: src/basic-syntax/static-and-const.md:69
#: src/basic-syntax/static-and-const.md:71
msgid "No"
msgstr ""
#: src/basic-syntax/static-and-const.md:69
msgid "Can be mutable"
msgstr ""
#: src/basic-syntax/static-and-const.md:69
msgid "Yes (unsafe)"
msgstr ""
#: src/basic-syntax/static-and-const.md:70
#, fuzzy
msgid "Evaluated at compile time"
msgstr "Werte haben feste Größen, die zur Kompilierzeit bekannt sind."
#: src/basic-syntax/static-and-const.md:70
msgid "Yes (initialised at compile time)"
msgstr ""
#: src/basic-syntax/static-and-const.md:71
msgid "Inlined wherever it is used"
msgstr ""
#: src/basic-syntax/scopes-shadowing.md:3
msgid ""
"You can shadow variables, both those from outer scopes and variables from "
"the same scope:"
msgstr ""
"Sie können Variablen verschatten (shadow), sowohl solche aus äußeren "
"Gültigkeitsbereichen (outer scopes) als auch Variablen aus dem gleichen "
"Gültigkeitsbereich:"
#: src/basic-syntax/scopes-shadowing.md:6
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let a = 10;\n"
" println!(\"before: {a}\");\n"
"\n"
" {\n"
" let a = \"hello\";\n"
" println!(\"inner scope: {a}\");\n"
"\n"
" let a = true;\n"
" println!(\"shadowed in inner scope: {a}\");\n"
" }\n"
"\n"
" println!(\"after: {a}\");\n"
"}\n"
"```"
msgstr ""
#: src/basic-syntax/scopes-shadowing.md:25
msgid ""
"Definition: Shadowing is different from mutation, because after shadowing "
"both variable's memory locations exist at the same time. Both are available "
"under the same name, depending where you use it in the code. "
msgstr ""
"Definition: Verschattung (shadowing) unterscheidet sich von Mutation, da "
"nach der Verschattung die Speicherplätze beider Variablen gleichzeitig "
"existieren. Beide Speicherplätze sind unter demselben Namen verfügbar, je "
"nachdem, wo Sie die Variablen im Code verwenden."
#: src/basic-syntax/scopes-shadowing.md:26
msgid "A shadowing variable can have a different type. "
msgstr "Eine Shadowing-Variable kann einen anderen Typ haben."
#: src/basic-syntax/scopes-shadowing.md:27
msgid ""
"Shadowing looks obscure at first, but is convenient for holding on to values "
"after `.unwrap()`."
msgstr ""
"Shadowing sieht zunächst obskur aus, ist aber praktisch, um Werte nach `."
"unwrap()` festzuhalten."
#: src/basic-syntax/scopes-shadowing.md:28
msgid ""
"The following code demonstrates why the compiler can't simply reuse memory "
"locations when shadowing an immutable variable in a scope, even if the type "
"does not change."
msgstr ""
"Der folgende Code demonstriert, warum der Compiler Speicherorte nicht "
"einfach wiederverwenden kann, wenn er eine unveränderliche Variable in einem "
"Bereich verschattet, selbst wenn sich der Typ nicht ändert."
#: src/basic-syntax/scopes-shadowing.md:30
msgid ""
"```rust,editable\n"
"fn main() {\n"
" let a = 1;\n"
" let b = &a;\n"
" let a = a + 1;\n"
" println!(\"{a} {b}\");\n"
"}\n"
"```"
msgstr ""
#: src/enums.md:3
#, fuzzy
msgid ""
"The `enum` keyword allows the creation of a type which has a few different "
"variants:"
msgstr ""
"Das Schlüsselwort „enum“ ermöglicht die Erstellung eines Typs, der mehrere "
"hat verschiedene Varianten:"
#: src/enums.md:6
msgid ""
"```rust,editable\n"
"fn generate_random_number() -> i32 {\n"
" // Implementation based on https://xkcd.com/221/\n"
" 4 // Chosen by fair dice roll. Guaranteed to be random.\n"
"}\n"
"\n"
"#[derive(Debug)]\n"
"enum CoinFlip {\n"
" Heads,\n"
" Tails,\n"
"}\n"
"\n"
"fn flip_coin() -> CoinFlip {\n"
" let random_number = generate_random_number();\n"
" if random_number % 2 == 0 {\n"
" return CoinFlip::Heads;\n"
" } else {\n"
" return CoinFlip::Tails;\n"
" }\n"
"}\n"
"\n"
"fn main() {\n"
" println!(\"You got: {:?}\", flip_coin());\n"
"}\n"
"```"
msgstr ""
#: src/enums.md:36
#, fuzzy
msgid "Enumerations allow you to collect a set of values under one type"
msgstr ""
"Aufzählungen ermöglichen es Ihnen, eine Reihe von Werten unter einem Typ zu "
"sammeln"
#: src/enums.md:37
#, fuzzy
msgid ""
"This page offers an enum type `CoinFlip` with two variants `Heads` and "
"`Tails`. You might note the namespace when using variants."
msgstr ""
"Diese Seite bietet einen Aufzählungstyp `CoinFlip` mit zwei Varianten "
"`Heads` und `Tail`. Beachten Sie bei der Verwendung von Varianten "
"möglicherweise den Namensraum."
#: src/enums.md:38
#, fuzzy
msgid "This might be a good time to compare Structs and Enums:"
msgstr ""
"Dies könnte ein guter Zeitpunkt sein, um Structs und Enums zu vergleichen:"
#: src/enums.md:39
#, fuzzy
msgid ""
"In both, you can have a simple version without fields (unit struct) or one "
"with different types of fields (variant payloads). "
msgstr ""
"In beiden Fällen können Sie eine einfache Version ohne Felder (unit struct) "
"oder eine mit unterschiedlichen Feldtypen (variant payloads) haben."
#: src/enums.md:40
#, fuzzy
msgid "In both, associated functions are defined within an `impl` block."
msgstr ""
"In beiden werden zugehörige Funktionen innerhalb eines `impl`\\-Blocks "
"definiert."
#: src/enums.md:41
#, fuzzy
msgid ""
"You could even implement the different variants of an enum with separate "
"structs but then they wouldn’t be the same type as they would if they were "
"all defined in an enum. "
msgstr ""
"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."
#: src/enums/variant-payloads.md:3
#, fuzzy
msgid ""
"You can define richer enums where the variants carry data. You can then use "
"the `match` statement to extract the data from each variant:"
msgstr ""
"Sie können reichhaltigere Aufzählungen definieren, bei denen die Varianten "
"Daten enthalten. Sie können dann die verwenden `match`\\-Anweisung, um die "
"Daten aus jeder Variante zu extrahieren:"
#: src/enums/variant-payloads.md:6
msgid ""
"```rust,editable\n"
"enum WebEvent {\n"
" PageLoad, // Variant without payload\n"
" KeyPress(char), // Tuple struct variant\n"
" Click { x: i64, y: i64 }, // Full struct variant\n"
"}\n"
"\n"
"#[rustfmt::skip]\n"
"fn inspect(event: WebEvent) {\n"
" 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"
" }\n"
"}\n"
"\n"
"fn main() {\n"
" let load = WebEvent::PageLoad;\n"
" let press = WebEvent::KeyPress('x');\n"
" let click = WebEvent::Click { x: 20, y: 80 };\n"
"\n"
" inspect(load);\n"
" inspect(press);\n"
" inspect(click);\n"
"}\n"
"```"
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 `=>`."
msgstr ""
#: src/enums/variant-payloads.md:36
msgid ""
"The expression is matched against the patterns from top to bottom. There is "
"no fall-through like in C or C++."
msgstr ""
#: src/enums/variant-payloads.md:37
msgid ""
"The match expression has a value. The value is the last expression in the "
"match arm which was executed."
msgstr ""
#: src/enums/variant-payloads.md:38
msgid ""
"Starting from the top we look for what pattern matches the value then run "
"the code following the arrow. Once we find a match, we stop. "
msgstr ""
#: src/enums/variant-payloads.md:39
msgid ""
"Demonstrate what happens when the search is inexhaustive. Note the advantage "
"the Rust compiler provides by confirming when all cases are handled. "
msgstr ""
#: src/enums/variant-payloads.md:40
msgid "`match` inspects a hidden discriminant field in the `enum`."
msgstr ""
#: src/enums/variant-payloads.md:41
msgid ""
"It is possible to retrieve the discriminant by calling `std::mem::"
"discriminant()`"
msgstr ""
#: src/enums/variant-payloads.md:42
msgid ""
"This is useful, for example, if implementing `PartialEq` for structs where "
"comparing field values doesn't affect equality."
msgstr ""
#: src/enums/variant-payloads.md:43
msgid ""
"`WebEvent::Click { ... }` is not exactly the same as `WebEvent::"
"Click(Click)` with a top level `struct Click { ... }`. The inlined version "
"cannot implement traits, for example."
msgstr ""
#: src/enums/sizes.md:3
#, fuzzy
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:"
#: src/enums/sizes.md:5
msgid ""
"```rust,editable\n"
"use std::any::type_name;\n"
"use std::mem::{align_of, size_of};\n"
"\n"
"fn dbg_size() {\n"
" println!(\"{}: size {} bytes, align: {} bytes\",\n"
" type_name::(), size_of::(), align_of::());\n"
"}\n"
"\n"
"enum Foo {\n"
" A,\n"
" B,\n"
"}\n"
"\n"
"fn main() {\n"
" dbg_size::();\n"
"}\n"
"```"
msgstr ""
#: src/enums/sizes.md:24
#, 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)."
#: src/enums/sizes.md:30
msgid ""
"Internally Rust is using a field (discriminant) to keep track of the enum "
"variant."
msgstr ""
#: src/enums/sizes.md:32
msgid ""
"You can control the discriminant if needed (e.g., for compatibility with C):"
msgstr ""
#: src/enums/sizes.md:34
msgid ""
"```rust,editable\n"
"#[repr(u32)]\n"
"enum Bar {\n"
" A, // 0\n"
" B = 10000,\n"
" C, // 10001\n"
"}\n"
"\n"
"fn main() {\n"
" println!(\"A: {}\", Bar::A as u32);\n"
" println!(\"B: {}\", Bar::B as u32);\n"
" println!(\"C: {}\", Bar::C as u32);\n"
"}\n"
"```"
msgstr ""
#: src/enums/sizes.md:49
msgid ""
"Without `repr`, the discriminant type takes 2 bytes, because 10001 fits 2 "
"bytes."
msgstr ""
#: src/enums/sizes.md:53
msgid "Try out other types such as"
msgstr ""
#: src/enums/sizes.md:55
msgid "`dbg_size!(bool)`: size 1 bytes, align: 1 bytes,"
msgstr ""
#: src/enums/sizes.md:56
msgid ""
"`dbg_size!(Option)`: size 1 bytes, align: 1 bytes (niche optimization, "
"see below),"
msgstr ""
#: src/enums/sizes.md:57
msgid "`dbg_size!(&i32)`: size 8 bytes, align: 8 bytes (on a 64-bit machine),"
msgstr ""
#: src/enums/sizes.md:58
msgid ""
"`dbg_size!(Option<&i32>)`: size 8 bytes, align: 8 bytes (null pointer "
"optimization, see below)."
msgstr ""
#: src/enums/sizes.md:60
msgid ""
"Niche optimization: Rust will merge unused bit patterns for the enum "
"discriminant."
msgstr ""
#: src/enums/sizes.md:63
msgid ""
"Null pointer optimization: For [some types](https://doc.rust-lang.org/std/"
"option/#representation), Rust guarantees that `size_of::()` equals "
"`size_of::