diff --git a/po/fr.po b/po/fr.po
index b90ecd4c..ee6ee62a 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -12,127 +12,127 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 3.3.2\n"
-#: src/SUMMARY.md:3 src/welcome.md:1
+#: src/SUMMARY.md:4 src/index.md:1
msgid "Welcome to Comprehensive Rust 🦀"
msgstr "Bienvenue à Comprehensive Rust (le guide complet de Rust) 🦀"
-#: src/SUMMARY.md:4 src/running-the-course.md:1
+#: src/SUMMARY.md:5 src/running-the-course.md:1
msgid "Running the Course"
msgstr "Comment présenter le cours"
-#: src/SUMMARY.md:5 src/running-the-course/course-structure.md:1
+#: src/SUMMARY.md:6 src/running-the-course/course-structure.md:1
msgid "Course Structure"
msgstr "Structure du cours"
-#: src/SUMMARY.md:6 src/running-the-course/keyboard-shortcuts.md:1
+#: src/SUMMARY.md:7 src/running-the-course/keyboard-shortcuts.md:1
msgid "Keyboard Shortcuts"
msgstr "Raccourcis clavier"
-#: src/SUMMARY.md:7 src/running-the-course/translations.md:1
+#: src/SUMMARY.md:8 src/running-the-course/translations.md:1
msgid "Translations"
msgstr "Traductions"
-#: src/SUMMARY.md:8 src/cargo.md:1
+#: src/SUMMARY.md:9 src/cargo.md:1
msgid "Using Cargo"
msgstr "Utiliser Cargo"
-#: src/SUMMARY.md:9
+#: src/SUMMARY.md:10
msgid "Rust Ecosystem"
msgstr "Écosystème de Rust"
-#: src/SUMMARY.md:10
+#: src/SUMMARY.md:11
msgid "Code Samples"
msgstr "Exemples de code"
-#: src/SUMMARY.md:11
+#: src/SUMMARY.md:12
msgid "Running Cargo Locally"
msgstr "Exécuter Cargo localement"
-#: src/SUMMARY.md:14
+#: src/SUMMARY.md:15
msgid "Day 1: Morning"
msgstr "Jour 1 : Matin"
-#: src/SUMMARY.md:18 src/SUMMARY.md:75 src/SUMMARY.md:128 src/SUMMARY.md:185
-#: src/SUMMARY.md:211 src/SUMMARY.md:261
+#: 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 "Bienvenue"
-#: src/SUMMARY.md:19 src/welcome-day-1/what-is-rust.md:1
+#: src/SUMMARY.md:20 src/welcome-day-1/what-is-rust.md:1
msgid "What is Rust?"
msgstr "Qu'est-ce que Rust ?"
-#: src/SUMMARY.md:20 src/hello-world.md:1
+#: src/SUMMARY.md:21 src/hello-world.md:1
msgid "Hello World!"
msgstr "Bonjour le monde!"
-#: src/SUMMARY.md:21 src/hello-world/small-example.md:1
+#: src/SUMMARY.md:22 src/hello-world/small-example.md:1
msgid "Small Example"
msgstr "Petit exemple"
-#: src/SUMMARY.md:22 src/why-rust.md:1
+#: src/SUMMARY.md:23 src/why-rust.md:1
msgid "Why Rust?"
msgstr "Pourquoi Rust ?"
-#: src/SUMMARY.md:23 src/why-rust/compile-time.md:1
+#: src/SUMMARY.md:24 src/why-rust/compile-time.md:1
msgid "Compile Time Guarantees"
msgstr "Garanties Ă la compilation"
-#: src/SUMMARY.md:24 src/why-rust/runtime.md:1
+#: src/SUMMARY.md:25 src/why-rust/runtime.md:1
msgid "Runtime Guarantees"
msgstr "Garanties à l'exécution"
-#: src/SUMMARY.md:25 src/why-rust/modern.md:1
+#: src/SUMMARY.md:26 src/why-rust/modern.md:1
msgid "Modern Features"
msgstr "Fonctionnalités modernes"
-#: src/SUMMARY.md:26 src/basic-syntax.md:1
+#: src/SUMMARY.md:27 src/basic-syntax.md:1
msgid "Basic Syntax"
msgstr "Syntaxe de base"
-#: src/SUMMARY.md:27 src/basic-syntax/scalar-types.md:1
+#: src/SUMMARY.md:28 src/basic-syntax/scalar-types.md:1
msgid "Scalar Types"
msgstr "Types scalaires"
-#: src/SUMMARY.md:28 src/basic-syntax/compound-types.md:1
+#: src/SUMMARY.md:29 src/basic-syntax/compound-types.md:1
msgid "Compound Types"
msgstr "Types composés"
-#: src/SUMMARY.md:29 src/basic-syntax/references.md:1
+#: src/SUMMARY.md:30 src/basic-syntax/references.md:1
msgid "References"
msgstr "Références"
-#: src/SUMMARY.md:30 src/basic-syntax/references-dangling.md:1
+#: src/SUMMARY.md:31 src/basic-syntax/references-dangling.md:1
msgid "Dangling References"
msgstr "Références invalides"
-#: src/SUMMARY.md:31 src/basic-syntax/slices.md:1
+#: src/SUMMARY.md:32 src/basic-syntax/slices.md:1
msgid "Slices"
msgstr "Tranches"
-#: src/SUMMARY.md:32
+#: src/SUMMARY.md:33
msgid "String vs str"
msgstr "String vs str"
-#: src/SUMMARY.md:33 src/basic-syntax/functions.md:1
+#: src/SUMMARY.md:34 src/basic-syntax/functions.md:1
msgid "Functions"
msgstr "Fonctions"
-#: src/SUMMARY.md:34 src/basic-syntax/rustdoc.md:1
+#: src/SUMMARY.md:35 src/basic-syntax/rustdoc.md:1
msgid "Rustdoc"
msgstr "Rustdoc"
-#: src/SUMMARY.md:35 src/SUMMARY.md:82 src/basic-syntax/methods.md:1
+#: src/SUMMARY.md:36 src/SUMMARY.md:102 src/basic-syntax/methods.md:1
#: src/methods.md:1
msgid "Methods"
msgstr "MĂ©thodes"
-#: src/SUMMARY.md:36
+#: src/SUMMARY.md:37
msgid "Overloading"
msgstr "Surcharge"
-#: src/SUMMARY.md:37 src/SUMMARY.md:66 src/SUMMARY.md:90 src/SUMMARY.md:119
-#: src/SUMMARY.md:148 src/SUMMARY.md:177 src/SUMMARY.md:204 src/SUMMARY.md:225
-#: src/SUMMARY.md:253 src/SUMMARY.md:275 src/SUMMARY.md:296
+#: 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
@@ -140,919 +140,916 @@ msgstr "Surcharge"
msgid "Exercises"
msgstr "Exercices"
-#: src/SUMMARY.md:38 src/exercises/day-1/implicit-conversions.md:1
+#: src/SUMMARY.md:39 src/exercises/day-1/implicit-conversions.md:1
msgid "Implicit Conversions"
msgstr "Conversions implicites"
-#: src/SUMMARY.md:39
+#: src/SUMMARY.md:40
msgid "Arrays and for Loops"
msgstr "Tableaux et boucles for"
-#: src/SUMMARY.md:41
+#: src/SUMMARY.md:42
msgid "Day 1: Afternoon"
msgstr "Jour 1 : Après-midi"
-#: src/SUMMARY.md:43 src/basic-syntax/variables.md:1
+#: src/SUMMARY.md:44 src/SUMMARY.md:295 src/control-flow.md:1
+msgid "Control Flow"
+msgstr "Flux de contrĂ´le"
+
+#: src/SUMMARY.md:45 src/control-flow/blocks.md:1
+msgid "Blocks"
+msgstr "Blocs"
+
+#: src/SUMMARY.md:46
+msgid "if expressions"
+msgstr "expressions `if`"
+
+#: src/SUMMARY.md:47
+msgid "for expressions"
+msgstr "expressions `for`"
+
+#: src/SUMMARY.md:48
+msgid "while expressions"
+msgstr "while expressions"
+
+#: src/SUMMARY.md:49
+msgid "break & continue"
+msgstr "break & continue"
+
+#: src/SUMMARY.md:50
+msgid "loop expressions"
+msgstr "expressions `loop`"
+
+#: src/SUMMARY.md:52 src/basic-syntax/variables.md:1
msgid "Variables"
msgstr "Variables"
-#: src/SUMMARY.md:44 src/basic-syntax/type-inference.md:1
+#: src/SUMMARY.md:53 src/basic-syntax/type-inference.md:1
msgid "Type Inference"
msgstr "Inférence de type"
-#: src/SUMMARY.md:45
+#: src/SUMMARY.md:54
msgid "static & const"
msgstr "static & const"
-#: src/SUMMARY.md:46 src/basic-syntax/scopes-shadowing.md:1
+#: src/SUMMARY.md:55 src/basic-syntax/scopes-shadowing.md:1
msgid "Scopes and Shadowing"
msgstr "Portée et masquage"
-#: src/SUMMARY.md:47 src/memory-management.md:1
-msgid "Memory Management"
-msgstr "Gestion de la mémoire"
-
-#: src/SUMMARY.md:48
-msgid "Stack vs Heap"
-msgstr "Pile et Tas"
-
-#: src/SUMMARY.md:49 src/memory-management/stack.md:1
-msgid "Stack Memory"
-msgstr "MĂ©moire de pile"
-
-#: src/SUMMARY.md:50 src/memory-management/manual.md:1
-msgid "Manual Memory Management"
-msgstr "Gestion manuelle de la mémoire"
-
-#: src/SUMMARY.md:51 src/memory-management/scope-based.md:1
-msgid "Scope-Based Memory Management"
-msgstr "Gestion de la mémoire basée sur la portée"
-
-#: src/SUMMARY.md:52
-msgid "Garbage Collection"
-msgstr "Collecte des ordures"
-
-#: src/SUMMARY.md:53
-msgid "Rust Memory Management"
-msgstr "Gestion de la mémoire avec Rust"
-
-#: src/SUMMARY.md:54 src/memory-management/comparison.md:1
-msgid "Comparison"
-msgstr "Comparaison"
-
-#: src/SUMMARY.md:55 src/ownership.md:1
-msgid "Ownership"
-msgstr "Propriété"
-
-#: src/SUMMARY.md:56 src/ownership/move-semantics.md:1
-msgid "Move Semantics"
-msgstr "Sémantique de déplacement"
-
-#: src/SUMMARY.md:57 src/ownership/moved-strings-rust.md:1
-msgid "Moved Strings in Rust"
-msgstr "String déplacées avec Rust"
-
-#: src/SUMMARY.md:58 src/ownership/double-free-modern-cpp.md:1
-msgid "Double Frees in Modern C++"
-msgstr "Double libération de mémoire en C++ moderne"
-
-#: src/SUMMARY.md:59 src/ownership/moves-function-calls.md:1
-msgid "Moves in Function Calls"
-msgstr "DĂ©placements dans les appels de fonction"
-
-#: src/SUMMARY.md:60 src/ownership/copy-clone.md:1
-msgid "Copying and Cloning"
-msgstr "Copie et clonage"
-
-#: src/SUMMARY.md:61 src/ownership/borrowing.md:1
-msgid "Borrowing"
-msgstr "Emprunt"
-
-#: src/SUMMARY.md:62 src/ownership/shared-unique-borrows.md:1
-msgid "Shared and Unique Borrows"
-msgstr "Emprunts partagés et uniques"
-
-#: src/SUMMARY.md:63 src/ownership/lifetimes.md:1
-msgid "Lifetimes"
-msgstr "Durées de vie"
-
-#: src/SUMMARY.md:64 src/ownership/lifetimes-function-calls.md:1
-msgid "Lifetimes in Function Calls"
-msgstr "Durées de vie dans les appels de fonction"
-
-#: src/SUMMARY.md:65 src/ownership/lifetimes-data-structures.md:1
-msgid "Lifetimes in Data Structures"
-msgstr "Durées de vie dans les structures de données"
-
-#: src/SUMMARY.md:67 src/exercises/day-1/book-library.md:1
-#, fuzzy
-msgid "Storing Books"
-msgstr "String"
-
-#: src/SUMMARY.md:68 src/exercises/day-1/iterators-and-ownership.md:1
-msgid "Iterators and Ownership"
-msgstr "Itérateurs et propriété"
-
-#: src/SUMMARY.md:71
-msgid "Day 2: Morning"
-msgstr "Jour 2 : Matin"
-
-#: src/SUMMARY.md:76 src/structs.md:1
-msgid "Structs"
-msgstr "Structures"
-
-#: src/SUMMARY.md:77 src/structs/tuple-structs.md:1
-msgid "Tuple Structs"
-msgstr "Structures de tuple"
-
-#: src/SUMMARY.md:78 src/structs/field-shorthand.md:1
-msgid "Field Shorthand Syntax"
-msgstr "Syntaxe abrégée des champs"
-
-#: src/SUMMARY.md:79 src/enums.md:1
+#: src/SUMMARY.md:56 src/enums.md:1
msgid "Enums"
msgstr "Énumérations"
-#: src/SUMMARY.md:80 src/enums/variant-payloads.md:1
+#: src/SUMMARY.md:57 src/enums/variant-payloads.md:1
msgid "Variant Payloads"
msgstr "Contenu variable"
-#: src/SUMMARY.md:81 src/enums/sizes.md:1
+#: src/SUMMARY.md:58 src/enums/sizes.md:1
msgid "Enum Sizes"
msgstr "Tailles d'énumération"
-#: src/SUMMARY.md:83 src/methods/receiver.md:1
+#: src/SUMMARY.md:60 src/control-flow/novel.md:1
+#, fuzzy
+msgid "Novel Control Flow"
+msgstr "Flux de contrĂ´le"
+
+#: src/SUMMARY.md:61
+msgid "if let expressions"
+msgstr "expressions `if let`"
+
+#: src/SUMMARY.md:62
+msgid "while let expressions"
+msgstr "expressions `while let`"
+
+#: src/SUMMARY.md:63
+msgid "match expressions"
+msgstr "expressions `match`"
+
+#: src/SUMMARY.md:65 src/pattern-matching.md:1
+msgid "Pattern Matching"
+msgstr "Correspondance de motifs"
+
+#: src/SUMMARY.md:66 src/pattern-matching/destructuring-enums.md:1
+msgid "Destructuring Enums"
+msgstr "Déstructuration des énumérations"
+
+#: src/SUMMARY.md:67 src/pattern-matching/destructuring-structs.md:1
+msgid "Destructuring Structs"
+msgstr "DĂ©structuration des structures"
+
+#: src/SUMMARY.md:68 src/pattern-matching/destructuring-arrays.md:1
+msgid "Destructuring Arrays"
+msgstr "DĂ©structuration des tableaux"
+
+#: src/SUMMARY.md:69 src/pattern-matching/match-guards.md:1
+msgid "Match Guards"
+msgstr "Gardes de match"
+
+#: src/SUMMARY.md:72 src/exercises/day-1/luhn.md:1
+#: src/exercises/day-1/solutions-afternoon.md:3
+msgid "Luhn Algorithm"
+msgstr "Algorithme de Luhn"
+
+#: src/SUMMARY.md:73
+#, fuzzy
+msgid "Pattern Matching (TBD)"
+msgstr "Correspondance de motifs"
+
+#: src/SUMMARY.md:75
+msgid "Day 2: Morning"
+msgstr "Jour 2 : Matin"
+
+#: src/SUMMARY.md:81 src/memory-management.md:1
+msgid "Memory Management"
+msgstr "Gestion de la mémoire"
+
+#: src/SUMMARY.md:82
+msgid "Stack vs Heap"
+msgstr "Pile et Tas"
+
+#: src/SUMMARY.md:83
+msgid "Stack Memory"
+msgstr "MĂ©moire de pile"
+
+#: src/SUMMARY.md:84 src/memory-management/manual.md:1
+msgid "Manual Memory Management"
+msgstr "Gestion manuelle de la mémoire"
+
+#: src/SUMMARY.md:85 src/memory-management/scope-based.md:1
+msgid "Scope-Based Memory Management"
+msgstr "Gestion de la mémoire basée sur la portée"
+
+#: src/SUMMARY.md:86
+msgid "Garbage Collection"
+msgstr "Collecte des ordures"
+
+#: src/SUMMARY.md:87
+msgid "Rust Memory Management"
+msgstr "Gestion de la mémoire avec Rust"
+
+#: src/SUMMARY.md:88 src/ownership.md:1
+msgid "Ownership"
+msgstr "Propriété"
+
+#: src/SUMMARY.md:89 src/ownership/move-semantics.md:1
+msgid "Move Semantics"
+msgstr "Sémantique de déplacement"
+
+#: src/SUMMARY.md:90 src/ownership/moved-strings-rust.md:1
+msgid "Moved Strings in Rust"
+msgstr "String déplacées avec Rust"
+
+#: src/SUMMARY.md:91
+msgid "Double Frees in Modern C++"
+msgstr "Double libération de mémoire en C++ moderne"
+
+#: src/SUMMARY.md:92 src/ownership/moves-function-calls.md:1
+msgid "Moves in Function Calls"
+msgstr "DĂ©placements dans les appels de fonction"
+
+#: src/SUMMARY.md:93 src/ownership/copy-clone.md:1
+msgid "Copying and Cloning"
+msgstr "Copie et clonage"
+
+#: src/SUMMARY.md:94 src/ownership/borrowing.md:1
+msgid "Borrowing"
+msgstr "Emprunt"
+
+#: src/SUMMARY.md:95 src/ownership/shared-unique-borrows.md:1
+msgid "Shared and Unique Borrows"
+msgstr "Emprunts partagés et uniques"
+
+#: src/SUMMARY.md:96 src/ownership/lifetimes.md:1
+msgid "Lifetimes"
+msgstr "Durées de vie"
+
+#: src/SUMMARY.md:97 src/ownership/lifetimes-function-calls.md:1
+msgid "Lifetimes in Function Calls"
+msgstr "Durées de vie dans les appels de fonction"
+
+#: src/SUMMARY.md:98 src/ownership/lifetimes-data-structures.md:1
+msgid "Lifetimes in Data Structures"
+msgstr "Durées de vie dans les structures de données"
+
+#: src/SUMMARY.md:99 src/structs.md:1
+msgid "Structs"
+msgstr "Structures"
+
+#: src/SUMMARY.md:100 src/structs/tuple-structs.md:1
+msgid "Tuple Structs"
+msgstr "Structures de tuple"
+
+#: src/SUMMARY.md:101 src/structs/field-shorthand.md:1
+msgid "Field Shorthand Syntax"
+msgstr "Syntaxe abrégée des champs"
+
+#: src/SUMMARY.md:103 src/methods/receiver.md:1
msgid "Method Receiver"
msgstr "Récepteur de méthode"
-#: src/SUMMARY.md:84 src/SUMMARY.md:159 src/SUMMARY.md:274
+#: 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 "Exemple"
-#: src/SUMMARY.md:85 src/pattern-matching.md:1
-msgid "Pattern Matching"
-msgstr "Correspondance de motifs"
+#: src/SUMMARY.md:106 src/exercises/day-2/book-library.md:1
+#, fuzzy
+msgid "Storing Books"
+msgstr "String"
-#: src/SUMMARY.md:86 src/pattern-matching/destructuring-enums.md:1
-msgid "Destructuring Enums"
-msgstr "Déstructuration des énumérations"
-
-#: src/SUMMARY.md:87 src/pattern-matching/destructuring-structs.md:1
-msgid "Destructuring Structs"
-msgstr "DĂ©structuration des structures"
-
-#: src/SUMMARY.md:88 src/pattern-matching/destructuring-arrays.md:1
-msgid "Destructuring Arrays"
-msgstr "DĂ©structuration des tableaux"
-
-#: src/SUMMARY.md:89 src/pattern-matching/match-guards.md:1
-msgid "Match Guards"
-msgstr "Gardes de match"
-
-#: src/SUMMARY.md:91 src/exercises/day-2/health-statistics.md:1
+#: src/SUMMARY.md:107 src/exercises/day-2/health-statistics.md:1
msgid "Health Statistics"
msgstr "Statistiques de santé"
-#: src/SUMMARY.md:92 src/exercises/day-2/solutions-morning.md:3
-msgid "Points and Polygons"
-msgstr "Points et polygones"
-
-#: src/SUMMARY.md:94
+#: src/SUMMARY.md:109
msgid "Day 2: Afternoon"
msgstr "Jour 2 : Après-midi"
-#: src/SUMMARY.md:96 src/SUMMARY.md:288 src/control-flow.md:1
-msgid "Control Flow"
-msgstr "Flux de contrĂ´le"
-
-#: src/SUMMARY.md:97 src/control-flow/blocks.md:1
-msgid "Blocks"
-msgstr "Blocs"
-
-#: src/SUMMARY.md:98
-msgid "if expressions"
-msgstr "expressions `if`"
-
-#: src/SUMMARY.md:99
-msgid "if let expressions"
-msgstr "expressions `if let`"
-
-#: src/SUMMARY.md:100
-msgid "while expressions"
-msgstr "while expressions"
-
-#: src/SUMMARY.md:101
-msgid "while let expressions"
-msgstr "expressions `while let`"
-
-#: src/SUMMARY.md:102
-msgid "for expressions"
-msgstr "expressions `for`"
-
-#: src/SUMMARY.md:103
-msgid "loop expressions"
-msgstr "expressions `loop`"
-
-#: src/SUMMARY.md:104
-msgid "match expressions"
-msgstr "expressions `match`"
-
-#: src/SUMMARY.md:105
-msgid "break & continue"
-msgstr "break & continue"
-
-#: src/SUMMARY.md:106 src/std.md:1
+#: src/SUMMARY.md:111 src/std.md:1
msgid "Standard Library"
msgstr "Bibliothèque standard"
-#: src/SUMMARY.md:107
+#: src/SUMMARY.md:112
msgid "Option and Result"
msgstr "Option et Result"
-#: src/SUMMARY.md:108 src/std/string.md:1
+#: src/SUMMARY.md:113 src/std/string.md:1
msgid "String"
msgstr "String"
-#: src/SUMMARY.md:109
+#: src/SUMMARY.md:114
msgid "Vec"
msgstr "Vec"
-#: src/SUMMARY.md:110
+#: src/SUMMARY.md:115
msgid "HashMap"
msgstr "HashMap"
-#: src/SUMMARY.md:111
+#: src/SUMMARY.md:116
msgid "Box"
msgstr "Box"
-#: src/SUMMARY.md:112
+#: src/SUMMARY.md:117
msgid "Recursive Data Types"
msgstr "Types de données récursifs"
-#: src/SUMMARY.md:113 src/std/box-niche.md:1
+#: src/SUMMARY.md:118 src/std/box-niche.md:1
msgid "Niche Optimization"
msgstr "Optimisation de niche"
-#: src/SUMMARY.md:114
+#: src/SUMMARY.md:119
msgid "Rc"
msgstr "Rc"
-#: src/SUMMARY.md:115 src/modules.md:1
+#: src/SUMMARY.md:120
+msgid "Cell/RefCell"
+msgstr ""
+
+#: src/SUMMARY.md:121 src/modules.md:1
msgid "Modules"
msgstr "Modules"
-#: src/SUMMARY.md:116 src/modules/visibility.md:1
+#: src/SUMMARY.md:122 src/modules/visibility.md:1
msgid "Visibility"
msgstr "Visibilité"
-#: src/SUMMARY.md:117 src/modules/paths.md:1
+#: src/SUMMARY.md:123 src/modules/paths.md:1
msgid "Paths"
msgstr "Chemins"
-#: src/SUMMARY.md:118 src/modules/filesystem.md:1
+#: src/SUMMARY.md:124 src/modules/filesystem.md:1
msgid "Filesystem Hierarchy"
msgstr "Hiérarchie du système de fichiers"
-#: src/SUMMARY.md:120 src/exercises/day-2/luhn.md:1
-#: src/exercises/day-2/solutions-afternoon.md:3
-msgid "Luhn Algorithm"
-msgstr "Algorithme de Luhn"
+#: src/SUMMARY.md:126 src/exercises/day-2/iterators-and-ownership.md:1
+msgid "Iterators and Ownership"
+msgstr "Itérateurs et propriété"
-#: src/SUMMARY.md:121 src/exercises/day-2/strings-iterators.md:1
-#: src/exercises/day-2/solutions-afternoon.md:97
+#: 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 et Iterators"
-#: src/SUMMARY.md:124
+#: src/SUMMARY.md:130
msgid "Day 3: Morning"
msgstr "Jour 3 : Matin"
-#: src/SUMMARY.md:129 src/generics.md:1
+#: src/SUMMARY.md:135 src/generics.md:1
msgid "Generics"
msgstr "Génériques"
-#: src/SUMMARY.md:130 src/generics/data-types.md:1
+#: src/SUMMARY.md:136 src/generics/data-types.md:1
msgid "Generic Data Types"
msgstr "Types de données génériques"
-#: src/SUMMARY.md:131 src/generics/methods.md:1
+#: src/SUMMARY.md:137 src/generics/methods.md:1
msgid "Generic Methods"
msgstr "Méthodes génériques"
-#: src/SUMMARY.md:132 src/generics/monomorphization.md:1
+#: src/SUMMARY.md:138 src/generics/monomorphization.md:1
msgid "Monomorphization"
msgstr "Monomorphisation"
-#: src/SUMMARY.md:133 src/traits.md:1
+#: src/SUMMARY.md:139 src/traits.md:1
msgid "Traits"
msgstr "Caractéristiques"
-#: src/SUMMARY.md:134 src/traits/trait-objects.md:1
+#: src/SUMMARY.md:140 src/traits/trait-objects.md:1
msgid "Trait Objects"
msgstr "Objets implementant des caractéristiques"
-#: src/SUMMARY.md:135 src/traits/deriving-traits.md:1
+#: src/SUMMARY.md:141 src/traits/deriving-traits.md:1
msgid "Deriving Traits"
msgstr "Caractéristiques dérivées"
-#: src/SUMMARY.md:136 src/traits/default-methods.md:1
+#: src/SUMMARY.md:142 src/traits/default-methods.md:1
msgid "Default Methods"
msgstr "Méthodes par défaut"
-#: src/SUMMARY.md:137 src/traits/trait-bounds.md:1
+#: src/SUMMARY.md:143 src/traits/trait-bounds.md:1
msgid "Trait Bounds"
msgstr "Exigences de caractéristique"
-#: src/SUMMARY.md:138
+#: src/SUMMARY.md:144
msgid "impl Trait"
msgstr "impl caractéristique"
-#: src/SUMMARY.md:139 src/traits/important-traits.md:1
+#: src/SUMMARY.md:145 src/traits/important-traits.md:1
msgid "Important Traits"
msgstr "Caractéristiques importantes"
-#: src/SUMMARY.md:140
+#: src/SUMMARY.md:146
msgid "Iterator"
msgstr "Iterator"
-#: src/SUMMARY.md:141 src/traits/from-iterator.md:1
+#: src/SUMMARY.md:147 src/traits/from-iterator.md:1
msgid "FromIterator"
msgstr "FromIterator"
-#: src/SUMMARY.md:142
+#: src/SUMMARY.md:148
msgid "From and Into"
msgstr "From et Into"
-#: src/SUMMARY.md:143
+#: src/SUMMARY.md:149
msgid "Read and Write"
msgstr "Read et Write"
-#: src/SUMMARY.md:144
+#: src/SUMMARY.md:150
msgid "Drop"
msgstr "Drop"
-#: src/SUMMARY.md:145
+#: src/SUMMARY.md:151
msgid "Default"
msgstr "Default"
-#: src/SUMMARY.md:146
+#: src/SUMMARY.md:152
msgid "Operators: Add, Mul, ..."
msgstr "Opérateurs : Add, Mul, ..."
-#: src/SUMMARY.md:147
+#: src/SUMMARY.md:153
msgid "Closures: Fn, FnMut, FnOnce"
msgstr ""
-#: src/SUMMARY.md:149 src/exercises/day-3/simple-gui.md:1
+#: 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 "Une bibliothèque d'interface graphique"
-#: src/SUMMARY.md:151
+#: src/SUMMARY.md:156 src/exercises/day-3/solutions-morning.md:175
+msgid "Points and Polygons"
+msgstr "Points et polygones"
+
+#: src/SUMMARY.md:158
msgid "Day 3: Afternoon"
msgstr "Jour 3 : Après-midi"
-#: src/SUMMARY.md:153 src/error-handling.md:1
+#: src/SUMMARY.md:160 src/error-handling.md:1
msgid "Error Handling"
msgstr "Gestion des erreurs"
-#: src/SUMMARY.md:154 src/error-handling/panics.md:1
+#: src/SUMMARY.md:161 src/error-handling/panics.md:1
msgid "Panics"
msgstr "Paniques"
-#: src/SUMMARY.md:155
+#: src/SUMMARY.md:162
msgid "Catching Stack Unwinding"
msgstr "Suspension de la pile"
-#: src/SUMMARY.md:156
+#: src/SUMMARY.md:163
msgid "Structured Error Handling"
msgstr "Gestion structurée des erreurs"
-#: src/SUMMARY.md:157
+#: src/SUMMARY.md:164
msgid "Propagating Errors with ?"
msgstr "Propagation des erreurs avec ?"
-#: src/SUMMARY.md:158 src/error-handling/converting-error-types.md:1
+#: 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 "Conversion des types d'erreur"
-#: src/SUMMARY.md:160 src/error-handling/deriving-error-enums.md:1
+#: src/SUMMARY.md:167 src/error-handling/deriving-error-enums.md:1
msgid "Deriving Error Enums"
msgstr "Dérivation des énumérations d'erreur"
-#: src/SUMMARY.md:161 src/error-handling/dynamic-errors.md:1
+#: src/SUMMARY.md:168 src/error-handling/dynamic-errors.md:1
msgid "Dynamic Error Types"
msgstr "Types d'erreurs dynamiques"
-#: src/SUMMARY.md:162 src/error-handling/error-contexts.md:1
+#: src/SUMMARY.md:169 src/error-handling/error-contexts.md:1
msgid "Adding Context to Errors"
msgstr "Ajout de contexte aux erreurs"
-#: src/SUMMARY.md:163 src/testing.md:1
+#: src/SUMMARY.md:170 src/testing.md:1
msgid "Testing"
msgstr "Tester"
-#: src/SUMMARY.md:164 src/testing/unit-tests.md:1
+#: src/SUMMARY.md:171 src/testing/unit-tests.md:1
msgid "Unit Tests"
msgstr "Tests unitaires"
-#: src/SUMMARY.md:165 src/testing/test-modules.md:1
+#: src/SUMMARY.md:172 src/testing/test-modules.md:1
msgid "Test Modules"
msgstr "Modules de test"
-#: src/SUMMARY.md:166 src/testing/doc-tests.md:1
+#: src/SUMMARY.md:173 src/testing/doc-tests.md:1
msgid "Documentation Tests"
msgstr "Test de documentation"
-#: src/SUMMARY.md:167 src/testing/integration-tests.md:1
+#: src/SUMMARY.md:174 src/testing/integration-tests.md:1
msgid "Integration Tests"
msgstr "Test d'intégration"
-#: src/SUMMARY.md:168 src/bare-metal/useful-crates.md:1
+#: src/SUMMARY.md:175 src/bare-metal/useful-crates.md:1
#, fuzzy
msgid "Useful crates"
msgstr "Caisses utiles"
-#: src/SUMMARY.md:169 src/unsafe.md:1
+#: src/SUMMARY.md:176 src/unsafe.md:1
msgid "Unsafe Rust"
msgstr "Rust risqué"
-#: src/SUMMARY.md:170 src/unsafe/raw-pointers.md:1
+#: src/SUMMARY.md:177 src/unsafe/raw-pointers.md:1
msgid "Dereferencing Raw Pointers"
msgstr "Déréférencement des pointeurs bruts"
-#: src/SUMMARY.md:171 src/unsafe/mutable-static-variables.md:1
+#: src/SUMMARY.md:178 src/unsafe/mutable-static-variables.md:1
msgid "Mutable Static Variables"
msgstr "Variables statiques mutables"
-#: src/SUMMARY.md:172 src/unsafe/unions.md:1
+#: src/SUMMARY.md:179 src/unsafe/unions.md:1
msgid "Unions"
msgstr "Unions"
-#: src/SUMMARY.md:173 src/unsafe/calling-unsafe-functions.md:1
+#: src/SUMMARY.md:180 src/unsafe/calling-unsafe-functions.md:1
msgid "Calling Unsafe Functions"
msgstr "Appel de fonctions risquées"
-#: src/SUMMARY.md:174 src/unsafe/writing-unsafe-functions.md:1
+#: src/SUMMARY.md:181 src/unsafe/writing-unsafe-functions.md:1
msgid "Writing Unsafe Functions"
msgstr "Ecrire des fonctions risquées"
-#: src/SUMMARY.md:175
+#: src/SUMMARY.md:182
msgid "Extern Functions"
msgstr "Fonctions externes"
-#: src/SUMMARY.md:176 src/unsafe/unsafe-traits.md:1
+#: src/SUMMARY.md:183 src/unsafe/unsafe-traits.md:1
msgid "Implementing Unsafe Traits"
msgstr "Implémentation de traits risqués"
-#: src/SUMMARY.md:178 src/exercises/day-3/safe-ffi-wrapper.md:1
+#: 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 "Enveloppe FFI sûre"
-#: src/SUMMARY.md:181 src/SUMMARY.md:251
-#: src/running-the-course/course-structure.md:16 src/bare-metal/android.md:1
+#: src/SUMMARY.md:188 src/SUMMARY.md:258 src/bare-metal/android.md:1
msgid "Android"
msgstr "Android"
-#: src/SUMMARY.md:186 src/android/setup.md:1
+#: src/SUMMARY.md:193 src/android/setup.md:1
msgid "Setup"
msgstr "Installation"
-#: src/SUMMARY.md:187 src/android/build-rules.md:1
+#: src/SUMMARY.md:194 src/android/build-rules.md:1
msgid "Build Rules"
msgstr "Règles de construction"
-#: src/SUMMARY.md:188
+#: src/SUMMARY.md:195
msgid "Binary"
msgstr "Binaire"
-#: src/SUMMARY.md:189
+#: src/SUMMARY.md:196
msgid "Library"
msgstr "Bibliothèque"
-#: src/SUMMARY.md:190 src/android/aidl.md:1
+#: src/SUMMARY.md:197 src/android/aidl.md:1
msgid "AIDL"
msgstr "AIDL"
-#: src/SUMMARY.md:191
+#: src/SUMMARY.md:198
msgid "Interface"
msgstr "Interface"
-#: src/SUMMARY.md:192
+#: src/SUMMARY.md:199
msgid "Implementation"
msgstr "Mise en Ĺ“uvre"
-#: src/SUMMARY.md:193
+#: src/SUMMARY.md:200
msgid "Server"
msgstr "Serveur"
-#: src/SUMMARY.md:194 src/android/aidl/deploy.md:1
+#: src/SUMMARY.md:201 src/android/aidl/deploy.md:1
msgid "Deploy"
msgstr "DĂ©ployer"
-#: src/SUMMARY.md:195
+#: src/SUMMARY.md:202
msgid "Client"
msgstr "Client"
-#: src/SUMMARY.md:196 src/android/aidl/changing.md:1
+#: src/SUMMARY.md:203 src/android/aidl/changing.md:1
msgid "Changing API"
msgstr "Modification de l'API"
-#: src/SUMMARY.md:197 src/SUMMARY.md:241 src/android/logging.md:1
+#: src/SUMMARY.md:204 src/SUMMARY.md:248 src/android/logging.md:1
#: src/bare-metal/aps/logging.md:1
msgid "Logging"
msgstr "Journalisation"
-#: src/SUMMARY.md:198 src/android/interoperability.md:1
+#: src/SUMMARY.md:205 src/android/interoperability.md:1
msgid "Interoperability"
msgstr "Interopérabilité"
-#: src/SUMMARY.md:199
+#: src/SUMMARY.md:206
msgid "With C"
msgstr "Avec C"
-#: src/SUMMARY.md:200
+#: src/SUMMARY.md:207
msgid "Calling C with Bindgen"
msgstr "Appeler C avec Bindgen"
-#: src/SUMMARY.md:201
+#: src/SUMMARY.md:208
msgid "Calling Rust from C"
msgstr "Appeler Rust depuis C"
-#: src/SUMMARY.md:202 src/android/interoperability/cpp.md:1
+#: src/SUMMARY.md:209 src/android/interoperability/cpp.md:1
msgid "With C++"
msgstr "Avec C++"
-#: src/SUMMARY.md:203
+#: src/SUMMARY.md:210
msgid "With Java"
msgstr "Avec Java"
-#: src/SUMMARY.md:207
+#: src/SUMMARY.md:214
msgid "Bare Metal: Morning"
msgstr "Bare Metal : Matin"
-#: src/SUMMARY.md:212
+#: src/SUMMARY.md:219
msgid "no_std"
msgstr "no_std"
-#: src/SUMMARY.md:213
+#: src/SUMMARY.md:220
msgid "A Minimal Example"
msgstr "Un exemple minimal"
-#: src/SUMMARY.md:214
+#: src/SUMMARY.md:221
msgid "alloc"
msgstr "alloc"
-#: src/SUMMARY.md:215 src/bare-metal/microcontrollers.md:1
+#: src/SUMMARY.md:222 src/bare-metal/microcontrollers.md:1
msgid "Microcontrollers"
msgstr "MicrocontrĂ´leurs"
-#: src/SUMMARY.md:216 src/bare-metal/microcontrollers/mmio.md:1
+#: src/SUMMARY.md:223 src/bare-metal/microcontrollers/mmio.md:1
msgid "Raw MMIO"
msgstr "MMIO brut"
-#: src/SUMMARY.md:217
+#: src/SUMMARY.md:224
msgid "PACs"
msgstr "PACs"
-#: src/SUMMARY.md:218
+#: src/SUMMARY.md:225
msgid "HAL Crates"
msgstr "HAL Crates"
-#: src/SUMMARY.md:219
+#: src/SUMMARY.md:226
msgid "Board Support Crates"
msgstr "Board Support Crates"
-#: src/SUMMARY.md:220
+#: src/SUMMARY.md:227
msgid "The Type State Pattern"
msgstr "Le modèle d'état de type"
-#: src/SUMMARY.md:221
+#: src/SUMMARY.md:228
msgid "embedded-hal"
msgstr "embedded-hal"
-#: src/SUMMARY.md:222
+#: src/SUMMARY.md:229
msgid "probe-rs, cargo-embed"
msgstr "probe-rs, cargo-embed"
-#: src/SUMMARY.md:223 src/bare-metal/microcontrollers/debugging.md:1
+#: src/SUMMARY.md:230 src/bare-metal/microcontrollers/debugging.md:1
msgid "Debugging"
msgstr "DĂ©bogage"
-#: src/SUMMARY.md:224 src/SUMMARY.md:244
+#: src/SUMMARY.md:231 src/SUMMARY.md:251
msgid "Other Projects"
msgstr "Autres projets"
-#: src/SUMMARY.md:226 src/exercises/bare-metal/compass.md:1
+#: src/SUMMARY.md:233 src/exercises/bare-metal/compass.md:1
#: src/exercises/bare-metal/solutions-morning.md:3
msgid "Compass"
msgstr "Boussole"
-#: src/SUMMARY.md:228
+#: src/SUMMARY.md:235
msgid "Bare Metal: Afternoon"
msgstr "Bare Metal : Après-midi"
-#: src/SUMMARY.md:230
+#: src/SUMMARY.md:237
msgid "Application Processors"
msgstr "Processeurs d'applications"
-#: src/SUMMARY.md:231 src/bare-metal/aps/entry-point.md:1
+#: src/SUMMARY.md:238 src/bare-metal/aps/entry-point.md:1
msgid "Getting Ready to Rust"
msgstr ""
-#: src/SUMMARY.md:232
+#: src/SUMMARY.md:239
msgid "Inline Assembly"
msgstr "Assembleur en ligne"
-#: src/SUMMARY.md:233
+#: src/SUMMARY.md:240
msgid "MMIO"
msgstr "MMIO"
-#: src/SUMMARY.md:234
+#: src/SUMMARY.md:241
msgid "Let's Write a UART Driver"
msgstr "Écrivons un pilote UART"
-#: src/SUMMARY.md:235
+#: src/SUMMARY.md:242
msgid "More Traits"
msgstr "Plus de traits"
-#: src/SUMMARY.md:236
+#: src/SUMMARY.md:243
msgid "A Better UART Driver"
msgstr "Un meilleur pilote UART"
-#: src/SUMMARY.md:237 src/bare-metal/aps/better-uart/bitflags.md:1
+#: src/SUMMARY.md:244 src/bare-metal/aps/better-uart/bitflags.md:1
msgid "Bitflags"
msgstr "Bitflags"
-#: src/SUMMARY.md:238
+#: src/SUMMARY.md:245
msgid "Multiple Registers"
msgstr "Registres multiples"
-#: src/SUMMARY.md:239 src/bare-metal/aps/better-uart/driver.md:1
+#: src/SUMMARY.md:246 src/bare-metal/aps/better-uart/driver.md:1
msgid "Driver"
msgstr "Pilote"
-#: src/SUMMARY.md:240 src/SUMMARY.md:242
+#: src/SUMMARY.md:247 src/SUMMARY.md:249
msgid "Using It"
msgstr "En l'utilisant"
-#: src/SUMMARY.md:243 src/bare-metal/aps/exceptions.md:1
+#: src/SUMMARY.md:250 src/bare-metal/aps/exceptions.md:1
#, fuzzy
msgid "Exceptions"
msgstr "Fonctions"
-#: src/SUMMARY.md:245
+#: src/SUMMARY.md:252
msgid "Useful Crates"
msgstr "Crates utiles"
-#: src/SUMMARY.md:246
+#: src/SUMMARY.md:253
msgid "zerocopy"
msgstr "zerocopy"
-#: src/SUMMARY.md:247
+#: src/SUMMARY.md:254
msgid "aarch64-paging"
msgstr "aarch64-paging"
-#: src/SUMMARY.md:248
+#: src/SUMMARY.md:255
msgid "buddy_system_allocator"
msgstr "buddy_system_allocator"
-#: src/SUMMARY.md:249
+#: src/SUMMARY.md:256
msgid "tinyvec"
msgstr "tinyvec"
-#: src/SUMMARY.md:250
+#: src/SUMMARY.md:257
msgid "spin"
msgstr "spin"
-#: src/SUMMARY.md:252 src/bare-metal/android/vmbase.md:1
+#: src/SUMMARY.md:259 src/bare-metal/android/vmbase.md:1
msgid "vmbase"
msgstr "vmbase"
-#: src/SUMMARY.md:254
+#: src/SUMMARY.md:261
msgid "RTC Driver"
msgstr "Pilote RTC"
-#: src/SUMMARY.md:257
+#: src/SUMMARY.md:264
msgid "Concurrency: Morning"
msgstr "Concurrence : Matin"
-#: src/SUMMARY.md:262 src/concurrency/threads.md:1
+#: src/SUMMARY.md:269 src/concurrency/threads.md:1
msgid "Threads"
msgstr "Threads"
-#: src/SUMMARY.md:263 src/concurrency/scoped-threads.md:1
+#: src/SUMMARY.md:270 src/concurrency/scoped-threads.md:1
msgid "Scoped Threads"
msgstr "Threads délimités"
-#: src/SUMMARY.md:264 src/concurrency/channels.md:1
+#: src/SUMMARY.md:271 src/concurrency/channels.md:1
msgid "Channels"
msgstr "Canaux"
-#: src/SUMMARY.md:265 src/concurrency/channels/unbounded.md:1
+#: src/SUMMARY.md:272 src/concurrency/channels/unbounded.md:1
msgid "Unbounded Channels"
msgstr "Canaux illimités"
-#: src/SUMMARY.md:266 src/concurrency/channels/bounded.md:1
+#: src/SUMMARY.md:273 src/concurrency/channels/bounded.md:1
msgid "Bounded Channels"
msgstr "Canaux limités"
-#: src/SUMMARY.md:267
+#: src/SUMMARY.md:274
msgid "Send and Sync"
msgstr "Send et Sync"
-#: src/SUMMARY.md:267
+#: src/SUMMARY.md:274
msgid "Send"
msgstr "Send"
-#: src/SUMMARY.md:267
+#: src/SUMMARY.md:274
msgid "Sync"
msgstr "Sync"
-#: src/SUMMARY.md:270 src/concurrency/send-sync/examples.md:1
+#: src/SUMMARY.md:277 src/concurrency/send-sync/examples.md:1
msgid "Examples"
msgstr "Exemples"
-#: src/SUMMARY.md:271 src/concurrency/shared_state.md:1
+#: src/SUMMARY.md:278 src/concurrency/shared_state.md:1
msgid "Shared State"
msgstr "État partagé"
-#: src/SUMMARY.md:272
+#: src/SUMMARY.md:279
msgid "Arc"
msgstr "Arc"
-#: src/SUMMARY.md:273
+#: src/SUMMARY.md:280
msgid "Mutex"
msgstr "Mutex"
-#: src/SUMMARY.md:276 src/SUMMARY.md:297
+#: 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 "Dîner des philosophes"
-#: src/SUMMARY.md:277 src/exercises/concurrency/link-checker.md:1
+#: src/SUMMARY.md:284 src/exercises/concurrency/link-checker.md:1
msgid "Multi-threaded Link Checker"
msgstr "VĂ©rificateur de liens Ă plusieurs threads"
-#: src/SUMMARY.md:279
+#: src/SUMMARY.md:286
#, fuzzy
msgid "Concurrency: Afternoon"
msgstr "Concurrence : Après-midi"
-#: src/SUMMARY.md:281
+#: src/SUMMARY.md:288
msgid "Async Basics"
msgstr ""
-#: src/SUMMARY.md:282
+#: src/SUMMARY.md:289
msgid "async/await"
msgstr ""
-#: src/SUMMARY.md:283 src/async/futures.md:1
+#: src/SUMMARY.md:290 src/async/futures.md:1
#, fuzzy
msgid "Futures"
msgstr "Fermetures"
-#: src/SUMMARY.md:284 src/async/runtimes.md:1
+#: src/SUMMARY.md:291 src/async/runtimes.md:1
#, fuzzy
msgid "Runtimes"
msgstr "Garanties d'exécution"
-#: src/SUMMARY.md:285 src/async/runtimes/tokio.md:1
+#: src/SUMMARY.md:292 src/async/runtimes/tokio.md:1
msgid "Tokio"
msgstr ""
-#: src/SUMMARY.md:286 src/exercises/concurrency/link-checker.md:106
-#: src/exercises/concurrency/chat-app.md:140 src/async/tasks.md:1
+#: src/SUMMARY.md:293 src/exercises/concurrency/link-checker.md:126
+#: src/async/tasks.md:1 src/exercises/concurrency/chat-app.md:140
msgid "Tasks"
msgstr "Tâches"
-#: src/SUMMARY.md:287 src/async/channels.md:1
+#: src/SUMMARY.md:294 src/async/channels.md:1
msgid "Async Channels"
msgstr "Canaux asynchrones"
-#: src/SUMMARY.md:289 src/async/control-flow/join.md:1
+#: src/SUMMARY.md:296 src/async/control-flow/join.md:1
msgid "Join"
msgstr ""
-#: src/SUMMARY.md:290 src/async/control-flow/select.md:1
+#: src/SUMMARY.md:297 src/async/control-flow/select.md:1
#, fuzzy
msgid "Select"
msgstr "Installation"
-#: src/SUMMARY.md:291
+#: src/SUMMARY.md:298
msgid "Pitfalls"
msgstr "Pièges"
-#: src/SUMMARY.md:292
+#: src/SUMMARY.md:299
msgid "Blocking the Executor"
msgstr ""
-#: src/SUMMARY.md:293 src/async/pitfalls/pin.md:1
+#: src/SUMMARY.md:300 src/async/pitfalls/pin.md:1
msgid "Pin"
msgstr ""
-#: src/SUMMARY.md:294 src/async/pitfalls/async-traits.md:1
+#: src/SUMMARY.md:301 src/async/pitfalls/async-traits.md:1
#, fuzzy
msgid "Async Traits"
msgstr "Traits asynchrones"
-#: src/SUMMARY.md:295 src/async/pitfalls/cancellation.md:1
+#: src/SUMMARY.md:302 src/async/pitfalls/cancellation.md:1
#, fuzzy
msgid "Cancellation"
msgstr "Traductions"
-#: src/SUMMARY.md:298 src/exercises/concurrency/chat-app.md:1
-#: src/exercises/concurrency/solutions-afternoon.md:113
+#: src/SUMMARY.md:305 src/exercises/concurrency/chat-app.md:1
+#: src/exercises/concurrency/solutions-afternoon.md:119
msgid "Broadcast Chat Application"
msgstr ""
-#: src/SUMMARY.md:301
+#: src/SUMMARY.md:308
msgid "Final Words"
msgstr "Derniers mots"
-#: src/SUMMARY.md:305 src/thanks.md:1
+#: src/SUMMARY.md:312 src/thanks.md:1
msgid "Thanks!"
msgstr "Merci!"
-#: src/SUMMARY.md:306
+#: src/SUMMARY.md:313
msgid "Other Resources"
msgstr "Autres ressources"
-#: src/SUMMARY.md:307 src/credits.md:1
+#: src/SUMMARY.md:314 src/credits.md:1
msgid "Credits"
msgstr "Crédits"
-#: src/SUMMARY.md:310 src/exercises/solutions.md:1
+#: src/SUMMARY.md:317 src/exercises/solutions.md:1
msgid "Solutions"
msgstr "Solutions"
-#: src/SUMMARY.md:315
+#: src/SUMMARY.md:322
msgid "Day 1 Morning"
msgstr "Jour 1 Matin"
-#: src/SUMMARY.md:316
+#: src/SUMMARY.md:323
msgid "Day 1 Afternoon"
msgstr "Jour 1 Après-midi"
-#: src/SUMMARY.md:317
+#: src/SUMMARY.md:324
msgid "Day 2 Morning"
msgstr "Jour 2 Matin"
-#: src/SUMMARY.md:318
+#: src/SUMMARY.md:325
msgid "Day 2 Afternoon"
msgstr "Jour 2 Après-midi"
-#: src/SUMMARY.md:319
+#: src/SUMMARY.md:326
msgid "Day 3 Morning"
msgstr "Jour 3 Matin"
-#: src/SUMMARY.md:320
+#: src/SUMMARY.md:327
msgid "Day 3 Afternoon"
msgstr "Jour 3 Après-midi"
-#: src/SUMMARY.md:321
+#: src/SUMMARY.md:328
msgid "Bare Metal Rust Morning"
msgstr "Bare Metal Rust Matin"
-#: src/SUMMARY.md:322 src/exercises/bare-metal/solutions-afternoon.md:1
+#: src/SUMMARY.md:329 src/exercises/bare-metal/solutions-afternoon.md:1
msgid "Bare Metal Rust Afternoon"
msgstr "Bare Metal Rust Après-midi"
-#: src/SUMMARY.md:323
+#: src/SUMMARY.md:330
msgid "Concurrency Morning"
msgstr "Matin concurrence"
-#: src/SUMMARY.md:324
+#: src/SUMMARY.md:331
msgid "Concurrency Afternoon"
msgstr "Après-midi concurrence"
-#: src/welcome.md:3
-msgid ""
-"[![Build workflow](https://img.shields.io/github/actions/workflow/status/"
-"google/comprehensive-rust/build.yml?style=flat-square)](https://github.com/"
-"google/comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain)"
-msgstr ""
-"[![Flux de construction](https://img.shields.io/github/actions/workflow/"
-"status/google/comprehensive-rust/build.yml?style=flat-square)](https://"
-"github.com/google/comprehensive-rust/actions/workflows/build.yml?"
-"query=branch%3Amain)"
-
-#: src/welcome.md:3
-msgid "Build workflow"
-msgstr "Flux de construction"
-
-#: src/welcome.md:3
+#: src/index.md:3
+#, fuzzy
msgid ""
"[![Build workflow](https://img.shields.io/github/actions/workflow/status/"
"google/comprehensive-rust/build.yml?style=flat-square)](https://github.com/"
"google/comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain) [!"
"[GitHub contributors](https://img.shields.io/github/contributors/google/"
"comprehensive-rust?style=flat-square)](https://github.com/google/"
-"comprehensive-rust/graphs/contributors)"
+"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 ""
"[![Flux de construction](https://img.shields.io/github/actions/workflow/"
"status/google/comprehensive-rust/build.yml?style=flat-square)](https://"
@@ -1061,51 +1058,26 @@ msgstr ""
"contributors/google/comprehensive-rust?style=flat-square)](https://github."
"com/google/comprehensive-rust/graphs/contributors)"
-#: src/welcome.md:4
-msgid "GitHub contributors"
-msgstr "Contributeurs GitHub"
-
-#: src/welcome.md:4
+#: src/index.md:7
+#, fuzzy
msgid ""
-"[![GitHub contributors](https://img.shields.io/github/contributors/google/"
-"comprehensive-rust?style=flat-square)](https://github.com/google/"
-"comprehensive-rust/graphs/contributors) [![GitHub stars](https://img.shields."
-"io/github/stars/google/comprehensive-rust?style=flat-square)](https://github."
-"com/google/comprehensive-rust/stargazers)"
-msgstr ""
-"[![Contributeurs GitHub](https://img.shields.io/github/contributors/google/"
-"comprehensive-rust?style=flat-square)](https://github.com/google/"
-"comprehensive-rust/graphs/contributors) [![GitHub Ă©toiles](https://img."
-"shields.io/github/stars/google/comprehensive-rust?style=flat-square)]"
-"(https://github.com/google/comprehensive-rust/stargazers)"
-
-#: src/welcome.md:5
-msgid "GitHub stars"
-msgstr "Étoiles GitHub"
-
-#: src/welcome.md:5
-msgid ""
-"[![GitHub stars](https://img.shields.io/github/stars/google/comprehensive-"
-"rust?style=flat-square)](https://github.com/google/comprehensive-rust/"
-"stargazers)"
-msgstr ""
-"[![GitHub Ă©toiles](https://img.shields.io/github/stars/google/comprehensive-"
-"rust?style=flat-square)](https://github.com/google/comprehensive-rust/"
-"stargazers)"
-
-#: src/welcome.md:7
-msgid ""
-"This is a three day Rust course developed by the Android team. The course "
-"covers the full spectrum of Rust, from basic syntax to advanced topics like "
-"generics and error handling. It also includes Android-specific content on "
-"the last day."
+"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 ""
"Ce cours Rust de trois jours a été développé par l'équipe Android. Le cours "
"couvre l'ensemble du langage Rust, de la syntaxe de base aux sujets avancés "
"comme les génériques et la gestion des erreurs. Il inclut également du "
"contenu spécifique à Android le dernier jour."
-#: src/welcome.md:11
+#: 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:"
@@ -1113,30 +1085,34 @@ msgstr ""
"Le but du cours est de vous apprendre Rust. Nous supposons que vous ne savez "
"rien à propos de Rust et espérons :"
-#: src/welcome.md:14
+#: src/index.md:18
msgid "Give you a comprehensive understanding of the Rust syntax and language."
msgstr ""
"Vous donner une compréhension complète de la syntaxe et du langage Rust."
-#: src/welcome.md:15
+#: src/index.md:19
msgid "Enable you to modify existing programs and write new programs in Rust."
msgstr ""
"Vous permettre de modifier des programmes existants et d'Ă©crire de nouveaux "
"programmes en Rust."
-#: src/welcome.md:16
+#: src/index.md:20
msgid "Show you common Rust idioms."
msgstr "Vous montrer les constructions fréquentes (idiomes) en Rust."
-#: src/welcome.md:18
+#: src/index.md:22
+msgid "We call the first three course days Rust Fundamentals."
+msgstr ""
+
+#: src/index.md:24
+#, fuzzy
msgid ""
-"The first three days show you the fundamentals of Rust. Following this, "
-"you're invited to dive into one or more specialized topics:"
+"Building on this, you're invited to dive into one or more specialized topics:"
msgstr ""
"Les trois premiers jours sont consacrés aux fondamentaux du langage. Vous "
"pouvez ensuite approfondir un ou plusieurs des sujets suivant:"
-#: src/welcome.md:21
+#: 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."
@@ -1145,7 +1121,7 @@ msgstr ""
"de Rust dans le cadre du développement pour la plate-forme Android. Ce cours "
"couvre également l'interopérabilité avec les langages C, C++ et Java."
-#: src/welcome.md:23
+#: src/index.md:28
msgid ""
"[Bare-metal](bare-metal.md): a whole-day class on using Rust for bare-metal "
"(embedded) development. Both microcontrollers and application processors are "
@@ -1155,7 +1131,7 @@ msgstr ""
"de Rust pour le développement embarqué. Le cours touche à la fois aux "
"microcontrĂ´leurs et aux processeurs d'applications."
-#: src/welcome.md:26
+#: src/index.md:31
msgid ""
"[Concurrency](concurrency.md): a whole-day class on concurrency in Rust. We "
"cover both classical concurrency (preemptively scheduling using threads and "
@@ -1167,11 +1143,11 @@ msgstr ""
"classique (planification Ă base de threads et mutex) ainsi que la "
"concurrence async/await (multitâche coopératif à base de futures)."
-#: src/welcome.md:32
+#: src/index.md:37
msgid "Non-Goals"
msgstr "Non-objectifs"
-#: src/welcome.md:34
+#: 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:"
@@ -1179,7 +1155,7 @@ msgstr ""
"Rust est un grand langage et nous ne pourrons pas tout couvrir en quelques "
"jours. Certains non-objectifs de ce cours sont :"
-#: src/welcome.md:37
+#: src/index.md:42
#, fuzzy
msgid ""
"Learning how to develop macros: please see [Chapter 19.5 in the Rust Book]"
@@ -1191,22 +1167,22 @@ msgstr ""
"lang.org/book/ch19-01-unsafe-rust.html) et le [Rustonomicon](https://doc."
"rust-lang.org/nomicon/)."
-#: src/welcome.md:41
+#: src/index.md:46
msgid "Assumptions"
msgstr "Hypothèses"
-#: src/welcome.md:43
+#: 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 "
+"statically-typed language and we will sometimes make comparisons with C and "
"C++ to better explain or contrast the Rust approach."
msgstr ""
"Le cours suppose que vous savez déjà programmer. Rust est un language "
"statiquement typé et on fera parfois des comparaisons avec C et C++ pour "
"mieux expliquer ou contraster l'approche de Rust."
-#: src/welcome.md:47
+#: src/index.md:52
#, fuzzy
msgid ""
"If you know how to program in a dynamically-typed language such as Python or "
@@ -1215,7 +1191,7 @@ msgstr ""
"Si vous savez programmer dans un langage Ă typage dynamique tel que Python "
"ou JavaScript, alors vous pourrez également très bien suivre."
-#: src/welcome.md:52
+#: 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 "
@@ -1239,10 +1215,20 @@ msgstr ""
"le cours en interne chez Google."
#: 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 "Avant de suivre le cours, vous voudriez :"
-#: src/running-the-course.md:10
+#: src/running-the-course.md:18
#, fuzzy
msgid ""
"Make yourself familiar with the course material. We've included speaker "
@@ -1258,7 +1244,7 @@ msgstr ""
"sur le lien avec une petite flèche à côté de \"Notes du conférencier\"). "
"Ainsi, vous avez un écran propre à présenter à la classe."
-#: src/running-the-course.md:16
+#: src/running-the-course.md:24
#, fuzzy
msgid ""
"Decide on the dates. Since the course takes at least three full days, we "
@@ -1269,7 +1255,7 @@ msgstr ""
"Sélectionnez votre sujet pour l'après-midi du quatrième jour. Cela peut être "
"basé sur le public que vous attendez, ou sur votre propre expertise."
-#: src/running-the-course.md:21
+#: src/running-the-course.md:29
#, fuzzy
msgid ""
"Find a room large enough for your in-person participants. We recommend a "
@@ -1285,7 +1271,7 @@ msgstr ""
"dit qu'ils trouvent utile d'avoir une pause dans le cours, car cela les aide "
"Ă traiter toutes les informations que nous leur donnons."
-#: src/running-the-course.md:29
+#: 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 "
@@ -1304,7 +1290,7 @@ msgstr ""
"portables. En particulier, vous ferez beaucoup de programmation en direct en "
"tant qu'instructeur, donc un pupitre ne sera pas très utile pour vous."
-#: src/running-the-course.md:35
+#: src/running-the-course.md:43
#, fuzzy
msgid ""
"Let people solve the exercises by themselves or in small groups. We "
@@ -1333,7 +1319,7 @@ msgstr ""
"\n"
"Préparez tout ce dont vous avez besoin pour l'après-midi du jour 4."
-#: src/running-the-course.md:43
+#: 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!"
@@ -1341,7 +1327,7 @@ msgstr ""
"C'est tout, bonne chance pour suivre le cours ! Nous espérons que ce sera "
"aussi amusant pour vous comme il l'a été pour nous !"
-#: src/running-the-course.md:46
+#: 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 "
@@ -1357,48 +1343,65 @@ msgstr ""
"discussions/100)Â !"
#: src/running-the-course/course-structure.md:5
-msgid "The course is fast paced and covers a lot of ground:"
-msgstr "Le cours est rapide et couvre beaucoup de terrain:"
+#, fuzzy
+msgid "Rust Fundamentals"
+msgstr "Binaires de rouille"
#: src/running-the-course/course-structure.md:7
-#, fuzzy
-msgid "Day 1: Basic Rust, ownership and the borrow checker."
-msgstr "Jour 1 : Rust de base, propriété et vérificateur d'emprunt."
+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:8
+#: 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: Compound data types, pattern matching, the standard library."
+msgid ""
+"Day 2: Memory management, ownership, compound data types, and the standard "
+"library."
msgstr ""
"Jour 2 : Types de données composés, filtrage de motifs, bibliothèque "
"standard."
-#: src/running-the-course/course-structure.md:9
+#: src/running-the-course/course-structure.md:12
#, fuzzy
-msgid "Day 3: Traits and generics, error handling, testing, unsafe Rust."
+msgid "Day 3: Generics, traits, error handling, testing, and unsafe Rust."
msgstr ""
"Jour 3 : Caractéristiques et génériques, gestion des erreurs, tests, Rust "
"risqué.\n"
"\n"
"Jour 4 : Concurrence avec Rust et voir Rust en action."
-#: src/running-the-course/course-structure.md:11
+#: src/running-the-course/course-structure.md:14
msgid "Deep Dives"
msgstr ""
-#: src/running-the-course/course-structure.md:13
+#: 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 ""
-#: src/running-the-course/course-structure.md:18
-msgid ""
-"The [Android Deep Dive](../android.md) is a half-day course on using Rust "
-"for Android platform development. This includes interoperability with C, C+"
-"+, and Java."
-msgstr ""
+#: src/running-the-course/course-structure.md:19
+#, fuzzy
+msgid "Rust in Android"
+msgstr "Bienvenue au jour 1"
-#: src/running-the-course/course-structure.md:22
+#: 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 ""
+"[Android](android.md): un cours d'une demi-journée consacré à l'utilisation "
+"de Rust dans le cadre du développement pour la plate-forme Android. Ce cours "
+"couvre également l'interopérabilité avec les langages C, C++ et Java."
+
+#: src/running-the-course/course-structure.md:25
#, fuzzy
msgid ""
"You will need an [AOSP checkout](https://source.android.com/docs/setup/"
@@ -1415,7 +1418,7 @@ msgstr ""
"système de construction d'Android voit les fichiers `Android.bp` dans `src/"
"android/`."
-#: src/running-the-course/course-structure.md:27
+#: src/running-the-course/course-structure.md:30
#, fuzzy
msgid ""
"Ensure that `adb sync` works with your emulator or real device and pre-build "
@@ -1427,18 +1430,23 @@ msgstr ""
"android/build_all.sh`. Lisez le script pour voir les commandes éxécutées et "
"assurez-vous qu'elles fonctionnent lorsque vous les exécutez à la main."
-#: src/running-the-course/course-structure.md:34
-msgid "Bare-Metal"
-msgstr ""
+#: src/running-the-course/course-structure.md:37
+#, fuzzy
+msgid "Bare-Metal Rust"
+msgstr "Bare Metal Rust Matin"
-#: src/running-the-course/course-structure.md:36
+#: src/running-the-course/course-structure.md:39
+#, fuzzy
msgid ""
-"The [Bare-Metal Deep Dive](../bare-metal.md): a full day class on using Rust "
-"for bare-metal (embedded) development. Both microcontrollers and application "
-"processors are covered."
+"The [Bare-Metal Rust](../bare-metal.md) deep dive is a full day class on "
+"using Rust for bare-metal (embedded) development. Both microcontrollers and "
+"application processors are covered."
msgstr ""
+"[Bare-metal](bare-metal.md): un cours d'une journée consacré à l'utilisation "
+"de Rust pour le développement embarqué. Le cours touche à la fois aux "
+"microcontrĂ´leurs et aux processeurs d'applications."
-#: src/running-the-course/course-structure.md:40
+#: 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 "
@@ -1446,25 +1454,25 @@ msgid ""
"bare-metal.md)."
msgstr ""
-#: src/running-the-course/course-structure.md:45
+#: src/running-the-course/course-structure.md:48
#, fuzzy
-msgid "Concurrency"
-msgstr "Concurrence"
-
-#: src/running-the-course/course-structure.md:47
-msgid ""
-"The [Concurrency Deep Dive](../concurrency.md) is a full day class on "
-"classical as well as `async`/`await` concurrency."
-msgstr ""
+msgid "Concurrency in Rust"
+msgstr "Bienvenue à Comprehensive Rust(le guide complet de Rust) 🦀"
#: src/running-the-course/course-structure.md:50
msgid ""
+"The [Concurrency in Rust](../concurrency.md) deep dive is a full day class "
+"on classical as well as `async`/`await` concurrency."
+msgstr ""
+
+#: 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 ""
-#: src/running-the-course/course-structure.md:54
+#: src/running-the-course/course-structure.md:57
msgid ""
"```shell\n"
"cargo init concurrency\n"
@@ -1474,11 +1482,11 @@ msgid ""
"```"
msgstr ""
-#: src/running-the-course/course-structure.md:61
+#: src/running-the-course/course-structure.md:64
msgid "Format"
msgstr "\\##Format"
-#: src/running-the-course/course-structure.md:63
+#: 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!"
@@ -1531,10 +1539,12 @@ msgstr ""
"bénévoles:"
#: 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) and [@hugojacob](https://"
-"github.com/hugojacob)."
+"by [@rastringer](https://github.com/rastringer), [@hugojacob](https://github."
+"com/hugojacob), [@joaovicmendes](https://github.com/joaovicmendes) and "
+"[@henrif75](https://github.com/henrif75)."
msgstr ""
"[portugais brésilien](https://google.github.io/comprehensive-rust/pt-BR/) "
"par [@rastringer](https://github.com/rastringer) et [@hugojacob](https://"
@@ -1623,63 +1633,50 @@ msgid "Installation"
msgstr "Installation"
#: src/cargo.md:10
-msgid "Rustup (Recommended)"
-msgstr "Rustup (recommandé)"
+msgid "**Please follow the instructions on .**"
+msgstr ""
#: src/cargo.md:12
+#, fuzzy
msgid ""
-"You can follow the instructions to install cargo and rust compiler, among "
-"other standard ecosystem tools with the [rustup](https://rust-analyzer."
-"github.io/) tool, which is maintained by the Rust Foundation."
-msgstr ""
-"Vous pouvez suivre les instructions pour installer Cargo et le compilateur "
-"Rust, parmi d'autres outils de l'écosystème standard avec l'outil [rustup]"
-"(https://rust-analyzer.github.io/), qui est maintenu par la Foundation Rust."
-
-#: src/cargo.md:14
-msgid ""
-"Along with cargo and rustc, Rustup will install itself as a command line "
-"utility that you can use to install/switch toolchains, setup cross "
-"compilation, etc."
+"This will give you the Cargo build tool (`cargo`) and the Rust compiler "
+"(`rustc`). You will also get `rustup`, a command line utility that you can "
+"use to install/switch toolchains, setup cross compilation, etc."
msgstr ""
"Avec cargo et rustc, Rustup s'installera en tant qu'utilitaire de ligne de "
"commande que vous pourrez utiliser pour installer/changer de chaînes "
"d'outils, configurer une compilation croisée, etc."
#: src/cargo.md:16
-msgid "Package Managers"
-msgstr "\\###Â Gestionnaires de packages"
-
-#: src/cargo.md:18
-msgid "Debian"
-msgstr "Debian"
-
-#: src/cargo.md:20
+#, fuzzy
msgid ""
-"On Debian/Ubuntu, you can install Cargo, the Rust source and the [Rust "
-"formatter](https://github.com/rust-lang/rustfmt) with"
+"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 ""
"Sur Debian/Ubuntu, vous pouvez installer Cargo, la source Rust et le "
"[formateur Rust](https://github.com/rust-lang/rustfmt) avec"
-#: src/cargo.md:22
+#: src/cargo.md:18
msgid ""
"```shell\n"
-"$ sudo apt install cargo rust-src rustfmt\n"
+"sudo apt install cargo rust-src rustfmt\n"
"```"
msgstr ""
-#: src/cargo.md:26
+#: src/cargo.md:22
+#, fuzzy
msgid ""
-"This will allow \\[rust-analyzer\\]\\[1\\] to jump to the definitions. We "
-"suggest using [VS Code](https://code.visualstudio.com/) to edit the code "
-"(but any LSP compatible editor works)."
+"We suggest using [VS Code](https://code.visualstudio.com/) to edit the code "
+"(but any LSP compatible editor works with rust-analyzer[3](https://rust-"
+"analyzer.github.io/))."
msgstr ""
"Cela permettra Ă \\[rust-analyzer\\]\\[1\\] de passer directement aux "
"définitions. Nous suggérons d'utiliser [VS Code](https://code.visualstudio."
"com/) pour modifier le code (mais tout Ă©diteur LSP compatible fonctionne)."
-#: src/cargo.md:29
+#: src/cargo.md:24
msgid ""
"Some folks also like to use the [JetBrains](https://www.jetbrains.com/"
"clion/) family of IDEs, which do their own analysis but have their own "
@@ -1714,11 +1711,12 @@ msgstr ""
"et autres formats intermédiaires."
#: src/cargo/rust-ecosystem.md:8
+#, fuzzy
msgid ""
"`cargo`: the Rust dependency manager and build tool. Cargo knows how to "
-"download dependencies hosted on and it will pass them to "
-"`rustc` when building your project. Cargo also comes with a built-in test "
-"runner which is used to execute unit tests."
+"download dependencies, usually hosted on , and it will "
+"pass them to `rustc` when building your project. Cargo also comes with a "
+"built-in test runner which is used to execute unit tests."
msgstr ""
"`cargo` : le gestionnaire de dépendances Rust et l'outil de construction. "
"Cargo sait comment télécharger les dépendances hébergées sur 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 "Points clés:"
+
+#: 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 ""
+"Le but de cette diapositive est de montrer que les blocs ont un type et une "
+"valeur dans Rust."
+
+#: 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 ""
+"Vous pouvez montrer comment la valeur du bloc change en modifiant la "
+"dernière ligne du bloc. Par exemple, ajouter/supprimer un point-virgule ou "
+"utiliser un \"retour\"."
+
+#: src/control-flow/if-expressions.md:1
+#, fuzzy
+msgid "`if` expressions"
+msgstr "expressions \"si\""
+
+#: 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:7
+msgid ""
+"```rust,editable\n"
+"fn main() {\n"
+" let mut x = 10;\n"
+" if x % 2 == 0 {\n"
+" x = x / 2;\n"
+" } else {\n"
+" x = 3 * x + 1;\n"
+" }\n"
+"}\n"
+"```"
+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 ""
+"De plus, vous pouvez l'utiliser comme expression. Cela fait la mĂŞme chose "
+"que ci-dessus:"
+
+#: src/control-flow/if-expressions.md:22
+msgid ""
+"```rust,editable\n"
+"fn main() {\n"
+" let mut x = 10;\n"
+" x = if x % 2 == 0 {\n"
+" x / 2\n"
+" } else {\n"
+" 3 * x + 1\n"
+" };\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/control-flow/if-expressions.md:35
+msgid ""
+"Because `if` is an expression and must have a particular type, both of its "
+"branch blocks must have the same type. Consider showing what happens if you "
+"add `;` after `x / 2` in the second example."
+msgstr ""
+
+#: src/control-flow/for-expressions.md:1
+#, fuzzy
+msgid "`for` loops"
+msgstr "Boucles `for`"
+
+#: 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 ""
+"L'expression `for` est étroitement liée à l'expression `while let`. Ce sera "
+"appelez automatiquement `into_iter()` sur l'expression, puis parcourez-la :"
+
+#: 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 "Vous pouvez utiliser `break` et `continue` ici comme d'habitude."
+
+#: src/control-flow/for-expressions.md:25
+#, fuzzy
+msgid "Index iteration is not a special syntax in Rust for just that case."
+msgstr ""
+"L'itération d'index n'est pas une syntaxe spéciale dans Rust pour ce cas "
+"précis."
+
+#: src/control-flow/for-expressions.md:26
+#, fuzzy
+msgid "`(0..10)` is a range that implements an `Iterator` trait. "
+msgstr "`(0..10)` est une plage qui implémente un trait `Iterator`."
+
+#: 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` est une méthode qui renvoie un autre `Iterator` qui saute tous les "
+"autres éléments."
+
+#: src/control-flow/for-expressions.md:28
+#, fuzzy
+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 ""
+"Modifier les éléments du vecteur et expliquer les erreurs du compilateur. "
+"Modifiez le vecteur `v` pour qu'il soit modifiable et la boucle for en `for "
+"x in v.iter_mut()`."
+
+#: src/control-flow/while-expressions.md:1
+#, fuzzy
+msgid "`while` loops"
+msgstr "Expressions `while`"
+
+#: 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 "`pause` et `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 ""
+"Si vous voulez quitter une boucle plus tĂ´t, utilisez `break`, si vous voulez "
+"commencer immédiatement la prochaine itération utilise `continue`. "
+"`continue` et `break` peuvent Ă©ventuellement prenez un argument d'Ă©tiquette "
+"qui est utilisé pour sortir des boucles imbriquées :"
+
+#: 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 ""
+"Dans ce cas, nous cassons la boucle externe après 3 itérations de la boucle "
+"interne."
+
+#: src/control-flow/loop-expressions.md:1
+#, fuzzy
+msgid "`loop` expressions"
+msgstr "\\#Â expressions de \"boucle\""
+
+#: 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 ""
+"Enfin, il existe un mot-clé `loop` qui crée une boucle sans fin. Ici, vous "
+"devez soit `break` ou `return` pour arrêter la boucle :"
+
+#: 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
#, fuzzy
msgid ""
@@ -4097,15 +4520,6 @@ msgstr ""
"progressivement les types de moins en moins au fur et Ă mesure que le cours "
"avance."
-#: src/basic-syntax/variables.md:18
-#, fuzzy
-msgid ""
-"Note that since `println!` is a macro, `x` is not moved, even using the "
-"function like syntax of `println!(\"x: {}\", x)`"
-msgstr ""
-"Notez que puisque `println!` est une macro, `x` n'est pas déplacé, même en "
-"utilisant la fonction comme syntaxe de `println!(\"x: {}\", x)`"
-
#: src/basic-syntax/type-inference.md:3
#, fuzzy
msgid "Rust will look at how the variable is _used_ to determine the type:"
@@ -4189,8 +4603,10 @@ msgstr ""
#, fuzzy
msgid ""
"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator."
-"html#method.collect) relies on `FromIterator`, which [`HashSet`](https://doc."
-"rust-lang.org/std/iter/trait.FromIterator.html) implements."
+"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) repose sur `FromIterator`, qui \\[`HashSet`\\](https:/ /"
@@ -4202,21 +4618,24 @@ msgid "Static and Constant Variables"
msgstr "Variables statiques et constantes"
#: src/basic-syntax/static-and-const.md:3
-#, fuzzy
-msgid "Global state is managed with static and constant variables."
-msgstr "L'état global est géré avec des variables statiques et constantes."
+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:5
+#: src/basic-syntax/static-and-const.md:6
#, fuzzy
msgid "`const`"
msgstr "`const`"
-#: src/basic-syntax/static-and-const.md:7
-#, fuzzy
-msgid "You can declare compile-time constants:"
-msgstr "Vous pouvez déclarer des constantes de compilation :"
+#: 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:9
+#: src/basic-syntax/static-and-const.md:11
msgid ""
"```rust,editable\n"
"const DIGEST_SIZE: usize = 3;\n"
@@ -4238,7 +4657,7 @@ msgid ""
"```"
msgstr ""
-#: src/basic-syntax/static-and-const.md:27
+#: src/basic-syntax/static-and-const.md:29
#, fuzzy
msgid ""
"According to the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-"
@@ -4247,17 +4666,24 @@ msgstr ""
"Selon le \\[Rust RFC Book\\] [1](https://rust-lang.github.io/rfcs/0246-const-"
"vs-static.html), ceux-ci sont intégrés lors de l'utilisation."
-#: src/basic-syntax/static-and-const.md:29
+#: 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
#, fuzzy
msgid "`static`"
msgstr "`statique`"
-#: src/basic-syntax/static-and-const.md:31
-#, fuzzy
-msgid "You can also declare static variables:"
-msgstr "Vous pouvez également déclarer des variables statiques :"
+#: 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:33
+#: src/basic-syntax/static-and-const.md:37
msgid ""
"```rust,editable\n"
"static BANNER: &str = \"Welcome to RustOS 3.14\";\n"
@@ -4268,13 +4694,15 @@ msgid ""
"```"
msgstr ""
-#: src/basic-syntax/static-and-const.md:41
+#: 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."
+"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 ""
"Comme indiqué dans le \\[Rust RFC Book\\] [1](https://rust-lang.github.io/"
"rfcs/0246-const-vs-static.html), ceux-ci ne sont pas alignés lors de "
@@ -4282,23 +4710,24 @@ msgstr ""
"pour le code non sécurisé et intégré, et la variable vit tout au long de "
"l'exécution du programme."
-#: src/basic-syntax/static-and-const.md:44
-#, fuzzy
+#: src/basic-syntax/static-and-const.md:49
msgid ""
-"We will look at mutating static data in the [chapter on Unsafe Rust](../"
-"unsafe.md)."
+"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 ""
-"Nous examinerons la mutation des données statiques dans le [chapitre sur "
-"Unsafe Rust](../unsafe.md)."
-#: src/basic-syntax/static-and-const.md:48
+#: src/basic-syntax/static-and-const.md:57
#, fuzzy
msgid "Mention that `const` behaves semantically similar to C++'s `constexpr`."
msgstr ""
"Mentionnez que `const` se comporte sémantiquement de la même manière que "
"`constexpr` de C++."
-#: src/basic-syntax/static-and-const.md:49
+#: src/basic-syntax/static-and-const.md:58
#, fuzzy
msgid ""
"`static`, on the other hand, is much more similar to a `const` or mutable "
@@ -4307,7 +4736,13 @@ msgstr ""
"`static`, d'autre part, ressemble beaucoup plus Ă une variable globale "
"`const` ou mutable en C++."
-#: src/basic-syntax/static-and-const.md:50
+#: 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
#, fuzzy
msgid ""
"It isn't super common that one would need a runtime evaluated constant, but "
@@ -4316,6 +4751,74 @@ msgstr ""
"Il n'est pas très courant d'avoir besoin d'une constante évaluée à "
"l'exécution, mais c'est utile et plus sûr que d'utiliser un statique."
+#: 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 "`statique`"
+
+#: 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 "La fonction `main` est le point d'entrée du programme."
+
+#: 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 "Les valeurs ont des tailles fixes connues au moment de la compilation."
+
+#: 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
#, fuzzy
msgid ""
@@ -4394,2070 +4897,6 @@ msgid ""
"```"
msgstr ""
-#: src/memory-management.md:3
-#, fuzzy
-msgid "Traditionally, languages have fallen into two broad categories:"
-msgstr ""
-"Traditionnellement, les langues se répartissent en deux grandes catégories :"
-
-#: src/memory-management.md:5
-#, fuzzy
-msgid "Full control via manual memory management: C, C++, Pascal, ..."
-msgstr ""
-"Contrôle total via la gestion manuelle de la mémoire : C, C++, Pascal, ..."
-
-#: src/memory-management.md:6
-#, fuzzy
-msgid ""
-"Full safety via automatic memory management at runtime: Java, Python, Go, "
-"Haskell, ..."
-msgstr ""
-"Sécurité totale via la gestion automatique de la mémoire à l'exécution : "
-"Java, Python, Go, Haskell, ..."
-
-#: src/memory-management.md:8
-#, fuzzy
-msgid "Rust offers a new mix:"
-msgstr "Rust propose un nouveau mix :"
-
-#: src/memory-management.md:10
-#, fuzzy
-msgid ""
-"Full control _and_ safety via compile time enforcement of correct memory "
-"management."
-msgstr ""
-"Contrôle total * et * sécurité via l'application du temps de compilation de "
-"la mémoire correcte gestion."
-
-#: src/memory-management.md:13
-#, fuzzy
-msgid "It does this with an explicit ownership concept."
-msgstr "Il le fait avec un concept de propriété explicite."
-
-#: src/memory-management.md:15
-#, fuzzy
-msgid "First, let's refresh how memory management works."
-msgstr ""
-"Tout d'abord, rafraîchissons le fonctionnement de la gestion de la mémoire."
-
-#: src/memory-management/stack-vs-heap.md:1
-#, fuzzy
-msgid "The Stack vs The Heap"
-msgstr "La pile contre le tas"
-
-#: src/memory-management/stack-vs-heap.md:3
-#, fuzzy
-msgid "Stack: Continuous area of memory for local variables."
-msgstr "Pile : Zone continue de mémoire pour les variables locales."
-
-#: src/memory-management/stack-vs-heap.md:4
-#, fuzzy
-msgid "Values have fixed sizes known at compile time."
-msgstr "Les valeurs ont des tailles fixes connues au moment de la compilation."
-
-#: src/memory-management/stack-vs-heap.md:5
-#, fuzzy
-msgid "Extremely fast: just move a stack pointer."
-msgstr "Extrêmement rapide : il suffit de déplacer un pointeur de pile."
-
-#: src/memory-management/stack-vs-heap.md:6
-#, fuzzy
-msgid "Easy to manage: follows function calls."
-msgstr "Facile à gérer : suit les appels de fonction."
-
-#: src/memory-management/stack-vs-heap.md:7
-#, fuzzy
-msgid "Great memory locality."
-msgstr "Grande localité de mémoire."
-
-#: src/memory-management/stack-vs-heap.md:9
-#, fuzzy
-msgid "Heap: Storage of values outside of function calls."
-msgstr "Heap : Stockage de valeurs en dehors des appels de fonction."
-
-#: src/memory-management/stack-vs-heap.md:10
-#, fuzzy
-msgid "Values have dynamic sizes determined at runtime."
-msgstr ""
-"Les valeurs ont des tailles dynamiques déterminées au moment de l'exécution."
-
-#: src/memory-management/stack-vs-heap.md:11
-#, fuzzy
-msgid "Slightly slower than the stack: some book-keeping needed."
-msgstr ""
-"Légèrement plus lent que la pile : une certaine comptabilité est nécessaire."
-
-#: src/memory-management/stack-vs-heap.md:12
-#, fuzzy
-msgid "No guarantee of memory locality."
-msgstr "Aucune garantie de localisation de la mémoire."
-
-#: src/memory-management/stack.md:3
-#, fuzzy
-msgid ""
-"Creating a `String` puts fixed-sized data on the stack and dynamically sized "
-"data on the heap:"
-msgstr ""
-"La création d'une \"chaîne\" place des données de taille fixe sur la pile et "
-"dimensionnées dynamiquement données sur le tas :"
-
-#: src/memory-management/stack.md:6
-msgid ""
-"```rust,editable\n"
-"fn main() {\n"
-" let s1 = String::from(\"Hello\");\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/memory-management/stack.md:12
-msgid ""
-"```bob\n"
-" Stack Heap\n"
-".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - -.\n"
-": : : :\n"
-": s1 : : :\n"
-": +-----------+-------+ : : +----+----+----+----+----+ :\n"
-": | ptr | o---+---+-----+-->| H | e | l | l | o | :\n"
-": | len | 5 | : : +----+----+----+----+----+ :\n"
-": | capacity | 5 | : : :\n"
-": +-----------+-------+ : : :\n"
-": : `- - - - - - - - - - - - - - - -'\n"
-"`- - - - - - - - - - - - - -'\n"
-"```"
-msgstr ""
-
-#: src/memory-management/stack.md:28
-msgid ""
-"Mention that a `String` is backed by a `Vec`, so it has a capacity and "
-"length and can grow if mutable via reallocation on the heap."
-msgstr ""
-
-#: src/memory-management/stack.md:30
-msgid ""
-"If students ask about it, you can mention that the underlying memory is heap "
-"allocated using the [System Allocator](https://doc.rust-lang.org/std/alloc/"
-"struct.System.html) and custom allocators can be implemented using the "
-"[Allocator API](https://doc.rust-lang.org/std/alloc/index.html)"
-msgstr ""
-
-#: src/memory-management/stack.md:32
-msgid ""
-"We can inspect the memory layout with `unsafe` code. However, you should "
-"point out that this is rightfully unsafe!"
-msgstr ""
-
-#: src/memory-management/stack.md:34
-msgid ""
-"```rust,editable\n"
-"fn main() {\n"
-" let mut s1 = String::from(\"Hello\");\n"
-" s1.push(' ');\n"
-" s1.push_str(\"world\");\n"
-" // DON'T DO THIS AT HOME! For educational purposes only.\n"
-" // String provides no guarantees about its layout, so this could lead "
-"to\n"
-" // undefined behavior.\n"
-" unsafe {\n"
-" let (capacity, ptr, len): (usize, usize, usize) = std::mem::"
-"transmute(s1);\n"
-" println!(\"ptr = {ptr:#x}, len = {len}, capacity = {capacity}\");\n"
-" }\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/memory-management/manual.md:3
-#, fuzzy
-msgid "You allocate and deallocate heap memory yourself."
-msgstr "Vous allouez et désallouez vous-même la mémoire de tas."
-
-#: src/memory-management/manual.md:5
-#, fuzzy
-msgid ""
-"If not done with care, this can lead to crashes, bugs, security "
-"vulnerabilities, and memory leaks."
-msgstr ""
-"Si cela n'est pas fait avec soin, cela peut entraîner des plantages, des "
-"bogues, des failles de sécurité et des fuites de mémoire."
-
-#: src/memory-management/manual.md:7
-#, fuzzy
-msgid "C Example"
-msgstr "C Exemple"
-
-#: src/memory-management/manual.md:9
-#, fuzzy
-msgid "You must call `free` on every pointer you allocate with `malloc`:"
-msgstr ""
-"Vous devez appeler `free` sur chaque pointeur que vous allouez avec "
-"`malloc`Â :"
-
-#: src/memory-management/manual.md:11
-msgid ""
-"```c\n"
-"void foo(size_t n) {\n"
-" int* int_array = malloc(n * sizeof(int));\n"
-" //\n"
-" // ... lots of code\n"
-" //\n"
-" free(int_array);\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/memory-management/manual.md:21
-#, fuzzy
-msgid ""
-"Memory is leaked if the function returns early between `malloc` and `free`: "
-"the pointer is lost and we cannot deallocate the memory."
-msgstr ""
-"La mémoire est perdue si la fonction revient tôt entre `malloc` et `free` : "
-"le pointeur est perdu et nous ne pouvons pas désallouer la mémoire."
-
-#: src/memory-management/scope-based.md:3
-#, fuzzy
-msgid ""
-"Constructors and destructors let you hook into the lifetime of an object."
-msgstr ""
-"Les constructeurs et les destructeurs vous permettent de vous connecter Ă la "
-"durée de vie d'un objet."
-
-#: src/memory-management/scope-based.md:5
-#, fuzzy
-msgid ""
-"By wrapping a pointer in an object, you can free memory when the object is "
-"destroyed. The compiler guarantees that this happens, even if an exception "
-"is raised."
-msgstr ""
-"En enveloppant un pointeur dans un objet, vous pouvez libérer de la mémoire "
-"lorsque l'objet est détruit. Le compilateur garantit que cela se produit, "
-"même si une exception est soulevé."
-
-#: src/memory-management/scope-based.md:9
-#, fuzzy
-msgid ""
-"This is often called _resource acquisition is initialization_ (RAII) and "
-"gives you smart pointers."
-msgstr ""
-"Ceci est souvent appelé _l'acquisition de ressources est initialisée_ (RAII) "
-"et donne vous pointeurs intelligents."
-
-#: src/memory-management/scope-based.md:12
-#, fuzzy
-msgid "C++ Example"
-msgstr "Exemple C++"
-
-#: src/memory-management/scope-based.md:14
-msgid ""
-"```c++\n"
-"void say_hello(std::unique_ptr person) {\n"
-" std::cout << \"Hello \" << person->name << std::endl;\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/memory-management/scope-based.md:20
-#, fuzzy
-msgid ""
-"The `std::unique_ptr` object is allocated on the stack, and points to memory "
-"allocated on the heap."
-msgstr ""
-"L'objet `std::unique_ptr` est alloué sur la pile et pointe vers mémoire "
-"allouée sur le tas."
-
-#: src/memory-management/scope-based.md:22
-#, fuzzy
-msgid "At the end of `say_hello`, the `std::unique_ptr` destructor will run."
-msgstr "À la fin de `say_hello`, le destructeur `std::unique_ptr` s'exécutera."
-
-#: src/memory-management/scope-based.md:23
-#, fuzzy
-msgid "The destructor frees the `Person` object it points to."
-msgstr "Le destructeur libère l'objet `Person` vers lequel il pointe."
-
-#: src/memory-management/scope-based.md:25
-#, fuzzy
-msgid ""
-"Special move constructors are used when passing ownership to a function:"
-msgstr ""
-"Des constructeurs de mouvement spéciaux sont utilisés lors du transfert de "
-"propriété à une fonction :"
-
-#: src/memory-management/scope-based.md:27
-msgid ""
-"```c++\n"
-"std::unique_ptr person = find_person(\"Carla\");\n"
-"say_hello(std::move(person));\n"
-"```"
-msgstr ""
-
-#: src/memory-management/garbage-collection.md:1
-#, fuzzy
-msgid "Automatic Memory Management"
-msgstr "Gestion automatique de la mémoire"
-
-#: src/memory-management/garbage-collection.md:3
-#, fuzzy
-msgid ""
-"An alternative to manual and scope-based memory management is automatic "
-"memory management:"
-msgstr ""
-"Une alternative à la gestion manuelle et basée sur la portée de la mémoire "
-"est la mémoire automatique gestion:"
-
-#: src/memory-management/garbage-collection.md:6
-#, fuzzy
-msgid "The programmer never allocates or deallocates memory explicitly."
-msgstr "Le programmeur n'alloue ou ne libère jamais de mémoire explicitement."
-
-#: src/memory-management/garbage-collection.md:7
-#, fuzzy
-msgid ""
-"A garbage collector finds unused memory and deallocates it for the "
-"programmer."
-msgstr ""
-"Un ramasse-miettes trouve la mémoire inutilisée et la libère pour le "
-"programmeur."
-
-#: src/memory-management/garbage-collection.md:9
-#, fuzzy
-msgid "Java Example"
-msgstr "Exemple Java"
-
-#: src/memory-management/garbage-collection.md:11
-#, fuzzy
-msgid "The `person` object is not deallocated after `sayHello` returns:"
-msgstr "L'objet `person` n'est pas désalloué après le retour de `sayHello` :"
-
-#: src/memory-management/garbage-collection.md:13
-msgid ""
-"```java\n"
-"void sayHello(Person person) {\n"
-" System.out.println(\"Hello \" + person.getName());\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/memory-management/rust.md:1
-#, fuzzy
-msgid "Memory Management in Rust"
-msgstr "Gestion de la mémoire avec Rust"
-
-#: src/memory-management/rust.md:3
-#, fuzzy
-msgid "Memory management in Rust is a mix:"
-msgstr "La gestion de la mémoire avec Rust est un mélange :"
-
-#: src/memory-management/rust.md:5
-#, fuzzy
-msgid "Safe and correct like Java, but without a garbage collector."
-msgstr "Sûr et correct comme Java, mais sans ramasse-miettes."
-
-#: src/memory-management/rust.md:6
-#, fuzzy
-msgid ""
-"Depending on which abstraction (or combination of abstractions) you choose, "
-"can be a single unique pointer, reference counted, or atomically reference "
-"counted."
-msgstr ""
-"Selon l'abstraction (ou la combinaison d'abstractions) que vous choisissez, "
-"il peut s'agir d'un seul pointeur unique, d'une référence comptée ou d'une "
-"référence atomique comptée."
-
-#: src/memory-management/rust.md:7
-#, fuzzy
-msgid "Scope-based like C++, but the compiler enforces full adherence."
-msgstr ""
-"Basé sur la portée comme C++, mais le compilateur applique une adhésion "
-"totale."
-
-#: src/memory-management/rust.md:8
-#, fuzzy
-msgid ""
-"A Rust user can choose the right abstraction for the situation, some even "
-"have no cost at runtime like C."
-msgstr ""
-"Un utilisateur de Rust peut choisir la bonne abstraction pour la situation, "
-"certains n'ont même aucun coût à l'exécution comme C."
-
-#: src/memory-management/rust.md:10
-#, fuzzy
-msgid "Rust achieves this by modeling _ownership_ explicitly."
-msgstr "Il y parvient en modélisant explicitement _ownership_."
-
-#: src/memory-management/rust.md:14
-#, fuzzy
-msgid ""
-"If asked how at this point, you can mention that in Rust this is usually "
-"handled by RAII wrapper types such as [Box](https://doc.rust-lang.org/std/"
-"boxed/struct.Box.html), [Vec](https://doc.rust-lang.org/std/vec/struct.Vec."
-"html), [Rc](https://doc.rust-lang.org/std/rc/struct.Rc.html), or [Arc]"
-"(https://doc.rust-lang.org/std/sync/struct.Arc.html). These encapsulate "
-"ownership and memory allocation via various means, and prevent the potential "
-"errors in C."
-msgstr ""
-"Si on vous demande comment Ă ce stade, vous pouvez mentionner qu'avec Rust, "
-"cela est généralement géré par des types de wrapper RAII tels que [Box]"
-"(https://doc.rust-lang.org/std/boxed/struct.Box.html), [Vec](https://doc."
-"rust-lang.org/std/vec/struct.Vec.html), [Rc](https://doc.rust-lang.org/std/"
-"rc/struct.Rc.html) ou [Arc](https://doc.rust-lang.org/std/sync/struct.Arc."
-"html). Ceux-ci encapsulent la propriété et l'allocation de mémoire par "
-"divers moyens et empĂŞchent les erreurs potentielles dans C."
-
-#: src/memory-management/rust.md:16
-#, fuzzy
-msgid ""
-"You may be asked about destructors here, the [Drop](https://doc.rust-lang."
-"org/std/ops/trait.Drop.html) trait is the Rust equivalent."
-msgstr ""
-"Vous pouvez être interrogé sur les destructeurs ici, le trait [Drop](https://"
-"doc.rust-lang.org/std/ops/trait.Drop.html) est l'Ă©quivalent de Rust."
-
-#: src/memory-management/comparison.md:3
-#, fuzzy
-msgid "Here is a rough comparison of the memory management techniques."
-msgstr ""
-"Voici une comparaison approximative des techniques de gestion de la mémoire."
-
-#: src/memory-management/comparison.md:5
-#, fuzzy
-msgid "Pros of Different Memory Management Techniques"
-msgstr "Avantages des différentes techniques de gestion de la mémoire"
-
-#: src/memory-management/comparison.md:7 src/memory-management/comparison.md:22
-#, fuzzy
-msgid "Manual like C:"
-msgstr "Manuel comme C :"
-
-#: src/memory-management/comparison.md:8 src/memory-management/comparison.md:14
-#: src/memory-management/comparison.md:17
-#, fuzzy
-msgid "No runtime overhead."
-msgstr "Aucune surcharge d'exécution."
-
-#: src/memory-management/comparison.md:9 src/memory-management/comparison.md:26
-#, fuzzy
-msgid "Automatic like Java:"
-msgstr "Automatique comme Java :"
-
-#: src/memory-management/comparison.md:10
-#, fuzzy
-msgid "Fully automatic."
-msgstr "Entièrement automatique."
-
-#: src/memory-management/comparison.md:11
-#: src/memory-management/comparison.md:18
-#, fuzzy
-msgid "Safe and correct."
-msgstr "Sûr et correct."
-
-#: src/memory-management/comparison.md:12
-#: src/memory-management/comparison.md:29
-#, fuzzy
-msgid "Scope-based like C++:"
-msgstr "Basé sur la portée comme C++ :"
-
-#: src/memory-management/comparison.md:13
-#, fuzzy
-msgid "Partially automatic."
-msgstr "Partiellement automatique."
-
-#: src/memory-management/comparison.md:15
-#, fuzzy
-msgid "Compiler-enforced scope-based like Rust:"
-msgstr "Basé sur la portée imposée par le compilateur comme Rust :"
-
-#: src/memory-management/comparison.md:16
-#, fuzzy
-msgid "Enforced by compiler."
-msgstr "Appliqué par le compilateur."
-
-#: src/memory-management/comparison.md:20
-#, fuzzy
-msgid "Cons of Different Memory Management Techniques"
-msgstr "Inconvénients des différentes techniques de gestion de la mémoire"
-
-#: src/memory-management/comparison.md:23
-#, fuzzy
-msgid "Use-after-free."
-msgstr "Utiliser-après-libre."
-
-#: src/memory-management/comparison.md:24
-#, fuzzy
-msgid "Double-frees."
-msgstr "Double-gratuit."
-
-#: src/memory-management/comparison.md:25
-#, fuzzy
-msgid "Memory leaks."
-msgstr "Fuites de mémoire."
-
-#: src/memory-management/comparison.md:27
-#, fuzzy
-msgid "Garbage collection pauses."
-msgstr "La collecte des ordures s'arrĂŞte."
-
-#: src/memory-management/comparison.md:28
-#, fuzzy
-msgid "Destructor delays."
-msgstr "Retards de destructeur."
-
-#: src/memory-management/comparison.md:30
-#, fuzzy
-msgid "Complex, opt-in by programmer."
-msgstr "Complexe, opt-in par le programmeur."
-
-#: src/memory-management/comparison.md:31
-#, fuzzy
-msgid "Potential for use-after-free."
-msgstr "Potentiel d'utilisation-après-libre."
-
-#: src/memory-management/comparison.md:32
-#, fuzzy
-msgid "Compiler-enforced and scope-based like Rust:"
-msgstr "Renforcé par le compilateur et basé sur la portée comme Rust :"
-
-#: src/memory-management/comparison.md:33
-#, fuzzy
-msgid "Some upfront complexity."
-msgstr "Une certaine complexité initiale."
-
-#: src/memory-management/comparison.md:34
-#, fuzzy
-msgid "Can reject valid programs."
-msgstr "Peut rejeter les programmes valides."
-
-#: src/ownership.md:3
-#, fuzzy
-msgid ""
-"All variable bindings have a _scope_ where they are valid and it is an error "
-"to use a variable outside its scope:"
-msgstr ""
-"Toutes les liaisons de variables ont un _scope_ oĂą elles sont valides et "
-"c'est une erreur de utiliser une variable en dehors de sa portée :"
-
-#: src/ownership.md:6
-msgid ""
-"```rust,editable,compile_fail\n"
-"struct Point(i32, i32);\n"
-"\n"
-"fn main() {\n"
-" {\n"
-" let p = Point(3, 4);\n"
-" println!(\"x: {}\", p.0);\n"
-" }\n"
-" println!(\"y: {}\", p.1);\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/ownership.md:18
-#, fuzzy
-msgid ""
-"At the end of the scope, the variable is _dropped_ and the data is freed."
-msgstr ""
-"A la fin du scope, la variable est _dropped_ et les données sont libérées."
-
-#: src/ownership.md:19
-#, fuzzy
-msgid "A destructor can run here to free up resources."
-msgstr "Un destructeur peut s'exécuter ici pour libérer des ressources."
-
-#: src/ownership.md:20
-#, fuzzy
-msgid "We say that the variable _owns_ the value."
-msgstr "On dit que la variable _possède_ la valeur."
-
-#: src/ownership/move-semantics.md:3
-#, fuzzy
-msgid "An assignment will transfer ownership between variables:"
-msgstr "Une affectation transférera la propriété entre les variables :"
-
-#: src/ownership/move-semantics.md:5
-msgid ""
-"```rust,editable\n"
-"fn main() {\n"
-" let s1: String = String::from(\"Hello!\");\n"
-" let s2: String = s1;\n"
-" println!(\"s2: {s2}\");\n"
-" // println!(\"s1: {s1}\");\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/ownership/move-semantics.md:14
-#, fuzzy
-msgid "The assignment of `s1` to `s2` transfers ownership."
-msgstr "L'affectation de `s1` à `s2` transfère la propriété."
-
-#: src/ownership/move-semantics.md:15
-#, fuzzy
-msgid "The data was _moved_ from `s1` and `s1` is no longer accessible."
-msgstr "Les données ont été _déplacées_ de `s1` et `s1` n'est plus accessible."
-
-#: src/ownership/move-semantics.md:16
-#, fuzzy
-msgid "When `s1` goes out of scope, nothing happens: it has no ownership."
-msgstr ""
-"Lorsque `s1` sort de la portée, rien ne se passe : il n'a pas de propriété."
-
-#: src/ownership/move-semantics.md:17
-#, fuzzy
-msgid "When `s2` goes out of scope, the string data is freed."
-msgstr ""
-"Lorsque `s2` sort de la portée, les données de la chaîne sont libérées."
-
-#: src/ownership/move-semantics.md:18
-#, fuzzy
-msgid "There is always _exactly_ one variable binding which owns a value."
-msgstr ""
-"Il y a toujours _exactement_ une liaison de variable qui possède une valeur."
-
-#: src/ownership/move-semantics.md:22
-#, fuzzy
-msgid ""
-"Mention that this is the opposite of the defaults in C++, which copies by "
-"value unless you use `std::move` (and the move constructor is defined!)."
-msgstr ""
-"Mentionnez que c'est l'opposé des valeurs par défaut en C++, qui copie par "
-"valeur Ă moins que vous n'utilisiez `std::move` (et que le constructeur de "
-"déplacement soit défini !)."
-
-#: src/ownership/move-semantics.md:24
-#, fuzzy
-msgid "In Rust, clones are explicit (by using `clone`)."
-msgstr "Dans Rust, les clones sont explicites (en utilisant `clone`)."
-
-#: src/ownership/moved-strings-rust.md:3
-msgid ""
-"```rust,editable\n"
-"fn main() {\n"
-" let s1: String = String::from(\"Rust\");\n"
-" let s2: String = s1;\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/ownership/moved-strings-rust.md:10
-#, fuzzy
-msgid "The heap data from `s1` is reused for `s2`."
-msgstr "Les données de tas de `s1` sont réutilisées pour `s2`."
-
-#: src/ownership/moved-strings-rust.md:11
-#, fuzzy
-msgid "When `s1` goes out of scope, nothing happens (it has been moved from)."
-msgstr ""
-"Lorsque `s1` sort de la portée, rien ne se passe (il a été déplacé de)."
-
-#: src/ownership/moved-strings-rust.md:13
-#, fuzzy
-msgid "Before move to `s2`:"
-msgstr "Avant de passer Ă `s2`Â :"
-
-#: src/ownership/moved-strings-rust.md:15
-msgid ""
-"```bob\n"
-" Stack Heap\n"
-".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - -.\n"
-": : : :\n"
-": s1 : : :\n"
-": +-----------+-------+ : : +----+----+----+----+ :\n"
-": | ptr | o---+---+-----+-->| R | u | s | t | :\n"
-": | len | 4 | : : +----+----+----+----+ :\n"
-": | capacity | 4 | : : :\n"
-": +-----------+-------+ : : :\n"
-": : `- - - - - - - - - - - - - -'\n"
-": :\n"
-"`- - - - - - - - - - - - - -'\n"
-"```"
-msgstr ""
-
-#: src/ownership/moved-strings-rust.md:30
-#, fuzzy
-msgid "After move to `s2`:"
-msgstr "Après le passage à `s2` :"
-
-#: src/ownership/moved-strings-rust.md:32
-msgid ""
-"```bob\n"
-" Stack Heap\n"
-".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - -.\n"
-": : : :\n"
-": s1 \"(inaccessible)\" : : :\n"
-": +-----------+-------+ : : +----+----+----+----+ :\n"
-": | ptr | o---+---+--+--+-->| R | u | s | t | :\n"
-": | len | 4 | : | : +----+----+----+----+ :\n"
-": | capacity | 4 | : | : :\n"
-": +-----------+-------+ : | : :\n"
-": : | `- - - - - - - - - - - - - -'\n"
-": s2 : |\n"
-": +-----------+-------+ : |\n"
-": | ptr | o---+---+--'\n"
-": | len | 4 | :\n"
-": | capacity | 4 | :\n"
-": +-----------+-------+ :\n"
-": :\n"
-"`- - - - - - - - - - - - - -'\n"
-"```"
-msgstr ""
-
-#: src/ownership/double-free-modern-cpp.md:3
-#, fuzzy
-msgid "Modern C++ solves this differently:"
-msgstr "Le C++ moderne résout cela différemment :"
-
-#: src/ownership/double-free-modern-cpp.md:5
-msgid ""
-"```c++\n"
-"std::string s1 = \"Cpp\";\n"
-"std::string s2 = s1; // Duplicate the data in s1.\n"
-"```"
-msgstr ""
-
-#: src/ownership/double-free-modern-cpp.md:10
-#, fuzzy
-msgid ""
-"The heap data from `s1` is duplicated and `s2` gets its own independent copy."
-msgstr ""
-"Les données de tas de `s1` sont dupliquées et `s2` obtient sa propre copie "
-"indépendante."
-
-#: src/ownership/double-free-modern-cpp.md:11
-#, fuzzy
-msgid "When `s1` and `s2` go out of scope, they each free their own memory."
-msgstr ""
-"Lorsque `s1` et `s2` sortent de la portée, ils libèrent chacun leur propre "
-"mémoire."
-
-#: src/ownership/double-free-modern-cpp.md:13
-#, fuzzy
-msgid "Before copy-assignment:"
-msgstr "Avant l'affectation de copie :"
-
-#: src/ownership/double-free-modern-cpp.md:16
-msgid ""
-"```bob\n"
-" Stack Heap\n"
-".- - - - - - - - - - - - - -. .- - - - - - - - - - - -.\n"
-": : : :\n"
-": s1 : : :\n"
-": +-----------+-------+ : : +----+----+----+ :\n"
-": | ptr | o---+---+--+--+-->| C | p | p | :\n"
-": | len | 3 | : : +----+----+----+ :\n"
-": | capacity | 3 | : : :\n"
-": +-----------+-------+ : : :\n"
-": : `- - - - - - - - - - - -'\n"
-"`- - - - - - - - - - - - - -'\n"
-"```"
-msgstr ""
-
-#: src/ownership/double-free-modern-cpp.md:30
-#, fuzzy
-msgid "After copy-assignment:"
-msgstr "Après l'affectation de copie :"
-
-#: src/ownership/double-free-modern-cpp.md:32
-msgid ""
-"```bob\n"
-" Stack Heap\n"
-".- - - - - - - - - - - - - -. .- - - - - - - - - - - -.\n"
-": : : :\n"
-": s1 : : :\n"
-": +-----------+-------+ : : +----+----+----+ :\n"
-": | ptr | o---+---+--+--+-->| C | p | p | :\n"
-": | len | 3 | : : +----+----+----+ :\n"
-": | capacity | 3 | : : :\n"
-": +-----------+-------+ : : :\n"
-": : : :\n"
-": s2 : : :\n"
-": +-----------+-------+ : : +----+----+----+ :\n"
-": | ptr | o---+---+-----+-->| C | p | p | :\n"
-": | len | 3 | : : +----+----+----+ :\n"
-": | capacity | 3 | : : :\n"
-": +-----------+-------+ : : :\n"
-": : `- - - - - - - - - - - -'\n"
-"`- - - - - - - - - - - - - -'\n"
-"```"
-msgstr ""
-
-#: src/ownership/moves-function-calls.md:3
-#, fuzzy
-msgid ""
-"When you pass a value to a function, the value is assigned to the function "
-"parameter. This transfers ownership:"
-msgstr ""
-"Lorsque vous transmettez une valeur à une fonction, la valeur est affectée à "
-"la fonction paramètre. Cela transfère la propriété :"
-
-#: src/ownership/moves-function-calls.md:6
-msgid ""
-"```rust,editable\n"
-"fn say_hello(name: String) {\n"
-" println!(\"Hello {name}\")\n"
-"}\n"
-"\n"
-"fn main() {\n"
-" let name = String::from(\"Alice\");\n"
-" say_hello(name);\n"
-" // say_hello(name);\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/ownership/moves-function-calls.md:20
-#, fuzzy
-msgid ""
-"With the first call to `say_hello`, `main` gives up ownership of `name`. "
-"Afterwards, `name` cannot be used anymore within `main`."
-msgstr ""
-"Avec le premier appel à `say_hello`, `main` abandonne la propriété de "
-"`name`. Ensuite, `name` ne peut plus être utilisé dans `main`."
-
-#: src/ownership/moves-function-calls.md:21
-#, fuzzy
-msgid ""
-"The heap memory allocated for `name` will be freed at the end of the "
-"`say_hello` function."
-msgstr ""
-"La mémoire de tas allouée pour `name` sera libérée à la fin de la fonction "
-"`say_hello`."
-
-#: src/ownership/moves-function-calls.md:22
-#, fuzzy
-msgid ""
-"`main` can retain ownership if it passes `name` as a reference (`&name`) and "
-"if `say_hello` accepts a reference as a parameter."
-msgstr ""
-"`main` peut conserver la propriété s'il passe `name` comme référence "
-"(`&name`) et si `say_hello` accepte une référence comme paramètre."
-
-#: src/ownership/moves-function-calls.md:23
-#, fuzzy
-msgid ""
-"Alternatively, `main` can pass a clone of `name` in the first call (`name."
-"clone()`)."
-msgstr ""
-"Alternativement, `main` peut passer un clone de `name` dans le premier appel "
-"(`name.clone()`)."
-
-#: src/ownership/moves-function-calls.md:24
-#, fuzzy
-msgid ""
-"Rust makes it harder than C++ to inadvertently create copies by making move "
-"semantics the default, and by forcing programmers to make clones explicit."
-msgstr ""
-"Rust rend plus difficile que C++ la création de copies par inadvertance en "
-"faisant de la sémantique de déplacement la valeur par défaut et en forçant "
-"les programmeurs Ă rendre les clones explicites."
-
-#: src/ownership/copy-clone.md:3
-#, fuzzy
-msgid ""
-"While move semantics are the default, certain types are copied by default:"
-msgstr ""
-"Bien que la sémantique de déplacement soit la valeur par défaut, certains "
-"types sont copiés par défaut :"
-
-#: src/ownership/copy-clone.md:5
-msgid ""
-"```rust,editable\n"
-"fn main() {\n"
-" let x = 42;\n"
-" let y = x;\n"
-" println!(\"x: {x}\");\n"
-" println!(\"y: {y}\");\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/ownership/copy-clone.md:14
-#, fuzzy
-msgid "These types implement the `Copy` trait."
-msgstr "Ces types implémentent le trait \"Copier\"."
-
-#: src/ownership/copy-clone.md:16
-#, fuzzy
-msgid "You can opt-in your own types to use copy semantics:"
-msgstr ""
-"Vous pouvez activer vos propres types pour utiliser la sémantique de copie :"
-
-#: src/ownership/copy-clone.md:18
-msgid ""
-"```rust,editable\n"
-"#[derive(Copy, Clone, Debug)]\n"
-"struct Point(i32, i32);\n"
-"\n"
-"fn main() {\n"
-" let p1 = Point(3, 4);\n"
-" let p2 = p1;\n"
-" println!(\"p1: {p1:?}\");\n"
-" println!(\"p2: {p2:?}\");\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/ownership/copy-clone.md:30
-#, fuzzy
-msgid "After the assignment, both `p1` and `p2` own their own data."
-msgstr "Après l'affectation, `p1` et `p2` possèdent leurs propres données."
-
-#: src/ownership/copy-clone.md:31
-#, fuzzy
-msgid "We can also use `p1.clone()` to explicitly copy the data."
-msgstr ""
-"Nous pouvons Ă©galement utiliser `p1.clone()` pour copier explicitement les "
-"données."
-
-#: src/ownership/copy-clone.md:35
-#, fuzzy
-msgid "Copying and cloning are not the same thing:"
-msgstr "La copie et le clonage ne sont pas la même chose :"
-
-#: src/ownership/copy-clone.md:37
-#, fuzzy
-msgid ""
-"Copying refers to bitwise copies of memory regions and does not work on "
-"arbitrary objects."
-msgstr ""
-"La copie fait référence aux copies au niveau du bit des régions de mémoire "
-"et ne fonctionne pas sur des objets arbitraires."
-
-#: src/ownership/copy-clone.md:38
-#, fuzzy
-msgid ""
-"Copying does not allow for custom logic (unlike copy constructors in C++)."
-msgstr ""
-"La copie ne permet pas de logique personnalisée (contrairement aux "
-"constructeurs de copie en C++)."
-
-#: src/ownership/copy-clone.md:39
-#, fuzzy
-msgid ""
-"Cloning is a more general operation and also allows for custom behavior by "
-"implementing the `Clone` trait."
-msgstr ""
-"Le clonage est une opération plus générale et permet également un "
-"comportement personnalisé en implémentant le trait \"Cloner\"."
-
-#: src/ownership/copy-clone.md:40
-#, fuzzy
-msgid "Copying does not work on types that implement the `Drop` trait."
-msgstr ""
-"La copie ne fonctionne pas sur les types qui implémentent le trait `Drop`."
-
-#: src/ownership/copy-clone.md:42 src/ownership/lifetimes-function-calls.md:29
-#, fuzzy
-msgid "In the above example, try the following:"
-msgstr "Dans l'exemple ci-dessus, essayez ce qui suit :"
-
-#: src/ownership/copy-clone.md:44
-#, fuzzy
-msgid ""
-"Add a `String` field to `struct Point`. It will not compile because `String` "
-"is not a `Copy` type."
-msgstr ""
-"Ajoutez un champ `String` à `struct Point`. Il ne sera pas compilé car "
-"`String` n'est pas un type `Copy`."
-
-#: src/ownership/copy-clone.md:45
-#, fuzzy
-msgid ""
-"Remove `Copy` from the `derive` attribute. The compiler error is now in the "
-"`println!` for `p1`."
-msgstr ""
-"Supprimer `Copy` de l'attribut `derive`. L'erreur du compilateur est "
-"maintenant dans `println!` pour `p1`."
-
-#: src/ownership/copy-clone.md:46
-#, fuzzy
-msgid "Show that it works if you clone `p1` instead."
-msgstr "Montrez que cela fonctionne si vous clonez `p1` Ă la place."
-
-#: src/ownership/copy-clone.md:48
-#, fuzzy
-msgid ""
-"If students ask about `derive`, it is sufficient to say that this is a way "
-"to generate code in Rust at compile time. In this case the default "
-"implementations of `Copy` and `Clone` traits are generated."
-msgstr ""
-"Si les étudiants posent des questions sur \"dériver\", il suffit de dire que "
-"c'est un moyen de générer du code dans Rust au moment de la compilation. "
-"Dans ce cas, les implémentations par défaut des traits `Copy` et `Clone` "
-"sont générées."
-
-#: src/ownership/borrowing.md:3
-#, fuzzy
-msgid ""
-"Instead of transferring ownership when calling a function, you can let a "
-"function _borrow_ the value:"
-msgstr ""
-"Au lieu de transférer la propriété lors de l'appel d'une fonction, vous "
-"pouvez laisser une la fonction _emprunte_ la valeur :"
-
-#: src/ownership/borrowing.md:6
-msgid ""
-"```rust,editable\n"
-"#[derive(Debug)]\n"
-"struct Point(i32, i32);\n"
-"\n"
-"fn add(p1: &Point, p2: &Point) -> Point {\n"
-" Point(p1.0 + p2.0, p1.1 + p2.1)\n"
-"}\n"
-"\n"
-"fn main() {\n"
-" let p1 = Point(3, 4);\n"
-" let p2 = Point(10, 20);\n"
-" let p3 = add(&p1, &p2);\n"
-" println!(\"{p1:?} + {p2:?} = {p3:?}\");\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/ownership/borrowing.md:22
-#, fuzzy
-msgid "The `add` function _borrows_ two points and returns a new point."
-msgstr "La fonction `add` _emprunte_ deux points et renvoie un nouveau point."
-
-#: src/ownership/borrowing.md:23
-#, fuzzy
-msgid "The caller retains ownership of the inputs."
-msgstr "L'appelant conserve la propriété des entrées."
-
-#: src/ownership/borrowing.md:27
-#, fuzzy
-msgid "Notes on stack returns:"
-msgstr "Remarques sur les retours de pile :"
-
-#: src/ownership/borrowing.md:28
-msgid ""
-"Demonstrate that the return from `add` is cheap because the compiler can "
-"eliminate the copy operation. Change the above code to print stack addresses "
-"and run it on the [Playground](https://play.rust-lang.org/). In the "
-"\"DEBUG\" optimization level, the addresses should change, while they stay "
-"the same when changing to the \"RELEASE\" setting:"
-msgstr ""
-
-#: src/ownership/borrowing.md:30
-msgid ""
-"```rust,editable\n"
-"#[derive(Debug)]\n"
-"struct Point(i32, i32);\n"
-"\n"
-"fn add(p1: &Point, p2: &Point) -> Point {\n"
-" let p = Point(p1.0 + p2.0, p1.1 + p2.1);\n"
-" println!(\"&p.0: {:p}\", &p.0);\n"
-" p\n"
-"}\n"
-"\n"
-"fn main() {\n"
-" let p1 = Point(3, 4);\n"
-" let p2 = Point(10, 20);\n"
-" let p3 = add(&p1, &p2);\n"
-" println!(\"&p3.0: {:p}\", &p3.0);\n"
-" println!(\"{p1:?} + {p2:?} = {p3:?}\");\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/ownership/borrowing.md:48
-msgid "The Rust compiler can do return value optimization (RVO)."
-msgstr ""
-
-#: src/ownership/borrowing.md:49
-msgid ""
-"In C++, copy elision has to be defined in the language specification because "
-"constructors can have side effects. In Rust, this is not an issue at all. If "
-"RVO did not happen, Rust will always perform a simple and efficient `memcpy` "
-"copy."
-msgstr ""
-
-#: src/ownership/shared-unique-borrows.md:3
-#, fuzzy
-msgid "Rust puts constraints on the ways you can borrow values:"
-msgstr ""
-"Rust impose des contraintes sur la manière dont vous pouvez emprunter des "
-"valeurs :"
-
-#: src/ownership/shared-unique-borrows.md:5
-#, fuzzy
-msgid "You can have one or more `&T` values at any given time, _or_"
-msgstr "Vous pouvez avoir une ou plusieurs valeurs `&T` Ă tout moment, _ou_"
-
-#: src/ownership/shared-unique-borrows.md:6
-#, fuzzy
-msgid "You can have exactly one `&mut T` value."
-msgstr "Vous pouvez avoir exactement une valeur `&mut T`."
-
-#: src/ownership/shared-unique-borrows.md:8
-msgid ""
-"```rust,editable,compile_fail\n"
-"fn main() {\n"
-" let mut a: i32 = 10;\n"
-" let b: &i32 = &a;\n"
-"\n"
-" {\n"
-" let c: &mut i32 = &mut a;\n"
-" *c = 20;\n"
-" }\n"
-"\n"
-" println!(\"a: {a}\");\n"
-" println!(\"b: {b}\");\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/ownership/shared-unique-borrows.md:25
-#, fuzzy
-msgid ""
-"The above code does not compile because `a` is borrowed as mutable (through "
-"`c`) and as immutable (through `b`) at the same time."
-msgstr ""
-"Le code ci-dessus ne se compile pas car 'a' est emprunté comme mutable (via "
-"'c') et comme immuable (via 'b') en mĂŞme temps."
-
-#: src/ownership/shared-unique-borrows.md:26
-#, fuzzy
-msgid ""
-"Move the `println!` statement for `b` before the scope that introduces `c` "
-"to make the code compile."
-msgstr ""
-"Déplacez l'instruction `println!` pour `b` avant la portée qui introduit `c` "
-"pour que le code soit compilé."
-
-#: src/ownership/shared-unique-borrows.md:27
-#, fuzzy
-msgid ""
-"After that change, the compiler realizes that `b` is only ever used before "
-"the new mutable borrow of `a` through `c`. This is a feature of the borrow "
-"checker called \"non-lexical lifetimes\"."
-msgstr ""
-"Après ce changement, le compilateur se rend compte que 'b' n'est utilisé "
-"qu'avant le nouvel emprunt mutable de 'a' Ă 'c'. Il s'agit d'une "
-"fonctionnalité du vérificateur d'emprunt appelée \"durées de vie non "
-"lexicales\"."
-
-#: src/ownership/lifetimes.md:3
-#, fuzzy
-msgid "A borrowed value has a _lifetime_:"
-msgstr "Une valeur empruntée a une _durée de vie_ :"
-
-#: src/ownership/lifetimes.md:5
-msgid "The lifetime can be implicit: `add(p1: &Point, p2: &Point) -> Point`."
-msgstr ""
-
-#: src/ownership/lifetimes.md:6
-msgid "Lifetimes can also be explicit: `&'a Point`, `&'document str`."
-msgstr ""
-
-#: src/ownership/lifetimes.md:7 src/ownership/lifetimes-function-calls.md:23
-#, fuzzy
-msgid ""
-"Read `&'a Point` as \"a borrowed `Point` which is valid for at least the "
-"lifetime `a`\"."
-msgstr ""
-"Lire `&'a Point` comme \"un `Point` emprunté qui est valide pour au moins "
-"durée de vie 'a'\"."
-
-#: src/ownership/lifetimes.md:9
-msgid ""
-"Lifetimes are always inferred by the compiler: you cannot assign a lifetime "
-"yourself."
-msgstr ""
-
-#: src/ownership/lifetimes.md:11
-msgid ""
-"Lifetime annotations create constraints; the compiler verifies that there is "
-"a valid solution."
-msgstr ""
-
-#: src/ownership/lifetimes.md:13
-msgid ""
-"Lifetimes for function arguments and return values must be fully specified, "
-"but Rust allows lifetimes to be elided in most cases with [a few simple "
-"rules](https://doc.rust-lang.org/nomicon/lifetime-elision.html)."
-msgstr ""
-
-#: src/ownership/lifetimes-function-calls.md:3
-#, fuzzy
-msgid ""
-"In addition to borrowing its arguments, a function can return a borrowed "
-"value:"
-msgstr ""
-"En plus d'emprunter ses arguments, une fonction peut renvoyer une valeur "
-"empruntée :"
-
-#: src/ownership/lifetimes-function-calls.md:5
-msgid ""
-"```rust,editable\n"
-"#[derive(Debug)]\n"
-"struct Point(i32, i32);\n"
-"\n"
-"fn left_most<'a>(p1: &'a Point, p2: &'a Point) -> &'a Point {\n"
-" if p1.0 < p2.0 { p1 } else { p2 }\n"
-"}\n"
-"\n"
-"fn main() {\n"
-" let p1: Point = Point(10, 10);\n"
-" let p2: Point = Point(20, 20);\n"
-" let p3: &Point = left_most(&p1, &p2);\n"
-" println!(\"left-most point: {:?}\", p3);\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/ownership/lifetimes-function-calls.md:21
-#, fuzzy
-msgid "`'a` is a generic parameter, it is inferred by the compiler."
-msgstr "`'a` est un paramètre générique, il est déduit par le compilateur."
-
-#: src/ownership/lifetimes-function-calls.md:22
-#, fuzzy
-msgid "Lifetimes start with `'` and `'a` is a typical default name."
-msgstr ""
-"Les durées de vie commencent par `'` et `'a` est un nom par défaut typique."
-
-#: src/ownership/lifetimes-function-calls.md:25
-#, fuzzy
-msgid ""
-"The _at least_ part is important when parameters are in different scopes."
-msgstr ""
-"La partie _au moins_ est importante lorsque les paramètres sont dans des "
-"portées différentes."
-
-#: src/ownership/lifetimes-function-calls.md:31
-msgid ""
-"Move the declaration of `p2` and `p3` into a new scope (`{ ... }`), "
-"resulting in the following code:"
-msgstr ""
-
-#: src/ownership/lifetimes-function-calls.md:32
-msgid ""
-"```rust,ignore\n"
-"#[derive(Debug)]\n"
-"struct Point(i32, i32);\n"
-"\n"
-"fn left_most<'a>(p1: &'a Point, p2: &'a Point) -> &'a Point {\n"
-" if p1.0 < p2.0 { p1 } else { p2 }\n"
-"}\n"
-"\n"
-"fn main() {\n"
-" let p1: Point = Point(10, 10);\n"
-" let p3: &Point;\n"
-" {\n"
-" let p2: Point = Point(20, 20);\n"
-" p3 = left_most(&p1, &p2);\n"
-" }\n"
-" println!(\"left-most point: {:?}\", p3);\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/ownership/lifetimes-function-calls.md:50
-msgid "Note how this does not compile since `p3` outlives `p2`."
-msgstr ""
-
-#: src/ownership/lifetimes-function-calls.md:52
-msgid ""
-"Reset the workspace and change the function signature to `fn left_most<'a, "
-"'b>(p1: &'a Point, p2: &'a Point) -> &'b Point`. This will not compile "
-"because the relationship between the lifetimes `'a` and `'b` is unclear."
-msgstr ""
-
-#: src/ownership/lifetimes-function-calls.md:53
-msgid "Another way to explain it:"
-msgstr ""
-
-#: src/ownership/lifetimes-function-calls.md:54
-msgid ""
-"Two references to two values are borrowed by a function and the function "
-"returns another reference."
-msgstr ""
-
-#: src/ownership/lifetimes-function-calls.md:56
-msgid ""
-"It must have come from one of those two inputs (or from a global variable)."
-msgstr ""
-
-#: src/ownership/lifetimes-function-calls.md:57
-msgid ""
-"Which one is it? The compiler needs to know, so at the call site the "
-"returned reference is not used for longer than a variable from where the "
-"reference came from."
-msgstr ""
-
-#: src/ownership/lifetimes-data-structures.md:3
-#, fuzzy
-msgid ""
-"If a data type stores borrowed data, it must be annotated with a lifetime:"
-msgstr ""
-"Si un type de données stocke des données empruntées, il doit être annoté "
-"avec une durée de vie :"
-
-#: src/ownership/lifetimes-data-structures.md:5
-msgid ""
-"```rust,editable\n"
-"#[derive(Debug)]\n"
-"struct Highlight<'doc>(&'doc str);\n"
-"\n"
-"fn erase(text: String) {\n"
-" println!(\"Bye {text}!\");\n"
-"}\n"
-"\n"
-"fn main() {\n"
-" let text = String::from(\"The quick brown fox jumps over the lazy dog."
-"\");\n"
-" let fox = Highlight(&text[4..19]);\n"
-" let dog = Highlight(&text[35..43]);\n"
-" // erase(text);\n"
-" println!(\"{fox:?}\");\n"
-" println!(\"{dog:?}\");\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/ownership/lifetimes-data-structures.md:25
-#, fuzzy
-msgid ""
-"In the above example, the annotation on `Highlight` enforces that the data "
-"underlying the contained `&str` lives at least as long as any instance of "
-"`Highlight` that uses that data."
-msgstr ""
-"Dans l'exemple ci-dessus, l'annotation sur `Highlight` impose que les "
-"données sous-jacentes au `&str` contenu vivent au moins aussi longtemps que "
-"toute instance de `Highlight` qui utilise ces données."
-
-#: src/ownership/lifetimes-data-structures.md:26
-#, fuzzy
-msgid ""
-"If `text` is consumed before the end of the lifetime of `fox` (or `dog`), "
-"the borrow checker throws an error."
-msgstr ""
-"Si `text` est consommé avant la fin de la durée de vie de `fox` (ou `dog`), "
-"le vérificateur d'emprunt génère une erreur."
-
-#: src/ownership/lifetimes-data-structures.md:27
-#, fuzzy
-msgid ""
-"Types with borrowed data force users to hold on to the original data. This "
-"can be useful for creating lightweight views, but it generally makes them "
-"somewhat harder to use."
-msgstr ""
-"Les types avec des données empruntées obligent les utilisateurs à conserver "
-"les données d'origine. Cela peut être utile pour créer des vues légères, "
-"mais cela les rend généralement un peu plus difficiles à utiliser."
-
-#: src/ownership/lifetimes-data-structures.md:28
-#, fuzzy
-msgid "When possible, make data structures own their data directly."
-msgstr ""
-"Dans la mesure du possible, faites en sorte que les structures de données "
-"soient directement propriétaires de leurs données."
-
-#: src/ownership/lifetimes-data-structures.md:29
-#, fuzzy
-msgid ""
-"Some structs with multiple references inside can have more than one lifetime "
-"annotation. This can be necessary if there is a need to describe lifetime "
-"relationships between the references themselves, in addition to the lifetime "
-"of the struct itself. Those are very advanced use cases."
-msgstr ""
-"Certaines structures contenant plusieurs références peuvent avoir plusieurs "
-"annotations de durée de vie. Cela peut être nécessaire s'il est nécessaire "
-"de décrire les relations de durée de vie entre les références elles-mêmes, "
-"en plus de la durée de vie de la structure elle-même. Ce sont des cas "
-"d'utilisation très avancés."
-
-#: src/exercises/day-1/afternoon.md:1
-#, fuzzy
-msgid "Day 1: Afternoon Exercises"
-msgstr "Jour 1 : Exercices de l'après-midi"
-
-#: src/exercises/day-1/afternoon.md:3
-#, fuzzy
-msgid "We will look at two things:"
-msgstr "Nous allons regarder deux choses :"
-
-#: src/exercises/day-1/afternoon.md:5
-#, fuzzy
-msgid "A small book library,"
-msgstr "Une petite bibliothèque de livres,"
-
-#: src/exercises/day-1/afternoon.md:7
-#, fuzzy
-msgid "Iterators and ownership (hard)."
-msgstr "Itérateurs et propriété (difficile)."
-
-#: src/exercises/day-1/book-library.md:3
-#, fuzzy
-msgid ""
-"We will learn much more about structs and the `Vec` type tomorrow. For "
-"now, you just need to know part of its API:"
-msgstr ""
-"Nous en apprendrons beaucoup plus sur les structures et le type `Vec` "
-"demain. Pour l'instant, vous avez juste besoin de connaître une partie de "
-"son APIÂ :"
-
-#: src/exercises/day-1/book-library.md:6
-msgid ""
-"```rust,editable\n"
-"fn main() {\n"
-" let mut vec = vec![10, 20];\n"
-" vec.push(30);\n"
-" let midpoint = vec.len() / 2;\n"
-" println!(\"middle value: {}\", vec[midpoint]);\n"
-" for item in &vec {\n"
-" println!(\"item: {item}\");\n"
-" }\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/exercises/day-1/book-library.md:18
-#, fuzzy
-msgid ""
-"Use this to model a library's book collection. Copy the code below to "
-" and update the types to make it compile:"
-msgstr ""
-"Utilisez-le pour créer une application de bibliothèque. Copiez le code ci-"
-"dessous pour et mettez Ă jour les types pour "
-"le faire compiler :"
-
-#: src/exercises/day-1/book-library.md:21
-msgid ""
-"```rust,should_panic\n"
-"struct Library {\n"
-" books: Vec,\n"
-"}\n"
-"\n"
-"struct Book {\n"
-" title: String,\n"
-" year: u16,\n"
-"}\n"
-"\n"
-"impl Book {\n"
-" // This is a constructor, used below.\n"
-" fn new(title: &str, year: u16) -> Book {\n"
-" Book {\n"
-" title: String::from(title),\n"
-" year,\n"
-" }\n"
-" }\n"
-"}\n"
-"\n"
-"// Implement the methods below. Update the `self` parameter to\n"
-"// indicate the method's required level of ownership over the object:\n"
-"//\n"
-"// - `&self` for shared read-only access,\n"
-"// - `&mut self` for unique and mutable access,\n"
-"// - `self` for unique access by value.\n"
-"impl Library {\n"
-" fn new() -> Library {\n"
-" todo!(\"Initialize and return a `Library` value\")\n"
-" }\n"
-"\n"
-" //fn len(self) -> usize {\n"
-" // todo!(\"Return the length of `self.books`\")\n"
-" //}\n"
-"\n"
-" //fn is_empty(self) -> bool {\n"
-" // todo!(\"Return `true` if `self.books` is empty\")\n"
-" //}\n"
-"\n"
-" //fn add_book(self, book: Book) {\n"
-" // todo!(\"Add a new book to `self.books`\")\n"
-" //}\n"
-"\n"
-" //fn print_books(self) {\n"
-" // todo!(\"Iterate over `self.books` and each book's title and "
-"year\")\n"
-" //}\n"
-"\n"
-" //fn oldest_book(self) -> Option<&Book> {\n"
-" // todo!(\"Return a reference to the oldest book (if any)\")\n"
-" //}\n"
-"}\n"
-"\n"
-"// This shows the desired behavior. Uncomment the code below and\n"
-"// implement the missing methods. You will need to update the\n"
-"// method signatures, including the \"self\" parameter! You may\n"
-"// also need to update the variable bindings within main.\n"
-"fn main() {\n"
-" let library = Library::new();\n"
-"\n"
-" //println!(\"The library is empty: library.is_empty() -> {}\", library."
-"is_empty());\n"
-" //\n"
-" //library.add_book(Book::new(\"Lord of the Rings\", 1954));\n"
-" //library.add_book(Book::new(\"Alice's Adventures in Wonderland\", "
-"1865));\n"
-" //\n"
-" //println!(\"The library is no longer empty: library.is_empty() -> {}\", "
-"library.is_empty());\n"
-" //\n"
-" //\n"
-" //library.print_books();\n"
-" //\n"
-" //match library.oldest_book() {\n"
-" // Some(book) => println!(\"The oldest book is {}\", book.title),\n"
-" // None => println!(\"The library is empty!\"),\n"
-" //}\n"
-" //\n"
-" //println!(\"The library has {} books\", library.len());\n"
-" //library.print_books();\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/exercises/day-1/book-library.md:102
-#, fuzzy
-msgid "[Solution](solutions-afternoon.md#designing-a-library)"
-msgstr "[Solution](solutions-afternoon.md#designing-a-library)"
-
-#: src/exercises/day-1/iterators-and-ownership.md:3
-#, fuzzy
-msgid ""
-"The ownership model of Rust affects many APIs. An example of this is the "
-"[`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) and "
-"[`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator.html) "
-"traits."
-msgstr ""
-"Le modèle de propriété de Rust affecte de nombreuses API. Un exemple en est "
-"le [`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) et "
-"[`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator.html) "
-"caractéristiques."
-
-#: src/exercises/day-1/iterators-and-ownership.md:8 src/bare-metal/no_std.md:28
-#, fuzzy
-msgid "`Iterator`"
-msgstr "`Itérateur`"
-
-#: src/exercises/day-1/iterators-and-ownership.md:10
-#, fuzzy
-msgid ""
-"Traits are like interfaces: they describe behavior (methods) for a type. The "
-"`Iterator` trait simply says that you can call `next` until you get `None` "
-"back:"
-msgstr ""
-"Les traits sont comme des interfaces : ils décrivent le comportement "
-"(méthodes) d'un type. Le Le trait `Iterator` indique simplement que vous "
-"pouvez appeler `next` jusqu'Ă ce que vous obteniez `None`Â :"
-
-#: src/exercises/day-1/iterators-and-ownership.md:13
-msgid ""
-"```rust\n"
-"pub trait Iterator {\n"
-" type Item;\n"
-" fn next(&mut self) -> Option;\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/exercises/day-1/iterators-and-ownership.md:20
-#, fuzzy
-msgid "You use this trait like this:"
-msgstr "Vous utilisez ce trait comme ceci :"
-
-#: src/exercises/day-1/iterators-and-ownership.md:22
-msgid ""
-"```rust,editable\n"
-"fn main() {\n"
-" let v: Vec = vec![10, 20, 30];\n"
-" let mut iter = v.iter();\n"
-"\n"
-" println!(\"v[0]: {:?}\", iter.next());\n"
-" println!(\"v[1]: {:?}\", iter.next());\n"
-" println!(\"v[2]: {:?}\", iter.next());\n"
-" println!(\"No more items: {:?}\", iter.next());\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/exercises/day-1/iterators-and-ownership.md:34
-#, fuzzy
-msgid "What is the type returned by the iterator? Test your answer here:"
-msgstr "Quel est le type retourné par l'itérateur ? Testez votre réponse ici :"
-
-#: src/exercises/day-1/iterators-and-ownership.md:36
-msgid ""
-"```rust,editable,compile_fail\n"
-"fn main() {\n"
-" let v: Vec = vec![10, 20, 30];\n"
-" let mut iter = v.iter();\n"
-"\n"
-" let v0: Option<..> = iter.next();\n"
-" println!(\"v0: {v0:?}\");\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/exercises/day-1/iterators-and-ownership.md:46
-#, fuzzy
-msgid "Why is this type used?"
-msgstr "Pourquoi ce type est-il utilisé ?"
-
-#: src/exercises/day-1/iterators-and-ownership.md:48
-#, fuzzy
-msgid "`IntoIterator`"
-msgstr "`IntoIterator`"
-
-#: src/exercises/day-1/iterators-and-ownership.md:50
-#, fuzzy
-msgid ""
-"The `Iterator` trait tells you how to _iterate_ once you have created an "
-"iterator. The related trait `IntoIterator` tells you how to create the "
-"iterator:"
-msgstr ""
-"Le trait `Iterator` vous indique comment _itérer_ une fois que vous avez "
-"créé un itérateur. Le trait connexe \"IntoIterator\" vous indique comment "
-"créer l'itérateur :"
-
-#: src/exercises/day-1/iterators-and-ownership.md:53
-msgid ""
-"```rust\n"
-"pub trait IntoIterator {\n"
-" type Item;\n"
-" type IntoIter: Iterator- ;\n"
-"\n"
-" fn into_iter(self) -> Self::IntoIter;\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/exercises/day-1/iterators-and-ownership.md:62
-#, fuzzy
-msgid ""
-"The syntax here means that every implementation of `IntoIterator` must "
-"declare two types:"
-msgstr ""
-"La syntaxe ici signifie que chaque implémentation de `IntoIterator` doit "
-"déclarer deux types :"
-
-#: src/exercises/day-1/iterators-and-ownership.md:65
-#, fuzzy
-msgid "`Item`: the type we iterate over, such as `i8`,"
-msgstr "`Item` : le type sur lequel nous itérons, tel que `i8`,"
-
-#: src/exercises/day-1/iterators-and-ownership.md:66
-#, fuzzy
-msgid "`IntoIter`: the `Iterator` type returned by the `into_iter` method."
-msgstr "`IntoIter` : le type `Iterator` renvoyé par la méthode `into_iter`."
-
-#: src/exercises/day-1/iterators-and-ownership.md:68
-#, fuzzy
-msgid ""
-"Note that `IntoIter` and `Item` are linked: the iterator must have the same "
-"`Item` type, which means that it returns `Option
- `"
-msgstr ""
-"Notez que `IntoIter` et `Item` sont liés : l'itérateur doit avoir le même "
-"Type `Item`, ce qui signifie qu'il renvoie `Option
- `"
-
-#: src/exercises/day-1/iterators-and-ownership.md:71
-#, fuzzy
-msgid "Like before, what is the type returned by the iterator?"
-msgstr "Comme précédemment, quel est le type retourné par l'itérateur ?"
-
-#: src/exercises/day-1/iterators-and-ownership.md:73
-msgid ""
-"```rust,editable,compile_fail\n"
-"fn main() {\n"
-" let v: Vec = vec![String::from(\"foo\"), String::"
-"from(\"bar\")];\n"
-" let mut iter = v.into_iter();\n"
-"\n"
-" let v0: Option<..> = iter.next();\n"
-" println!(\"v0: {v0:?}\");\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/exercises/day-1/iterators-and-ownership.md:83
-#, fuzzy
-msgid "`for` Loops"
-msgstr "Boucles `for`"
-
-#: src/exercises/day-1/iterators-and-ownership.md:85
-#, fuzzy
-msgid ""
-"Now that we know both `Iterator` and `IntoIterator`, we can build `for` "
-"loops. They call `into_iter()` on an expression and iterates over the "
-"resulting iterator:"
-msgstr ""
-"Maintenant que nous connaissons Ă la fois `Iterator` et `IntoIterator`, nous "
-"pouvons construire des boucles `for`. Ils appellent `into_iter()` sur une "
-"expression et itèrent sur le résultat itérateur :"
-
-#: src/exercises/day-1/iterators-and-ownership.md:89
-msgid ""
-"```rust,editable\n"
-"fn main() {\n"
-" let v: Vec = vec![String::from(\"foo\"), String::"
-"from(\"bar\")];\n"
-"\n"
-" for word in &v {\n"
-" println!(\"word: {word}\");\n"
-" }\n"
-"\n"
-" for word in v {\n"
-" println!(\"word: {word}\");\n"
-" }\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/exercises/day-1/iterators-and-ownership.md:103
-#, fuzzy
-msgid "What is the type of `word` in each loop?"
-msgstr "Quel est le type de \"mot\" dans chaque boucle ?"
-
-#: src/exercises/day-1/iterators-and-ownership.md:105
-#, fuzzy
-msgid ""
-"Experiment with the code above and then consult the documentation for [`impl "
-"IntoIterator for &Vec`](https://doc.rust-lang.org/std/vec/struct.Vec."
-"html#impl-IntoIterator-for-%26%27a%20Vec%3CT%2C%20A%3E) and [`impl "
-"IntoIterator for Vec`](https://doc.rust-lang.org/std/vec/struct.Vec."
-"html#impl-IntoIterator-for-Vec%3CT%2C%20A%3E) to check your answers."
-msgstr ""
-"Expérimentez avec le code ci-dessus, puis consultez la documentation de "
-"[`impl IntoIterator pour &Vec`](https://doc.rust-lang.org/std/vec/struct."
-"Vec.html#impl-IntoIterator-for-%26%27a%20Vec%3CT%2C%20A%3E) et [`impl "
-"IntoIterator for Vec`](https://doc.rust-lang.org/std/vec/struct.Vec."
-"html#impl-IntoIterator-for-Vec%3CT%2C%20A%3E) pour vérifier vos réponses."
-
-#: src/welcome-day-2.md:1
-#, fuzzy
-msgid "Welcome to Day 2"
-msgstr "Bienvenue au jour 2"
-
-#: src/welcome-day-2.md:3
-#, fuzzy
-msgid "Now that we have seen a fair amount of Rust, we will continue with:"
-msgstr ""
-"Maintenant que nous avons vu une bonne quantité de Rust, nous allons "
-"continuer avec :"
-
-#: src/welcome-day-2.md:5
-#, fuzzy
-msgid "Structs, enums, methods."
-msgstr "Structures, énumérations, méthodes."
-
-#: src/welcome-day-2.md:7
-#, fuzzy
-msgid "Pattern matching: destructuring enums, structs, and arrays."
-msgstr ""
-"Pattern matching : déstructuration des énumérations, des structures et des "
-"tableaux."
-
-#: src/welcome-day-2.md:9
-#, fuzzy
-msgid ""
-"Control flow constructs: `if`, `if let`, `while`, `while let`, `break`, and "
-"`continue`."
-msgstr ""
-"Constructions de flux de contrôle : `if`, `if let`, `while`, `while let`, "
-"`break` et 'continuer'."
-
-#: src/welcome-day-2.md:12
-#, fuzzy
-msgid ""
-"The Standard Library: `String`, `Option` and `Result`, `Vec`, `HashMap`, "
-"`Rc` and `Arc`."
-msgstr ""
-"La bibliothèque standard : `String`, `Option` et `Result`, `Vec`, `HashMap`, "
-"`Rc` et \"Arc\"."
-
-#: src/welcome-day-2.md:15
-#, fuzzy
-msgid "Modules: visibility, paths, and filesystem hierarchy."
-msgstr "Modules : visibilité, chemins et hiérarchie du système de fichiers."
-
-#: src/structs.md:3
-#, fuzzy
-msgid "Like C and C++, Rust has support for custom structs:"
-msgstr "Comme C et C++, Rust prend en charge les structures personnalisées :"
-
-#: src/structs.md:5
-msgid ""
-"```rust,editable\n"
-"struct Person {\n"
-" name: String,\n"
-" age: u8,\n"
-"}\n"
-"\n"
-"fn main() {\n"
-" let mut peter = Person {\n"
-" name: String::from(\"Peter\"),\n"
-" age: 27,\n"
-" };\n"
-" println!(\"{} is {} years old\", peter.name, peter.age);\n"
-" \n"
-" peter.age = 28;\n"
-" println!(\"{} is {} years old\", peter.name, peter.age);\n"
-" \n"
-" let jackie = Person {\n"
-" name: String::from(\"Jackie\"),\n"
-" ..peter\n"
-" };\n"
-" println!(\"{} is {} years old\", jackie.name, jackie.age);\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/structs.md:31 src/enums.md:34 src/enums/sizes.md:29 src/methods.md:30
-#: src/methods/example.md:46 src/pattern-matching.md:25
-#: src/pattern-matching/match-guards.md:22 src/control-flow/blocks.md:43
-#, fuzzy
-msgid "Key Points:"
-msgstr "Points clés:"
-
-#: src/structs.md:33
-msgid "Structs work like in C or C++."
-msgstr ""
-
-#: src/structs.md:34
-msgid "Like in C++, and unlike in C, no typedef is needed to define a type."
-msgstr ""
-
-#: src/structs.md:35
-msgid "Unlike in C++, there is no inheritance between structs."
-msgstr ""
-
-#: src/structs.md:36
-msgid ""
-"Methods are defined in an `impl` block, which we will see in following "
-"slides."
-msgstr ""
-
-#: src/structs.md:37
-msgid ""
-"This may be a good time to let people know there are different types of "
-"structs. "
-msgstr ""
-
-#: src/structs.md:38
-msgid ""
-"Zero-sized structs `e.g., struct Foo;` might be used when implementing a "
-"trait on some type but don’t have any data that you want to store in the "
-"value itself. "
-msgstr ""
-
-#: src/structs.md:39
-msgid ""
-"The next slide will introduce Tuple structs, used when the field names are "
-"not important."
-msgstr ""
-
-#: src/structs.md:40
-msgid ""
-"The syntax `..peter` allows us to copy the majority of the fields from the "
-"old struct without having to explicitly type it all out. It must always be "
-"the last element."
-msgstr ""
-
-#: src/structs/tuple-structs.md:3
-#, fuzzy
-msgid "If the field names are unimportant, you can use a tuple struct:"
-msgstr ""
-"Si les noms de champ ne sont pas importants, vous pouvez utiliser une "
-"structure tuple :"
-
-#: src/structs/tuple-structs.md:5
-msgid ""
-"```rust,editable\n"
-"struct Point(i32, i32);\n"
-"\n"
-"fn main() {\n"
-" let p = Point(17, 23);\n"
-" println!(\"({}, {})\", p.0, p.1);\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/structs/tuple-structs.md:14
-#, fuzzy
-msgid "This is often used for single-field wrappers (called newtypes):"
-msgstr ""
-"Ceci est souvent utilisé pour les wrappers à champ unique (appelés newtypes):"
-
-#: src/structs/tuple-structs.md:16
-msgid ""
-"```rust,editable,compile_fail\n"
-"struct PoundsOfForce(f64);\n"
-"struct Newtons(f64);\n"
-"\n"
-"fn compute_thruster_force() -> PoundsOfForce {\n"
-" todo!(\"Ask a rocket scientist at NASA\")\n"
-"}\n"
-"\n"
-"fn set_thruster_force(force: Newtons) {\n"
-" // ...\n"
-"}\n"
-"\n"
-"fn main() {\n"
-" let force = compute_thruster_force();\n"
-" set_thruster_force(force);\n"
-"}\n"
-"\n"
-"```"
-msgstr ""
-
-#: src/structs/tuple-structs.md:37
-#, fuzzy
-msgid ""
-"Newtypes are a great way to encode additional information about the value in "
-"a primitive type, for example:"
-msgstr ""
-"Les nouveaux types sont un excellent moyen d'encoder des informations "
-"supplémentaires sur la valeur dans un type primitif, par exemple :"
-
-#: src/structs/tuple-structs.md:38
-#, fuzzy
-msgid "The number is measured in some units: `Newtons` in the example above."
-msgstr ""
-"Le nombre est mesuré dans certaines unités : `Newtons` dans l'exemple ci-"
-"dessus."
-
-#: src/structs/tuple-structs.md:39
-#, fuzzy
-msgid ""
-"The value passed some validation when it was created, so you no longer have "
-"to validate it again at every use: 'PhoneNumber(String)`or`OddNumber(u32)\\`."
-msgstr ""
-"La valeur a été validée lors de sa création, vous n'avez donc plus besoin de "
-"la valider à chaque utilisation : 'PhoneNumber(String)`ou`OddNumber(u32)\\`."
-
-#: src/structs/tuple-structs.md:40
-#, fuzzy
-msgid ""
-"Demonstrate how to add a `f64` value to a `Newtons` type by accessing the "
-"single field in the newtype."
-msgstr ""
-"Montrez comment ajouter une valeur `f64` à un type `Newtons` en accédant au "
-"champ unique dans le nouveau type."
-
-#: src/structs/tuple-structs.md:41
-#, fuzzy
-msgid ""
-"Rust generally doesn’t like inexplicit things, like automatic unwrapping or "
-"for instance using booleans as integers."
-msgstr ""
-"Rust n'aime généralement pas les choses inexplicites, comme le déballage "
-"automatique ou, par exemple, l'utilisation de booléens comme entiers."
-
-#: src/structs/tuple-structs.md:42
-#, fuzzy
-msgid "Operator overloading is discussed on Day 3 (generics)."
-msgstr "La surcharge des opérateurs est discutée le jour 3 (génériques)."
-
-#: src/structs/tuple-structs.md:43
-msgid ""
-"The example is a subtle reference to the [Mars Climate Orbiter](https://en."
-"wikipedia.org/wiki/Mars_Climate_Orbiter) failure."
-msgstr ""
-
-#: src/structs/field-shorthand.md:3
-#, fuzzy
-msgid ""
-"If you already have variables with the right names, then you can create the "
-"struct using a shorthand:"
-msgstr ""
-"Si vous avez déjà des variables avec les bons noms, vous pouvez créer le "
-"struct en utilisant un raccourci :"
-
-#: src/structs/field-shorthand.md:6
-msgid ""
-"```rust,editable\n"
-"#[derive(Debug)]\n"
-"struct Person {\n"
-" name: String,\n"
-" age: u8,\n"
-"}\n"
-"\n"
-"impl Person {\n"
-" fn new(name: String, age: u8) -> Person {\n"
-" Person { name, age }\n"
-" }\n"
-"}\n"
-"\n"
-"fn main() {\n"
-" let peter = Person::new(String::from(\"Peter\"), 27);\n"
-" println!(\"{peter:?}\");\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/structs/field-shorthand.md:27
-msgid ""
-"The `new` function could be written using `Self` as a type, as it is "
-"interchangeable with the struct type name"
-msgstr ""
-
-#: src/structs/field-shorthand.md:29
-msgid ""
-"```rust,editable\n"
-"#[derive(Debug)]\n"
-"struct Person {\n"
-" name: String,\n"
-" age: u8,\n"
-"}\n"
-"impl Person {\n"
-" fn new(name: String, age: u8) -> Self {\n"
-" Self { name, age }\n"
-" }\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/structs/field-shorthand.md:41
-msgid ""
-"Implement the `Default` trait for the struct. Define some fields and use the "
-"default values for the other fields."
-msgstr ""
-
-#: src/structs/field-shorthand.md:43
-msgid ""
-"```rust,editable\n"
-"#[derive(Debug)]\n"
-"struct Person {\n"
-" name: String,\n"
-" age: u8,\n"
-"}\n"
-"impl Default for Person {\n"
-" fn default() -> Person {\n"
-" Person {\n"
-" name: \"Bot\".to_string(),\n"
-" age: 0,\n"
-" }\n"
-" }\n"
-"}\n"
-"fn create_default() {\n"
-" let tmp = Person {\n"
-" ..Default::default()\n"
-" };\n"
-" let tmp = Person {\n"
-" name: \"Sam\".to_string(),\n"
-" ..Default::default()\n"
-" };\n"
-"}\n"
-"```"
-msgstr ""
-
-#: src/structs/field-shorthand.md:68
-msgid "Methods are defined in the `impl` block."
-msgstr ""
-
-#: src/structs/field-shorthand.md:69
-msgid ""
-"Use struct update syntax to define a new structure using `peter`. Note that "
-"the variable `peter` will no longer be accessible afterwards."
-msgstr ""
-
-#: src/structs/field-shorthand.md:70
-msgid ""
-"Use `{:#?}` when printing structs to request the `Debug` representation."
-msgstr ""
-
#: src/enums.md:3
#, fuzzy
msgid ""
@@ -6507,7 +4946,7 @@ msgstr ""
#, fuzzy
msgid ""
"This page offers an enum type `CoinFlip` with two variants `Heads` and "
-"`Tail`. You might note the namespace when using variants."
+"`Tails`. You might note the namespace when using variants."
msgstr ""
"Cette page propose un type d'énumération `CoinFlip` avec deux variantes "
"`Heads` et `Tail`. Vous pouvez noter l'espace de noms lors de l'utilisation "
@@ -6680,13 +5119,12 @@ msgstr ""
#: src/enums/sizes.md:5
msgid ""
"```rust,editable\n"
+"use std::any::type_name;\n"
"use std::mem::{align_of, size_of};\n"
"\n"
-"macro_rules! dbg_size {\n"
-" ($t:ty) => {\n"
-" println!(\"{}: size {} bytes, align: {} bytes\",\n"
-" stringify!($t), size_of::<$t>(), align_of::<$t>());\n"
-" };\n"
+"fn dbg_size() {\n"
+" println!(\"{}: size {} bytes, align: {} bytes\",\n"
+" type_name::(), size_of::(), align_of::());\n"
"}\n"
"\n"
"enum Foo {\n"
@@ -6695,12 +5133,12 @@ msgid ""
"}\n"
"\n"
"fn main() {\n"
-" dbg_size!(Foo);\n"
+" dbg_size::();\n"
"}\n"
"```"
msgstr ""
-#: src/enums/sizes.md:25
+#: src/enums/sizes.md:24
#, fuzzy
msgid ""
"See the [Rust Reference](https://doc.rust-lang.org/reference/type-layout."
@@ -6709,18 +5147,18 @@ msgstr ""
"Voir la [Rust Reference](https://doc.rust-lang.org/reference/type-layout."
"html)."
-#: src/enums/sizes.md:31
+#: 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:33
+#: src/enums/sizes.md:32
msgid ""
"You can control the discriminant if needed (e.g., for compatibility with C):"
msgstr ""
-#: src/enums/sizes.md:35
+#: src/enums/sizes.md:34
msgid ""
"```rust,editable\n"
"#[repr(u32)]\n"
@@ -6738,57 +5176,57 @@ msgid ""
"```"
msgstr ""
-#: src/enums/sizes.md:50
+#: src/enums/sizes.md:49
msgid ""
"Without `repr`, the discriminant type takes 2 bytes, because 10001 fits 2 "
"bytes."
msgstr ""
-#: src/enums/sizes.md:54
+#: src/enums/sizes.md:53
msgid "Try out other types such as"
msgstr ""
-#: src/enums/sizes.md:56
+#: src/enums/sizes.md:55
msgid "`dbg_size!(bool)`: size 1 bytes, align: 1 bytes,"
msgstr ""
-#: src/enums/sizes.md:57
+#: src/enums/sizes.md:56
msgid ""
"`dbg_size!(Option)`: size 1 bytes, align: 1 bytes (niche optimization, "
"see below),"
msgstr ""
-#: src/enums/sizes.md:58
+#: 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:59
+#: 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:61
+#: src/enums/sizes.md:60
msgid ""
"Niche optimization: Rust will merge unused bit patterns for the enum "
"discriminant."
msgstr ""
-#: src/enums/sizes.md:64
+#: 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::