diff --git a/po/fr.po b/po/fr.po
index 293e4a1c..0e7cf536 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -14,7 +14,7 @@ msgstr ""
#: src/SUMMARY.md:3
msgid "Welcome to Comprehensive Rust 🦀"
-msgstr "Bienvenue à Comprehensive Rust(le guide complet de Rust)🦀"
+msgstr "Bienvenue à Comprehensive Rust (le guide complet de Rust) 🦀"
#: src/SUMMARY.md:4
msgid "Running the Course"
@@ -25,542 +25,545 @@ msgid "Course Structure"
msgstr "Structure du cours"
#: src/SUMMARY.md:6
-msgid "Day 4"
-msgstr "Jour 4"
-
-#: src/SUMMARY.md:7
msgid "Keyboard Shortcuts"
msgstr "Raccourcis de clavier"
-#: src/SUMMARY.md:8
+#: src/SUMMARY.md:7
msgid "Translations"
msgstr "Traductions"
-#: src/SUMMARY.md:9
+#: src/SUMMARY.md:8
msgid "Using Cargo"
msgstr "Utiliser Cargo"
-#: src/SUMMARY.md:10
+#: src/SUMMARY.md:9
msgid "Rust Ecosystem"
msgstr "Écosystème de Rust"
-#: src/SUMMARY.md:11
+#: src/SUMMARY.md:10
msgid "Code Samples"
msgstr "Exemples de code"
-#: src/SUMMARY.md:12
+#: src/SUMMARY.md:11
msgid "Running Cargo Locally"
msgstr "Exécuter Cargo localement"
-#: src/SUMMARY.md:15
+#: src/SUMMARY.md:14
msgid "Day 1: Morning"
msgstr "Jour 1 : Matin"
-#: src/SUMMARY.md:19 src/SUMMARY.md:76 src/SUMMARY.md:129 src/SUMMARY.md:185 src/SUMMARY.md:239
+#: src/SUMMARY.md:18 src/SUMMARY.md:75 src/SUMMARY.md:128 src/SUMMARY.md:185
+#: src/SUMMARY.md:211 src/SUMMARY.md:259
msgid "Welcome"
msgstr "Bienvenue"
-#: src/SUMMARY.md:20
+#: src/SUMMARY.md:19
msgid "What is Rust?"
msgstr "Qu'est-ce que Rust ?"
-#: src/SUMMARY.md:21
+#: src/SUMMARY.md:20
msgid "Hello World!"
msgstr "Bonjour le monde!"
-#: src/SUMMARY.md:22
+#: src/SUMMARY.md:21
msgid "Small Example"
msgstr "Petit exemple"
-#: src/SUMMARY.md:23
+#: src/SUMMARY.md:22
msgid "Why Rust?"
msgstr "Pourquoi Rust ?"
-#: src/SUMMARY.md:24
+#: src/SUMMARY.md:23
msgid "Compile Time Guarantees"
msgstr "Garanties à la compilation"
-#: src/SUMMARY.md:25
+#: src/SUMMARY.md:24
msgid "Runtime Guarantees"
msgstr "Garanties d'exécution"
-#: src/SUMMARY.md:26
+#: src/SUMMARY.md:25
msgid "Modern Features"
msgstr "Fonctionnalités modernes"
-#: src/SUMMARY.md:27
+#: src/SUMMARY.md:26
msgid "Basic Syntax"
msgstr "Syntaxe de base"
-#: src/SUMMARY.md:28
+#: src/SUMMARY.md:27
msgid "Scalar Types"
msgstr "Types de scalaires"
-#: src/SUMMARY.md:29
+#: src/SUMMARY.md:28
msgid "Compound Types"
msgstr "Types composés"
-#: src/SUMMARY.md:30
+#: src/SUMMARY.md:29
msgid "References"
msgstr "Références"
-#: src/SUMMARY.md:31
+#: src/SUMMARY.md:30
msgid "Dangling References"
msgstr "Références invalides"
-#: src/SUMMARY.md:32
+#: src/SUMMARY.md:31
msgid "Slices"
msgstr "Tranches"
-#: src/SUMMARY.md:33
+#: src/SUMMARY.md:32
msgid "String vs str"
msgstr "String vs str"
-#: src/SUMMARY.md:34
+#: src/SUMMARY.md:33
msgid "Functions"
msgstr "Fonctions"
-#: src/SUMMARY.md:35
+#: src/SUMMARY.md:34
msgid "Rustdoc"
msgstr "Rustdoc"
-#: src/SUMMARY.md:36 src/SUMMARY.md:83
+#: src/SUMMARY.md:35 src/SUMMARY.md:82
msgid "Methods"
msgstr "Méthodes"
-#: src/SUMMARY.md:37
+#: src/SUMMARY.md:36
msgid "Overloading"
msgstr "Surcharge"
-#: src/SUMMARY.md:38 src/SUMMARY.md:67 src/SUMMARY.md:91 src/SUMMARY.md:120 src/SUMMARY.md:149 src/SUMMARY.md:177 src/SUMMARY.md:200 src/SUMMARY.md:227
-#: src/SUMMARY.md:253 src/SUMMARY.md:279
+#: src/SUMMARY.md:37 src/SUMMARY.md:66 src/SUMMARY.md:90 src/SUMMARY.md:119
+#: src/SUMMARY.md:148 src/SUMMARY.md:177 src/SUMMARY.md:204 src/SUMMARY.md:225
+#: src/SUMMARY.md:251 src/SUMMARY.md:273 src/SUMMARY.md:293
msgid "Exercises"
msgstr "Exercices"
-#: src/SUMMARY.md:39
+#: src/SUMMARY.md:38
msgid "Implicit Conversions"
msgstr "Conversions implicites"
-#: src/SUMMARY.md:40
+#: src/SUMMARY.md:39
msgid "Arrays and for Loops"
msgstr "Listes et boucles for"
-#: src/SUMMARY.md:42
+#: src/SUMMARY.md:41
msgid "Day 1: Afternoon"
msgstr "Jour 1 : Après-midi"
-#: src/SUMMARY.md:44
+#: src/SUMMARY.md:43
msgid "Variables"
msgstr "Variables"
-#: src/SUMMARY.md:45
+#: src/SUMMARY.md:44
msgid "Type Inference"
msgstr "Inférence de type"
-#: src/SUMMARY.md:46
+#: src/SUMMARY.md:45
msgid "static & const"
msgstr "static & const"
-#: src/SUMMARY.md:47
+#: src/SUMMARY.md:46
msgid "Scopes and Shadowing"
msgstr "Portée et masquage"
-#: src/SUMMARY.md:48
+#: src/SUMMARY.md:47
msgid "Memory Management"
msgstr "Gestion de la mémoire"
-#: src/SUMMARY.md:49
+#: src/SUMMARY.md:48
msgid "Stack vs Heap"
msgstr "Pile et Tas"
-#: src/SUMMARY.md:50
+#: src/SUMMARY.md:49
msgid "Stack Memory"
msgstr "Mémoire de pile"
-#: src/SUMMARY.md:51
+#: src/SUMMARY.md:50
msgid "Manual Memory Management"
msgstr "Gestion manuelle de la mémoire"
-#: src/SUMMARY.md:52
+#: src/SUMMARY.md:51
msgid "Scope-Based Memory Management"
msgstr "Gestion de la mémoire basée sur la portée"
-#: src/SUMMARY.md:53
+#: src/SUMMARY.md:52
msgid "Garbage Collection"
msgstr "Collecte des ordures"
-#: src/SUMMARY.md:54
+#: src/SUMMARY.md:53
msgid "Rust Memory Management"
msgstr "Gestion de la mémoire avec Rust"
-#: src/SUMMARY.md:55
+#: src/SUMMARY.md:54
msgid "Comparison"
msgstr "Comparaison"
-#: src/SUMMARY.md:56
+#: src/SUMMARY.md:55
msgid "Ownership"
msgstr "Propriété"
-#: src/SUMMARY.md:57
+#: src/SUMMARY.md:56
msgid "Move Semantics"
msgstr "Sémantique de movement"
-#: src/SUMMARY.md:58
+#: src/SUMMARY.md:57
msgid "Moved Strings in Rust"
msgstr "String déplacées avec Rust"
-#: src/SUMMARY.md:59
+#: src/SUMMARY.md:58
msgid "Double Frees in Modern C++"
msgstr "Double libération de mémoire en C++ moderne"
-#: src/SUMMARY.md:60
+#: src/SUMMARY.md:59
msgid "Moves in Function Calls"
msgstr "Déplacements dans les appels de fonction"
-#: src/SUMMARY.md:61
+#: src/SUMMARY.md:60
msgid "Copying and Cloning"
msgstr "Copie et clonage"
-#: src/SUMMARY.md:62
+#: src/SUMMARY.md:61
msgid "Borrowing"
msgstr "Emprunt"
-#: src/SUMMARY.md:63
+#: src/SUMMARY.md:62
msgid "Shared and Unique Borrows"
msgstr "Emprunts partagés et uniques"
-#: src/SUMMARY.md:64
+#: src/SUMMARY.md:63
msgid "Lifetimes"
msgstr "Durées de vie"
-#: src/SUMMARY.md:65
+#: src/SUMMARY.md:64
msgid "Lifetimes in Function Calls"
msgstr "Durées de vie dans les appels de fonction"
-#: src/SUMMARY.md:66
+#: src/SUMMARY.md:65
msgid "Lifetimes in Data Structures"
msgstr "Durées de vie dans les structures de données"
-#: src/SUMMARY.md:68
+#: src/SUMMARY.md:67
msgid "Designing a Library"
msgstr "Conception d'une bibliothèque"
-#: src/SUMMARY.md:69
+#: src/SUMMARY.md:68
msgid "Iterators and Ownership"
msgstr "Itérateurs et propriété"
-#: src/SUMMARY.md:72
+#: src/SUMMARY.md:71
msgid "Day 2: Morning"
msgstr "Jour 2 : Matin"
-#: src/SUMMARY.md:77
+#: src/SUMMARY.md:76
msgid "Structs"
msgstr "Structures"
-#: src/SUMMARY.md:78
+#: src/SUMMARY.md:77
msgid "Tuple Structs"
msgstr "Structures de tuple"
-#: src/SUMMARY.md:79
+#: src/SUMMARY.md:78
msgid "Field Shorthand Syntax"
msgstr "Syntaxe abrégée des champs"
-#: src/SUMMARY.md:80
+#: src/SUMMARY.md:79
msgid "Enums"
msgstr "Énumérations"
-#: src/SUMMARY.md:81
+#: src/SUMMARY.md:80
msgid "Variant Payloads"
msgstr "Contenu variable"
-#: src/SUMMARY.md:82
+#: src/SUMMARY.md:81
msgid "Enum Sizes"
msgstr "Tailles d'énumération"
-#: src/SUMMARY.md:84
+#: src/SUMMARY.md:83
msgid "Method Receiver"
msgstr "Récepteur de méthode"
-#: src/SUMMARY.md:85 src/SUMMARY.md:160 src/SUMMARY.md:195
+#: src/SUMMARY.md:84 src/SUMMARY.md:159 src/SUMMARY.md:272
msgid "Example"
msgstr "Exemple"
-#: src/SUMMARY.md:86
+#: src/SUMMARY.md:85
msgid "Pattern Matching"
msgstr "Correspondance de motifs"
-#: src/SUMMARY.md:87
+#: src/SUMMARY.md:86
msgid "Destructuring Enums"
msgstr "Déstructuration des énumérations"
-#: src/SUMMARY.md:88
+#: src/SUMMARY.md:87
msgid "Destructuring Structs"
msgstr "Déstructuration des structures"
-#: src/SUMMARY.md:89
+#: src/SUMMARY.md:88
msgid "Destructuring Arrays"
msgstr "Déstructuration des listes"
-#: src/SUMMARY.md:90
+#: src/SUMMARY.md:89
msgid "Match Guards"
msgstr "Gardes de match"
-#: src/SUMMARY.md:92
+#: src/SUMMARY.md:91
msgid "Health Statistics"
msgstr "Statistiques de santé"
-#: src/SUMMARY.md:93
+#: src/SUMMARY.md:92
msgid "Points and Polygons"
msgstr "Points et polygones"
-#: src/SUMMARY.md:95
+#: src/SUMMARY.md:94
msgid "Day 2: Afternoon"
msgstr "Jour 2 : Après-midi"
-#: src/SUMMARY.md:97
+#: src/SUMMARY.md:96 src/SUMMARY.md:286
msgid "Control Flow"
msgstr "Flux de contrôle"
-#: src/SUMMARY.md:98
+#: src/SUMMARY.md:97
msgid "Blocks"
msgstr "Blocs"
-#: src/SUMMARY.md:99
+#: src/SUMMARY.md:98
msgid "if expressions"
msgstr "expressions `if`"
-#: src/SUMMARY.md:100
+#: src/SUMMARY.md:99
msgid "if let expressions"
msgstr "expressions `if let`"
-#: src/SUMMARY.md:101
+#: src/SUMMARY.md:100
msgid "while expressions"
msgstr "while expressions"
-#: src/SUMMARY.md:102
+#: src/SUMMARY.md:101
msgid "while let expressions"
msgstr "expressions `while let`"
-#: src/SUMMARY.md:103
+#: src/SUMMARY.md:102
msgid "for expressions"
msgstr "expressions `for`"
-#: src/SUMMARY.md:104
+#: src/SUMMARY.md:103
msgid "loop expressions"
msgstr "expressions `loop`"
-#: src/SUMMARY.md:105
+#: src/SUMMARY.md:104
msgid "match expressions"
msgstr "expressions `match`"
-#: src/SUMMARY.md:106
+#: src/SUMMARY.md:105
msgid "break & continue"
msgstr "break & continue"
-#: src/SUMMARY.md:107
+#: src/SUMMARY.md:106
msgid "Standard Library"
msgstr "Bibliothèque standard"
-#: src/SUMMARY.md:108
+#: src/SUMMARY.md:107
msgid "Option and Result"
msgstr "Option et Result"
-#: src/SUMMARY.md:109
+#: src/SUMMARY.md:108
msgid "String"
msgstr "String"
-#: src/SUMMARY.md:110
+#: src/SUMMARY.md:109
msgid "Vec"
msgstr "Vec"
-#: src/SUMMARY.md:111
+#: src/SUMMARY.md:110
msgid "HashMap"
msgstr "HashMap"
-#: src/SUMMARY.md:112
+#: src/SUMMARY.md:111
msgid "Box"
msgstr "Box"
-#: src/SUMMARY.md:113
+#: src/SUMMARY.md:112
msgid "Recursive Data Types"
msgstr "Types de données récursifs"
-#: src/SUMMARY.md:114
+#: src/SUMMARY.md:113
msgid "Niche Optimization"
msgstr "Optimisation de niche"
-#: src/SUMMARY.md:115
+#: src/SUMMARY.md:114
msgid "Rc"
msgstr "Rc"
-#: src/SUMMARY.md:116
+#: src/SUMMARY.md:115
msgid "Modules"
msgstr "Modules"
-#: src/SUMMARY.md:117
+#: src/SUMMARY.md:116
msgid "Visibility"
msgstr "Visibilité"
-#: src/SUMMARY.md:118
+#: src/SUMMARY.md:117
msgid "Paths"
msgstr "Chemins"
-#: src/SUMMARY.md:119
+#: src/SUMMARY.md:118
msgid "Filesystem Hierarchy"
msgstr "Hiérarchie du système de fichiers"
-#: src/SUMMARY.md:121
+#: src/SUMMARY.md:120
msgid "Luhn Algorithm"
msgstr "Algorithme de Luhn"
-#: src/SUMMARY.md:122
+#: src/SUMMARY.md:121
msgid "Strings and Iterators"
msgstr "Strings et Iterators"
-#: src/SUMMARY.md:125
+#: src/SUMMARY.md:124
msgid "Day 3: Morning"
msgstr "Jour 3 : Matin"
-#: src/SUMMARY.md:130
+#: src/SUMMARY.md:129
msgid "Generics"
msgstr "Génériques"
-#: src/SUMMARY.md:131
+#: src/SUMMARY.md:130
msgid "Generic Data Types"
msgstr "Types de données génériques"
-#: src/SUMMARY.md:132
+#: src/SUMMARY.md:131
msgid "Generic Methods"
msgstr "Méthodes génériques"
-#: src/SUMMARY.md:133
+#: src/SUMMARY.md:132
msgid "Monomorphization"
msgstr "Monomorphisation"
-#: src/SUMMARY.md:134
+#: src/SUMMARY.md:133
msgid "Traits"
msgstr "Caractéristiques"
-#: src/SUMMARY.md:135
+#: src/SUMMARY.md:134
msgid "Trait Objects"
msgstr "Objets implementant des caractéristiques"
-#: src/SUMMARY.md:136
+#: src/SUMMARY.md:135
msgid "Deriving Traits"
msgstr "Caractéristiques dérivées"
-#: src/SUMMARY.md:137
+#: src/SUMMARY.md:136
msgid "Default Methods"
msgstr "Méthodes par défaut"
-#: src/SUMMARY.md:138
+#: src/SUMMARY.md:137
msgid "Trait Bounds"
msgstr "Exigences de caractéristique"
-#: src/SUMMARY.md:139
+#: src/SUMMARY.md:138
msgid "impl Trait"
msgstr "impl caractéristique"
-#: src/SUMMARY.md:140
+#: src/SUMMARY.md:139
msgid "Important Traits"
msgstr "Caractéristiques importantes"
-#: src/SUMMARY.md:141
+#: src/SUMMARY.md:140
msgid "Iterator"
msgstr "Iterator"
-#: src/SUMMARY.md:142
+#: src/SUMMARY.md:141
msgid "FromIterator"
msgstr "FromIterator"
-#: src/SUMMARY.md:143
+#: src/SUMMARY.md:142
msgid "From and Into"
msgstr "From et Into"
-#: src/SUMMARY.md:144
+#: src/SUMMARY.md:143
msgid "Read and Write"
msgstr "Read et Write"
-#: src/SUMMARY.md:145
+#: src/SUMMARY.md:144
msgid "Drop"
msgstr "Drop"
-#: src/SUMMARY.md:146
+#: src/SUMMARY.md:145
msgid "Default"
msgstr "Default"
-#: src/SUMMARY.md:147
+#: src/SUMMARY.md:146
msgid "Operators: Add, Mul, ..."
msgstr "Opérateurs : Add, Mul, ..."
-#: src/SUMMARY.md:148
-msgid "Closures"
-msgstr "Fermetures"
+#: src/SUMMARY.md:147
+msgid "Closures: Fn, FnMut, FnOnce"
+msgstr ""
-#: src/SUMMARY.md:150
+#: src/SUMMARY.md:149
msgid "A Simple GUI Library"
msgstr "Une bibliothèque d'interface graphique"
-#: src/SUMMARY.md:152
+#: src/SUMMARY.md:151
msgid "Day 3: Afternoon"
msgstr "Jour 3 : Après-midi"
-#: src/SUMMARY.md:154
+#: src/SUMMARY.md:153
msgid "Error Handling"
msgstr "Gestion des erreurs"
-#: src/SUMMARY.md:155
+#: src/SUMMARY.md:154
msgid "Panics"
msgstr "Paniques"
-#: src/SUMMARY.md:156
+#: src/SUMMARY.md:155
msgid "Catching Stack Unwinding"
msgstr "Suspension de la pile"
-#: src/SUMMARY.md:157
+#: src/SUMMARY.md:156
msgid "Structured Error Handling"
msgstr "Gestion structurée des erreurs"
-#: src/SUMMARY.md:158
+#: src/SUMMARY.md:157
msgid "Propagating Errors with ?"
msgstr "Propagation des erreurs avec ?"
-#: src/SUMMARY.md:159
+#: src/SUMMARY.md:158
msgid "Converting Error Types"
msgstr "Conversion des types d'erreur"
-#: src/SUMMARY.md:161
+#: src/SUMMARY.md:160
msgid "Deriving Error Enums"
msgstr "Dérivation des énumérations d'erreur"
-#: src/SUMMARY.md:162
+#: src/SUMMARY.md:161
msgid "Dynamic Error Types"
msgstr "Types d'erreurs dynamiques"
-#: src/SUMMARY.md:163
+#: src/SUMMARY.md:162
msgid "Adding Context to Errors"
msgstr "Ajout de contexte aux erreurs"
-#: src/SUMMARY.md:164
+#: src/SUMMARY.md:163
msgid "Testing"
msgstr "Tester"
-#: src/SUMMARY.md:165
+#: src/SUMMARY.md:164
msgid "Unit Tests"
msgstr "Tests unitaires"
-#: src/SUMMARY.md:166
+#: src/SUMMARY.md:165
msgid "Test Modules"
msgstr "Modules de test"
-#: src/SUMMARY.md:167
+#: src/SUMMARY.md:166
msgid "Documentation Tests"
msgstr "Test de documentation"
-#: src/SUMMARY.md:168
+#: src/SUMMARY.md:167
msgid "Integration Tests"
msgstr "Test d'intégration"
+#: src/SUMMARY.md:168
+#, fuzzy
+msgid "Useful crates"
+msgstr "# Caisses utiles"
+
#: src/SUMMARY.md:169
msgid "Unsafe Rust"
msgstr "Rust risqué"
@@ -597,352 +600,414 @@ msgstr "Implémentation de traits risqués"
msgid "Safe FFI Wrapper"
msgstr "Enveloppe FFI sûre"
-#: src/SUMMARY.md:181
-msgid "Day 4: Morning"
-msgstr "Jour 4 : Matin"
-
-#: src/SUMMARY.md:186
-msgid "Concurrency"
-msgstr "Concurrence"
-
-#: src/SUMMARY.md:187
-msgid "Threads"
-msgstr "Threads"
-
-#: src/SUMMARY.md:188
-msgid "Scoped Threads"
-msgstr "Threads délimités"
-
-#: src/SUMMARY.md:189
-msgid "Channels"
-msgstr "Canaux"
-
-#: src/SUMMARY.md:190
-msgid "Unbounded Channels"
-msgstr "Canaux illimités"
-
-#: src/SUMMARY.md:191
-msgid "Bounded Channels"
-msgstr "Canaux limités"
-
-#: src/SUMMARY.md:192
-msgid "Shared State"
-msgstr "État partagé"
-
-#: src/SUMMARY.md:193
-msgid "Arc"
-msgstr "Arc"
-
-#: src/SUMMARY.md:194
-msgid "Mutex"
-msgstr "Mutex"
-
-#: src/SUMMARY.md:196
-msgid "Send and Sync"
-msgstr "Send et Sync"
-
-#: src/SUMMARY.md:196
-msgid "Send"
-msgstr "Send"
-
-#: src/SUMMARY.md:196
-msgid "Sync"
-msgstr "Sync"
-
-#: src/SUMMARY.md:199
-msgid "Examples"
-msgstr "Exemples"
-
-#: src/SUMMARY.md:201
-msgid "Dining Philosophers"
-msgstr "Dîner des philosophes"
-
-#: src/SUMMARY.md:202
-msgid "Multi-threaded Link Checker"
-msgstr "Vérificateur de liens à plusieurs threads"
-
-#: src/SUMMARY.md:204
-msgid "Day 4: Afternoon (Android)"
-msgstr "Jour 4 : Après-midi (Android)"
-
-#: src/SUMMARY.md:204 src/SUMMARY.md:277
+#: src/SUMMARY.md:181 src/SUMMARY.md:249
msgid "Android"
msgstr "Android"
-#: src/SUMMARY.md:209
+#: src/SUMMARY.md:186
msgid "Setup"
msgstr "Installation"
-#: src/SUMMARY.md:210
+#: src/SUMMARY.md:187
msgid "Build Rules"
msgstr "Règles de construction"
-#: src/SUMMARY.md:211
+#: src/SUMMARY.md:188
msgid "Binary"
msgstr "Binaire"
-#: src/SUMMARY.md:212
+#: src/SUMMARY.md:189
msgid "Library"
msgstr "Bibliothèque"
-#: src/SUMMARY.md:213
+#: src/SUMMARY.md:190
msgid "AIDL"
msgstr "AIDL"
-#: src/SUMMARY.md:214
+#: src/SUMMARY.md:191
msgid "Interface"
msgstr "Interface"
-#: src/SUMMARY.md:215
+#: src/SUMMARY.md:192
msgid "Implementation"
msgstr "Mise en œuvre"
-#: src/SUMMARY.md:216
+#: src/SUMMARY.md:193
msgid "Server"
msgstr "Serveur"
-#: src/SUMMARY.md:217
+#: src/SUMMARY.md:194
msgid "Deploy"
msgstr "Déployer"
-#: src/SUMMARY.md:218
+#: src/SUMMARY.md:195
msgid "Client"
msgstr "Client"
-#: src/SUMMARY.md:219
+#: src/SUMMARY.md:196
msgid "Changing API"
msgstr "Modification de l'API"
-#: src/SUMMARY.md:220 src/SUMMARY.md:268
+#: src/SUMMARY.md:197 src/SUMMARY.md:240
msgid "Logging"
msgstr "Journalisation"
-#: src/SUMMARY.md:221
+#: src/SUMMARY.md:198
msgid "Interoperability"
msgstr "Interopérabilité"
-#: src/SUMMARY.md:222
+#: src/SUMMARY.md:199
msgid "With C"
msgstr "Avec C"
-#: src/SUMMARY.md:223
+#: src/SUMMARY.md:200
msgid "Calling C with Bindgen"
msgstr "Appeler C avec Bindgen"
-#: src/SUMMARY.md:224
+#: src/SUMMARY.md:201
msgid "Calling Rust from C"
msgstr "Appeler Rust depuis C"
-#: src/SUMMARY.md:225
+#: src/SUMMARY.md:202
msgid "With C++"
msgstr "Avec C++"
-#: src/SUMMARY.md:226
+#: src/SUMMARY.md:203
msgid "With Java"
msgstr "Avec Java"
-#: src/SUMMARY.md:229
-msgid "Final Words"
-msgstr "Derniers mots"
+#: src/SUMMARY.md:207
+msgid "Bare Metal: Morning"
+msgstr "Bare Metal : Matin"
-#: src/SUMMARY.md:231
-msgid "Thanks!"
-msgstr "Merci!"
-
-#: src/SUMMARY.md:232
-msgid "Other Resources"
-msgstr "Autres ressources"
-
-#: src/SUMMARY.md:233
-msgid "Credits"
-msgstr "Crédits"
-
-#: src/SUMMARY.md:237
-msgid "Bare Metal Rust: Morning"
-msgstr "Bare Metal Rust : Matin"
-
-#: src/SUMMARY.md:240
+#: src/SUMMARY.md:212
msgid "no_std"
msgstr "no_std"
-#: src/SUMMARY.md:241
+#: src/SUMMARY.md:213
msgid "A Minimal Example"
msgstr "Un exemple minimal"
-#: src/SUMMARY.md:242
+#: src/SUMMARY.md:214
msgid "alloc"
msgstr "alloc"
-#: src/SUMMARY.md:243
+#: src/SUMMARY.md:215
msgid "Microcontrollers"
msgstr "Microcontrôleurs"
-#: src/SUMMARY.md:244
+#: src/SUMMARY.md:216
msgid "Raw MMIO"
msgstr "MMIO brut"
-#: src/SUMMARY.md:245
+#: src/SUMMARY.md:217
msgid "PACs"
msgstr "PACs"
-#: src/SUMMARY.md:246
+#: src/SUMMARY.md:218
msgid "HAL Crates"
msgstr "HAL Crates"
-#: src/SUMMARY.md:247
+#: src/SUMMARY.md:219
msgid "Board Support Crates"
msgstr "Board Support Crates"
-#: src/SUMMARY.md:248
+#: src/SUMMARY.md:220
msgid "The Type State Pattern"
msgstr "Le modèle d'état de type"
-#: src/SUMMARY.md:249
+#: src/SUMMARY.md:221
msgid "embedded-hal"
msgstr "embedded-hal"
-#: src/SUMMARY.md:250
+#: src/SUMMARY.md:222
msgid "probe-rs, cargo-embed"
msgstr "probe-rs, cargo-embed"
-#: src/SUMMARY.md:251
+#: src/SUMMARY.md:223
msgid "Debugging"
msgstr "Débogage"
-#: src/SUMMARY.md:252 src/SUMMARY.md:270
+#: src/SUMMARY.md:224 src/SUMMARY.md:242
msgid "Other Projects"
msgstr "Autres projets"
-#: src/SUMMARY.md:254
+#: src/SUMMARY.md:226
msgid "Compass"
msgstr "Boussole"
-#: src/SUMMARY.md:256
-msgid "Bare Metal Rust: Afternoon"
-msgstr "Bare Metal Rust : Après-midi"
+#: src/SUMMARY.md:228
+msgid "Bare Metal: Afternoon"
+msgstr "Bare Metal : Après-midi"
-#: src/SUMMARY.md:258
+#: src/SUMMARY.md:230
msgid "Application Processors"
msgstr "Processeurs d'applications"
-#: src/SUMMARY.md:259
+#: src/SUMMARY.md:231
msgid "Inline Assembly"
msgstr "Assembleur en ligne"
-#: src/SUMMARY.md:260
+#: src/SUMMARY.md:232
msgid "MMIO"
msgstr "MMIO"
-#: src/SUMMARY.md:261
+#: src/SUMMARY.md:233
msgid "Let's Write a UART Driver"
msgstr "Écrivons un pilote UART"
-#: src/SUMMARY.md:262
+#: src/SUMMARY.md:234
msgid "More Traits"
msgstr "Plus de traits"
-#: src/SUMMARY.md:263
+#: src/SUMMARY.md:235
msgid "A Better UART Driver"
msgstr "Un meilleur pilote UART"
-#: src/SUMMARY.md:264
+#: src/SUMMARY.md:236
msgid "Bitflags"
msgstr "Bitflags"
-#: src/SUMMARY.md:265
+#: src/SUMMARY.md:237
msgid "Multiple Registers"
msgstr "Registres multiples"
-#: src/SUMMARY.md:266
+#: src/SUMMARY.md:238
msgid "Driver"
msgstr "Pilote"
-#: src/SUMMARY.md:267 src/SUMMARY.md:269
+#: src/SUMMARY.md:239 src/SUMMARY.md:241
msgid "Using It"
msgstr "En l'utilisant"
-#: src/SUMMARY.md:271
+#: src/SUMMARY.md:243
msgid "Useful Crates"
msgstr "Crates utiles"
-#: src/SUMMARY.md:272
+#: src/SUMMARY.md:244
msgid "zerocopy"
msgstr "zerocopy"
-#: src/SUMMARY.md:273
+#: src/SUMMARY.md:245
msgid "aarch64-paging"
msgstr "aarch64-paging"
-#: src/SUMMARY.md:274
+#: src/SUMMARY.md:246
msgid "buddy_system_allocator"
msgstr "buddy_system_allocator"
-#: src/SUMMARY.md:275
+#: src/SUMMARY.md:247
msgid "tinyvec"
msgstr "tinyvec"
-#: src/SUMMARY.md:276
+#: src/SUMMARY.md:248
msgid "spin"
msgstr "spin"
-#: src/SUMMARY.md:278
+#: src/SUMMARY.md:250
msgid "vmbase"
msgstr "vmbase"
-#: src/SUMMARY.md:280
+#: src/SUMMARY.md:252
msgid "RTC Driver"
msgstr "Pilote RTC"
+#: src/SUMMARY.md:255
+msgid "Concurrency: Morning"
+msgstr "Concurrence : Matin"
+
+#: src/SUMMARY.md:260
+msgid "Threads"
+msgstr "Threads"
+
+#: src/SUMMARY.md:261
+msgid "Scoped Threads"
+msgstr "Threads délimités"
+
+#: src/SUMMARY.md:262
+msgid "Channels"
+msgstr "Canaux"
+
+#: src/SUMMARY.md:263
+msgid "Unbounded Channels"
+msgstr "Canaux illimités"
+
+#: src/SUMMARY.md:264
+msgid "Bounded Channels"
+msgstr "Canaux limités"
+
+#: src/SUMMARY.md:265
+msgid "Send and Sync"
+msgstr "Send et Sync"
+
+#: src/SUMMARY.md:265
+msgid "Send"
+msgstr "Send"
+
+#: src/SUMMARY.md:265
+msgid "Sync"
+msgstr "Sync"
+
+#: src/SUMMARY.md:268
+msgid "Examples"
+msgstr "Exemples"
+
+#: src/SUMMARY.md:269
+msgid "Shared State"
+msgstr "État partagé"
+
+#: src/SUMMARY.md:270
+msgid "Arc"
+msgstr "Arc"
+
+#: src/SUMMARY.md:271
+msgid "Mutex"
+msgstr "Mutex"
+
+#: src/SUMMARY.md:274 src/SUMMARY.md:294
+msgid "Dining Philosophers"
+msgstr "Dîner des philosophes"
+
+#: src/SUMMARY.md:275
+msgid "Multi-threaded Link Checker"
+msgstr "Vérificateur de liens à plusieurs threads"
+
+#: src/SUMMARY.md:277
+#, fuzzy
+msgid "Concurrency: Afternoon"
+msgstr "Concurrence : Après-midi"
+
+#: src/SUMMARY.md:279
+msgid "Async Basics"
+msgstr ""
+
+#: src/SUMMARY.md:280
+msgid "async/await"
+msgstr ""
+
+#: src/SUMMARY.md:281
+msgid "Futures"
+msgstr ""
+
+#: src/SUMMARY.md:282
+#, fuzzy
+msgid "Runtimes"
+msgstr "Garanties d'exécution"
+
+#: src/SUMMARY.md:283
+msgid "Tokio"
+msgstr ""
+
#: src/SUMMARY.md:284
+msgid "Tasks"
+msgstr "Tâches"
+
+#: src/SUMMARY.md:285
+msgid "Async Channels"
+msgstr "Canaux asynchrones"
+
+#: src/SUMMARY.md:287
+msgid "Join"
+msgstr ""
+
+#: src/SUMMARY.md:288
+msgid "Select"
+msgstr ""
+
+#: src/SUMMARY.md:289
+msgid "Pitfalls"
+msgstr "Pièges"
+
+#: src/SUMMARY.md:290
+msgid "Blocking the Executor"
+msgstr ""
+
+#: src/SUMMARY.md:291
+msgid "Pin"
+msgstr ""
+
+#: src/SUMMARY.md:292
+#, fuzzy
+msgid "Async Traits"
+msgstr "Traits asynchrones"
+
+#: src/SUMMARY.md:295
+msgid "Broadcast Chat Application"
+msgstr ""
+
+#: src/SUMMARY.md:298
+msgid "Final Words"
+msgstr "Derniers mots"
+
+#: src/SUMMARY.md:302
+msgid "Thanks!"
+msgstr "Merci!"
+
+#: src/SUMMARY.md:303
+msgid "Other Resources"
+msgstr "Autres ressources"
+
+#: src/SUMMARY.md:304
+msgid "Credits"
+msgstr "Crédits"
+
+#: src/SUMMARY.md:307
msgid "Solutions"
msgstr "Solutions"
-#: src/SUMMARY.md:289
+#: src/SUMMARY.md:312
msgid "Day 1 Morning"
msgstr "Jour 1 Matin"
-#: src/SUMMARY.md:290
+#: src/SUMMARY.md:313
msgid "Day 1 Afternoon"
msgstr "Jour 1 Après-midi"
-#: src/SUMMARY.md:291
+#: src/SUMMARY.md:314
msgid "Day 2 Morning"
msgstr "Jour 2 Matin"
-#: src/SUMMARY.md:292
+#: src/SUMMARY.md:315
msgid "Day 2 Afternoon"
msgstr "Jour 2 Après-midi"
-#: src/SUMMARY.md:293
+#: src/SUMMARY.md:316
msgid "Day 3 Morning"
msgstr "Jour 3 Matin"
-#: src/SUMMARY.md:294
+#: src/SUMMARY.md:317
msgid "Day 3 Afternoon"
msgstr "Jour 3 Après-midi"
-#: src/SUMMARY.md:295
-msgid "Day 4 Morning"
-msgstr "Jour 4 Matin"
-
-#: src/SUMMARY.md:296
+#: src/SUMMARY.md:318
msgid "Bare Metal Rust Morning"
msgstr "Bare Metal Rust Matin"
-#: src/SUMMARY.md:297
+#: src/SUMMARY.md:319
msgid "Bare Metal Rust Afternoon"
msgstr "Bare Metal Rust Après-midi"
+#: src/SUMMARY.md:320
+msgid "Concurrency Morning"
+msgstr "Matin concurrence"
+
+#: src/SUMMARY.md:321
+msgid "Concurrency Afternoon"
+msgstr "Après-midi concurrence"
+
#: src/welcome.md:1
msgid "# Welcome to Comprehensive Rust 🦀"
-msgstr "# Bienvenue à Comprehensive Rust(le guide complet de Rust) 🦀"
+msgstr "# Bienvenue à Comprehensive Rust (le guide complet de Rust) 🦀"
#: src/welcome.md:3
+#, fuzzy
msgid ""
-"[](https://github.com/"
-"google/comprehensive-rust/actions/workflows/build.yml)"
+"[](https://github.com/"
+"google/comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain)"
msgstr ""
-"[](https://"
+"[](https://"
"github.com/google/comprehensive-rust/actions/workflows/build.yml)"
#: src/welcome.md:3
@@ -950,15 +1015,20 @@ msgid "Build workflow"
msgstr "Flux de construction"
#: src/welcome.md:3
+#, fuzzy
msgid ""
-"[](https://github.com/"
-"google/comprehensive-rust/actions/workflows/build.yml)\n"
-"[](https://github.com/google/"
+"[](https://github.com/"
+"google/comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain)\n"
+"[](https://github.com/google/"
"comprehensive-rust/graphs/contributors)"
msgstr ""
-"[](https://"
+"[](https://"
"github.com/google/comprehensive-rust/actions/workflows/build.yml)\n"
-"[](https://github.com/google/"
+"[](https://github.com/google/"
"comprehensive-rust/graphs/contributors)"
#: src/welcome.md:4
@@ -967,14 +1037,18 @@ msgstr "Contributeurs GitHub"
#: src/welcome.md:4
msgid ""
-"[](https://github.com/google/"
+"[](https://github.com/google/"
"comprehensive-rust/graphs/contributors)\n"
-"[](https://github.com/google/comprehensive-rust/"
+"[](https://github.com/google/comprehensive-rust/"
"stargazers)"
msgstr ""
-"[](https://github.com/google/"
+"[](https://github.com/google/"
"comprehensive-rust/graphs/contributors)\n"
-"[](https://github.com/google/comprehensive-rust/"
+"[](https://github.com/google/comprehensive-rust/"
"stargazers )"
#: src/welcome.md:5
@@ -983,28 +1057,39 @@ msgstr "Étoiles GitHub"
#: src/welcome.md:5
msgid ""
-"[](https://github.com/google/comprehensive-rust/"
+"[](https://github.com/google/comprehensive-rust/"
"stargazers)"
msgstr ""
-"[](https://github.com/google/comprehensive-rust/"
+"[](https://github.com/google/comprehensive-rust/"
"stargazers)"
#: src/welcome.md:7
+#, fuzzy
msgid ""
-"This is a four day Rust course developed by the Android team. The course covers\n"
-"the full spectrum of Rust, from basic syntax to advanced topics like generics\n"
-"and error handling. It also includes Android-specific content on the last day."
+"This is a three day Rust course developed by the Android team. The course "
+"covers\n"
+"the full spectrum of Rust, from basic syntax to advanced topics like "
+"generics\n"
+"and error handling. It also includes Android-specific content on the last "
+"day."
msgstr ""
-"Il s'agit d'un cours Rust de quatre jours développé par l'équipe Android. Le cours couvre\n"
-"le spectre complet de Rust, de la syntaxe de base aux sujets avancés comme les génériques\n"
-"et la gestion des erreurs. Il inclut également du contenu spécifique à Android le dernier jour."
+"Il s'agit d'un cours Rust de quatre jours développé par l'équipe Android. Le "
+"cours couvre\n"
+"le spectre complet de Rust, de la syntaxe de base aux sujets avancés comme "
+"les génériques\n"
+"et la gestion des erreurs. Il inclut également du contenu spécifique à "
+"Android le dernier jour."
#: src/welcome.md:11
msgid ""
-"The goal of the course is to teach you Rust. We assume you don't know anything\n"
+"The goal of the course is to teach you Rust. We assume you don't know "
+"anything\n"
"about Rust and hope to:"
msgstr ""
-"Le but du cours est de vous apprendre Rust. Nous supposons que vous ne savez rien\n"
+"Le but du cours est de vous apprendre Rust. Nous supposons que vous ne savez "
+"rien\n"
"à propos de Rust et espérons :"
#: src/welcome.md:14
@@ -1014,62 +1099,61 @@ msgid ""
"* Show you common Rust idioms."
msgstr ""
"* Vous donner une compréhension complète de la syntaxe et du langage Rust.\n"
-"* Vous permettre de modifier des programmes existants et d'écrire de nouveaux programmes dans Rust.\n"
+"* Vous permettre de modifier des programmes existants et d'écrire de "
+"nouveaux programmes dans Rust.\n"
"* Vous montrer les idiomes courants à Rust."
#: src/welcome.md:18
-msgid "On Day 4, we will cover Android-specific things such as:"
-msgstr "Le 4ème jour, nous couvrirons des éléments spécifiques à Android tels que :"
-
-#: src/welcome.md:20
msgid ""
-"* Building Android components in Rust.\n"
-"* AIDL servers and clients.\n"
-"* Interoperability with C, C++, and Java."
+"The first three days show you the fundamentals of Rust. Following this, "
+"you're\n"
+"invited to dive into one or more specialized topics:"
msgstr ""
-"* Construire des composants Android avec Rust.\n"
-"* Serveurs et clients AIDL.\n"
-"* Interopérabilité avec C, C++ et Java."
-#: src/welcome.md:24
+#: src/welcome.md:21
msgid ""
-"It is important to note that this course does not cover Android **application** \n"
-"development in Rust, and that the Android-specific parts are specifically about\n"
-"writing code for Android itself, the operating system. "
+"* [Android](android.md): a half-day course on using Rust for Android "
+"platform\n"
+" development (AOSP). This includes interoperability with C, C++, and Java.\n"
+"* [Bare-metal](bare-metal.md): a full day class on using Rust for bare-"
+"metal\n"
+" (embedded) development. Both microcontrollers and application processors "
+"are\n"
+" covered.\n"
+"* [Concurrency](concurrency.md): a full day class on concurrency in Rust. "
+"We\n"
+" cover both classical concurrency (preemptively scheduling using threads "
+"and\n"
+" mutexes) and async/await concurrency (cooperative multitasking using\n"
+" futures)."
msgstr ""
-"Il est important de noter que ce cours ne couvre pas un développement d' **application** Android\n"
-"avec Rust, et que les parties spécifiques à Android concernent spécifiquement\n"
-"l'écriture du code pour le système d'exploitation Android lui même, le système d'exploitation. "
-#: src/welcome.md:28
+#: src/welcome.md:32
msgid "## Non-Goals"
msgstr "## Non-objectifs"
-#: src/welcome.md:30
+#: src/welcome.md:34
msgid ""
-"Rust is a large language and we won't be able to cover all of it in a few days.\n"
+"Rust is a large language and we won't be able to cover all of it in a few "
+"days.\n"
"Some non-goals of this course are:"
msgstr ""
-"Rust est un grand langage et nous ne pourrons pas tout couvrir en quelques jours.\n"
+"Rust est un grand langage et nous ne pourrons pas tout couvrir en quelques "
+"jours.\n"
"Certains non-objectifs de ce cours sont :"
-#: src/welcome.md:33
+#: src/welcome.md:37
+#, fuzzy
msgid ""
-"* Learn how to use async Rust --- we'll only mention async Rust when\n"
-" covering traditional concurrency primitives. Please see [Asynchronous\n"
-" Programming in Rust](https://rust-lang.github.io/async-book/) instead for\n"
-" details on this topic.\n"
"* Learn how to develop macros, please see [Chapter 19.5 in the Rust\n"
" Book](https://doc.rust-lang.org/book/ch19-06-macros.html) and [Rust by\n"
" Example](https://doc.rust-lang.org/rust-by-example/macros.html) instead."
msgstr ""
-"* Apprenez à utiliser Rust asynchrone --- nous ne mentionnerons Rust asynchrone que lorsque\n"
-" couvrant les primitives de concurrence traditionnelles. Veuillez consulter [Programmation\n"
-" Asynchrone en Rust](https://rust-lang.github.io/async-book/) à la place de\n"
-" détails sur ce sujet.\n"
-"* Apprenez à développer des macros, veuillez consulter [Chapitre 19.5 dans le Livre\n"
-" Rust](https://doc.rust-lang.org/book/ch19-06-macros.html) et [Rust par\n"
-" Exemple](https://doc.rust-lang.org/rust-by-example/macros.html) à la place."
+"Nous aborderons ensuite brièvement les capacités dangereuses. Pour plus de "
+"détails, veuillez consulter\n"
+"[Chapitre 19.1 du Rust Book](https://doc.rust-lang.org/book/ch19-01-unsafe-"
+"rust.html)\n"
+"et le [Rustonomicon](https://doc.rust-lang.org/nomicon/)."
#: src/welcome.md:41
msgid "## Assumptions"
@@ -1077,109 +1161,234 @@ msgstr "## Hypothèses"
#: src/welcome.md:43
msgid ""
-"The course assumes that you already know how to program. Rust is a statically\n"
-"typed language and we will sometimes make comparisons with C and C++ to better\n"
+"The course assumes that you already know how to program. Rust is a "
+"statically\n"
+"typed language and we will sometimes make comparisons with C and C++ to "
+"better\n"
"explain or contrast the Rust approach."
msgstr ""
"Le cours suppose que vous savez déjà programmer. Rust est un language\n"
-"statiquement typé et on fera parfois des comparaisons avec C et C++ pour mieux\n"
+"statiquement typé et on fera parfois des comparaisons avec C et C++ pour "
+"mieux\n"
"expliquer ou contraster l'approche de Rust."
#: src/welcome.md:47
msgid ""
-"If you know how to program in a dynamically typed language such as Python or\n"
+"If you know how to program in a dynamically typed language such as Python "
+"or\n"
"JavaScript, then you will be able to follow along just fine too."
msgstr ""
-"Si vous savez programmer dans un langage à typage dynamique tel que Python ou\n"
+"Si vous savez programmer dans un langage à typage dynamique tel que Python "
+"ou\n"
"JavaScript, alors vous pourrez également très bien suivre."
-#: src/welcome.md:50 src/cargo/rust-ecosystem.md:19 src/cargo/code-samples.md:22 src/cargo/running-locally.md:68 src/welcome-day-1.md:14
-#: src/welcome-day-1/what-is-rust.md:19 src/hello-world.md:20 src/hello-world/small-example.md:21 src/why-rust.md:9 src/why-rust/compile-time.md:14
-#: src/why-rust/runtime.md:8 src/why-rust/modern.md:19 src/basic-syntax/compound-types.md:28 src/basic-syntax/slices.md:18
-#: src/basic-syntax/string-slices.md:25 src/basic-syntax/functions.md:33 src/basic-syntax/rustdoc.md:22 src/basic-syntax/functions-interlude.md:25
-#: src/exercises/day-1/morning.md:9 src/exercises/day-1/for-loops.md:90 src/basic-syntax/variables.md:15 src/basic-syntax/type-inference.md:24
-#: src/basic-syntax/static-and-const.md:46 src/basic-syntax/scopes-shadowing.md:23 src/memory-management/stack.md:26 src/memory-management/rust.md:12
-#: src/ownership/move-semantics.md:20 src/ownership/moves-function-calls.md:18 src/ownership/copy-clone.md:33 src/ownership/borrowing.md:25
-#: src/ownership/shared-unique-borrows.md:23 src/ownership/lifetimes-function-calls.md:27 src/ownership/lifetimes-data-structures.md:23
-#: src/exercises/day-1/afternoon.md:9 src/exercises/day-1/book-library.md:102 src/structs/tuple-structs.md:35 src/structs/field-shorthand.md:25
-#: src/enums.md:31 src/enums/variant-payloads.md:33 src/enums/sizes.md:27 src/methods.md:28 src/methods/receiver.md:23 src/methods/example.md:44
-#: src/pattern-matching.md:23 src/pattern-matching/destructuring-enums.md:33 src/pattern-matching/destructuring-structs.md:21
-#: src/pattern-matching/destructuring-arrays.md:19 src/pattern-matching/match-guards.md:20 src/exercises/day-2/morning.md:9
-#: src/exercises/day-2/points-polygons.md:115 src/control-flow/blocks.md:40 src/control-flow/if-expressions.md:29
-#: src/control-flow/if-let-expressions.md:19 src/control-flow/while-let-expressions.md:25 src/control-flow/for-expressions.md:22
-#: src/control-flow/loop-expressions.md:23 src/control-flow/match-expressions.md:25 src/std.md:23 src/std/option-result.md:16 src/std/string.md:28
-#: src/std/vec.md:35 src/std/hashmap.md:36 src/std/box.md:32 src/std/box-recursive.md:31 src/std/rc.md:29 src/modules.md:26
-#: src/modules/visibility.md:37 src/modules/filesystem.md:38 src/exercises/day-2/afternoon.md:5 src/generics/data-types.md:19
-#: src/generics/methods.md:23 src/traits/trait-objects.md:70 src/traits/default-methods.md:30 src/traits/trait-bounds.md:33 src/traits/impl-trait.md:21
-#: src/traits/iterator.md:30 src/traits/from-iterator.md:15 src/traits/from-into.md:27 src/traits/drop.md:32 src/traits/default.md:38
-#: src/traits/operators.md:24 src/traits/closures.md:23 src/exercises/day-3/morning.md:5 src/error-handling/result.md:25
-#: src/error-handling/try-operator.md:48 src/error-handling/converting-error-types-example.md:48 src/error-handling/deriving-error-enums.md:37
-#: src/error-handling/dynamic-errors.md:34 src/error-handling/error-contexts.md:33 src/unsafe.md:26 src/unsafe/raw-pointers.md:24
-#: src/unsafe/mutable-static-variables.md:30 src/unsafe/unions.md:19 src/unsafe/writing-unsafe-functions.md:31 src/unsafe/extern-functions.md:19
-#: src/unsafe/unsafe-traits.md:28 src/exercises/day-3/afternoon.md:5 src/welcome-day-4.md:6 src/concurrency/threads.md:28
-#: src/concurrency/scoped-threads.md:35 src/concurrency/channels.md:25 src/concurrency/shared_state/arc.md:27 src/concurrency/shared_state/mutex.md:29
-#: src/concurrency/shared_state/example.md:21 src/concurrency/send-sync.md:18 src/concurrency/send-sync/sync.md:12 src/exercises/day-4/morning.md:10
-#: src/android/interoperability/with-c/rust.md:81 src/exercises/day-4/android.md:10 src/bare-metal/minimal.md:15 src/bare-metal/alloc.md:36
-#: src/bare-metal/microcontrollers.md:23 src/bare-metal/microcontrollers/mmio.md:62 src/bare-metal/microcontrollers/pacs.md:47
-#: src/bare-metal/microcontrollers/hals.md:37 src/bare-metal/microcontrollers/board-support.md:26 src/bare-metal/microcontrollers/type-state.md:30
-#: src/bare-metal/microcontrollers/embedded-hal.md:17 src/bare-metal/microcontrollers/probe-rs.md:14 src/bare-metal/microcontrollers/debugging.md:25
-#: src/bare-metal/microcontrollers/other-projects.md:16 src/exercises/bare-metal/morning.md:5 src/bare-metal/aps.md:7
-#: src/bare-metal/aps/inline-assembly.md:41 src/bare-metal/aps/mmio.md:7 src/bare-metal/aps/uart.md:53 src/bare-metal/aps/uart/traits.md:22
-#: src/bare-metal/aps/better-uart.md:24 src/bare-metal/aps/better-uart/bitflags.md:35 src/bare-metal/aps/better-uart/registers.md:39
-#: src/bare-metal/aps/better-uart/driver.md:62 src/bare-metal/aps/better-uart/using.md:47 src/bare-metal/aps/logging.md:48
-#: src/bare-metal/aps/logging/using.md:43 src/bare-metal/useful-crates/zerocopy.md:43 src/bare-metal/useful-crates/aarch64-paging.md:26
-#: src/bare-metal/useful-crates/buddy_system_allocator.md:24 src/bare-metal/useful-crates/tinyvec.md:21 src/bare-metal/useful-crates/spin.md:21
-#: src/bare-metal/android/vmbase.md:19 src/exercises/bare-metal/afternoon.md:5
+#: src/welcome.md:50 src/cargo/rust-ecosystem.md:19
+#: src/cargo/code-samples.md:22 src/cargo/running-locally.md:68
+#: src/welcome-day-1.md:14 src/welcome-day-1/what-is-rust.md:19
+#: src/hello-world.md:20 src/hello-world/small-example.md:21 src/why-rust.md:9
+#: src/why-rust/compile-time.md:14 src/why-rust/runtime.md:8
+#: src/why-rust/modern.md:19 src/basic-syntax/scalar-types.md:19
+#: src/basic-syntax/compound-types.md:28 src/basic-syntax/references.md:21
+#: src/basic-syntax/slices.md:18 src/basic-syntax/string-slices.md:25
+#: src/basic-syntax/functions.md:33 src/basic-syntax/rustdoc.md:22
+#: src/basic-syntax/methods.md:32 src/basic-syntax/functions-interlude.md:25
+#: src/exercises/day-1/morning.md:9 src/exercises/day-1/for-loops.md:90
+#: src/basic-syntax/variables.md:15 src/basic-syntax/type-inference.md:24
+#: src/basic-syntax/static-and-const.md:46
+#: src/basic-syntax/scopes-shadowing.md:23 src/memory-management/stack.md:26
+#: src/memory-management/rust.md:12 src/ownership/move-semantics.md:20
+#: src/ownership/moves-function-calls.md:18 src/ownership/copy-clone.md:33
+#: src/ownership/borrowing.md:25 src/ownership/shared-unique-borrows.md:23
+#: src/ownership/lifetimes-function-calls.md:27
+#: src/ownership/lifetimes-data-structures.md:23
+#: src/exercises/day-1/afternoon.md:9 src/exercises/day-1/book-library.md:100
+#: src/structs.md:29 src/structs/tuple-structs.md:35
+#: src/structs/field-shorthand.md:25 src/enums.md:31
+#: src/enums/variant-payloads.md:33 src/enums/sizes.md:27 src/methods.md:28
+#: src/methods/receiver.md:22 src/methods/example.md:44
+#: src/pattern-matching.md:23 src/pattern-matching/destructuring-enums.md:33
+#: src/pattern-matching/destructuring-structs.md:21
+#: src/pattern-matching/destructuring-arrays.md:19
+#: src/pattern-matching/match-guards.md:20 src/exercises/day-2/morning.md:9
+#: src/exercises/day-2/points-polygons.md:115 src/control-flow/blocks.md:40
+#: src/control-flow/if-expressions.md:33
+#: src/control-flow/if-let-expressions.md:21
+#: src/control-flow/while-let-expressions.md:24
+#: src/control-flow/for-expressions.md:23
+#: src/control-flow/loop-expressions.md:25
+#: src/control-flow/match-expressions.md:26 src/std.md:23
+#: src/std/option-result.md:16 src/std/string.md:28 src/std/vec.md:35
+#: src/std/hashmap.md:36 src/std/box.md:32 src/std/box-recursive.md:31
+#: src/std/rc.md:29 src/modules.md:26 src/modules/visibility.md:37
+#: src/modules/filesystem.md:42 src/exercises/day-2/afternoon.md:5
+#: src/generics/data-types.md:19 src/generics/methods.md:23
+#: src/traits/trait-objects.md:70 src/traits/default-methods.md:30
+#: src/traits/trait-bounds.md:33 src/traits/impl-trait.md:21
+#: src/traits/iterator.md:30 src/traits/from-iterator.md:15
+#: src/traits/from-into.md:27 src/traits/drop.md:32 src/traits/default.md:38
+#: src/traits/operators.md:24 src/traits/closures.md:23
+#: src/exercises/day-3/morning.md:5 src/error-handling/result.md:25
+#: src/error-handling/try-operator.md:46
+#: src/error-handling/converting-error-types-example.md:48
+#: src/error-handling/deriving-error-enums.md:37
+#: src/error-handling/dynamic-errors.md:34
+#: src/error-handling/error-contexts.md:33 src/unsafe.md:26
+#: src/unsafe/raw-pointers.md:25 src/unsafe/mutable-static-variables.md:30
+#: src/unsafe/unions.md:19 src/unsafe/writing-unsafe-functions.md:31
+#: src/unsafe/extern-functions.md:19 src/unsafe/unsafe-traits.md:28
+#: src/exercises/day-3/afternoon.md:5
+#: src/android/interoperability/with-c/rust.md:81
+#: src/exercises/android/morning.md:10 src/bare-metal/minimal.md:15
+#: src/bare-metal/alloc.md:37 src/bare-metal/microcontrollers.md:23
+#: src/bare-metal/microcontrollers/mmio.md:62
+#: src/bare-metal/microcontrollers/pacs.md:47
+#: src/bare-metal/microcontrollers/hals.md:37
+#: src/bare-metal/microcontrollers/board-support.md:26
+#: src/bare-metal/microcontrollers/type-state.md:30
+#: src/bare-metal/microcontrollers/embedded-hal.md:17
+#: src/bare-metal/microcontrollers/probe-rs.md:14
+#: src/bare-metal/microcontrollers/debugging.md:25
+#: src/bare-metal/microcontrollers/other-projects.md:16
+#: src/exercises/bare-metal/morning.md:5 src/bare-metal/aps.md:7
+#: src/bare-metal/aps/inline-assembly.md:41 src/bare-metal/aps/mmio.md:7
+#: src/bare-metal/aps/uart.md:53 src/bare-metal/aps/uart/traits.md:22
+#: src/bare-metal/aps/better-uart.md:24
+#: src/bare-metal/aps/better-uart/bitflags.md:35
+#: src/bare-metal/aps/better-uart/registers.md:39
+#: src/bare-metal/aps/better-uart/driver.md:62
+#: src/bare-metal/aps/better-uart/using.md:49 src/bare-metal/aps/logging.md:48
+#: src/bare-metal/aps/logging/using.md:44
+#: src/bare-metal/useful-crates/zerocopy.md:43
+#: src/bare-metal/useful-crates/aarch64-paging.md:26
+#: src/bare-metal/useful-crates/buddy_system_allocator.md:24
+#: src/bare-metal/useful-crates/tinyvec.md:21
+#: src/bare-metal/useful-crates/spin.md:21 src/bare-metal/android/vmbase.md:19
+#: src/exercises/bare-metal/afternoon.md:5 src/concurrency/threads.md:28
+#: src/concurrency/scoped-threads.md:35 src/concurrency/channels.md:25
+#: src/concurrency/send-sync.md:18 src/concurrency/send-sync/send.md:11
+#: src/concurrency/send-sync/sync.md:12 src/concurrency/shared_state/arc.md:27
+#: src/concurrency/shared_state/mutex.md:29
+#: src/concurrency/shared_state/example.md:21
+#: src/exercises/concurrency/morning.md:10 src/async/async-await.md:23
+#: src/async/futures.md:30 src/async/runtimes.md:18
+#: src/async/runtimes/tokio.md:31 src/async/tasks.md:51
+#: src/async/channels.md:33 src/async/control-flow/join.md:34
+#: src/async/control-flow/select.md:59
+#: src/async/pitfalls/blocking-executor.md:27 src/async/pitfalls/pin.md:66
+#: src/exercises/concurrency/afternoon.md:11
+#: src/exercises/concurrency/dining-philosophers-async.md:75
msgid ""
msgstr ""
#: src/welcome.md:52
msgid ""
"This is an example of a _speaker note_. We will use these to add additional\n"
-"information to the slides. This could be key points which the instructor should\n"
+"information to the slides. This could be key points which the instructor "
+"should\n"
"cover as well as answers to typical questions which come up in class."
msgstr ""
-"Ceci est un exemple de _note du conférencier_. Nous les utiliserons pour ajouter d'autres\n"
-"informations sur les diapositives. Cela pourrait être des points clés que l'instructeur devrait\n"
+"Ceci est un exemple de _note du conférencier_. Nous les utiliserons pour "
+"ajouter d'autres\n"
+"informations sur les diapositives. Cela pourrait être des points clés que "
+"l'instructeur devrait\n"
"couvrir, ainsi que des réponses aux questions typiques posées en classe."
-#: src/welcome.md:56 src/cargo/rust-ecosystem.md:67 src/cargo/code-samples.md:35 src/cargo/running-locally.md:74 src/welcome-day-1.md:42
-#: src/welcome-day-1/what-is-rust.md:29 src/hello-world.md:40 src/hello-world/small-example.md:44 src/why-rust.md:24 src/why-rust/compile-time.md:35
-#: src/why-rust/runtime.md:22 src/why-rust/modern.md:66 src/basic-syntax/compound-types.md:62 src/basic-syntax/references.md:28
-#: src/basic-syntax/slices.md:36 src/basic-syntax/string-slices.md:44 src/basic-syntax/functions.md:54 src/basic-syntax/rustdoc.md:33
-#: src/exercises/day-1/morning.md:28 src/exercises/day-1/for-loops.md:95 src/basic-syntax/variables.md:20 src/basic-syntax/type-inference.md:48
-#: src/basic-syntax/static-and-const.md:52 src/basic-syntax/scopes-shadowing.md:39 src/memory-management/stack.md:49 src/memory-management/rust.md:18
-#: src/ownership/move-semantics.md:26 src/ownership/moves-function-calls.md:26 src/ownership/copy-clone.md:51 src/ownership/borrowing.md:51
-#: src/ownership/shared-unique-borrows.md:29 src/ownership/lifetimes-function-calls.md:60 src/ownership/lifetimes-data-structures.md:30
-#: src/exercises/day-1/afternoon.md:15 src/exercises/day-1/book-library.md:106 src/structs.md:41 src/structs/tuple-structs.md:43
-#: src/structs/field-shorthand.md:72 src/enums.md:41 src/enums/variant-payloads.md:45 src/enums/sizes.md:155 src/methods.md:41
-#: src/methods/receiver.md:29 src/methods/example.md:53 src/pattern-matching.md:35 src/pattern-matching/destructuring-enums.md:39
-#: src/pattern-matching/destructuring-structs.md:25 src/pattern-matching/destructuring-arrays.md:46 src/pattern-matching/match-guards.md:28
-#: src/exercises/day-2/morning.md:15 src/exercises/day-2/points-polygons.md:125 src/control-flow/blocks.md:46 src/control-flow/if-expressions.md:33
-#: src/control-flow/if-let-expressions.md:39 src/control-flow/while-let-expressions.md:30 src/control-flow/for-expressions.md:29
-#: src/control-flow/loop-expressions.md:27 src/control-flow/match-expressions.md:32 src/std.md:31 src/std/option-result.md:25 src/std/string.md:40
-#: src/std/vec.md:49 src/std/hashmap.md:66 src/std/box.md:39 src/std/box-recursive.md:41 src/std/rc.md:69 src/modules.md:32
-#: src/modules/visibility.md:48 src/modules/filesystem.md:67 src/exercises/day-2/afternoon.md:11 src/generics/data-types.md:25
-#: src/generics/methods.md:31 src/traits/trait-objects.md:83 src/traits/default-methods.md:41 src/traits/trait-bounds.md:50 src/traits/impl-trait.md:44
-#: src/traits/iterator.md:42 src/traits/from-iterator.md:26 src/traits/from-into.md:33 src/traits/drop.md:42 src/traits/default.md:47
-#: src/traits/operators.md:38 src/traits/closures.md:38 src/exercises/day-3/morning.md:11 src/error-handling/result.md:33
-#: src/error-handling/try-operator.md:55 src/error-handling/converting-error-types-example.md:60 src/error-handling/deriving-error-enums.md:45
-#: src/error-handling/dynamic-errors.md:41 src/error-handling/error-contexts.md:42 src/unsafe.md:32 src/unsafe/raw-pointers.md:42
-#: src/unsafe/mutable-static-variables.md:35 src/unsafe/unions.md:28 src/unsafe/writing-unsafe-functions.md:38 src/unsafe/extern-functions.md:28
-#: src/unsafe/unsafe-traits.md:37 src/exercises/day-3/afternoon.md:11 src/welcome-day-4.md:11 src/concurrency/threads.md:45
-#: src/concurrency/scoped-threads.md:40 src/concurrency/channels.md:32 src/concurrency/shared_state/arc.md:38 src/concurrency/shared_state/mutex.md:45
-#: src/concurrency/shared_state/example.md:56 src/concurrency/send-sync.md:23 src/concurrency/send-sync/sync.md:18 src/exercises/day-4/morning.md:16
-#: src/android/interoperability/with-c/rust.md:86 src/exercises/day-4/android.md:15 src/bare-metal/no_std.md:65 src/bare-metal/minimal.md:26
-#: src/bare-metal/alloc.md:48 src/bare-metal/microcontrollers.md:29 src/bare-metal/microcontrollers/mmio.md:72
-#: src/bare-metal/microcontrollers/pacs.md:65 src/bare-metal/microcontrollers/hals.md:49 src/bare-metal/microcontrollers/board-support.md:40
-#: src/bare-metal/microcontrollers/type-state.md:43 src/bare-metal/microcontrollers/embedded-hal.md:23 src/bare-metal/microcontrollers/probe-rs.md:29
-#: src/bare-metal/microcontrollers/debugging.md:38 src/bare-metal/microcontrollers/other-projects.md:26 src/exercises/bare-metal/morning.md:11
-#: src/bare-metal/aps.md:15 src/bare-metal/aps/inline-assembly.md:58 src/bare-metal/aps/mmio.md:17 src/bare-metal/aps/uart/traits.md:27
-#: src/bare-metal/aps/better-uart.md:28 src/bare-metal/aps/better-uart/bitflags.md:40 src/bare-metal/aps/better-uart/registers.md:46
-#: src/bare-metal/aps/better-uart/driver.md:67 src/bare-metal/aps/better-uart/using.md:53 src/bare-metal/aps/logging.md:52
-#: src/bare-metal/aps/logging/using.md:48 src/bare-metal/useful-crates/zerocopy.md:53 src/bare-metal/useful-crates/aarch64-paging.md:33
-#: src/bare-metal/useful-crates/buddy_system_allocator.md:30 src/bare-metal/useful-crates/tinyvec.md:26 src/bare-metal/useful-crates/spin.md:30
-#: src/bare-metal/android/vmbase.md:25 src/exercises/bare-metal/afternoon.md:11
+#: src/welcome.md:56 src/cargo/rust-ecosystem.md:67
+#: src/cargo/code-samples.md:35 src/cargo/running-locally.md:74
+#: src/welcome-day-1.md:42 src/welcome-day-1/what-is-rust.md:29
+#: src/hello-world.md:40 src/hello-world/small-example.md:44 src/why-rust.md:24
+#: src/why-rust/compile-time.md:35 src/why-rust/runtime.md:22
+#: src/why-rust/modern.md:66 src/basic-syntax/scalar-types.md:43
+#: src/basic-syntax/compound-types.md:62 src/basic-syntax/references.md:29
+#: src/basic-syntax/slices.md:36 src/basic-syntax/string-slices.md:44
+#: src/basic-syntax/functions.md:41 src/basic-syntax/rustdoc.md:33
+#: src/basic-syntax/methods.md:45 src/basic-syntax/functions-interlude.md:30
+#: src/exercises/day-1/morning.md:28 src/exercises/day-1/for-loops.md:95
+#: src/basic-syntax/variables.md:20 src/basic-syntax/type-inference.md:48
+#: src/basic-syntax/static-and-const.md:52
+#: src/basic-syntax/scopes-shadowing.md:39 src/memory-management/stack.md:49
+#: src/memory-management/rust.md:18 src/ownership/move-semantics.md:26
+#: src/ownership/moves-function-calls.md:26 src/ownership/copy-clone.md:51
+#: src/ownership/borrowing.md:51 src/ownership/shared-unique-borrows.md:29
+#: src/ownership/lifetimes-function-calls.md:60
+#: src/ownership/lifetimes-data-structures.md:30
+#: src/exercises/day-1/afternoon.md:15 src/exercises/day-1/book-library.md:104
+#: src/structs.md:42 src/structs/tuple-structs.md:43
+#: src/structs/field-shorthand.md:72 src/enums.md:41
+#: src/enums/variant-payloads.md:45 src/enums/sizes.md:155 src/methods.md:41
+#: src/methods/receiver.md:28 src/methods/example.md:53
+#: src/pattern-matching.md:35 src/pattern-matching/destructuring-enums.md:39
+#: src/pattern-matching/destructuring-structs.md:29
+#: src/pattern-matching/destructuring-arrays.md:46
+#: src/pattern-matching/match-guards.md:28 src/exercises/day-2/morning.md:15
+#: src/exercises/day-2/points-polygons.md:125 src/control-flow/blocks.md:46
+#: src/control-flow/if-expressions.md:37
+#: src/control-flow/if-let-expressions.md:41
+#: src/control-flow/while-let-expressions.md:29
+#: src/control-flow/for-expressions.md:30
+#: src/control-flow/loop-expressions.md:32
+#: src/control-flow/match-expressions.md:33 src/std.md:31
+#: src/std/option-result.md:25 src/std/string.md:42 src/std/vec.md:49
+#: src/std/hashmap.md:66 src/std/box.md:39 src/std/box-recursive.md:41
+#: src/std/rc.md:69 src/modules.md:32 src/modules/visibility.md:48
+#: src/modules/filesystem.md:71 src/exercises/day-2/afternoon.md:11
+#: src/generics/data-types.md:25 src/generics/methods.md:31
+#: src/traits/trait-objects.md:83 src/traits/default-methods.md:60
+#: src/traits/trait-bounds.md:50 src/traits/impl-trait.md:44
+#: src/traits/iterator.md:42 src/traits/from-iterator.md:26
+#: src/traits/from-into.md:33 src/traits/drop.md:42 src/traits/default.md:47
+#: src/traits/operators.md:40 src/traits/closures.md:38
+#: src/exercises/day-3/morning.md:11 src/error-handling/result.md:33
+#: src/error-handling/try-operator.md:53
+#: src/error-handling/converting-error-types-example.md:60
+#: src/error-handling/deriving-error-enums.md:45
+#: src/error-handling/dynamic-errors.md:41
+#: src/error-handling/error-contexts.md:42 src/unsafe.md:32
+#: src/unsafe/raw-pointers.md:43 src/unsafe/mutable-static-variables.md:35
+#: src/unsafe/unions.md:28 src/unsafe/writing-unsafe-functions.md:38
+#: src/unsafe/extern-functions.md:28 src/unsafe/unsafe-traits.md:37
+#: src/exercises/day-3/afternoon.md:11
+#: src/android/interoperability/with-c/rust.md:86
+#: src/exercises/android/morning.md:15 src/bare-metal/no_std.md:65
+#: src/bare-metal/minimal.md:26 src/bare-metal/alloc.md:49
+#: src/bare-metal/microcontrollers.md:29
+#: src/bare-metal/microcontrollers/mmio.md:72
+#: src/bare-metal/microcontrollers/pacs.md:65
+#: src/bare-metal/microcontrollers/hals.md:49
+#: src/bare-metal/microcontrollers/board-support.md:40
+#: src/bare-metal/microcontrollers/type-state.md:43
+#: src/bare-metal/microcontrollers/embedded-hal.md:23
+#: src/bare-metal/microcontrollers/probe-rs.md:29
+#: src/bare-metal/microcontrollers/debugging.md:38
+#: src/bare-metal/microcontrollers/other-projects.md:26
+#: src/exercises/bare-metal/morning.md:11 src/bare-metal/aps.md:15
+#: src/bare-metal/aps/inline-assembly.md:58 src/bare-metal/aps/mmio.md:17
+#: src/bare-metal/aps/uart/traits.md:27 src/bare-metal/aps/better-uart.md:28
+#: src/bare-metal/aps/better-uart/bitflags.md:40
+#: src/bare-metal/aps/better-uart/registers.md:46
+#: src/bare-metal/aps/better-uart/driver.md:67
+#: src/bare-metal/aps/better-uart/using.md:55 src/bare-metal/aps/logging.md:52
+#: src/bare-metal/aps/logging/using.md:49
+#: src/bare-metal/useful-crates/zerocopy.md:53
+#: src/bare-metal/useful-crates/aarch64-paging.md:33
+#: src/bare-metal/useful-crates/buddy_system_allocator.md:30
+#: src/bare-metal/useful-crates/tinyvec.md:26
+#: src/bare-metal/useful-crates/spin.md:30 src/bare-metal/android/vmbase.md:25
+#: src/exercises/bare-metal/afternoon.md:11 src/concurrency/threads.md:45
+#: src/concurrency/scoped-threads.md:40 src/concurrency/channels.md:32
+#: src/concurrency/send-sync.md:23 src/concurrency/send-sync/send.md:16
+#: src/concurrency/send-sync/sync.md:18 src/concurrency/shared_state/arc.md:38
+#: src/concurrency/shared_state/mutex.md:45
+#: src/concurrency/shared_state/example.md:56
+#: src/exercises/concurrency/morning.md:16 src/async/async-await.md:48
+#: src/async/futures.md:45 src/async/runtimes.md:29
+#: src/async/runtimes/tokio.md:49 src/async/tasks.md:64
+#: src/async/channels.md:49 src/async/control-flow/join.md:50
+#: src/async/control-flow/select.md:77
+#: src/async/pitfalls/blocking-executor.md:50 src/async/pitfalls/pin.md:112
+#: src/async/pitfalls/async-traits.md:63
+#: src/exercises/concurrency/afternoon.md:17
+#: src/exercises/concurrency/dining-philosophers-async.md:79
msgid ""
msgstr ""
@@ -1187,16 +1396,18 @@ msgstr ""
msgid "# Running the Course"
msgstr "# Exécution du parcours"
-#: src/running-the-course.md:3 src/running-the-course/course-structure.md:3 src/running-the-course/day-4.md:3
+#: src/running-the-course.md:3 src/running-the-course/course-structure.md:3
msgid "> This page is for the course instructor."
msgstr "> Cette page est destinée au formateur."
#: src/running-the-course.md:5
msgid ""
-"Here is a bit of background information about how we've been running the course\n"
+"Here is a bit of background information about how we've been running the "
+"course\n"
"internally at Google."
msgstr ""
-"Voici quelques informations générales sur la façon dont nous avons organisé le cours\n"
+"Voici quelques informations générales sur la façon dont nous avons organisé "
+"le cours\n"
"en interne chez Google."
#: src/running-the-course.md:8
@@ -1204,96 +1415,137 @@ msgid "Before you run the course, you will want to:"
msgstr "Avant de suivre le cours, vous voudriez :"
#: src/running-the-course.md:10
+#, fuzzy
msgid ""
-"1. Make yourself familiar with the course material. We've included speaker notes\n"
-" to help highlight the key points (please help us by contributing more speaker\n"
-" notes!). When presenting, you should make sure to open the speaker notes in a\n"
-" popup (click the link with a little arrow next to \"Speaker Notes\"). This way\n"
+"1. Make yourself familiar with the course material. We've included speaker "
+"notes\n"
+" to help highlight the key points (please help us by contributing more "
+"speaker\n"
+" notes!). When presenting, you should make sure to open the speaker notes "
+"in a\n"
+" popup (click the link with a little arrow next to \"Speaker Notes\"). "
+"This way\n"
" you have a clean screen to present to the class.\n"
"\n"
-"1. Select your topic for the afternoon of the fourth day. This may be based on\n"
-" the audience you expect, or on your own expertise.\n"
-"\n"
-"1. Decide on the dates. Since the course is large, we recommend that you\n"
-" schedule the four days over two weeks. Course participants have said that\n"
-" they find it helpful to have a gap in the course since it helps them process\n"
+"1. Decide on the dates. Since the course takes at least three full days, we "
+"recommend that you\n"
+" schedule the days over two weeks. Course participants have said that\n"
+" they find it helpful to have a gap in the course since it helps them "
+"process\n"
" all the information we give them.\n"
"\n"
"1. Find a room large enough for your in-person participants. We recommend a\n"
-" class size of 15-20 people. That's small enough that people are comfortable\n"
-" asking questions --- it's also small enough that one instructor will have\n"
-" time to answer the questions. Make sure the room has _desks_ for yourself and for the\n"
-" students: you will all need to be able to sit and work with your laptops.\n"
-" In particular, you will be doing a lot of live-coding as an instructor, so a lectern won't\n"
+" class size of 15-25 people. That's small enough that people are "
+"comfortable\n"
+" asking questions --- it's also small enough that one instructor will "
+"have\n"
+" time to answer the questions. Make sure the room has _desks_ for yourself "
+"and for the\n"
+" students: you will all need to be able to sit and work with your "
+"laptops.\n"
+" In particular, you will be doing a lot of live-coding as an instructor, "
+"so a lectern won't\n"
" be very helpful for you.\n"
"\n"
-"1. On the day of your course, show up to the room a little early to set things\n"
-" up. We recommend presenting directly using `mdbook serve` running on your\n"
-" laptop (see the [installation instructions][3]). This ensures optimal performance with no lag as you change pages.\n"
+"1. On the day of your course, show up to the room a little early to set "
+"things\n"
+" up. We recommend presenting directly using `mdbook serve` running on "
+"your\n"
+" laptop (see the [installation instructions][3]). This ensures optimal "
+"performance with no lag as you change pages.\n"
" Using your laptop will also allow you to fix typos as you or the course\n"
" participants spot them.\n"
"\n"
-"1. Let people solve the exercises by themselves or in small groups. Make sure to\n"
-" ask people if they're stuck or if there is anything you can help with. When\n"
-" you see that several people have the same problem, call it out to the class\n"
+"1. Let people solve the exercises by themselves or in small groups.\n"
+" We typically spend 30-45 minutes on exercises in the morning and in the "
+"afternoon (including time to review the solutions).\n"
+" Make sure to\n"
+" ask people if they're stuck or if there is anything you can help with. "
+"When\n"
+" you see that several people have the same problem, call it out to the "
+"class\n"
" and offer a solution, e.g., by showing people where to find the relevant\n"
-" information in the standard library.\n"
-"\n"
-"1. Prepare anything you need to have available for the afternoon of day 4."
+" information in the standard library."
msgstr ""
-"1. Familiarisez-vous avec le matériel de cours. Nous avons inclus les notes du conférencier\n"
-" pour aider à mettre en évidence les points clés (veuillez nous aider en contribuant à plus de\n"
-" remarques!). Lors de la présentation, vous devez vous assurer d'ouvrir les notes du présentateur dans un\n"
-" popup (cliquez sur le lien avec une petite flèche à côté de \"Notes du conférencier\"). Ainsi,\n"
+"1. Familiarisez-vous avec le matériel de cours. Nous avons inclus les notes "
+"du conférencier\n"
+" pour aider à mettre en évidence les points clés (veuillez nous aider en "
+"contribuant à plus de\n"
+" remarques!). Lors de la présentation, vous devez vous assurer d'ouvrir "
+"les notes du présentateur dans un\n"
+" popup (cliquez sur le lien avec une petite flèche à côté de \"Notes du "
+"conférencier\"). Ainsi,\n"
" vous avez un écran propre à présenter à la classe.\n"
"\n"
-"1. Sélectionnez votre sujet pour l'après-midi du quatrième jour. Cela peut être basé sur\n"
+"1. Sélectionnez votre sujet pour l'après-midi du quatrième jour. Cela peut "
+"être basé sur\n"
" le public que vous attendez, ou sur votre propre expertise.\n"
"\n"
-"1. Décidez des dates. Comme le parcours est vaste, nous vous recommandons de\n"
-" répartir les quatre jours sur deux semaines. Les participants au cours ont dit\n"
-" qu'ils trouvent utile d'avoir une pause dans le cours, car cela les aide à traiter\n"
+"1. Décidez des dates. Comme le parcours est vaste, nous vous recommandons "
+"de\n"
+" répartir les quatre jours sur deux semaines. Les participants au cours "
+"ont dit\n"
+" qu'ils trouvent utile d'avoir une pause dans le cours, car cela les aide "
+"à traiter\n"
" toutes les informations que nous leur donnons.\n"
"\n"
-"1. Trouvez une salle suffisamment grande pour vos participants en personne. Nous recommandons un\n"
-" classe de 15 à 20 personnes. C'est assez petit pour que les gens soient à l'aise pour\n"
-" poser des questions --- c'est aussi assez petit pour qu'un instructeur ait\n"
-" le temps de répondre aux questions. Assurez-vous que la salle dispose de _bureaux_ pour vous et pour les\n"
-" étudiants : vous devriez tous pouvoir vous asseoir et travailler avec vos ordinateurs portables.\n"
-" En particulier, vous ferez beaucoup de programmation en direct en tant qu'instructeur, donc un pupitre\n"
+"1. Trouvez une salle suffisamment grande pour vos participants en personne. "
+"Nous recommandons un\n"
+" classe de 15 à 20 personnes. C'est assez petit pour que les gens soient à "
+"l'aise pour\n"
+" poser des questions --- c'est aussi assez petit pour qu'un instructeur "
+"ait\n"
+" le temps de répondre aux questions. Assurez-vous que la salle dispose de "
+"_bureaux_ pour vous et pour les\n"
+" étudiants : vous devriez tous pouvoir vous asseoir et travailler avec vos "
+"ordinateurs portables.\n"
+" En particulier, vous ferez beaucoup de programmation en direct en tant "
+"qu'instructeur, donc un pupitre\n"
" ne sera pas très utile pour vous.\n"
"\n"
-"1. Le jour de votre cours, présentez-vous à la salle un peu en avance pour préparer les choses.\n"
-" Nous vous recommandons de présenter directement en utilisant `mdbook serve` exécuté sur votre\n"
-" ordinateur portable (voir les [instructions d'installation][3]). Cela garantit des performances optimales\n"
+"1. Le jour de votre cours, présentez-vous à la salle un peu en avance pour "
+"préparer les choses.\n"
+" Nous vous recommandons de présenter directement en utilisant `mdbook "
+"serve` exécuté sur votre\n"
+" ordinateur portable (voir les [instructions d'installation][3]). Cela "
+"garantit des performances optimales\n"
" sans décalage lorsque vous changez de page.\n"
-" L'utilisation de votre ordinateur portable vous permettra également de corriger les fautes de frappe lorsque que vous ou\n"
+" L'utilisation de votre ordinateur portable vous permettra également de "
+"corriger les fautes de frappe lorsque que vous ou\n"
" les participants les repèrent.\n"
"\n"
-"1. Laissez les participants résoudre les exercices seuls ou en petits groupes. Assurez-vous de\n"
-" demandez aux gens s'ils sont coincés ou s'il y a quelque chose où vous pouvez aider. Quand\n"
-" vous voyez que plusieurs personnes ont le même problème, dites-le à la classe\n"
-" et proposez une solution, par exemple en montrant aux gens où trouver les\n"
+"1. Laissez les participants résoudre les exercices seuls ou en petits "
+"groupes. Assurez-vous de\n"
+" demandez aux gens s'ils sont coincés ou s'il y a quelque chose où vous "
+"pouvez aider. Quand\n"
+" vous voyez que plusieurs personnes ont le même problème, dites-le à la "
+"classe\n"
+" et proposez une solution, par exemple en montrant aux gens où trouver "
+"les\n"
" informations dans la bibliothèque standard.\n"
"\n"
"1. Préparez tout ce dont vous avez besoin pour l'après-midi du jour 4."
-#: src/running-the-course.md:46
+#: src/running-the-course.md:43
msgid ""
-"That is all, good luck running the course! We hope it will be as much fun for\n"
+"That is all, good luck running the course! We hope it will be as much fun "
+"for\n"
"you as it has been for us!"
msgstr ""
-"C'est tout, bonne chance pour suivre le cours ! Nous espérons que ce sera aussi amusant pour\n"
+"C'est tout, bonne chance pour suivre le cours ! Nous espérons que ce sera "
+"aussi amusant pour\n"
"vous comme il l'a été pour nous !"
-#: src/running-the-course.md:49
+#: src/running-the-course.md:46
msgid ""
"Please [provide feedback][1] afterwards so that we can keep improving the\n"
"course. We would love to hear what worked well for you and what can be made\n"
"better. Your students are also very welcome to [send us feedback][2]!"
msgstr ""
-"Veuillez [fournir des commentaires][1] par la suite afin que nous puissions continuer à améliorer le\n"
-"cours. Nous aimerions savoir ce qui a bien fonctionné pour vous et ce qui peut être mieux fait.\n"
+"Veuillez [fournir des commentaires][1] par la suite afin que nous puissions "
+"continuer à améliorer le\n"
+"cours. Nous aimerions savoir ce qui a bien fonctionné pour vous et ce qui "
+"peut être mieux fait.\n"
"Vos élèves sont également les bienvenus pour [envoyer des commentaires][2] !"
#: src/running-the-course/course-structure.md:1
@@ -1305,22 +1557,134 @@ msgid "The course is fast paced and covers a lot of ground:"
msgstr "Le cours est rapide et couvre beaucoup de terrain:"
#: src/running-the-course/course-structure.md:7
+#, fuzzy
msgid ""
"* Day 1: Basic Rust, ownership and the borrow checker.\n"
"* Day 2: Compound data types, pattern matching, the standard library.\n"
-"* Day 3: Traits and generics, error handling, testing, unsafe Rust.\n"
-"* Day 4: Concurrency in Rust and seeing Rust in action."
+"* Day 3: Traits and generics, error handling, testing, unsafe Rust."
msgstr ""
"* Jour 1 : Rust de base, propriété et vérificateur d'emprunt.\n"
-"* Jour 2 : Types de données composés, filtrage de motifs, bibliothèque standard.\n"
-"* Jour 3 : Caractéristiques et génériques, gestion des erreurs, tests, Rust risqué.\n"
+"* Jour 2 : Types de données composés, filtrage de motifs, bibliothèque "
+"standard.\n"
+"* Jour 3 : Caractéristiques et génériques, gestion des erreurs, tests, Rust "
+"risqué.\n"
"* Jour 4 : Concurrence avec Rust et voir Rust en action."
-#: src/running-the-course/course-structure.md:12
+#: src/running-the-course/course-structure.md:11
+msgid "## Deep Dives"
+msgstr ""
+
+#: src/running-the-course/course-structure.md:13
+msgid ""
+"In addition to the 3-day class on Rust Fundamentals, we cover some more\n"
+"specialized topics:"
+msgstr ""
+
+#: src/running-the-course/course-structure.md:16
+#, fuzzy
+msgid "### Android"
+msgstr "## Android"
+
+#: src/running-the-course/course-structure.md:18
+msgid ""
+"The [Android Deep Dive](../android.md) is a half-day course on using Rust "
+"for\n"
+"Android platform development. This includes interoperability with C, C++, "
+"and\n"
+"Java."
+msgstr ""
+
+#: src/running-the-course/course-structure.md:22
+#, fuzzy
+msgid ""
+"You will need an [AOSP checkout][1]. Make a checkout of the [course\n"
+"repository][2] on the same machine and move the `src/android/` directory "
+"into\n"
+"the root of your AOSP checkout. This will ensure that the Android build "
+"system\n"
+"sees the `Android.bp` files in `src/android/`."
+msgstr ""
+"Si vous avez choisi Android pour l'après-midi du jour 4, vous aurez besoin "
+"d'un [AOSP checkout][1].\n"
+"Effectuez un checkout du [répertoire du cours][2] sur la même machine et "
+"déplacez le dossier\n"
+"`src/android/` à la racine de votre checkout AOSP. Cela assurera\n"
+"que le système de construction d'Android voit les fichiers `Android.bp` dans "
+"`src/android/`."
+
+#: src/running-the-course/course-structure.md:27
+#, fuzzy
+msgid ""
+"Ensure that `adb sync` works with your emulator or real device and pre-build "
+"all\n"
+"Android examples using `src/android/build_all.sh`. Read the script to see "
+"the\n"
+"commands it runs and make sure they work when you run them by hand."
+msgstr ""
+"Assurez-vous que `adb sync` fonctionne avec votre émulateur ou votre "
+"appareil réel et pré-construisez\n"
+"tous les exemples Android en utilisant `src/android/build_all.sh`. Lisez le "
+"script pour voir\n"
+"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:36
+msgid ""
+"The [Bare-Metal Deep Dive](../bare-metal.md): a full day class on using Rust "
+"for\n"
+"bare-metal (embedded) development. Both microcontrollers and application\n"
+"processors are covered."
+msgstr ""
+
+#: src/running-the-course/course-structure.md:40
+msgid ""
+"For the microcontroller part, you will need to buy the [BBC\n"
+"micro:bit](https://microbit.org/) v2 development board ahead of time. "
+"Everybody\n"
+"will need to install a number of packages as described on the [welcome\n"
+"page](../bare-metal.md)."
+msgstr ""
+
+#: src/running-the-course/course-structure.md:45
+#, 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\n"
+"as well as `async`/`await` concurrency."
+msgstr ""
+
+#: src/running-the-course/course-structure.md:50
+msgid ""
+"You will need a fresh crate set up and the dependencies downloaded and ready "
+"to\n"
+"go. You can then copy/paste the examples into `src/main.rs` to experiment "
+"with\n"
+"them:"
+msgstr ""
+
+#: src/running-the-course/course-structure.md:54
+msgid ""
+"```shell\n"
+"cargo init concurrency\n"
+"cd concurrency\n"
+"cargo add tokio --features full\n"
+"cargo run\n"
+"```"
+msgstr ""
+
+#: src/running-the-course/course-structure.md:61
msgid "## Format"
msgstr "##Format"
-#: src/running-the-course/course-structure.md:14
+#: src/running-the-course/course-structure.md:63
msgid ""
"The course is meant to be very interactive and we recommend letting the\n"
"questions drive the exploration of Rust!"
@@ -1328,60 +1692,6 @@ msgstr ""
"Le cours se veut très interactif et nous recommandons de laisser les\n"
"questions guider l'exploration de Rust !"
-#: src/running-the-course/day-4.md:1
-msgid "# Day 4"
-msgstr "# Jour 4"
-
-#: src/running-the-course/day-4.md:5
-msgid ""
-"The afternoon of the fourth day should cover a topic of your choice. Include\n"
-"the topic in the announcement of the course, so that participants know what to\n"
-"expect."
-msgstr ""
-"L'après-midi du quatrième jour devrait couvrir un sujet de votre choix. Ajoutez\n"
-"le sujet dans l'annonce du cours, afin que les participants sachent à quoi\n"
-"s'attendre."
-
-#: src/running-the-course/day-4.md:9
-msgid ""
-"This phase of the course is a chance for participants to see Rust in action on a\n"
-"codebase they might be familiar with. You can choose from the topics already\n"
-"defined here, or plan your own."
-msgstr ""
-"Cette phase du cours est une chance pour les participants de voir Rust en action sur une\n"
-"base de code qu'ils connaissent peut-être. Vous pouvez déjà choisir parmi les sujets\n"
-"définis ici, ou planifiez le vôtre."
-
-#: src/running-the-course/day-4.md:13
-msgid "Some topics need additional preparation:"
-msgstr "Certains sujets nécessitent une préparation supplémentaire :"
-
-#: src/running-the-course/day-4.md:15
-msgid "## Android"
-msgstr "## Android"
-
-#: src/running-the-course/day-4.md:17
-msgid ""
-"If you chose Android for Day 4 afternoon, you will need an [AOSP checkout][1].\n"
-"Make a checkout of the [course repository][2] on the same machine and move the\n"
-"`src/android/` directory into the root of your AOSP checkout. This will ensure\n"
-"that the Android build system sees the `Android.bp` files in `src/android/`."
-msgstr ""
-"Si vous avez choisi Android pour l'après-midi du jour 4, vous aurez besoin d'un [AOSP checkout][1].\n"
-"Effectuez un checkout du [répertoire du cours][2] sur la même machine et déplacez le dossier\n"
-"`src/android/` à la racine de votre checkout AOSP. Cela assurera\n"
-"que le système de construction d'Android voit les fichiers `Android.bp` dans `src/android/`."
-
-#: src/running-the-course/day-4.md:22
-msgid ""
-"Ensure that `adb sync` works with your emulator or real device and pre-build\n"
-"all Android examples using `src/android/build_all.sh`. Read the script to see\n"
-"the commands it runs and make sure they work when you run them by hand."
-msgstr ""
-"Assurez-vous que `adb sync` fonctionne avec votre émulateur ou votre appareil réel et pré-construisez\n"
-"tous les exemples Android en utilisant `src/android/build_all.sh`. Lisez le script pour voir\n"
-"les commandes éxécutées et assurez-vous qu'elles fonctionnent lorsque vous les exécutez à la main."
-
#: src/running-the-course/keyboard-shortcuts.md:1
msgid "# Keyboard Shortcuts"
msgstr "# Raccourcis clavier"
@@ -1423,15 +1733,38 @@ msgstr ""
"* [coréen][ko] par [@keispace], [@jiyongp] et [@jooyunghan]."
#: src/running-the-course/translations.md:9
-msgid "Use the language picker in the top-right corner to switch between languages."
-msgstr "Utilisez le sélecteur de langue dans le coin supérieur droit pour basculer entre les langues."
+msgid ""
+"Use the language picker in the top-right corner to switch between languages."
+msgstr ""
+"Utilisez le sélecteur de langue dans le coin supérieur droit pour basculer "
+"entre les langues."
#: src/running-the-course/translations.md:11
+#, fuzzy
+msgid "## Incomplete Translations"
+msgstr "# Traductions"
+
+#: src/running-the-course/translations.md:13
msgid ""
-"If you want to help with this effort, please see [our instructions] for how to\n"
+"There is a large number of in-progress translations. We link to the most\n"
+"recently updated translations:"
+msgstr ""
+
+#: src/running-the-course/translations.md:16
+msgid ""
+"* [French][fr] by [@KookaS] and [@vcaen].\n"
+"* [German][de] by [@Throvn] and [@ronaldfw].\n"
+"* [Japanese][ja] by [@CoinEZ-JPN] and [@momotaro1105]."
+msgstr ""
+
+#: src/running-the-course/translations.md:20
+msgid ""
+"If you want to help with this effort, please see [our instructions] for how "
+"to\n"
"get going. Translations are coordinated on the [issue tracker]."
msgstr ""
-"Si vous souhaitez contribuer à cet effort, veuillez consulter [nos instructions] pour savoir comment\n"
+"Si vous souhaitez contribuer à cet effort, veuillez consulter [nos "
+"instructions] pour savoir comment\n"
"se lancer. Les traductions sont coordonnées sur le [traqueur de problèmes]."
#: src/cargo.md:1
@@ -1440,14 +1773,20 @@ msgstr "# Utiliser Cargo"
#: src/cargo.md:3
msgid ""
-"When you start reading about Rust, you will soon meet [Cargo](https://doc.rust-lang.org/cargo/), the standard tool\n"
-"used in the Rust ecosystem to build and run Rust applications. Here we want to\n"
-"give a brief overview of what Cargo is and how it fits into the wider ecosystem\n"
+"When you start reading about Rust, you will soon meet [Cargo](https://doc."
+"rust-lang.org/cargo/), the standard tool\n"
+"used in the Rust ecosystem to build and run Rust applications. Here we want "
+"to\n"
+"give a brief overview of what Cargo is and how it fits into the wider "
+"ecosystem\n"
"and how it fits into this training."
msgstr ""
-"Lorsque vous commencerez à lire sur Rust, vous rencontrerez bientôt [Cargo](https://doc.rust-lang.org/cargo/), l'outil standard\n"
-"utilisé dans l'écosystème Rust pour créer et exécuter des applications Rust. Ici, nous voulons\n"
-"donner un bref aperçu de ce qu'est Cargo et comment il s'intègre dans le large écosystème\n"
+"Lorsque vous commencerez à lire sur Rust, vous rencontrerez bientôt [Cargo]"
+"(https://doc.rust-lang.org/cargo/), l'outil standard\n"
+"utilisé dans l'écosystème Rust pour créer et exécuter des applications Rust. "
+"Ici, nous voulons\n"
+"donner un bref aperçu de ce qu'est Cargo et comment il s'intègre dans le "
+"large écosystème\n"
"et comment cela s'inscrit dans cette formation."
#: src/cargo.md:8
@@ -1460,18 +1799,22 @@ msgstr "### Rustup (recommandé)"
#: src/cargo.md:12
msgid ""
-"You can follow the instructions to install cargo and rust compiler, among other standard ecosystem tools with the [rustup][3] tool, which is "
+"You can follow the instructions to install cargo and rust compiler, among "
+"other standard ecosystem tools with the [rustup][3] tool, which is "
"maintained by the Rust Foundation."
msgstr ""
-"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]"
+"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]"
"[3], 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 "
+"Along with cargo and rustc, Rustup will install itself as a command line "
+"utility that you can use to install/switch toolchains, setup cross "
"compilation, etc."
msgstr ""
-"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 "
+"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
@@ -1483,8 +1826,12 @@ msgid "#### Debian"
msgstr "#### Debian"
#: src/cargo.md:20
-msgid "On Debian/Ubuntu, you can install Cargo, the Rust source and the [Rust formatter][6] with"
-msgstr "Sur Debian/Ubuntu, vous pouvez installer Cargo, la source Rust et le [formateur Rust][6] avec"
+msgid ""
+"On Debian/Ubuntu, you can install Cargo, the Rust source and the [Rust "
+"formatter][6] with"
+msgstr ""
+"Sur Debian/Ubuntu, vous pouvez installer Cargo, la source Rust et le "
+"[formateur Rust][6] avec"
#: src/cargo.md:22
msgid ""
@@ -1495,62 +1842,88 @@ msgstr ""
#: src/cargo.md:26
msgid ""
-"This will allow [rust-analyzer][1] to jump to the definitions. We suggest using\n"
+"This will allow [rust-analyzer][1] to jump to the definitions. We suggest "
+"using\n"
"[VS Code][2] to edit the code (but any LSP compatible editor works)."
msgstr ""
-"Cela permettra à [rust-analyzer][1] de passer directement aux définitions. Nous suggérons d'utiliser\n"
-"[VS Code][2] pour modifier le code (mais tout éditeur LSP compatible fonctionne)."
+"Cela permettra à [rust-analyzer][1] de passer directement aux définitions. "
+"Nous suggérons d'utiliser\n"
+"[VS Code][2] pour modifier le code (mais tout éditeur LSP compatible "
+"fonctionne)."
#: src/cargo.md:29
msgid ""
-"Some folks also like to use the [JetBrains][4] family of IDEs, which do their own analysis but have their own tradeoffs. If you prefer them, you can "
-"install the [Rust Plugin][5]. Please take note that as of January 2023 debugging only works on the CLion version of the JetBrains IDEA suite."
+"Some folks also like to use the [JetBrains][4] family of IDEs, which do "
+"their own analysis but have their own tradeoffs. If you prefer them, you can "
+"install the [Rust Plugin][5]. Please take note that as of January 2023 "
+"debugging only works on the CLion version of the JetBrains IDEA suite."
msgstr ""
-"Certaines personnes aiment également utiliser la famille d'IDE [JetBrains] [4], qui effectuent leur propre analyse mais ont leurs propres compromis. "
-"Si vous les préférez, vous pouvez installer le [Plugin Rust][5]. Veuillez noter qu'à partir de janvier 2023, le débogage ne fonctionne que sur la "
-"version CLion de la suite JetBrains IDEA."
+"Certaines personnes aiment également utiliser la famille d'IDE [JetBrains] "
+"[4], qui effectuent leur propre analyse mais ont leurs propres compromis. Si "
+"vous les préférez, vous pouvez installer le [Plugin Rust][5]. Veuillez noter "
+"qu'à partir de janvier 2023, le débogage ne fonctionne que sur la version "
+"CLion de la suite JetBrains IDEA."
#: src/cargo/rust-ecosystem.md:1
msgid "# The Rust Ecosystem"
msgstr "# L'écosystème de Rust"
#: src/cargo/rust-ecosystem.md:3
-msgid "The Rust ecosystem consists of a number of tools, of which the main ones are:"
-msgstr "L'écosystème de Rust est composé d'un certain nombre d'outils, dont les principaux sont :"
+msgid ""
+"The Rust ecosystem consists of a number of tools, of which the main ones are:"
+msgstr ""
+"L'écosystème de Rust est composé d'un certain nombre d'outils, dont les "
+"principaux sont :"
#: src/cargo/rust-ecosystem.md:5
msgid ""
-"* `rustc`: the Rust compiler which turns `.rs` files into binaries and other\n"
+"* `rustc`: the Rust compiler which turns `.rs` files into binaries and "
+"other\n"
" intermediate formats.\n"
"\n"
"* `cargo`: the Rust dependency manager and build tool. Cargo knows how to\n"
-" download dependencies hosted on and it will pass them to\n"
+" download dependencies hosted on and it will pass them "
+"to\n"
" `rustc` when building your project. Cargo also comes with a built-in test\n"
" runner which is used to execute unit tests.\n"
"\n"
"* `rustup`: the Rust toolchain installer and updater. This tool is used to\n"
-" install and update `rustc` and `cargo` when new versions of Rust is released.\n"
+" install and update `rustc` and `cargo` when new versions of Rust is "
+"released.\n"
" In addition, `rustup` can also download documentation for the standard\n"
-" library. You can have multiple versions of Rust installed at once and `rustup`\n"
+" library. You can have multiple versions of Rust installed at once and "
+"`rustup`\n"
" will let you switch between them as needed."
msgstr ""
-"* `rustc` : le compilateur Rust qui transforme les fichiers `.rs` en binaires et autres\n"
+"* `rustc` : le compilateur Rust qui transforme les fichiers `.rs` en "
+"binaires et autres\n"
" formats intermédiaires.\n"
"\n"
-"* `cargo` : le gestionnaire de dépendances Rust et l'outil de construction. Cargo sait comment\n"
-" télécharger les dépendances hébergées sur et il les transmettra à\n"
-" `rustc` lors de la construction de votre projet. Cargo est également livré avec un exécuteur de test\n"
+"* `cargo` : le gestionnaire de dépendances Rust et l'outil de construction. "
+"Cargo sait comment\n"
+" télécharger les dépendances hébergées sur et il les "
+"transmettra à\n"
+" `rustc` lors de la construction de votre projet. Cargo est également livré "
+"avec un exécuteur de test\n"
" qui est utilisé pour exécuter des tests unitaires.\n"
"\n"
-"* `rustup` : le programme d'installation et de mise à jour de la chaîne d'outils Rust. Cet outil sert à\n"
-" installer et mettez à jour `rustc` et `cargo` lorsque de nouvelles versions de Rust sont publiées.\n"
+"* `rustup` : le programme d'installation et de mise à jour de la chaîne "
+"d'outils Rust. Cet outil sert à\n"
+" installer et mettez à jour `rustc` et `cargo` lorsque de nouvelles "
+"versions de Rust sont publiées.\n"
" De plus, `rustup` peut également télécharger la documentation de la \n"
-" bibliothèque standard. Vous pouvez avoir plusieurs versions de Rust installées à la fois et `rustup`\n"
+" bibliothèque standard. Vous pouvez avoir plusieurs versions de Rust "
+"installées à la fois et `rustup`\n"
" vous permettra de basculer entre elles au besoin."
-#: src/cargo/rust-ecosystem.md:21 src/hello-world.md:25 src/hello-world/small-example.md:27 src/why-rust/runtime.md:10 src/why-rust/modern.md:21
-#: src/basic-syntax/compound-types.md:30 src/pattern-matching/destructuring-enums.md:35 src/error-handling/try-operator.md:50
-#: src/error-handling/converting-error-types-example.md:50 src/concurrency/threads.md:30
+#: src/cargo/rust-ecosystem.md:21 src/hello-world.md:25
+#: src/hello-world/small-example.md:27 src/why-rust/runtime.md:10
+#: src/why-rust/modern.md:21 src/basic-syntax/compound-types.md:30
+#: src/basic-syntax/references.md:23
+#: src/pattern-matching/destructuring-enums.md:35
+#: src/error-handling/try-operator.md:48
+#: src/error-handling/converting-error-types-example.md:50
+#: src/concurrency/threads.md:30 src/async/async-await.md:25
msgid "Key points:"
msgstr "Points clés:"
@@ -1577,49 +1950,64 @@ msgid ""
" * To avoid splitting the ecosystem, Rust compilers can mix code\n"
" written for different editions.\n"
"\n"
-" * Mention that it is quite rare to ever use the compiler directly not through `cargo` (most users never do).\n"
+" * Mention that it is quite rare to ever use the compiler directly not "
+"through `cargo` (most users never do).\n"
"\n"
-" * It might be worth alluding that Cargo itself is an extremely powerful and comprehensive tool. It is capable of many advanced features including "
+" * It might be worth alluding that Cargo itself is an extremely powerful "
+"and comprehensive tool. It is capable of many advanced features including "
"but not limited to: \n"
" * Project/package structure\n"
" * [workspaces]\n"
" * Dev Dependencies and Runtime Dependency management/caching\n"
" * [build scripting]\n"
" * [global installation]\n"
-" * It is also extensible with sub command plugins as well (such as [cargo clippy]).\n"
+" * It is also extensible with sub command plugins as well (such as "
+"[cargo clippy]).\n"
" * Read more from the [official Cargo Book]"
msgstr ""
-"* Rust a un calendrier de publication rapide avec une nouvelle version qui sort\n"
-" toutes les six semaines. Les nouvelles versions maintiennent la rétrocompatibilité avec les\n"
-" anciennes versions --- en plus, elles activent de nouvelles fonctionnalités.\n"
+"* Rust a un calendrier de publication rapide avec une nouvelle version qui "
+"sort\n"
+" toutes les six semaines. Les nouvelles versions maintiennent la "
+"rétrocompatibilité avec les\n"
+" anciennes versions --- en plus, elles activent de nouvelles "
+"fonctionnalités.\n"
"\n"
"* Il existe trois canaux de sortie : \"stable\", \"beta\" et \"nightly\".\n"
"\n"
-"* De nouvelles fonctionnalités sont testées sur \"nightly\", \"beta\" est ce qui devient\n"
+"* De nouvelles fonctionnalités sont testées sur \"nightly\", \"beta\" est ce "
+"qui devient\n"
" \"stable\" toutes les six semaines.\n"
"\n"
"* Rust a également des [éditions] : l'édition actuelle est Rust 2021.\n"
" Les éditions passées étaient Rust 2015 et Rust 2018.\n"
"\n"
-" * Les éditions sont autorisées à apporter des modifications rétrocompatibles à\n"
+" * Les éditions sont autorisées à apporter des modifications "
+"rétrocompatibles à\n"
" la langue.\n"
"\n"
-" * Pour éviter de casser le code, les éditions sont opt-in : vous sélectionnez\n"
+" * Pour éviter de casser le code, les éditions sont opt-in : vous "
+"sélectionnez\n"
" l'édition pour votre crate via le fichier `Cargo.toml`.\n"
"\n"
-" * Pour éviter de diviser l'écosystème, les compilateurs Rust peuvent mélanger le code\n"
+" * Pour éviter de diviser l'écosystème, les compilateurs Rust peuvent "
+"mélanger le code\n"
" écrit pour différentes éditions.\n"
"\n"
-" * Veuillez noter qu'il est assez rare d'utiliser le compilateur directement et non via `cargo` (la plupart des utilisateurs ne le font jamais).\n"
+" * Veuillez noter qu'il est assez rare d'utiliser le compilateur "
+"directement et non via `cargo` (la plupart des utilisateurs ne le font "
+"jamais).\n"
"\n"
-" * Il peut être utile de mentionner que Cargo lui-même est un outil extrêmement puissant et complet. Il est capable de nombreuses fonctionnalités "
-"avancées, y compris, mais sans s'y limiter :\n"
+" * Il peut être utile de mentionner que Cargo lui-même est un outil "
+"extrêmement puissant et complet. Il est capable de nombreuses "
+"fonctionnalités avancées, y compris, mais sans s'y limiter :\n"
" * Structure du projet/paquets\n"
" * [espaces de travail]\n"
-" * Gestion/mise en cache des dépendances de développement et des dépendances d'exécution\n"
+" * Gestion/mise en cache des dépendances de développement et des "
+"dépendances d'exécution\n"
" * [créer des scripts]\n"
" * [installation globale]\n"
-" * Il est également extensible avec des plugins de sous-commande (tels que [cargo clippy]).\n"
+" * Il est également extensible avec des plugins de sous-commande (tels "
+"que [cargo clippy]).\n"
" * En savoir plus sur le [livre officiel de Cargo]"
#: src/cargo/code-samples.md:1
@@ -1628,22 +2016,30 @@ msgstr "# Échantillons de code dans cette formation"
#: src/cargo/code-samples.md:3
msgid ""
-"For this training, we will mostly explore the Rust language through examples\n"
-"which can be executed through your browser. This makes the setup much easier and\n"
+"For this training, we will mostly explore the Rust language through "
+"examples\n"
+"which can be executed through your browser. This makes the setup much easier "
+"and\n"
"ensures a consistent experience for everyone."
msgstr ""
-"Pour cette formation, nous allons surtout explorer le langage Rust à travers des exemples\n"
-"qui peuvent être exécuté via votre navigateur. Cela rend la configuration beaucoup plus facile et\n"
+"Pour cette formation, nous allons surtout explorer le langage Rust à travers "
+"des exemples\n"
+"qui peuvent être exécuté via votre navigateur. Cela rend la configuration "
+"beaucoup plus facile et\n"
"assure une expérience cohérente pour chacun."
#: src/cargo/code-samples.md:7
msgid ""
-"Installing Cargo is still encouraged: it will make it easier for you to do the\n"
-"exercises. On the last day, we will do a larger exercise which shows you how to\n"
+"Installing Cargo is still encouraged: it will make it easier for you to do "
+"the\n"
+"exercises. On the last day, we will do a larger exercise which shows you how "
+"to\n"
"work with dependencies and for that you need Cargo."
msgstr ""
-"L'installation de Cargo est tout de même encouragée : elle vous facilitera la tâche\n"
-"des exercices. Le dernier jour, nous ferons un exercice plus large qui vous montrera comment\n"
+"L'installation de Cargo est tout de même encouragée : elle vous facilitera "
+"la tâche\n"
+"des exercices. Le dernier jour, nous ferons un exercice plus large qui vous "
+"montrera comment\n"
"travailler avec des dépendances et pour cela vous avez besoin de Cargo."
#: src/cargo/code-samples.md:11
@@ -1661,10 +2057,12 @@ msgstr ""
#: src/cargo/code-samples.md:19
msgid ""
-"You can use Ctrl + Enter to execute the code when focus is in the\n"
+"You can use Ctrl + Enter to execute the code when focus is in "
+"the\n"
"text box."
msgstr ""
-"Vous pouvez utiliser Ctrl + Entrée pour exécuter le code lorsque le focus est dans la\n"
+"Vous pouvez utiliser Ctrl + Entrée pour exécuter le code lorsque "
+"le focus est dans la\n"
"zone de texte."
#: src/cargo/code-samples.md:24
@@ -1672,7 +2070,8 @@ msgid ""
"Most code samples are editable like shown above. A few code samples\n"
"are not editable for various reasons:"
msgstr ""
-"La plupart des exemples de code sont modifiables comme indiqué ci-dessus. Quelques exemples de code\n"
+"La plupart des exemples de code sont modifiables comme indiqué ci-dessus. "
+"Quelques exemples de code\n"
"ne sont pas modifiables pour diverses raisons :"
#: src/cargo/code-samples.md:27
@@ -1685,12 +2084,16 @@ msgid ""
" solve the exercises using a local Rust installation or via the\n"
" Playground."
msgstr ""
-"* Les terrains de jeu intégrés ne peuvent pas exécuter de tests unitaires. Copiez-collez le\n"
-" code et ouvrez-le dans le vrai terrain de jeu pour démontrer les tests unitaires.\n"
+"* Les terrains de jeu intégrés ne peuvent pas exécuter de tests unitaires. "
+"Copiez-collez le\n"
+" code et ouvrez-le dans le vrai terrain de jeu pour démontrer les tests "
+"unitaires.\n"
"\n"
-"* Les terrains de jeux intégrées perdent leur état au moment où vous naviguez\n"
+"* Les terrains de jeux intégrées perdent leur état au moment où vous "
+"naviguez\n"
" loin de la page! C'est la raison pour laquelle les élèves doivent\n"
-" résoudre les exercices en utilisant une installation Rust locale ou via le\n"
+" résoudre les exercices en utilisant une installation Rust locale ou via "
+"le\n"
" terrain de jeu."
#: src/cargo/running-locally.md:1
@@ -1699,46 +2102,55 @@ msgstr "# Exécuter le code localement avec Cargo"
#: src/cargo/running-locally.md:3
msgid ""
-"If you want to experiment with the code on your own system, then you will need\n"
+"If you want to experiment with the code on your own system, then you will "
+"need\n"
"to first install Rust. Do this by following the [instructions in the Rust\n"
-"Book][1]. This should give you a working `rustc` and `cargo`. At the time of\n"
+"Book][1]. This should give you a working `rustc` and `cargo`. At the time "
+"of\n"
"writing, the latest stable Rust release has these version numbers:"
msgstr ""
-"Si vous souhaitez expérimenter le code sur votre propre système, vous aurez besoin\n"
-"pour installer d'abord de Rust. Pour ce faire, suivez les [instructions dans le livre Rust][1].\n"
-"Cela devrait vous donner un \"rustc\" et un \"cargo\" fonctionnels. Au moment de\n"
+"Si vous souhaitez expérimenter le code sur votre propre système, vous aurez "
+"besoin\n"
+"pour installer d'abord de Rust. Pour ce faire, suivez les [instructions dans "
+"le livre Rust][1].\n"
+"Cela devrait vous donner un \"rustc\" et un \"cargo\" fonctionnels. Au "
+"moment de\n"
"l'écriture, la dernière version stable de Rust a ces numéros de version:"
#: src/cargo/running-locally.md:8
msgid ""
"```shell\n"
"% rustc --version\n"
-"rustc 1.61.0 (fe5b13d68 2022-05-18)\n"
+"rustc 1.69.0 (84c898d65 2023-04-16)\n"
"% cargo --version\n"
-"cargo 1.61.0 (a028ae4 2022-04-29)\n"
+"cargo 1.69.0 (6e9a83356 2023-04-12)\n"
"```"
msgstr ""
#: src/cargo/running-locally.md:15
+#, fuzzy
msgid ""
-"With this is in place, then follow these steps to build a Rust binary from one\n"
+"With this in place, follow these steps to build a Rust binary from one\n"
"of the examples in this training:"
msgstr ""
-"Une fois cela en place, suivez ces étapes pour créer un binaire Rust à partir d'un\n"
+"Une fois cela en place, suivez ces étapes pour créer un binaire Rust à "
+"partir d'un\n"
"des exemples dans cette formation :"
#: src/cargo/running-locally.md:18
msgid ""
"1. Click the \"Copy to clipboard\" button on the example you want to copy.\n"
"\n"
-"2. Use `cargo new exercise` to create a new `exercise/` directory for your code:\n"
+"2. Use `cargo new exercise` to create a new `exercise/` directory for your "
+"code:\n"
"\n"
" ```shell\n"
" $ cargo new exercise\n"
" Created binary (application) `exercise` package\n"
" ```\n"
"\n"
-"3. Navigate into `exercise/` and use `cargo run` to build and run your binary:\n"
+"3. Navigate into `exercise/` and use `cargo run` to build and run your "
+"binary:\n"
"\n"
" ```shell\n"
" $ cd exercise\n"
@@ -1750,7 +2162,8 @@ msgid ""
" ```\n"
"\n"
"4. Replace the boiler-plate code in `src/main.rs` with your own code. For\n"
-" example, using the example on the previous page, make `src/main.rs` look like\n"
+" example, using the example on the previous page, make `src/main.rs` look "
+"like\n"
"\n"
" ```rust\n"
" fn main() {\n"
@@ -1768,12 +2181,16 @@ msgid ""
" Edit me!\n"
" ```\n"
"\n"
-"6. Use `cargo check` to quickly check your project for errors, use `cargo build`\n"
-" to compile it without running it. You will find the output in `target/debug/`\n"
-" for a normal debug build. Use `cargo build --release` to produce an optimized\n"
+"6. Use `cargo check` to quickly check your project for errors, use `cargo "
+"build`\n"
+" to compile it without running it. You will find the output in `target/"
+"debug/`\n"
+" for a normal debug build. Use `cargo build --release` to produce an "
+"optimized\n"
" release build in `target/release/`.\n"
"\n"
-"7. You can add dependencies for your project by editing `Cargo.toml`. When you\n"
+"7. You can add dependencies for your project by editing `Cargo.toml`. When "
+"you\n"
" run `cargo` commands, it will automatically download and compile missing\n"
" dependencies for you."
msgstr ""
@@ -1797,7 +2214,8 @@ msgid ""
"This is the first day of Comprehensive Rust. We will cover a lot of ground\n"
"today:"
msgstr ""
-"C'est le premier jour de Comprehensive Rust(le guide complet de Rust). Nous couvrirons beaucoup de terrain\n"
+"C'est le premier jour de Comprehensive Rust(le guide complet de Rust). Nous "
+"couvrirons beaucoup de terrain\n"
"aujourd'hui:"
#: src/welcome-day-1.md:6
@@ -1805,54 +2223,78 @@ msgid ""
"* Basic Rust syntax: variables, scalar and compound types, enums, structs,\n"
" references, functions, and methods.\n"
"\n"
-"* Memory management: stack vs heap, manual memory management, scope-based memory\n"
+"* Memory management: stack vs heap, manual memory management, scope-based "
+"memory\n"
" management, and garbage collection.\n"
"\n"
"* Ownership: move semantics, copying and cloning, borrowing, and lifetimes."
msgstr ""
-"* Syntaxe de base de Rust : variables, types scalaires et composés, énumérations, structures,\n"
+"* Syntaxe de base de Rust : variables, types scalaires et composés, "
+"énumérations, structures,\n"
" références, fonctions et méthodes.\n"
"\n"
-"* Gestion de la mémoire : pile contre tas, gestion manuelle de la mémoire, gestion de la mémoire basée sur la portée\n"
+"* Gestion de la mémoire : pile contre tas, gestion manuelle de la mémoire, "
+"gestion de la mémoire basée sur la portée\n"
" et le ramassage des ordures.\n"
"\n"
-"* Propriété : sémantique de déplacement, copie et clonage, emprunt et durée de vie."
+"* Propriété : sémantique de déplacement, copie et clonage, emprunt et durée "
+"de vie."
#: src/welcome-day-1.md:16
msgid "Please remind the students that:"
msgstr "Veuillez rappeler aux élèves que :"
#: src/welcome-day-1.md:18
+#, fuzzy
msgid ""
"* They should ask questions when they get them, don't save them to the end.\n"
-"* The class is meant to be interactive and discussions are very much encouraged!\n"
-" * As an instructor, you should try to keep the discussions relevant, i.e.,\n"
-" keep the related to how Rust does things vs some other language. It can be\n"
-" hard to find the right balance, but err on the side of allowing discussions\n"
-" since they engage people much more than one-way communication.\n"
-"* The questions will likely mean that we talk about things ahead of the slides.\n"
-" * This is perfectly okay! Repetition is an important part of learning. Remember\n"
+"* The class is meant to be interactive and discussions are very much "
+"encouraged!\n"
+" * As an instructor, you should try to keep the discussions relevant, i."
+"e.,\n"
+" keep the discussions related to how Rust does things vs some other "
+"language. \n"
+" It can be hard to find the right balance, but err on the side of "
+"allowing \n"
+" discussions since they engage people much more than one-way "
+"communication.\n"
+"* The questions will likely mean that we talk about things ahead of the "
+"slides.\n"
+" * This is perfectly okay! Repetition is an important part of learning. "
+"Remember\n"
" that the slides are just a support and you are free to skip them as you\n"
" like."
msgstr ""
-"* Ils doivent poser des questions lorsqu'ils les reçoivent, ne les enregistrez pas jusqu'à la fin.\n"
-"* Le cours se veut interactif et les discussions sont vivement encouragées !\n"
-" * En tant qu'instructeur, vous devez essayer de garder les discussions pertinentes, c'est-à-dire,\n"
-" garder le lien avec la façon dont Rust fait les choses par rapport à un autre langage. Ça peut être\n"
+"* Ils doivent poser des questions lorsqu'ils les reçoivent, ne les "
+"enregistrez pas jusqu'à la fin.\n"
+"* Le cours se veut interactif et les discussions sont vivement "
+"encouragées !\n"
+" * En tant qu'instructeur, vous devez essayer de garder les discussions "
+"pertinentes, c'est-à-dire,\n"
+" garder le lien avec la façon dont Rust fait les choses par rapport à un "
+"autre langage. Ça peut être\n"
" difficile de trouver le bon équilibre, mais privilégiez les discussions\n"
-" car elles engagent les gens bien plus que la communication à sens unique.\n"
-"* Les questions signifieront probablement que nous parlons de choses avant les diapositives.\n"
-" * C'est tout à fait correct! La répétition est une partie importante de l'apprentissage. N'oubliez pas\n"
-" que les diapositives ne sont qu'un support et que vous êtes libre de les sauter si vous le souhaitez."
+" car elles engagent les gens bien plus que la communication à sens "
+"unique.\n"
+"* Les questions signifieront probablement que nous parlons de choses avant "
+"les diapositives.\n"
+" * C'est tout à fait correct! La répétition est une partie importante de "
+"l'apprentissage. N'oubliez pas\n"
+" que les diapositives ne sont qu'un support et que vous êtes libre de les "
+"sauter si vous le souhaitez."
#: src/welcome-day-1.md:29
msgid ""
-"The idea for the first day is to show _just enough_ of Rust to be able to speak\n"
-"about the famous borrow checker. The way Rust handles memory is a major feature\n"
+"The idea for the first day is to show _just enough_ of Rust to be able to "
+"speak\n"
+"about the famous borrow checker. The way Rust handles memory is a major "
+"feature\n"
"and we should show students this right away."
msgstr ""
-"L'idée du premier jour est de montrer _juste assez_ de Rust pour pouvoir parler\n"
-"du célèbre vérificateur d'emprunt. La façon dont Rust gère la mémoire est une caractéristique majeure\n"
+"L'idée du premier jour est de montrer _juste assez_ de Rust pour pouvoir "
+"parler\n"
+"du célèbre vérificateur d'emprunt. La façon dont Rust gère la mémoire est "
+"une caractéristique majeure\n"
"et nous devrions montrer cela aux élèves tout de suite."
#: src/welcome-day-1.md:33
@@ -1860,8 +2302,10 @@ msgid ""
"If you're teaching this in a classroom, this is a good place to go over the\n"
"schedule. We suggest splitting the day into two parts (following the slides):"
msgstr ""
-"Si vous enseignez cela dans une salle de classe, c'est un bon endroit pour passer en revue le\n"
-"calendrier. Nous suggérons de diviser la journée en deux parties (suivant les diapositives) :"
+"Si vous enseignez cela dans une salle de classe, c'est un bon endroit pour "
+"passer en revue le\n"
+"calendrier. Nous suggérons de diviser la journée en deux parties (suivant "
+"les diapositives) :"
#: src/welcome-day-1.md:36
msgid ""
@@ -1873,10 +2317,12 @@ msgstr ""
#: src/welcome-day-1.md:39
msgid ""
-"You can of course adjust this as necessary. Please make sure to include breaks,\n"
+"You can of course adjust this as necessary. Please make sure to include "
+"breaks,\n"
"we recommend a break every hour!"
msgstr ""
-"Vous pouvez bien sûr ajuster cela si nécessaire. Assurez-vous d'inclure les pauses,\n"
+"Vous pouvez bien sûr ajuster cela si nécessaire. Assurez-vous d'inclure les "
+"pauses,\n"
"nous recommandons une pause toutes les heures !"
#: src/welcome-day-1/what-is-rust.md:1
@@ -1884,15 +2330,19 @@ msgid "# What is Rust?"
msgstr "# Qu'est-ce que Rust?"
#: src/welcome-day-1/what-is-rust.md:3
-msgid "Rust is a new programming language which had its [1.0 release in 2015][1]:"
-msgstr "Rust est un nouveau langage de programmation qui a eu sa [version 1.0 en 2015][1] :"
+msgid ""
+"Rust is a new programming language which had its [1.0 release in 2015][1]:"
+msgstr ""
+"Rust est un nouveau langage de programmation qui a eu sa [version 1.0 en "
+"2015][1] :"
#: src/welcome-day-1/what-is-rust.md:5
msgid ""
"* Rust is a statically compiled language in a similar role as C++\n"
" * `rustc` uses LLVM as its backend.\n"
"* Rust supports many [platforms and\n"
-" architectures](https://doc.rust-lang.org/nightly/rustc/platform-support.html):\n"
+" architectures](https://doc.rust-lang.org/nightly/rustc/platform-support."
+"html):\n"
" * x86, ARM, WebAssembly, ...\n"
" * Linux, Mac, Windows, ...\n"
"* Rust is used for a wide range of devices:\n"
@@ -1905,7 +2355,8 @@ msgstr ""
"* Rust est un langage compilé statiquement dans un rôle similaire à C++\n"
" * `rustc` utilise LLVM comme backend.\n"
"* Rust prend en charge de nombreuses [plates-formes et\n"
-" architectures](https://doc.rust-lang.org/nightly/rustc/platform-support.html):\n"
+" architectures](https://doc.rust-lang.org/nightly/rustc/platform-support."
+"html):\n"
" * x86, ARM, WebAssembly, ...\n"
" *Linux, Mac, Windows, ...\n"
"* Rust est utilisé pour une large gamme d'appareils :\n"
@@ -1929,9 +2380,11 @@ msgid ""
msgstr ""
"* Grande flexibilité.\n"
"* Haut niveau de contrôle.\n"
-"* Peut être réduit à des appareils très limités comme les téléphones mobiles.\n"
+"* Peut être réduit à des appareils très limités comme les téléphones "
+"mobiles.\n"
"* N'a pas de temps d'exécution ou de récupération d'ordures.\n"
-"* Se concentre sur la fiabilité et la sécurité sans sacrifier les performances."
+"* Se concentre sur la fiabilité et la sécurité sans sacrifier les "
+"performances."
#: src/hello-world.md:1
#, fuzzy
@@ -1943,12 +2396,14 @@ msgid ""
"Let us jump into the simplest possible Rust program, a classic Hello World\n"
"program:"
msgstr ""
-"Passons au programme Rust le plus simple possible, un Bonjour Monde classique\n"
+"Passons au programme Rust le plus simple possible, un Bonjour Monde "
+"classique\n"
"programme:"
#: src/hello-world.md:6
+#, fuzzy
msgid ""
-"```rust\n"
+"```rust,editable\n"
"fn main() {\n"
" println!(\"Hello 🌍!\");\n"
"}\n"
@@ -1976,17 +2431,23 @@ msgstr ""
"* Les blocs sont délimités par des accolades comme en C et C++.\n"
"* La fonction `main` est le point d'entrée du programme.\n"
"* Rust a des macros hygiéniques, `println!` en est un exemple.\n"
-"* Les strings Rust sont encodées en UTF-8 et peuvent contenir n'importe quel caractère Unicode."
+"* Les strings Rust sont encodées en UTF-8 et peuvent contenir n'importe quel "
+"caractère Unicode."
#: src/hello-world.md:22
msgid ""
-"This slide tries to make the students comfortable with Rust code. They will see\n"
-"a ton of it over the next four days so we start small with something familiar."
+"This slide tries to make the students comfortable with Rust code. They will "
+"see\n"
+"a ton of it over the next four days so we start small with something "
+"familiar."
msgstr ""
-"Cette diapositive tente de mettre les étudiants à l'aise avec le code Rust. Ils en verront\n"
-"une tonne durant les quatre prochains jours, alors nous commençons petit avec quelque chose de familier."
+"Cette diapositive tente de mettre les étudiants à l'aise avec le code Rust. "
+"Ils en verront\n"
+"une tonne durant les quatre prochains jours, alors nous commençons petit "
+"avec quelque chose de familier."
#: src/hello-world.md:27
+#, fuzzy
msgid ""
"* Rust is very much like other languages in the C/C++/Java tradition. It is\n"
" imperative (not functional) and it doesn't try to reinvent things unless\n"
@@ -1994,25 +2455,36 @@ msgid ""
"\n"
"* Rust is modern with full support for things like Unicode.\n"
"\n"
-"* Rust uses macros for situations where you want to have a variable number of\n"
-" arguments (no function [overloading](basic-syntax/functions-interlude.md)).\n"
+"* Rust uses macros for situations where you want to have a variable number "
+"of\n"
+" arguments (no function [overloading](basic-syntax/functions-interlude."
+"md)).\n"
"\n"
-"* Macros being 'hygienic' means they don't accidentally capture identifiers from\n"
+"* Macros being 'hygienic' means they don't accidentally capture identifiers "
+"from\n"
" the scope they are used in. Rust macros are actually only\n"
-" [partially hygenic](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene.html)."
+" [partially hygienic](https://veykril.github.io/tlborm/decl-macros/minutiae/"
+"hygiene.html)."
msgstr ""
-"* Rust ressemble beaucoup aux autres langages traditionnels C/C++/Java. C'est\n"
-" impératif (non fonctionnel) et il n'essaie pas de réinventer les choses à moins\n"
+"* Rust ressemble beaucoup aux autres langages traditionnels C/C++/Java. "
+"C'est\n"
+" impératif (non fonctionnel) et il n'essaie pas de réinventer les choses à "
+"moins\n"
" qu'absolument nécessaire.\n"
"\n"
"* Rust est moderne avec un support complet pour des choses comme Unicode.\n"
"\n"
-"* Rust utilise des macros pour les situations où vous souhaitez avoir un nombre variable\n"
-" d'arguments (pas de fonction [surchargées](basic-syntax/functions-interlude.md)).\n"
+"* Rust utilise des macros pour les situations où vous souhaitez avoir un "
+"nombre variable\n"
+" d'arguments (pas de fonction [surchargées](basic-syntax/functions-"
+"interlude.md)).\n"
"\n"
-"* Les macros étant \"hygiéniques\", elles ne capturent pas accidentellement les identifiants de\n"
-" la portée dans laquelle elles sont utilisées. Les macros Rust ne sont en fait que\n"
-" [partiellement hygiénique](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene.html)."
+"* Les macros étant \"hygiéniques\", elles ne capturent pas accidentellement "
+"les identifiants de\n"
+" la portée dans laquelle elles sont utilisées. Les macros Rust ne sont en "
+"fait que\n"
+" [partiellement hygiénique](https://veykril.github.io/tlborm/decl-macros/"
+"minutiae/hygiene.html)."
#: src/hello-world/small-example.md:1
msgid "# Small Example"
@@ -2058,45 +2530,59 @@ msgstr ""
#: src/hello-world/small-example.md:23
msgid ""
-"The code implements the Collatz conjecture: it is believed that the loop will\n"
-"always end, but this is not yet proved. Edit the code and play with different\n"
+"The code implements the Collatz conjecture: it is believed that the loop "
+"will\n"
+"always end, but this is not yet proved. Edit the code and play with "
+"different\n"
"inputs."
msgstr ""
"Le code implémente la conjecture de Collatz : on pense que la boucle\n"
-"finissent toujours, mais cela n'est pas encore prouvé. Modifiez le code et jouez avec différentes\n"
+"finissent toujours, mais cela n'est pas encore prouvé. Modifiez le code et "
+"jouez avec différentes\n"
"entrées."
#: src/hello-world/small-example.md:29
msgid ""
-"* Explain that all variables are statically typed. Try removing `i32` to trigger\n"
-" type inference. Try with `i8` instead and trigger a runtime integer overflow.\n"
+"* Explain that all variables are statically typed. Try removing `i32` to "
+"trigger\n"
+" type inference. Try with `i8` instead and trigger a runtime integer "
+"overflow.\n"
"\n"
"* Change `let mut x` to `let x`, discuss the compiler error.\n"
"\n"
-"* Show how `print!` gives a compilation error if the arguments don't match the\n"
+"* Show how `print!` gives a compilation error if the arguments don't match "
+"the\n"
" format string.\n"
"\n"
"* Show how you need to use `{}` as a placeholder if you want to print an\n"
" expression which is more complex than just a single variable.\n"
"\n"
-"* Show the students the standard library, show them how to search for `std::fmt`\n"
-" which has the rules of the formatting mini-language. It's important that the\n"
+"* Show the students the standard library, show them how to search for `std::"
+"fmt`\n"
+" which has the rules of the formatting mini-language. It's important that "
+"the\n"
" students become familiar with searching in the standard library."
msgstr ""
-"* Expliquez que toutes les variables sont typées statiquement. Essayez de supprimer `i32` pour déclencher\n"
-" l'inférence de type. Essayez avec `i8` à la place et déclenchez un débordement d'entier à l'exécution.\n"
+"* Expliquez que toutes les variables sont typées statiquement. Essayez de "
+"supprimer `i32` pour déclencher\n"
+" l'inférence de type. Essayez avec `i8` à la place et déclenchez un "
+"débordement d'entier à l'exécution.\n"
"\n"
"* Remplacez `let mut x` par `let x`, discutez de l'erreur du compilateur.\n"
"\n"
-"* Montrez comment `print!` génère une erreur de compilation si les arguments ne correspondent pas aux\n"
+"* Montrez comment `print!` génère une erreur de compilation si les arguments "
+"ne correspondent pas aux\n"
" format des string.\n"
"\n"
-"* Montrez comment vous devez utiliser `{}` comme espace réservé si vous souhaitez imprimer une\n"
+"* Montrez comment vous devez utiliser `{}` comme espace réservé si vous "
+"souhaitez imprimer une\n"
" expression qui est plus complexe qu'une simple variable.\n"
"\n"
-"* Montrez aux étudiants la bibliothèque standard, montrez-leur comment rechercher `std :: fmt`\n"
+"* Montrez aux étudiants la bibliothèque standard, montrez-leur comment "
+"rechercher `std :: fmt`\n"
" qui a les règles du mini-langage de formatage. Il est important que le\n"
-" les étudiants se familiarisent avec la recherche dans la bibliothèque standard."
+" les étudiants se familiarisent avec la recherche dans la bibliothèque "
+"standard."
#: src/why-rust.md:1
msgid "# Why Rust?"
@@ -2118,32 +2604,48 @@ msgstr ""
#: src/why-rust.md:11
msgid ""
-"Make sure to ask the class which languages they have experience with. Depending\n"
+"Make sure to ask the class which languages they have experience with. "
+"Depending\n"
"on the answer you can highlight different features of Rust:"
msgstr ""
-"Assurez-vous de demander à la classe dans quelles langues ils ont de l'expérience. Selon\n"
-"la réponse, vous pouvez mettre en évidence différentes fonctionnalités de Rust :"
+"Assurez-vous de demander à la classe dans quelles langues ils ont de "
+"l'expérience. Selon\n"
+"la réponse, vous pouvez mettre en évidence différentes fonctionnalités de "
+"Rust :"
#: src/why-rust.md:14
msgid ""
-"* Experience with C or C++: Rust eliminates a whole class of _runtime errors_\n"
-" via the borrow checker. You get performance like in C and C++, but you don't\n"
-" have the memory unsafety issues. In addition, you get a modern language with\n"
+"* Experience with C or C++: Rust eliminates a whole class of _runtime "
+"errors_\n"
+" via the borrow checker. You get performance like in C and C++, but you "
+"don't\n"
+" have the memory unsafety issues. In addition, you get a modern language "
+"with\n"
" constructs like pattern matching and built-in dependency management.\n"
"\n"
-"* Experience with Java, Go, Python, JavaScript...: You get the same memory safety\n"
-" as in those languages, plus a similar high-level language feeling. In addition\n"
-" you get fast and predictable performance like C and C++ (no garbage collector)\n"
+"* Experience with Java, Go, Python, JavaScript...: You get the same memory "
+"safety\n"
+" as in those languages, plus a similar high-level language feeling. In "
+"addition\n"
+" you get fast and predictable performance like C and C++ (no garbage "
+"collector)\n"
" as well as access to low-level hardware (should you need it)"
msgstr ""
-"* Expérience avec C ou C++ : Rust élimine toute une classe d'_erreurs d'exécution_\n"
-" via le vérificateur d'emprunt. Vous obtenez des performances comme en C et C++, mais sans\n"
-" problèmes d'insécurité de la mémoire. De plus, vous obtenez une langue moderne avec\n"
-" des constructions telles que la correspondance de motifs et la gestion intégrée des dépendances.\n"
+"* Expérience avec C ou C++ : Rust élimine toute une classe d'_erreurs "
+"d'exécution_\n"
+" via le vérificateur d'emprunt. Vous obtenez des performances comme en C et "
+"C++, mais sans\n"
+" problèmes d'insécurité de la mémoire. De plus, vous obtenez une langue "
+"moderne avec\n"
+" des constructions telles que la correspondance de motifs et la gestion "
+"intégrée des dépendances.\n"
"\n"
-"* Expérience avec Java, Go, Python, JavaScript... : Vous bénéficiez de la même sécurité mémoire\n"
-" comme dans ces langages, plus un sentiment de langage de haut niveau similaire. En outre\n"
-" vous obtenez des performances rapides et prévisibles comme C et C++ (pas de ramassage d'ordures)\n"
+"* Expérience avec Java, Go, Python, JavaScript... : Vous bénéficiez de la "
+"même sécurité mémoire\n"
+" comme dans ces langages, plus un sentiment de langage de haut niveau "
+"similaire. En outre\n"
+" vous obtenez des performances rapides et prévisibles comme C et C++ (pas "
+"de ramassage d'ordures)\n"
" ainsi que l'accès au matériel de bas niveau (si vous en avez besoin)"
#: src/why-rust/compile-time.md:1
@@ -2179,12 +2681,14 @@ msgid ""
"It is possible to produce memory leaks in (safe) Rust. Some examples\n"
"are:"
msgstr ""
-"Il est possible de produire des fuites de mémoire avec Rust (sûr). Quelques exemples\n"
+"Il est possible de produire des fuites de mémoire avec Rust (sûr). Quelques "
+"exemples\n"
"sont:"
#: src/why-rust/compile-time.md:19
+#, fuzzy
msgid ""
-"* You can for use [`Box::leak`] to leak a pointer. A use of this could\n"
+"* You can use [`Box::leak`] to leak a pointer. A use of this could\n"
" be to get runtime-initialized and runtime-sized static variables\n"
"* You can use [`std::mem::forget`] to make the compiler \"forget\" about\n"
" a value (meaning the destructor is never run).\n"
@@ -2193,13 +2697,18 @@ msgid ""
"* In fact, some will consider infinitely populating a collection a memory\n"
" leak and Rust does not protect from those."
msgstr ""
-"* Vous pouvez utiliser [`Box::leak`] pour divulguer un pointeur. Une utilisation de cela pourrait\n"
-" être d'obtenir des variables statiques initialisées et dimensionnées à l'exécution\n"
-"* Vous pouvez utiliser [`std::mem::forget`] pour que le compilateur \"oublie\"\n"
+"* Vous pouvez utiliser [`Box::leak`] pour divulguer un pointeur. Une "
+"utilisation de cela pourrait\n"
+" être d'obtenir des variables statiques initialisées et dimensionnées à "
+"l'exécution\n"
+"* Vous pouvez utiliser [`std::mem::forget`] pour que le compilateur "
+"\"oublie\"\n"
" une valeur (ce qui signifie que le destructeur n'est jamais exécuté).\n"
-"* Vous pouvez également créer accidentellement un [cycle de référence] avec `Rc` ou\n"
+"* Vous pouvez également créer accidentellement un [cycle de référence] avec "
+"`Rc` ou\n"
" \"Arc\".\n"
-"* En fait, certains considéreront le fait de peupler à l'infini une collection tel qu'une\n"
+"* En fait, certains considéreront le fait de peupler à l'infini une "
+"collection tel qu'une\n"
" fuite de mémoire et Rust ne protège pas de celles-ci."
#: src/why-rust/compile-time.md:28
@@ -2241,14 +2750,18 @@ msgid ""
" `unsafe` allows you to call functions such as `slice::get_unchecked`\n"
" which does not do bounds checking."
msgstr ""
-"* Le débordement d'entier est défini via un indicateur de compilation. Les options sont\n"
+"* Le débordement d'entier est défini via un indicateur de compilation. Les "
+"options sont\n"
" soit une panique (un plantage contrôlé du programme) ou un bouclage\n"
-" sémantique. Par défaut, vous obtenez des paniques en mode débogage (`cargo build`)\n"
+" sémantique. Par défaut, vous obtenez des paniques en mode débogage (`cargo "
+"build`)\n"
" et bouclage en mode release (`cargo build --release`).\n"
"\n"
-"* La vérification des limites ne peut pas être désactivée avec un indicateur de compilateur. Ça peut aussi\n"
+"* La vérification des limites ne peut pas être désactivée avec un indicateur "
+"de compilateur. Ça peut aussi\n"
" ne pas être désactivé directement avec le mot-clé `unsafe`. Cependant,\n"
-" `unsafe` vous permet d'appeler des fonctions telles que `slice::get_unchecked`\n"
+" `unsafe` vous permet d'appeler des fonctions telles que `slice::"
+"get_unchecked`\n"
" qui ne vérifie pas les bornes."
#: src/why-rust/modern.md:1
@@ -2259,7 +2772,9 @@ msgstr "# Fonctionnalités modernes"
#: src/why-rust/modern.md:3
#, fuzzy
msgid "Rust is built with all the experience gained in the last 40 years."
-msgstr "Rust est construit avec toute l'expérience acquise au cours des 40 dernières années."
+msgstr ""
+"Rust est construit avec toute l'expérience acquise au cours des 40 dernières "
+"années."
#: src/why-rust/modern.md:5
#, fuzzy
@@ -2300,80 +2815,108 @@ msgstr ""
#: src/why-rust/modern.md:23
#, fuzzy
msgid ""
-"* Zero-cost abstractions, similar to C++, means that you don't have to 'pay'\n"
+"* Zero-cost abstractions, similar to C++, means that you don't have to "
+"'pay'\n"
" for higher-level programming constructs with memory or CPU. For example,\n"
" writing a loop using `for` should result in roughly the same low level\n"
" instructions as using the `.iter().fold()` construct.\n"
"\n"
-"* It may be worth mentioning that Rust enums are 'Algebraic Data Types', also\n"
+"* It may be worth mentioning that Rust enums are 'Algebraic Data Types', "
+"also\n"
" known as 'sum types', which allow the type system to express things like\n"
" `Option` and `Result`.\n"
"\n"
"* Remind people to read the errors --- many developers have gotten used to\n"
" ignore lengthy compiler output. The Rust compiler is significantly more\n"
-" talkative than other compilers. It will often provide you with _actionable_\n"
+" talkative than other compilers. It will often provide you with "
+"_actionable_\n"
" feedback, ready to copy-paste into your code.\n"
"\n"
-"* The Rust standard library is small compared to languages like Java, Python,\n"
-" and Go. Rust does not come with several things you might consider standard and\n"
+"* The Rust standard library is small compared to languages like Java, "
+"Python,\n"
+" and Go. Rust does not come with several things you might consider standard "
+"and\n"
" essential:\n"
"\n"
" * a random number generator, but see [rand].\n"
" * support for SSL or TLS, but see [rusttls].\n"
" * support for JSON, but see [serde_json].\n"
"\n"
-" The reasoning behind this is that functionality in the standard library cannot\n"
+" The reasoning behind this is that functionality in the standard library "
+"cannot\n"
" go away, so it has to be very stable. For the examples above, the Rust\n"
-" community is still working on finding the best solution --- and perhaps there\n"
+" community is still working on finding the best solution --- and perhaps "
+"there\n"
" isn't a single \"best solution\" for some of these things.\n"
"\n"
-" Rust comes with a built-in package manager in the form of Cargo and this makes\n"
-" it trivial to download and compile third-party crates. A consequence of this\n"
+" Rust comes with a built-in package manager in the form of Cargo and this "
+"makes\n"
+" it trivial to download and compile third-party crates. A consequence of "
+"this\n"
" is that the standard library can be smaller.\n"
"\n"
" Discovering good third-party crates can be a problem. Sites like\n"
-" help with this by letting you compare health metrics for\n"
+" help with this by letting you compare health metrics "
+"for\n"
" crates to find a good and trusted one.\n"
" \n"
"* [rust-analyzer] is a well supported LSP implementation used in major\n"
" IDEs and text editors."
msgstr ""
-"* Les abstractions à coût nul, similaires à C++, signifient que vous n'avez pas à \"payer\"\n"
-" pour les constructions de programmation de niveau supérieur avec mémoire ou CPU. Par exemple,\n"
-" écrire une boucle en utilisant `for` devrait aboutir à peu près au même niveau bas\n"
+"* Les abstractions à coût nul, similaires à C++, signifient que vous n'avez "
+"pas à \"payer\"\n"
+" pour les constructions de programmation de niveau supérieur avec mémoire "
+"ou CPU. Par exemple,\n"
+" écrire une boucle en utilisant `for` devrait aboutir à peu près au même "
+"niveau bas\n"
" instructions comme utilisant la construction `.iter().fold()`.\n"
"\n"
-"* Il peut être utile de mentionner que les énumérations Rust sont des \"types de données algébriques\", également\n"
-" connus sous le nom de \"types de somme\", qui permettent au système de type d'exprimer des choses comme\n"
+"* Il peut être utile de mentionner que les énumérations Rust sont des "
+"\"types de données algébriques\", également\n"
+" connus sous le nom de \"types de somme\", qui permettent au système de "
+"type d'exprimer des choses comme\n"
" `Option` et `Résultat`.\n"
"\n"
-"* Rappelez aux gens de lire les erreurs --- de nombreux développeurs se sont habitués à\n"
-" ignorer la longue sortie du compilateur. Le compilateur Rust est beaucoup plus\n"
-" bavard que les autres compilateurs. Il vous fournira souvent _actionnable_\n"
+"* Rappelez aux gens de lire les erreurs --- de nombreux développeurs se sont "
+"habitués à\n"
+" ignorer la longue sortie du compilateur. Le compilateur Rust est beaucoup "
+"plus\n"
+" bavard que les autres compilateurs. Il vous fournira souvent "
+"_actionnable_\n"
" feedback, prêt à copier-coller dans votre code.\n"
"\n"
-"* La bibliothèque standard Rust est petite comparée à des langages comme Java, Python,\n"
-" et aller. La rouille ne vient pas avec plusieurs choses que vous pourriez considérer comme standard et\n"
+"* La bibliothèque standard Rust est petite comparée à des langages comme "
+"Java, Python,\n"
+" et aller. La rouille ne vient pas avec plusieurs choses que vous pourriez "
+"considérer comme standard et\n"
" essentiel:\n"
"\n"
" * un générateur de nombres aléatoires, mais voir [rand].\n"
" * prise en charge de SSL ou TLS, mais voir [rusttls].\n"
" * support pour JSON, mais voir [serde_json].\n"
"\n"
-" Le raisonnement sous-jacent est que la fonctionnalité de la bibliothèque standard ne peut pas\n"
-" s'en aller, il doit donc être très stable. Pour les exemples ci-dessus, le Rust\n"
-" la communauté travaille toujours à trouver la meilleure solution --- et peut-être là\n"
+" Le raisonnement sous-jacent est que la fonctionnalité de la bibliothèque "
+"standard ne peut pas\n"
+" s'en aller, il doit donc être très stable. Pour les exemples ci-dessus, le "
+"Rust\n"
+" la communauté travaille toujours à trouver la meilleure solution --- et "
+"peut-être là\n"
" n'est pas une seule \"meilleure solution\" pour certaines de ces choses.\n"
"\n"
-" Rust est livré avec un gestionnaire de packages intégré sous la forme de Cargo, ce qui rend\n"
-" il est trivial de télécharger et de compiler des caisses tierces. Une conséquence de ce\n"
+" Rust est livré avec un gestionnaire de packages intégré sous la forme de "
+"Cargo, ce qui rend\n"
+" il est trivial de télécharger et de compiler des caisses tierces. Une "
+"conséquence de ce\n"
" est que la bibliothèque standard peut être plus petite.\n"
"\n"
-" Découvrir de bonnes caisses tierces peut être un problème. Des sites comme\n"
-" aide à cela en vous permettant de comparer les mesures de santé pour\n"
+" Découvrir de bonnes caisses tierces peut être un problème. Des sites "
+"comme\n"
+" aide à cela en vous permettant de comparer les mesures "
+"de santé pour\n"
" caisses pour en trouver une bonne et de confiance.\n"
" \n"
-"* [rust-analyzer] est une implémentation LSP bien prise en charge utilisée dans les principaux\n"
+"* [rust-analyzer] est une implémentation LSP bien prise en charge utilisée "
+"dans les principaux\n"
" IDE et éditeurs de texte."
#: src/basic-syntax.md:1
@@ -2384,22 +2927,27 @@ msgstr "# Syntaxe de base"
#: src/basic-syntax.md:3
#, fuzzy
msgid "Much of the Rust syntax will be familiar to you from C, C++ or Java:"
-msgstr "Une grande partie de la syntaxe de Rust vous sera familière en C, C++ ou Java :"
+msgstr ""
+"Une grande partie de la syntaxe de Rust vous sera familière en C, C++ ou "
+"Java :"
#: src/basic-syntax.md:5
#, fuzzy
msgid ""
"* Blocks and scopes are delimited by curly braces.\n"
-"* Line comments are started with `//`, block comments are delimited by `/* ...\n"
+"* Line comments are started with `//`, block comments are delimited by `/"
+"* ...\n"
" */`.\n"
"* Keywords like `if` and `while` work the same.\n"
"* Variable assignment is done with `=`, comparison is done with `==`."
msgstr ""
"* Les blocs et les portées sont délimités par des accolades.\n"
-"* Les commentaires de ligne commencent par `//`, les commentaires de bloc sont délimités par `/* ...\n"
+"* Les commentaires de ligne commencent par `//`, les commentaires de bloc "
+"sont délimités par `/* ...\n"
" */`.\n"
"* Des mots-clés comme `if` et `while` fonctionnent de la même manière.\n"
-"* L'affectation des variables se fait avec `=`, la comparaison se fait avec `==`."
+"* L'affectation des variables se fait avec `=`, la comparaison se fait avec "
+"`==`."
#: src/basic-syntax/scalar-types.md:1
#, fuzzy
@@ -2409,32 +2957,41 @@ msgstr "# Types scalaires"
#: src/basic-syntax/scalar-types.md:3
#, fuzzy
msgid ""
-"| | Types | Literals |\n"
+"| | Types | "
+"Literals |\n"
"|------------------------|--------------------------------------------|-------------------------------|\n"
-"| Signed integers | `i8`, `i16`, `i32`, `i64`, `i128`, `isize` | `-10`, `0`, `1_000`, `123i64` |\n"
-"| Unsigned integers | `u8`, `u16`, `u32`, `u64`, `u128`, `usize` | `0`, `123`, `10u16` |\n"
-"| Floating point numbers | `f32`, `f64` | `3.14`, `-10.0e20`, `2f32` |\n"
-"| Strings | `&str` | `\"foo\"`, `r#\"\\\\\"#` |\n"
-"| Unicode scalar values | `char` | `'a'`, `'α'`, `'∞'` |\n"
-"| Byte strings | `&[u8]` | `b\"abc\"`, `br#\" \" \"#` |\n"
-"| Booleans | `bool` | `true`, `false` |"
+"| Signed integers | `i8`, `i16`, `i32`, `i64`, `i128`, `isize` | "
+"`-10`, `0`, `1_000`, `123i64` |\n"
+"| Unsigned integers | `u8`, `u16`, `u32`, `u64`, `u128`, `usize` | `0`, "
+"`123`, `10u16` |\n"
+"| Floating point numbers | `f32`, `f64` | "
+"`3.14`, `-10.0e20`, `2f32` |\n"
+"| Strings | `&str` | "
+"`\"foo\"`, `\"two\\nlines\"` |\n"
+"| Unicode scalar values | `char` | "
+"`'a'`, `'α'`, `'∞'` |\n"
+"| Booleans | `bool` | "
+"`true`, `false` |"
msgstr ""
"| | Types | Littéraux |\n"
-"|-----------------------|------------------------ --------------------|-------------------------------------- --|\n"
-"| Entiers signés | `i8`, `i16`, `i32`, `i64`, `i128`, `isize` | `-10`, `0`, `1_000`, `123i64` |\n"
-"| Entiers non signés | `u8`, `u16`, `u32`, `u64`, `u128`, `usize` | `0`, `123`, `10u16` |\n"
+"|-----------------------|------------------------ "
+"--------------------|-------------------------------------- --|\n"
+"| Entiers signés | `i8`, `i16`, `i32`, `i64`, `i128`, `isize` | `-10`, `0`, "
+"`1_000`, `123i64` |\n"
+"| Entiers non signés | `u8`, `u16`, `u32`, `u64`, `u128`, `usize` | `0`, "
+"`123`, `10u16` |\n"
"| Nombres à virgule flottante | `f32`, `f64` | `3.14`, `-10.0e20`, `2f32` |\n"
"| Cordes | `&str` | `\"foo\"`, `r#\"\\\\\"#` |\n"
"| Valeurs scalaires Unicode | `car` | `'a'`, `'α'`, `'∞'` |\n"
"| Chaînes d'octets | `&[u8]` | `b\"abc\"`, `br#\" \" \"#` |\n"
"| Booléens | `bool` | 'vrai', 'faux' |"
-#: src/basic-syntax/scalar-types.md:13
+#: src/basic-syntax/scalar-types.md:12
#, fuzzy
msgid "The types have widths as follows:"
msgstr "Les types ont des largeurs comme suit :"
-#: src/basic-syntax/scalar-types.md:15
+#: src/basic-syntax/scalar-types.md:14
#, fuzzy
msgid ""
"* `iN`, `uN`, and `fN` are _N_ bits wide,\n"
@@ -2447,6 +3004,35 @@ msgstr ""
"* `char` a une largeur de 32 bits,\n"
"* `bool` a une largeur de 8 bits."
+#: src/basic-syntax/scalar-types.md:21
+msgid "There are a few syntaxes which are not shown above:"
+msgstr ""
+
+#: src/basic-syntax/scalar-types.md:23
+msgid ""
+"- Raw strings allow you to create a `&str` value with escapes disabled: "
+"`r\"\\n\"\n"
+" == \"\\\\\\\\n\"`. You can embed double-quotes by using an equal amount of "
+"`#` on\n"
+" either side of the quotes:\n"
+"\n"
+" ```rust,editable\n"
+" fn main() {\n"
+" println!(r#\"link\"#);\n"
+" println!(\"link\");\n"
+" }\n"
+" ```\n"
+"\n"
+"- Byte strings allow you to create a `&[u8]` value directly:\n"
+"\n"
+" ```rust,editable\n"
+" fn main() {\n"
+" println!(\"{:?}\", b\"abc\");\n"
+" println!(\"{:?}\", &[97, 98, 99]);\n"
+" }\n"
+" ```"
+msgstr ""
+
#: src/basic-syntax/compound-types.md:1
#, fuzzy
msgid "# Compound Types"
@@ -2454,10 +3040,13 @@ msgstr "# Types de composés"
#: src/basic-syntax/compound-types.md:3
msgid ""
-"| | Types | Literals |\n"
+"| | Types | Literals "
+"|\n"
"|--------|-------------------------------|-----------------------------------|\n"
-"| Arrays | `[T; N]` | `[20, 30, 40]`, `[0; 3]` |\n"
-"| Tuples | `()`, `(T,)`, `(T1, T2)`, ... | `()`, `('x',)`, `('x', 1.2)`, ... |"
+"| Arrays | `[T; N]` | `[20, 30, 40]`, `[0; 3]` "
+"|\n"
+"| Tuples | `()`, `(T,)`, `(T1, T2)`, ... | `()`, `('x',)`, `('x', 1.2)`, ... "
+"|"
msgstr ""
#: src/basic-syntax/compound-types.md:8
@@ -2499,18 +3088,24 @@ msgstr "Tableaux :"
#: src/basic-syntax/compound-types.md:34
msgid ""
-"* Arrays have elements of the same type, `T`, and length, `N`, which is a compile-time constant.\n"
-" Note that the length of the array is *part of its type*, which means that `[u8; 3]` and\n"
+"* Arrays have elements of the same type, `T`, and length, `N`, which is a "
+"compile-time constant.\n"
+" Note that the length of the array is *part of its type*, which means that "
+"`[u8; 3]` and\n"
" `[u8; 4]` are considered two different types.\n"
"\n"
"* We can use literals to assign values to arrays.\n"
"\n"
-"* In the main function, the print statement asks for the debug implementation with the `?` format\n"
-" parameter: `{}` gives the default output, `{:?}` gives the debug output. We\n"
-" could also have used `{a}` and `{a:?}` without specifying the value after the\n"
+"* In the main function, the print statement asks for the debug "
+"implementation with the `?` format\n"
+" parameter: `{}` gives the default output, `{:?}` gives the debug output. "
+"We\n"
+" could also have used `{a}` and `{a:?}` without specifying the value after "
+"the\n"
" format string.\n"
"\n"
-"* Adding `#`, eg `{a:#?}`, invokes a \"pretty printing\" format, which can be easier to read."
+"* Adding `#`, eg `{a:#?}`, invokes a \"pretty printing\" format, which can "
+"be easier to read."
msgstr ""
#: src/basic-syntax/compound-types.md:47
@@ -2525,26 +3120,37 @@ msgid ""
"\n"
"* Tuples group together values of different types into a compound type.\n"
"\n"
-"* Fields of a tuple can be accessed by the period and the index of the value, e.g. `t.0`, `t.1`.\n"
+"* Fields of a tuple can be accessed by the period and the index of the "
+"value, e.g. `t.0`, `t.1`.\n"
"\n"
-"* The empty tuple `()` is also known as the \"unit type\". It is both a type, and\n"
-" the only valid value of that type - that is to say both the type and its value\n"
-" are expressed as `()`. It is used to indicate, for example, that a function or\n"
+"* The empty tuple `()` is also known as the \"unit type\". It is both a "
+"type, and\n"
+" the only valid value of that type - that is to say both the type and its "
+"value\n"
+" are expressed as `()`. It is used to indicate, for example, that a "
+"function or\n"
" expression has no return value, as we'll see in a future slide. \n"
" * You can think of it as `void` that can be familiar to you from other \n"
" programming languages."
msgstr ""
"* Comme les tableaux, les tuples ont une longueur fixe.\n"
"\n"
-"* Les tuples regroupent des valeurs de différents types dans un type composé.\n"
+"* Les tuples regroupent des valeurs de différents types dans un type "
+"composé.\n"
"\n"
-"* Les champs d'un tuple sont accessibles par le point et l'index de la valeur, par ex. `t.0`, `t.1`.\n"
+"* Les champs d'un tuple sont accessibles par le point et l'index de la "
+"valeur, par ex. `t.0`, `t.1`.\n"
"\n"
-"* Le tuple vide `()` est également appelé \"type d'unité\". C'est à la fois un type et\n"
-" la seule valeur valide de ce type - c'est-à-dire à la fois le type et sa valeur\n"
-" sont exprimés par `()`. Il est utilisé pour indiquer, par exemple, qu'une fonction ou\n"
-" expression n'a pas de valeur de retour, comme nous le verrons dans une prochaine diapositive.\n"
-" * Vous pouvez le considérer comme un \"vide\" qui peut vous être familier d'autres\n"
+"* Le tuple vide `()` est également appelé \"type d'unité\". C'est à la fois "
+"un type et\n"
+" la seule valeur valide de ce type - c'est-à-dire à la fois le type et sa "
+"valeur\n"
+" sont exprimés par `()`. Il est utilisé pour indiquer, par exemple, qu'une "
+"fonction ou\n"
+" expression n'a pas de valeur de retour, comme nous le verrons dans une "
+"prochaine diapositive.\n"
+" * Vous pouvez le considérer comme un \"vide\" qui peut vous être "
+"familier d'autres\n"
" langages de programmation."
#: src/basic-syntax/references.md:1
@@ -2577,35 +3183,37 @@ msgstr "Quelques notes:"
#: src/basic-syntax/references.md:16
#, fuzzy
msgid ""
-"* We must dereference `ref_x` when assigning to it, similar to C and C++ pointers.\n"
+"* We must dereference `ref_x` when assigning to it, similar to C and C++ "
+"pointers.\n"
"* Rust will auto-dereference in some cases, in particular when invoking\n"
" methods (try `ref_x.count_ones()`).\n"
-"* References that are declared as `mut` can be bound to different values over their lifetime."
+"* References that are declared as `mut` can be bound to different values "
+"over their lifetime."
msgstr ""
-"* Nous devons déréférencer `ref_x` lors de son affectation, comme pour les pointeurs C et C++.\n"
-"* Rust déréférencera automatiquement dans certains cas, en particulier lors de l'appel\n"
+"* Nous devons déréférencer `ref_x` lors de son affectation, comme pour les "
+"pointeurs C et C++.\n"
+"* Rust déréférencera automatiquement dans certains cas, en particulier lors "
+"de l'appel\n"
" méthodes (essayez `ref_x.count_ones()`).\n"
-"* Les références déclarées comme \"mut\" peuvent être liées à différentes valeurs au cours de leur durée de vie."
+"* Les références déclarées comme \"mut\" peuvent être liées à différentes "
+"valeurs au cours de leur durée de vie."
-#: src/basic-syntax/references.md:21
+#: src/basic-syntax/references.md:25
#, fuzzy
msgid ""
-"\n"
-"Key points:"
+"* Be sure to note the difference between `let mut ref_x: &i32` and `let "
+"ref_x:\n"
+" &mut i32`. The first one represents a mutable reference which can be bound "
+"to\n"
+" different values, while the second represents a reference to a mutable "
+"value."
msgstr ""
-"\n"
-"Points clés:"
-
-#: src/basic-syntax/references.md:24
-#, fuzzy
-msgid ""
-"* Be sure to note the difference between `let mut ref_x: &i32` and `let ref_x:\n"
-" &mut i32`. The first one represents a mutable reference which can be bound to\n"
-" different values, while the second represents a reference to a mutable value."
-msgstr ""
-"* Assurez-vous de noter la différence entre `let mut ref_x: &i32` et `let ref_x:\n"
-" &mut i32`. Le premier représente une référence mutable qui peut être liée à\n"
-" différentes valeurs, tandis que la seconde représente une référence à une valeur modifiable."
+"* Assurez-vous de noter la différence entre `let mut ref_x: &i32` et `let "
+"ref_x:\n"
+" &mut i32`. Le premier représente une référence mutable qui peut être liée "
+"à\n"
+" différentes valeurs, tandis que la seconde représente une référence à une "
+"valeur modifiable."
#: src/basic-syntax/references-dangling.md:1
#, fuzzy
@@ -2640,9 +3248,11 @@ msgid ""
"* We will talk more about borrowing when we get to ownership."
msgstr ""
"* Une référence est dite \"emprunter\" la valeur à laquelle elle se réfère.\n"
-"* Rust suit la durée de vie de toutes les références pour s'assurer qu'elles durent longtemps\n"
+"* Rust suit la durée de vie de toutes les références pour s'assurer qu'elles "
+"durent longtemps\n"
" assez.\n"
-"* Nous parlerons davantage de l'emprunt lorsque nous arriverons à la propriété."
+"* Nous parlerons davantage de l'emprunt lorsque nous arriverons à la "
+"propriété."
#: src/basic-syntax/slices.md:1
#, fuzzy
@@ -2679,42 +3289,58 @@ msgstr ""
#: src/basic-syntax/slices.md:20
#, fuzzy
msgid ""
-"* We create a slice by borrowing `a` and specifying the starting and ending indexes in brackets.\n"
+"* We create a slice by borrowing `a` and specifying the starting and ending "
+"indexes in brackets.\n"
"\n"
-"* If the slice starts at index 0, Rust’s range syntax allows us to drop the starting index, meaning that `&a[0..a.len()]` and `&a[..a.len()]` are "
+"* If the slice starts at index 0, Rust’s range syntax allows us to drop the "
+"starting index, meaning that `&a[0..a.len()]` and `&a[..a.len()]` are "
"identical.\n"
" \n"
-"* The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are identical.\n"
+"* The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are "
+"identical.\n"
"\n"
-"* To easily create a slice of the full array, we can therefore use `&a[..]`.\n"
+"* To easily create a slice of the full array, we can therefore use "
+"`&a[..]`.\n"
"\n"
-"* `s` is a reference to a slice of `i32`s. Notice that the type of `s` (`&[i32]`) no longer mentions the array length. This allows us to perform "
+"* `s` is a reference to a slice of `i32`s. Notice that the type of `s` "
+"(`&[i32]`) no longer mentions the array length. This allows us to perform "
"computation on slices of different sizes.\n"
" \n"
-"* Slices always borrow from another object. In this example, `a` has to remain 'alive' (in scope) for at least as long as our slice. \n"
+"* Slices always borrow from another object. In this example, `a` has to "
+"remain 'alive' (in scope) for at least as long as our slice. \n"
" \n"
-"* The question about modifying `a[3]` can spark an interesting discussion, but the answer is that for memory safety reasons\n"
-" you cannot do it through `a` after you created a slice, but you can read the data from both `a` and `s` safely. \n"
+"* The question about modifying `a[3]` can spark an interesting discussion, "
+"but the answer is that for memory safety reasons\n"
+" you cannot do it through `a` after you created a slice, but you can read "
+"the data from both `a` and `s` safely. \n"
" More details will be explained in the borrow checker section."
msgstr ""
-"* Nous créons une tranche en empruntant `a` et en spécifiant les index de début et de fin entre parenthèses.\n"
+"* Nous créons une tranche en empruntant `a` et en spécifiant les index de "
+"début et de fin entre parenthèses.\n"
"\n"
-"* Si la tranche commence à l'index 0, la syntaxe de plage de Rust nous permet de supprimer l'index de départ, ce qui signifie que `&a[0..a.len()]` "
+"* Si la tranche commence à l'index 0, la syntaxe de plage de Rust nous "
+"permet de supprimer l'index de départ, ce qui signifie que `&a[0..a.len()]` "
"et `&a[..a.len()]` sont identiques .\n"
" \n"
-"* Il en va de même pour le dernier index, donc `&a[2..a.len()]` et `&a[2..]` sont identiques.\n"
+"* Il en va de même pour le dernier index, donc `&a[2..a.len()]` et `&a[2..]` "
+"sont identiques.\n"
"\n"
-"* Pour créer facilement une tranche du tableau complet, on peut donc utiliser `&a[..]`.\n"
+"* Pour créer facilement une tranche du tableau complet, on peut donc "
+"utiliser `&a[..]`.\n"
"\n"
-"* `s` est une référence à une tranche de `i32`s. Notez que le type de `s` (`&[i32]`) ne mentionne plus la longueur du tableau. Cela nous permet "
+"* `s` est une référence à une tranche de `i32`s. Notez que le type de `s` "
+"(`&[i32]`) ne mentionne plus la longueur du tableau. Cela nous permet "
"d'effectuer des calculs sur des tranches de tailles différentes.\n"
" \n"
-"* Les tranches empruntent toujours à un autre objet. Dans cet exemple, \"a\" doit rester \"vivant\" (dans la portée) au moins aussi longtemps que "
-"notre tranche.\n"
+"* Les tranches empruntent toujours à un autre objet. Dans cet exemple, \"a\" "
+"doit rester \"vivant\" (dans la portée) au moins aussi longtemps que notre "
+"tranche.\n"
" \n"
-"* La question sur la modification de `a[3]` peut susciter une discussion intéressante, mais la réponse est que pour des raisons de sécurité de la "
+"* La question sur la modification de `a[3]` peut susciter une discussion "
+"intéressante, mais la réponse est que pour des raisons de sécurité de la "
"mémoire\n"
-" vous ne pouvez pas le faire via `a` après avoir créé une tranche, mais vous pouvez lire les données de `a` et `s` en toute sécurité.\n"
+" vous ne pouvez pas le faire via `a` après avoir créé une tranche, mais "
+"vous pouvez lire les données de `a` et `s` en toute sécurité.\n"
" Plus de détails seront expliqués dans la section Vérificateur d'emprunt."
#: src/basic-syntax/string-slices.md:1
@@ -2725,7 +3351,8 @@ msgstr "# `Chaîne` vs `chaîne`"
#: src/basic-syntax/string-slices.md:3
#, fuzzy
msgid "We can now understand the two string types in Rust:"
-msgstr "Nous pouvons maintenant comprendre les deux types de string avec Rust :"
+msgstr ""
+"Nous pouvons maintenant comprendre les deux types de string avec Rust :"
#: src/basic-syntax/string-slices.md:5
msgid ""
@@ -2761,22 +3388,32 @@ msgstr ""
#: src/basic-syntax/string-slices.md:27
msgid ""
-"* `&str` introduces a string slice, which is an immutable reference to UTF-8 encoded string data \n"
-" stored in a block of memory. String literals (`”Hello”`), are stored in the program’s binary.\n"
+"* `&str` introduces a string slice, which is an immutable reference to UTF-8 "
+"encoded string data \n"
+" stored in a block of memory. String literals (`”Hello”`), are stored in "
+"the program’s binary.\n"
"\n"
-"* Rust’s `String` type is a wrapper around a vector of bytes. As with a `Vec`, it is owned.\n"
+"* Rust’s `String` type is a wrapper around a vector of bytes. As with a "
+"`Vec`, it is owned.\n"
" \n"
-"* As with many other types `String::from()` creates a string from a string literal; `String::new()` \n"
-" creates a new empty string, to which string data can be added using the `push()` and `push_str()` methods.\n"
+"* As with many other types `String::from()` creates a string from a string "
+"literal; `String::new()` \n"
+" creates a new empty string, to which string data can be added using the "
+"`push()` and `push_str()` methods.\n"
"\n"
-"* The `format!()` macro is a convenient way to generate an owned string from dynamic values. It \n"
+"* The `format!()` macro is a convenient way to generate an owned string from "
+"dynamic values. It \n"
" accepts the same format specification as `println!()`.\n"
" \n"
-"* You can borrow `&str` slices from `String` via `&` and optionally range selection.\n"
+"* You can borrow `&str` slices from `String` via `&` and optionally range "
+"selection.\n"
" \n"
-"* For C++ programmers: think of `&str` as `const char*` from C++, but the one that always points \n"
-" to a valid string in memory. Rust `String` is a rough equivalent of `std::string` from C++ \n"
-" (main difference: it can only contain UTF-8 encoded bytes and will never use a small-string optimization).\n"
+"* For C++ programmers: think of `&str` as `const char*` from C++, but the "
+"one that always points \n"
+" to a valid string in memory. Rust `String` is a rough equivalent of `std::"
+"string` from C++ \n"
+" (main difference: it can only contain UTF-8 encoded bytes and will never "
+"use a small-string optimization).\n"
" "
msgstr ""
@@ -2787,35 +3424,39 @@ msgstr "# Les fonctions"
#: src/basic-syntax/functions.md:3
#, fuzzy
-msgid "A Rust version of the famous [FizzBuzz](https://en.wikipedia.org/wiki/Fizz_buzz) interview question:"
-msgstr "Une version Rust de la célèbre question d'entrevue [FizzBuzz](https://en.wikipedia.org/wiki/Fizz_buzz) :"
+msgid ""
+"A Rust version of the famous [FizzBuzz](https://en.wikipedia.org/wiki/"
+"Fizz_buzz) interview question:"
+msgstr ""
+"Une version Rust de la célèbre question d'entrevue [FizzBuzz](https://en."
+"wikipedia.org/wiki/Fizz_buzz) :"
#: src/basic-syntax/functions.md:5
msgid ""
"```rust,editable\n"
"fn main() {\n"
-" fizzbuzz_to(20); // Defined below, no forward declaration needed\n"
+" print_fizzbuzz_to(20);\n"
"}\n"
"\n"
-"fn is_divisible_by(lhs: u32, rhs: u32) -> bool {\n"
-" if rhs == 0 {\n"
-" return false; // Corner case, early return\n"
+"fn is_divisible(n: u32, divisor: u32) -> bool {\n"
+" if divisor == 0 {\n"
+" return false;\n"
" }\n"
-" lhs % rhs == 0 // The last expression in a block is the return value\n"
+" n % divisor == 0\n"
"}\n"
"\n"
-"fn fizzbuzz(n: u32) -> () { // No return value means returning the unit type `()`\n"
-" match (is_divisible_by(n, 3), is_divisible_by(n, 5)) {\n"
-" (true, true) => println!(\"fizzbuzz\"),\n"
-" (true, false) => println!(\"fizz\"),\n"
-" (false, true) => println!(\"buzz\"),\n"
-" (false, false) => println!(\"{n}\"),\n"
+"fn fizzbuzz(n: u32) -> String {\n"
+" let fizz = if is_divisible(n, 3) { \"fizz\" } else { \"\" };\n"
+" let buzz = if is_divisible(n, 5) { \"buzz\" } else { \"\" };\n"
+" if fizz.is_empty() && buzz.is_empty() {\n"
+" return format!(\"{n}\");\n"
" }\n"
+" format!(\"{fizz}{buzz}\")\n"
"}\n"
"\n"
-"fn fizzbuzz_to(n: u32) { // `-> ()` is normally omitted\n"
+"fn print_fizzbuzz_to(n: u32) {\n"
" for i in 1..=n {\n"
-" fizzbuzz(i);\n"
+" println!(\"{}\", fizzbuzz(i));\n"
" }\n"
"}\n"
"```"
@@ -2823,24 +3464,16 @@ msgstr ""
#: src/basic-syntax/functions.md:35
msgid ""
-"* We refer in `main` to a function written below. Neither forward declarations nor headers are necessary. \n"
-"* Declaration parameters are followed by a type (the reverse of some programming languages), then a return type.\n"
-"* The last expression in a function body (or any block) becomes the return value. Simply omit the `;` at the end of the expression.\n"
-"* Some functions have no return value, and return the 'unit type', `()`. The compiler will infer this if the `-> ()` return type is omitted.\n"
-"* The range expression in the `for` loop in `fizzbuzz_to()` contains `=n`, which causes it to include the upper bound.\n"
-"* The `match` expression in `fizzbuzz()` is doing a lot of work. It is expanded below to show what is happening.\n"
-"\n"
-" (Type annotations added for clarity, but they can be elided.)\n"
-"\n"
-" ```rust,ignore\n"
-" let by_3: bool = is_divisible_by(n, 3);\n"
-" let by_5: bool = is_divisible_by(n, 5);\n"
-" let by_35: (bool, bool) = (by_3, by_5);\n"
-" match by_35 {\n"
-" // ...\n"
-" ```\n"
-"\n"
-" "
+"* We refer in `main` to a function written below. Neither forward "
+"declarations nor headers are necessary. \n"
+"* Declaration parameters are followed by a type (the reverse of some "
+"programming languages), then a return type.\n"
+"* The last expression in a function body (or any block) becomes the return "
+"value. Simply omit the `;` at the end of the expression.\n"
+"* Some functions have no return value, and return the 'unit type', `()`. The "
+"compiler will infer this if the `-> ()` return type is omitted.\n"
+"* The range expression in the `for` loop in `print_fizzbuzz_to()` contains "
+"`=n`, which causes it to include the upper bound."
msgstr ""
#: src/basic-syntax/rustdoc.md:1
@@ -2850,20 +3483,25 @@ msgstr "# Rustdoc"
#: src/basic-syntax/rustdoc.md:3
#, fuzzy
-msgid "All language items in Rust can be documented using special `///` syntax."
-msgstr "Tous les éléments de langage de Rust peuvent être documentés à l'aide de la syntaxe spéciale `///`."
+msgid ""
+"All language items in Rust can be documented using special `///` syntax."
+msgstr ""
+"Tous les éléments de langage de Rust peuvent être documentés à l'aide de la "
+"syntaxe spéciale `///`."
#: src/basic-syntax/rustdoc.md:5
msgid ""
"```rust,editable\n"
-"/// Determine whether the first argument is divisible by the second argument.\n"
+"/// Determine whether the first argument is divisible by the second "
+"argument.\n"
"///\n"
"/// If the second argument is zero, the result is false.\n"
"fn is_divisible_by(lhs: u32, rhs: u32) -> bool {\n"
" if rhs == 0 {\n"
" return false; // Corner case, early return\n"
" }\n"
-" lhs % rhs == 0 // The last expression in a block is the return value\n"
+" lhs % rhs == 0 // The last expression in a block is the return "
+"value\n"
"}\n"
"```"
msgstr ""
@@ -2873,13 +3511,16 @@ msgstr ""
msgid ""
"The contents are treated as Markdown. All published Rust library crates are\n"
"automatically documented at [`docs.rs`](https://docs.rs) using the\n"
-"[rustdoc](https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) tool. It is\n"
+"[rustdoc](https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) tool. It "
+"is\n"
"idiomatic to document all public items in an API using this pattern."
msgstr ""
-"Le contenu est traité comme Markdown. Toutes les caisses de bibliothèque Rust publiées sont\n"
+"Le contenu est traité comme Markdown. Toutes les caisses de bibliothèque "
+"Rust publiées sont\n"
"automatiquement documenté sur [`docs.rs`](https://docs.rs) en utilisant le\n"
"[rustdoc](https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html). C'est\n"
-"idiomatic pour documenter tous les éléments publics dans une API utilisant ce modèle."
+"idiomatic pour documenter tous les éléments publics dans une API utilisant "
+"ce modèle."
#: src/basic-syntax/rustdoc.md:24
#, fuzzy
@@ -2887,19 +3528,23 @@ msgid ""
"* Show students the generated docs for the `rand` crate at\n"
" [`docs.rs/rand`](https://docs.rs/rand).\n"
"\n"
-"* This course does not include rustdoc on slides, just to save space, but in\n"
+"* This course does not include rustdoc on slides, just to save space, but "
+"in\n"
" real code they should be present.\n"
"\n"
-"* Inner doc comments are discussed later (in the page on modules) and need not\n"
+"* Inner doc comments are discussed later (in the page on modules) and need "
+"not\n"
" be addressed here."
msgstr ""
"* Montrez aux élèves les documents générés pour la caisse \"rand\" sur\n"
" [`docs.rs/rand`](https://docs.rs/rand).\n"
"\n"
-"* Ce cours n'inclut pas rustdoc sur les diapositives, juste pour économiser de l'espace, mais dans\n"
+"* Ce cours n'inclut pas rustdoc sur les diapositives, juste pour économiser "
+"de l'espace, mais dans\n"
" code réel, ils doivent être présents.\n"
"\n"
-"* Les commentaires de la documentation interne sont discutés plus tard (dans la page sur les modules) et n'ont pas besoin\n"
+"* Les commentaires de la documentation interne sont discutés plus tard (dans "
+"la page sur les modules) et n'ont pas besoin\n"
" être abordé ici."
#: src/basic-syntax/methods.md:1 src/methods.md:1
@@ -2910,11 +3555,14 @@ msgstr "# Méthodes"
#: src/basic-syntax/methods.md:3
#, fuzzy
msgid ""
-"Rust has methods, they are simply functions that are associated with a particular type. The\n"
-"first argument of a method is an instance of the type it is associated with:"
+"Methods are functions associated with a type. The `self` argument of a "
+"method is\n"
+"an instance of the type it is associated with:"
msgstr ""
-"Rust a des méthodes, ce sont simplement des fonctions qui sont associées à un type particulier. Le\n"
-"le premier argument d'une méthode est une instance du type auquel elle est associée :"
+"Rust a des méthodes, ce sont simplement des fonctions qui sont associées à "
+"un type particulier. Le\n"
+"le premier argument d'une méthode est une instance du type auquel elle est "
+"associée :"
#: src/basic-syntax/methods.md:6
msgid ""
@@ -2945,8 +3593,26 @@ msgstr ""
#: src/basic-syntax/methods.md:30
#, fuzzy
-msgid "* We will look much more at methods in today's exercise and in tomorrow's class."
-msgstr "* Nous nous pencherons beaucoup plus sur les méthodes dans l'exercice d'aujourd'hui et dans le cours de demain."
+msgid ""
+"* We will look much more at methods in today's exercise and in tomorrow's "
+"class."
+msgstr ""
+"* Nous nous pencherons beaucoup plus sur les méthodes dans l'exercice "
+"d'aujourd'hui et dans le cours de demain."
+
+#: src/basic-syntax/methods.md:34
+msgid ""
+"- Add a `Rectangle::new` constructor and call this from `main`:\n"
+"\n"
+" ```rust,editable,compile_fail\n"
+" fn new(width: u32, height: u32) -> Rectangle {\n"
+" Rectangle { width, height }\n"
+" }\n"
+" ```\n"
+"\n"
+"- Add a `Rectangle::new_square(width: u32)` constructor to illustrate that\n"
+" constructors can take arbitrary parameters."
+msgstr ""
#: src/basic-syntax/functions-interlude.md:1
#, fuzzy
@@ -2997,16 +3663,15 @@ msgstr ""
#: src/basic-syntax/functions-interlude.md:27
#, fuzzy
msgid ""
-"* When using generics, the standard library's `Into` can provide a kind of limited\n"
-" polymorphism on argument types. We will see more details in a later section."
+"* When using generics, the standard library's `Into` can provide a kind "
+"of limited\n"
+" polymorphism on argument types. We will see more details in a later "
+"section."
msgstr ""
-"* Lors de l'utilisation de génériques, la bibliothèque standard `Into` peut fournir une sorte de\n"
-" polymorphisme sur les types d'arguments. Nous verrons plus de détails dans une section ultérieure."
-
-#: src/basic-syntax/functions-interlude.md:30
-#, fuzzy
-msgid ""
-msgstr ""
+"* Lors de l'utilisation de génériques, la bibliothèque standard `Into` "
+"peut fournir une sorte de\n"
+" polymorphisme sur les types d'arguments. Nous verrons plus de détails dans "
+"une section ultérieure."
#: src/exercises/day-1/morning.md:1
#, fuzzy
@@ -3038,13 +3703,16 @@ msgstr "Quelques points à considérer lors de la résolution des exercices :"
#, fuzzy
msgid ""
"* Use a local Rust installation, if possible. This way you can get\n"
-" auto-completion in your editor. See the page about [Using Cargo] for details\n"
+" auto-completion in your editor. See the page about [Using Cargo] for "
+"details\n"
" on installing Rust.\n"
"\n"
"* Alternatively, use the Rust Playground."
msgstr ""
-"* Utilisez une installation Rust locale, si possible. De cette façon, vous pouvez obtenir\n"
-" auto-complétion dans votre éditeur. Voir la page sur [Utiliser Cargo] pour plus de détails\n"
+"* Utilisez une installation Rust locale, si possible. De cette façon, vous "
+"pouvez obtenir\n"
+" auto-complétion dans votre éditeur. Voir la page sur [Utiliser Cargo] pour "
+"plus de détails\n"
" lors de l'installation de Rust.\n"
"\n"
"* Vous pouvez également utiliser le Rust Playground."
@@ -3052,17 +3720,26 @@ msgstr ""
#: src/exercises/day-1/morning.md:19
#, fuzzy
msgid ""
-"The code snippets are not editable on purpose: the inline code snippets lose\n"
+"The code snippets are not editable on purpose: the inline code snippets "
+"lose\n"
"their state if you navigate away from the page."
msgstr ""
-"Les extraits de code ne sont pas modifiables à dessein : les extraits de code en ligne perdent\n"
+"Les extraits de code ne sont pas modifiables à dessein : les extraits de "
+"code en ligne perdent\n"
"leur état si vous quittez la page."
-#: src/exercises/day-1/morning.md:22 src/exercises/day-1/afternoon.md:11 src/exercises/day-2/morning.md:11 src/exercises/day-2/afternoon.md:7
-#: src/exercises/day-3/morning.md:7 src/exercises/day-4/morning.md:12 src/exercises/bare-metal/morning.md:7 src/exercises/bare-metal/afternoon.md:7
+#: src/exercises/day-1/morning.md:22 src/exercises/day-1/afternoon.md:11
+#: src/exercises/day-2/morning.md:11 src/exercises/day-2/afternoon.md:7
+#: src/exercises/day-3/morning.md:7 src/exercises/bare-metal/morning.md:7
+#: src/exercises/bare-metal/afternoon.md:7
+#: src/exercises/concurrency/morning.md:12
+#: src/exercises/concurrency/afternoon.md:13
#, fuzzy
-msgid "After looking at the exercises, you can look at the [solutions] provided."
-msgstr "Après avoir regardé les exercices, vous pouvez regarder les [solutions] fournies."
+msgid ""
+"After looking at the exercises, you can look at the [solutions] provided."
+msgstr ""
+"Après avoir regardé les exercices, vous pouvez regarder les [solutions] "
+"fournies."
#: src/exercises/day-1/implicit-conversions.md:1
#, fuzzy
@@ -3072,10 +3749,12 @@ msgstr "# Conversions implicites"
#: src/exercises/day-1/implicit-conversions.md:3
#, fuzzy
msgid ""
-"Rust will not automatically apply _implicit conversions_ between types ([unlike\n"
+"Rust will not automatically apply _implicit conversions_ between types "
+"([unlike\n"
"C++][3]). You can see this in a program like this:"
msgstr ""
-"Rust n'appliquera pas automatiquement les _conversions implicites_ entre les types ([contrairement à\n"
+"Rust n'appliquera pas automatiquement les _conversions implicites_ entre les "
+"types ([contrairement à\n"
"C++][3]). Vous pouvez le voir dans un programme comme celui-ci :"
#: src/exercises/day-1/implicit-conversions.md:6
@@ -3098,38 +3777,50 @@ msgstr ""
#, fuzzy
msgid ""
"The Rust integer types all implement the [`From`][1] and [`Into`][2]\n"
-"traits to let us convert between them. The `From` trait has a single `from()`\n"
+"traits to let us convert between them. The `From` trait has a single "
+"`from()`\n"
"method and similarly, the `Into` trait has a single `into()` method.\n"
-"Implementing these traits is how a type expresses that it can be converted into\n"
+"Implementing these traits is how a type expresses that it can be converted "
+"into\n"
"another type."
msgstr ""
-"Les types entiers Rust implémentent tous les [`From`][1] et [`Into`][2]\n"
-"traits pour nous permettre de convertir entre eux. Le trait `From` a un seul `from()`\n"
+"Les types entiers Rust implémentent tous les [`From`][1] et [`Into`]"
+"[2]\n"
+"traits pour nous permettre de convertir entre eux. Le trait `From` a un "
+"seul `from()`\n"
"et de même, le trait `Into` a une seule méthode `into()`.\n"
-"La mise en œuvre de ces traits est la façon dont un type exprime qu'il peut être converti en\n"
+"La mise en œuvre de ces traits est la façon dont un type exprime qu'il peut "
+"être converti en\n"
"un autre type."
#: src/exercises/day-1/implicit-conversions.md:25
#, fuzzy
msgid ""
-"The standard library has an implementation of `From for i16`, which means\n"
+"The standard library has an implementation of `From for i16`, which "
+"means\n"
"that we can convert a variable `x` of type `i8` to an `i16` by calling \n"
"`i16::from(x)`. Or, simpler, with `x.into()`, because `From for i16`\n"
"implementation automatically create an implementation of `Into for i8`."
msgstr ""
-"La bibliothèque standard a une implémentation de `From for i16`, ce qui signifie\n"
-"que nous pouvons convertir une variable `x` de type `i8` en un `i16` en appelant\n"
+"La bibliothèque standard a une implémentation de `From for i16`, ce qui "
+"signifie\n"
+"que nous pouvons convertir une variable `x` de type `i8` en un `i16` en "
+"appelant\n"
"`i16::from(x)`. Ou, plus simple, avec `x.into()`, car `From for i16`\n"
"créer automatiquement une implémentation de `Into for i8`."
#: src/exercises/day-1/implicit-conversions.md:30
#, fuzzy
msgid ""
-"The same applies for your own `From` implementations for your own types, so it is\n"
-"sufficient to only implement `From` to get a respective `Into` implementation automatically."
+"The same applies for your own `From` implementations for your own types, so "
+"it is\n"
+"sufficient to only implement `From` to get a respective `Into` "
+"implementation automatically."
msgstr ""
-"Il en va de même pour vos propres implémentations `From` pour vos propres types, il est donc\n"
-"suffisant pour implémenter uniquement `From` pour obtenir automatiquement une implémentation `Into` respective."
+"Il en va de même pour vos propres implémentations `From` pour vos propres "
+"types, il est donc\n"
+"suffisant pour implémenter uniquement `From` pour obtenir automatiquement "
+"une implémentation `Into` respective."
#: src/exercises/day-1/implicit-conversions.md:33
#, fuzzy
@@ -3141,17 +3832,22 @@ msgid ""
"3. Change the types of `x` and `y` to other things (such as `f32`, `bool`,\n"
" `i128`) to see which types you can convert to which other types. Try\n"
" converting small types to big types and the other way around. Check the\n"
-" [standard library documentation][1] to see if `From` is implemented for\n"
+" [standard library documentation][1] to see if `From` is implemented "
+"for\n"
" the pairs you check."
msgstr ""
"1. Exécutez le programme ci-dessus et examinez l'erreur du compilateur.\n"
"\n"
-"2. Mettez à jour le code ci-dessus pour utiliser `into()` pour effectuer la conversion.\n"
+"2. Mettez à jour le code ci-dessus pour utiliser `into()` pour effectuer la "
+"conversion.\n"
"\n"
-"3. Remplacez les types de `x` et `y` par d'autres éléments (tels que `f32`, `bool`,\n"
-" `i128`) pour voir quels types vous pouvez convertir vers quels autres types. Essayer\n"
+"3. Remplacez les types de `x` et `y` par d'autres éléments (tels que `f32`, "
+"`bool`,\n"
+" `i128`) pour voir quels types vous pouvez convertir vers quels autres "
+"types. Essayer\n"
" convertir de petits types en grands types et inversement. Vérifier la\n"
-" [documentation de la bibliothèque standard][1] pour voir si `From` est implémenté pour\n"
+" [documentation de la bibliothèque standard][1] pour voir si `From` est "
+"implémenté pour\n"
" les paires que vous cochez."
#: src/exercises/day-1/for-loops.md:1
@@ -3173,8 +3869,12 @@ msgstr ""
#: src/exercises/day-1/for-loops.md:9
#, fuzzy
-msgid "You can print such an array by asking for its debug representation with `{:?}`:"
-msgstr "Vous pouvez imprimer un tel tableau en demandant sa représentation de débogage avec `{:?}` :"
+msgid ""
+"You can print such an array by asking for its debug representation with `{:?}"
+"`:"
+msgstr ""
+"Vous pouvez imprimer un tel tableau en demandant sa représentation de "
+"débogage avec `{:?}` :"
#: src/exercises/day-1/for-loops.md:11
msgid ""
@@ -3192,7 +3892,8 @@ msgid ""
"Rust lets you iterate over things like arrays and ranges using the `for`\n"
"keyword:"
msgstr ""
-"Rust vous permet d'itérer sur des choses comme des tableaux et des plages en utilisant le `for`\n"
+"Rust vous permet d'itérer sur des choses comme des tableaux et des plages en "
+"utilisant le `for`\n"
"mot-clé:"
#: src/exercises/day-1/for-loops.md:21
@@ -3218,11 +3919,15 @@ msgstr ""
#: src/exercises/day-1/for-loops.md:38
#, fuzzy
msgid ""
-"Use the above to write a function `pretty_print` which pretty-print a matrix and\n"
-"a function `transpose` which will transpose a matrix (turn rows into columns):"
+"Use the above to write a function `pretty_print` which pretty-print a matrix "
+"and\n"
+"a function `transpose` which will transpose a matrix (turn rows into "
+"columns):"
msgstr ""
-"Utilisez ce qui précède pour écrire une fonction `pretty_print` qui imprime joliment une matrice et\n"
-"une fonction `transpose` qui va transposer une matrice (transformer les lignes en colonnes):"
+"Utilisez ce qui précède pour écrire une fonction `pretty_print` qui imprime "
+"joliment une matrice et\n"
+"une fonction `transpose` qui va transposer une matrice (transformer les "
+"lignes en colonnes):"
#: src/exercises/day-1/for-loops.md:41
msgid ""
@@ -3236,7 +3941,9 @@ msgstr ""
#: src/exercises/day-1/for-loops.md:47
#, fuzzy
msgid "Hard-code both functions to operate on 3 × 3 matrices."
-msgstr "Codez en dur les deux fonctions pour qu'elles fonctionnent sur des matrices 3 × 3."
+msgstr ""
+"Codez en dur les deux fonctions pour qu'elles fonctionnent sur des matrices "
+"3 × 3."
#: src/exercises/day-1/for-loops.md:49
#, fuzzy
@@ -3244,7 +3951,8 @@ msgid ""
"Copy the code below to and implement the\n"
"functions:"
msgstr ""
-"Copiez le code ci-dessous sur et implémentez le\n"
+"Copiez le code ci-dessous sur et implémentez "
+"le\n"
"les fonctions:"
#: src/exercises/day-1/for-loops.md:52
@@ -3290,17 +3998,21 @@ msgid ""
"argument and return types? Something like `&[&[i32]]` for a two-dimensional\n"
"slice-of-slices. Why or why not?"
msgstr ""
-"Pourriez-vous utiliser des tranches `&[i32]` au lieu de matrices 3 × 3 codées en dur pour votre\n"
-"types d'argument et de retour ? Quelque chose comme `&[&[i32]]` pour un fichier bidimensionnel\n"
+"Pourriez-vous utiliser des tranches `&[i32]` au lieu de matrices 3 × 3 "
+"codées en dur pour votre\n"
+"types d'argument et de retour ? Quelque chose comme `&[&[i32]]` pour un "
+"fichier bidimensionnel\n"
"tranche de tranches. Pourquoi ou pourquoi pas?"
#: src/exercises/day-1/for-loops.md:87
#, fuzzy
msgid ""
-"See the [`ndarray` crate](https://docs.rs/ndarray/) for a production quality\n"
+"See the [`ndarray` crate](https://docs.rs/ndarray/) for a production "
+"quality\n"
"implementation."
msgstr ""
-"Voir le [`ndarray` crate](https://docs.rs/ndarray/) pour une qualité de production\n"
+"Voir le [`ndarray` crate](https://docs.rs/ndarray/) pour une qualité de "
+"production\n"
"mise en œuvre."
#: src/exercises/day-1/for-loops.md:92
@@ -3320,10 +4032,12 @@ msgstr "#Variable"
#: src/basic-syntax/variables.md:3
#, fuzzy
msgid ""
-"Rust provides type safety via static typing. Variable bindings are immutable by\n"
+"Rust provides type safety via static typing. Variable bindings are immutable "
+"by\n"
"default:"
msgstr ""
-"Rust fournit une sécurité de type via le typage statique. Les liaisons variables sont immuables par\n"
+"Rust fournit une sécurité de type via le typage statique. Les liaisons "
+"variables sont immuables par\n"
"défaut:"
#: src/basic-syntax/variables.md:6
@@ -3341,12 +4055,16 @@ msgstr ""
#: src/basic-syntax/variables.md:17
#, fuzzy
msgid ""
-"* Due to type inference the `i32` is optional. We will gradually show the types less and less as the course progresses.\n"
-"* Note that since `println!` is a macro, `x` is not moved, even using the function like syntax of `println!(\"x: {}\", x)`"
+"* Due to type inference the `i32` is optional. We will gradually show the "
+"types less and less as the course progresses.\n"
+"* Note that since `println!` is a macro, `x` is not moved, even using the "
+"function like syntax of `println!(\"x: {}\", x)`"
msgstr ""
-"* En raison de l'inférence de type, le `i32` est facultatif. Nous montrerons progressivement les types de moins en moins au fur et à mesure que le "
-"cours avance.\n"
-"* 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)`"
+"* En raison de l'inférence de type, le `i32` est facultatif. Nous montrerons "
+"progressivement les types de moins en moins au fur et à mesure que le cours "
+"avance.\n"
+"* 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:1
#, fuzzy
@@ -3356,7 +4074,8 @@ msgstr "# Inférence de type"
#: src/basic-syntax/type-inference.md:3
#, fuzzy
msgid "Rust will look at how the variable is _used_ to determine the type:"
-msgstr "Rust examinera comment la variable est _utilisée_ pour déterminer le type :"
+msgstr ""
+"Rust examinera comment la variable est _utilisée_ pour déterminer le type :"
#: src/basic-syntax/type-inference.md:5
msgid ""
@@ -3382,30 +4101,40 @@ msgstr ""
#: src/basic-syntax/type-inference.md:26
#, fuzzy
-msgid "This slide demonstrates how the Rust compiler infers types based on constraints given by variable declarations and usages."
+msgid ""
+"This slide demonstrates how the Rust compiler infers types based on "
+"constraints given by variable declarations and usages."
msgstr ""
-"Cette diapositive montre comment le compilateur Rust déduit les types en fonction des contraintes données par les déclarations et les utilisations "
+"Cette diapositive montre comment le compilateur Rust déduit les types en "
+"fonction des contraintes données par les déclarations et les utilisations "
"des variables."
#: src/basic-syntax/type-inference.md:28
#, fuzzy
msgid ""
-"It is very important to emphasize that variables declared like this are not of some sort of dynamic \"any type\" that can\n"
-"hold any data. The machine code generated by such declaration is identical to the explicit declaration of a type.\n"
+"It is very important to emphasize that variables declared like this are not "
+"of some sort of dynamic \"any type\" that can\n"
+"hold any data. The machine code generated by such declaration is identical "
+"to the explicit declaration of a type.\n"
"The compiler does the job for us and helps us write more concise code."
msgstr ""
-"Il est très important de souligner que les variables déclarées de cette manière ne sont pas d'une sorte de \"tout type\" dynamique qui peut\n"
-"détenir des données. Le code machine généré par une telle déclaration est identique à la déclaration explicite d'un type.\n"
-"Le compilateur fait le travail pour nous et nous aide à écrire un code plus concis."
+"Il est très important de souligner que les variables déclarées de cette "
+"manière ne sont pas d'une sorte de \"tout type\" dynamique qui peut\n"
+"détenir des données. Le code machine généré par une telle déclaration est "
+"identique à la déclaration explicite d'un type.\n"
+"Le compilateur fait le travail pour nous et nous aide à écrire un code plus "
+"concis."
#: src/basic-syntax/type-inference.md:32
#, fuzzy
msgid ""
-"The following code tells the compiler to copy into a certain generic container without the code ever explicitly specifying the contained type, using "
-"`_` as a placeholder:"
+"The following code tells the compiler to copy into a certain generic "
+"container without the code ever explicitly specifying the contained type, "
+"using `_` as a placeholder:"
msgstr ""
-"Le code suivant indique au compilateur de copier dans un certain conteneur générique sans que le code ne spécifie jamais explicitement le type "
-"contenu, en utilisant `_` comme espace réservé :"
+"Le code suivant indique au compilateur de copier dans un certain conteneur "
+"générique sans que le code ne spécifie jamais explicitement le type contenu, "
+"en utilisant `_` comme espace réservé :"
#: src/basic-syntax/type-inference.md:34
msgid ""
@@ -3425,10 +4154,12 @@ msgstr ""
#: src/basic-syntax/type-inference.md:46
#, fuzzy
msgid ""
-"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator.html#method.collect) relies on `FromIterator`, which [`HashSet`](https://doc."
+"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator."
+"html#method.collect) relies on `FromIterator`, which [`HashSet`](https://doc."
"rust-lang.org/std/iter/trait.FromIterator.html) implements."
msgstr ""
-"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator.html#method.collect) repose sur `FromIterator`, qui [`HashSet`](https:/ /doc."
+"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator."
+"html#method.collect) repose sur `FromIterator`, qui [`HashSet`](https:/ /doc."
"rust-lang.org/std/iter/trait.FromIterator.html) implémente."
#: src/basic-syntax/static-and-const.md:1
@@ -3460,7 +4191,8 @@ msgid ""
"fn compute_digest(text: &str) -> [u8; DIGEST_SIZE] {\n"
" let mut digest = [ZERO.unwrap_or(0); DIGEST_SIZE];\n"
" for (idx, &b) in text.as_bytes().iter().enumerate() {\n"
-" digest[idx % DIGEST_SIZE] = digest[idx % DIGEST_SIZE].wrapping_add(b);\n"
+" digest[idx % DIGEST_SIZE] = digest[idx % DIGEST_SIZE]."
+"wrapping_add(b);\n"
" }\n"
" digest\n"
"}\n"
@@ -3474,8 +4206,9 @@ msgstr ""
#: src/basic-syntax/static-and-const.md:27
#, fuzzy
-msgid "According the the [Rust RFC Book][1] these are inlined upon use."
-msgstr "Selon le [Rust RFC Book] [1], ceux-ci sont intégrés lors de l'utilisation."
+msgid "According to the [Rust RFC Book][1] these are inlined upon use."
+msgstr ""
+"Selon le [Rust RFC Book] [1], ceux-ci sont intégrés lors de l'utilisation."
#: src/basic-syntax/static-and-const.md:29
#, fuzzy
@@ -3501,27 +4234,40 @@ msgstr ""
#: src/basic-syntax/static-and-const.md:41
#, fuzzy
msgid ""
-"As noted in the [Rust RFC Book][1], these are not inlined upon use and have an actual associated memory location. This is useful for unsafe and "
-"embedded code, and the variable lives through the entirety of the program execution."
+"As noted in the [Rust RFC Book][1], these are not inlined upon use and have "
+"an actual associated memory location. This is useful for unsafe and "
+"embedded code, and the variable lives through the entirety of the program "
+"execution."
msgstr ""
-"Comme indiqué dans le [Rust RFC Book] [1], ceux-ci ne sont pas alignés lors de l'utilisation et ont un emplacement de mémoire associé réel. Ceci est "
-"utile pour le code non sécurisé et intégré, et la variable vit tout au long de l'exécution du programme."
+"Comme indiqué dans le [Rust RFC Book] [1], ceux-ci ne sont pas alignés lors "
+"de l'utilisation et ont un emplacement de mémoire associé réel. Ceci est "
+"utile 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
-msgid "We will look at mutating static data in the [chapter on Unsafe Rust](../unsafe.md)."
-msgstr "Nous examinerons la mutation des données statiques dans le [chapitre sur Unsafe Rust](../unsafe.md)."
+msgid ""
+"We will look at mutating static data in the [chapter on Unsafe Rust](../"
+"unsafe.md)."
+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
#, fuzzy
msgid ""
"* Mention that `const` behaves semantically similar to C++'s `constexpr`.\n"
-"* `static`, on the other hand, is much more similar to a `const` or mutable global variable in C++.\n"
-"* It isn't super common that one would need a runtime evaluated constant, but it is helpful and safer than using a static."
+"* `static`, on the other hand, is much more similar to a `const` or mutable "
+"global variable in C++.\n"
+"* It isn't super common that one would need a runtime evaluated constant, "
+"but it is helpful and safer than using a static."
msgstr ""
-"* Mentionnez que `const` se comporte sémantiquement de la même manière que `constexpr` de C++.\n"
-"* `static`, d'autre part, ressemble beaucoup plus à une variable globale `const` ou mutable en C++.\n"
-"* 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."
+"* Mentionnez que `const` se comporte sémantiquement de la même manière que "
+"`constexpr` de C++.\n"
+"* `static`, d'autre part, ressemble beaucoup plus à une variable globale "
+"`const` ou mutable en C++.\n"
+"* 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/scopes-shadowing.md:1
#, fuzzy
@@ -3531,10 +4277,12 @@ msgstr "# Portées et ombrage"
#: src/basic-syntax/scopes-shadowing.md:3
#, fuzzy
msgid ""
-"You can shadow variables, both those from outer scopes and variables from the\n"
+"You can shadow variables, both those from outer scopes and variables from "
+"the\n"
"same scope:"
msgstr ""
-"Vous pouvez masquer des variables, à la fois celles des portées externes et celles des\n"
+"Vous pouvez masquer des variables, à la fois celles des portées externes et "
+"celles des\n"
"même périmètre :"
#: src/basic-syntax/scopes-shadowing.md:6
@@ -3560,18 +4308,25 @@ msgstr ""
#: src/basic-syntax/scopes-shadowing.md:25
#, fuzzy
msgid ""
-"* Definition: Shadowing is different from mutation, because after shadowing both variable's memory locations exist at the same time. Both are "
-"available under the same name, depending where you use it in the code. \n"
+"* Definition: Shadowing is different from mutation, because after shadowing "
+"both variable's memory locations exist at the same time. Both are available "
+"under the same name, depending where you use it in the code. \n"
"* A shadowing variable can have a different type. \n"
-"* Shadowing looks obscure at first, but is convenient for holding on to values after `.unwrap()`.\n"
-"* The following code demonstrates why the compiler can't simply reuse memory locations when shadowing an immutable variable in a scope, even if the "
-"type does not change."
+"* Shadowing looks obscure at first, but is convenient for holding on to "
+"values after `.unwrap()`.\n"
+"* The following code demonstrates why the compiler can't simply reuse memory "
+"locations when shadowing an immutable variable in a scope, even if the type "
+"does not change."
msgstr ""
-"* Définition : l'occultation est différente de la mutation, car après l'occultation, les emplacements de mémoire des deux variables existent en même "
-"temps. Les deux sont disponibles sous le même nom, selon l'endroit où vous l'utilisez dans le code.\n"
+"* Définition : l'occultation est différente de la mutation, car après "
+"l'occultation, les emplacements de mémoire des deux variables existent en "
+"même temps. Les deux sont disponibles sous le même nom, selon l'endroit où "
+"vous l'utilisez dans le code.\n"
"* Une variable d'occultation peut avoir un type différent.\n"
-"* L'ombrage semble obscur au début, mais est pratique pour conserver les valeurs après `.unwrap()`.\n"
-"* Le code suivant montre pourquoi le compilateur ne peut pas simplement réutiliser les emplacements de mémoire lors de l'observation d'une variable "
+"* L'ombrage semble obscur au début, mais est pratique pour conserver les "
+"valeurs après `.unwrap()`.\n"
+"* Le code suivant montre pourquoi le compilateur ne peut pas simplement "
+"réutiliser les emplacements de mémoire lors de l'observation d'une variable "
"immuable dans une portée, même si le type ne change pas."
#: src/basic-syntax/scopes-shadowing.md:30
@@ -3594,16 +4349,20 @@ msgstr "# Gestion de la mémoire"
#: 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 :"
+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, ...\n"
-"* Full safety via automatic memory management at runtime: Java, Python, Go, Haskell, ..."
+"* Full safety via automatic memory management at runtime: Java, Python, Go, "
+"Haskell, ..."
msgstr ""
-"* Contrôle total via la gestion manuelle de la mémoire : C, C++, Pascal, ...\n"
-"* Sécurité totale via la gestion automatique de la mémoire à l'exécution : Java, Python, Go, Haskell, ..."
+"* Contrôle total via la gestion manuelle de la mémoire : C, C++, "
+"Pascal, ...\n"
+"* Sécurité totale via la gestion automatique de la mémoire à l'exécution : "
+"Java, Python, Go, Haskell, ..."
#: src/memory-management.md:8
#, fuzzy
@@ -3616,7 +4375,8 @@ msgid ""
"> Full control *and* safety via compile time enforcement of correct memory\n"
"> management."
msgstr ""
-"> Contrôle total * et * sécurité via l'application du temps de compilation de la mémoire correcte\n"
+"> Contrôle total * et * sécurité via l'application du temps de compilation "
+"de la mémoire correcte\n"
"> gestion."
#: src/memory-management.md:13
@@ -3627,7 +4387,8 @@ 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."
+msgstr ""
+"Tout d'abord, rafraîchissons le fonctionnement de la gestion de la mémoire."
#: src/memory-management/stack-vs-heap.md:1
#, fuzzy
@@ -3655,8 +4416,10 @@ msgstr ""
" * Grande localité de mémoire.\n"
"\n"
"* Heap : Stockage de valeurs en dehors des appels de fonction.\n"
-" * Les valeurs ont des tailles dynamiques déterminées au moment de l'exécution.\n"
-" * Légèrement plus lent que la pile : une certaine comptabilité est nécessaire.\n"
+" * Les valeurs ont des tailles dynamiques déterminées au moment de "
+"l'exécution.\n"
+" * Légèrement plus lent que la pile : une certaine comptabilité est "
+"nécessaire.\n"
" * Aucune garantie de localisation de la mémoire."
#: src/memory-management/stack.md:1
@@ -3667,10 +4430,12 @@ msgstr "# Mémoire de pile"
#: src/memory-management/stack.md:3
#, fuzzy
msgid ""
-"Creating a `String` puts fixed-sized data on the stack and dynamically sized\n"
+"Creating a `String` puts fixed-sized data on the stack and dynamically "
+"sized\n"
"data on the heap:"
msgstr ""
-"La création d'une \"chaîne\" place des données de taille fixe sur la pile et dimensionnées dynamiquement\n"
+"La création d'une \"chaîne\" place des données de taille fixe sur la pile et "
+"dimensionnées dynamiquement\n"
"données sur le tas :"
#: src/memory-management/stack.md:6
@@ -3701,12 +4466,15 @@ msgstr ""
#: src/memory-management/stack.md:28
msgid ""
-"* Mention that a `String` is backed by a `Vec`, so it has a capacity and length and can grow if mutable via reallocation on the heap.\n"
+"* Mention that a `String` is backed by a `Vec`, so it has a capacity and "
+"length and can grow if mutable via reallocation on the heap.\n"
"\n"
-"* If students ask about it, you can mention that the underlying memory is heap allocated using the [System Allocator] and custom allocators can be "
+"* If students ask about it, you can mention that the underlying memory is "
+"heap allocated using the [System Allocator] and custom allocators can be "
"implemented using the [Allocator API]\n"
"\n"
-"* We can inspect the memory layout with `unsafe` code. However, you should point out that this is rightfully unsafe!\n"
+"* We can inspect the memory layout with `unsafe` code. However, you should "
+"point out that this is rightfully unsafe!\n"
"\n"
" ```rust,editable\n"
" fn main() {\n"
@@ -3714,11 +4482,14 @@ msgid ""
" s1.push(' ');\n"
" s1.push_str(\"world\");\n"
" // DON'T DO THIS AT HOME! For educational purposes only.\n"
-" // String provides no guarantees about its layout, so this could lead to\n"
+" // String provides no guarantees about its layout, so this could "
+"lead to\n"
" // undefined behavior.\n"
" unsafe {\n"
-" let (capacity, ptr, len): (usize, usize, usize) = std::mem::transmute(s1);\n"
-" println!(\"ptr = {ptr:#x}, len = {len}, capacity = {capacity}\");\n"
+" let (capacity, ptr, len): (usize, usize, usize) = std::mem::"
+"transmute(s1);\n"
+" println!(\"ptr = {ptr:#x}, len = {len}, capacity = "
+"{capacity}\");\n"
" }\n"
" }\n"
" ```"
@@ -3736,8 +4507,12 @@ 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."
+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
@@ -3747,7 +4522,9 @@ 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` :"
+msgstr ""
+"Vous devez appeler `free` sur chaque pointeur que vous allouez avec "
+"`malloc` :"
#: src/memory-management/manual.md:11
msgid ""
@@ -3765,10 +4542,12 @@ msgstr ""
#: src/memory-management/manual.md:21
#, fuzzy
msgid ""
-"Memory is leaked if the function returns early between `malloc` and `free`: the\n"
+"Memory is leaked if the function returns early between `malloc` and `free`: "
+"the\n"
"pointer is lost and we cannot deallocate the memory."
msgstr ""
-"La mémoire est perdue si la fonction revient tôt entre `malloc` et `free` : le\n"
+"La mémoire est perdue si la fonction revient tôt entre `malloc` et `free` : "
+"le\n"
"pointeur est perdu et nous ne pouvons pas désallouer la mémoire."
#: src/memory-management/scope-based.md:1
@@ -3778,27 +4557,35 @@ msgstr "# Gestion de la mémoire basée sur la portée"
#: 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."
+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\n"
-"destroyed. The compiler guarantees that this happens, even if an exception is\n"
+"destroyed. The compiler guarantees that this happens, even if an exception "
+"is\n"
"raised."
msgstr ""
-"En enveloppant un pointeur dans un objet, vous pouvez libérer de la mémoire lorsque l'objet est\n"
-"détruit. Le compilateur garantit que cela se produit, même si une exception est\n"
+"En enveloppant un pointeur dans un objet, vous pouvez libérer de la mémoire "
+"lorsque l'objet est\n"
+"détruit. Le compilateur garantit que cela se produit, même si une exception "
+"est\n"
"soulevé."
#: src/memory-management/scope-based.md:9
#, fuzzy
msgid ""
-"This is often called _resource acquisition is initialization_ (RAII) and gives\n"
+"This is often called _resource acquisition is initialization_ (RAII) and "
+"gives\n"
"you smart pointers."
msgstr ""
-"Ceci est souvent appelé _l'acquisition de ressources est initialisée_ (RAII) et donne\n"
+"Ceci est souvent appelé _l'acquisition de ressources est initialisée_ (RAII) "
+"et donne\n"
"vous pointeurs intelligents."
#: src/memory-management/scope-based.md:12
@@ -3830,8 +4617,11 @@ msgstr ""
#: 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 :"
+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 ""
@@ -3849,20 +4639,24 @@ 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\n"
+"An alternative to manual and scope-based memory management is automatic "
+"memory\n"
"management:"
msgstr ""
-"Une alternative à la gestion manuelle et basée sur la portée de la mémoire est la mémoire automatique\n"
+"Une alternative à la gestion manuelle et basée sur la portée de la mémoire "
+"est la mémoire automatique\n"
"gestion:"
#: src/memory-management/garbage-collection.md:6
#, fuzzy
msgid ""
"* The programmer never allocates or deallocates memory explicitly.\n"
-"* A garbage collector finds unused memory and deallocates it for the programmer."
+"* A garbage collector finds unused memory and deallocates it for the "
+"programmer."
msgstr ""
"* Le programmeur n'alloue ou ne libère jamais de mémoire explicitement.\n"
-"* Un ramasse-miettes trouve la mémoire inutilisée et la libère pour le programmeur."
+"* Un ramasse-miettes trouve la mémoire inutilisée et la libère pour le "
+"programmeur."
#: src/memory-management/garbage-collection.md:9
#, fuzzy
@@ -3897,16 +4691,21 @@ msgstr "La gestion de la mémoire avec Rust est un mélange :"
#, fuzzy
msgid ""
"* Safe and correct like Java, but without a garbage collector.\n"
-"* Depending on which abstraction (or combination of abstractions) you choose, can be a single unique pointer, reference counted, or atomically "
+"* Depending on which abstraction (or combination of abstractions) you "
+"choose, can be a single unique pointer, reference counted, or atomically "
"reference counted.\n"
"* Scope-based like C++, but the compiler enforces full adherence.\n"
-"* A Rust user can choose the right abstraction for the situation, some even have no cost at runtime like C."
+"* A Rust user can choose the right abstraction for the situation, some even "
+"have no cost at runtime like C."
msgstr ""
"* Sûr et correct comme Java, mais sans ramasse-miettes.\n"
-"* 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.\n"
-"* Basé sur la portée comme C++, mais le compilateur applique une adhésion totale.\n"
-"* 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."
+"* 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.\n"
+"* Basé sur la portée comme C++, mais le compilateur applique une adhésion "
+"totale.\n"
+"* 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
@@ -3916,16 +4715,22 @@ 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], [Vec], [Rc], or [Arc]. These "
-"encapsulate ownership and memory allocation via various means, and prevent the potential errors in C.\n"
+"* If asked how at this point, you can mention that in Rust this is usually "
+"handled by RAII wrapper types such as [Box], [Vec], [Rc], or [Arc]. These "
+"encapsulate ownership and memory allocation via various means, and prevent "
+"the potential errors in C.\n"
"\n"
-"* You may be asked about destructors here, the [Drop] trait is the Rust equivalent."
+"* You may be asked about destructors here, the [Drop] trait is the Rust "
+"equivalent."
msgstr ""
-"* 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], [Vec], [Rc] ou [Arc]. Ceux-ci encapsulent la propriété et l'allocation de mémoire par divers moyens et empêchent les erreurs potentielles "
-"dans C.\n"
+"* 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], [Vec], [Rc] ou [Arc]. Ceux-ci encapsulent la propriété et "
+"l'allocation de mémoire par divers moyens et empêchent les erreurs "
+"potentielles dans C.\n"
"\n"
-"* Vous pouvez être interrogé sur les destructeurs ici, le trait [Drop] est l'équivalent de Rust."
+"* Vous pouvez être interrogé sur les destructeurs ici, le trait [Drop] est "
+"l'équivalent de Rust."
#: src/memory-management/comparison.md:1
#, fuzzy
@@ -3935,7 +4740,8 @@ msgstr "# Comparaison"
#: 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."
+msgstr ""
+"Voici une comparaison approximative des techniques de gestion de la mémoire."
#: src/memory-management/comparison.md:5
#, fuzzy
@@ -4015,10 +4821,12 @@ msgstr "# La possession"
#: src/ownership.md:3
#, fuzzy
msgid ""
-"All variable bindings have a _scope_ where they are valid and it is an error to\n"
+"All variable bindings have a _scope_ where they are valid and it is an error "
+"to\n"
"use a variable outside its scope:"
msgstr ""
-"Toutes les liaisons de variables ont un _scope_ où elles sont valides et c'est une erreur de\n"
+"Toutes les liaisons de variables ont un _scope_ où elles sont valides et "
+"c'est une erreur de\n"
"utiliser une variable en dehors de sa portée :"
#: src/ownership.md:6
@@ -4043,7 +4851,8 @@ msgid ""
"* A destructor can run here to free up resources.\n"
"* We say that the variable _owns_ the value."
msgstr ""
-"* A la fin du scope, la variable est _dropped_ et les données sont libérées.\n"
+"* A la fin du scope, la variable est _dropped_ et les données sont "
+"libérées.\n"
"* Un destructeur peut s'exécuter ici pour libérer des ressources.\n"
"* On dit que la variable _possède_ la valeur."
@@ -4080,20 +4889,23 @@ msgid ""
msgstr ""
"* L'affectation de `s1` à `s2` transfère la propriété.\n"
"* Les données ont été _déplacées_ de `s1` et `s1` n'est plus accessible.\n"
-"* Lorsque `s1` sort de la portée, rien ne se passe : il n'a pas de propriété.\n"
+"* Lorsque `s1` sort de la portée, rien ne se passe : il n'a pas de "
+"propriété.\n"
"* Lorsque `s2` sort de la portée, les données de la chaîne sont libérées.\n"
-"* Il y a toujours _exactement_ une liaison de variable qui possède une valeur."
+"* 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!).\n"
+"* Mention that this is the opposite of the defaults in C++, which copies by "
+"value unless you use `std::move` (and the move constructor is defined!).\n"
"\n"
"* In Rust, clones are explicit (by using `clone`)."
msgstr ""
-"* 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 !).\n"
+"* 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 !).\n"
"\n"
"* Dans Rust, les clones sont explicites (en utilisant `clone`)."
@@ -4194,11 +5006,14 @@ msgstr ""
#: src/ownership/double-free-modern-cpp.md:10
#, fuzzy
msgid ""
-"* The heap data from `s1` is duplicated and `s2` gets its own independent copy.\n"
+"* The heap data from `s1` is duplicated and `s2` gets its own independent "
+"copy.\n"
"* When `s1` and `s2` go out of scope, they each free their own memory."
msgstr ""
-"* Les données de tas de `s1` sont dupliquées et `s2` obtient sa propre copie indépendante.\n"
-"* Lorsque `s1` et `s2` sortent de la portée, ils libèrent chacun leur propre mémoire."
+"* Les données de tas de `s1` sont dupliquées et `s2` obtient sa propre copie "
+"indépendante.\n"
+"* 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
@@ -4262,7 +5077,8 @@ msgid ""
"When you pass a value to a function, the value is assigned to the function\n"
"parameter. This transfers ownership:"
msgstr ""
-"Lorsque vous transmettez une valeur à une fonction, la valeur est affectée à la fonction\n"
+"Lorsque vous transmettez une valeur à une fonction, la valeur est affectée à "
+"la fonction\n"
"paramètre. Cela transfère la propriété :"
#: src/ownership/moves-function-calls.md:6
@@ -4283,19 +5099,29 @@ msgstr ""
#: src/ownership/moves-function-calls.md:20
#, fuzzy
msgid ""
-"* With the first call to `say_hello`, `main` gives up ownership of `name`. Afterwards, `name` cannot be used anymore within `main`.\n"
-"* The heap memory allocated for `name` will be freed at the end of the `say_hello` function.\n"
-"* `main` can retain ownership if it passes `name` as a reference (`&name`) and if `say_hello` accepts a reference as a parameter.\n"
-"* Alternatively, `main` can pass a clone of `name` in the first call (`name.clone()`).\n"
-"* Rust makes it harder than C++ to inadvertently create copies by making move semantics the default, and by forcing programmers to make clones "
+"* With the first call to `say_hello`, `main` gives up ownership of `name`. "
+"Afterwards, `name` cannot be used anymore within `main`.\n"
+"* The heap memory allocated for `name` will be freed at the end of the "
+"`say_hello` function.\n"
+"* `main` can retain ownership if it passes `name` as a reference (`&name`) "
+"and if `say_hello` accepts a reference as a parameter.\n"
+"* Alternatively, `main` can pass a clone of `name` in the first call (`name."
+"clone()`).\n"
+"* Rust makes it harder than C++ to inadvertently create copies by making "
+"move semantics the default, and by forcing programmers to make clones "
"explicit."
msgstr ""
-"* Avec le premier appel à `say_hello`, `main` abandonne la propriété de `name`. Ensuite, `name` ne peut plus être utilisé dans `main`.\n"
-"* La mémoire de tas allouée pour `name` sera libérée à la fin de la fonction `say_hello`.\n"
-"* `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.\n"
-"* Alternativement, `main` peut passer un clone de `name` dans le premier appel (`name.clone()`).\n"
-"* 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."
+"* Avec le premier appel à `say_hello`, `main` abandonne la propriété de "
+"`name`. Ensuite, `name` ne peut plus être utilisé dans `main`.\n"
+"* La mémoire de tas allouée pour `name` sera libérée à la fin de la fonction "
+"`say_hello`.\n"
+"* `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.\n"
+"* Alternativement, `main` peut passer un clone de `name` dans le premier "
+"appel (`name.clone()`).\n"
+"* 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:1
#, fuzzy
@@ -4304,8 +5130,11 @@ msgstr "# Copie et clonage"
#: 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 :"
+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 ""
@@ -4327,7 +5156,8 @@ 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 :"
+msgstr ""
+"Vous pouvez activer vos propres types pour utiliser la sémantique de copie :"
#: src/ownership/copy-clone.md:18
msgid ""
@@ -4351,7 +5181,8 @@ msgid ""
"* We can also use `p1.clone()` to explicitly copy the data."
msgstr ""
"* Après l'affectation, `p1` et `p2` possèdent leurs propres données.\n"
-"* Nous pouvons également utiliser `p1.clone()` pour copier explicitement les données."
+"* Nous pouvons également utiliser `p1.clone()` pour copier explicitement les "
+"données."
#: src/ownership/copy-clone.md:35
#, fuzzy
@@ -4361,14 +5192,20 @@ 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.\n"
-"* Copying does not allow for custom logic (unlike copy constructors in C++).\n"
-"* Cloning is a more general operation and also allows for custom behavior by implementing the `Clone` trait.\n"
+"* Copying refers to bitwise copies of memory regions and does not work on "
+"arbitrary objects.\n"
+"* Copying does not allow for custom logic (unlike copy constructors in C+"
+"+).\n"
+"* Cloning is a more general operation and also allows for custom behavior by "
+"implementing the `Clone` trait.\n"
"* Copying does not work on types that implement the `Drop` trait."
msgstr ""
-"* 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.\n"
-"* La copie ne permet pas de logique personnalisée (contrairement aux constructeurs de copie en C++).\n"
-"* Le clonage est une opération plus générale et permet également un comportement personnalisé en implémentant le trait \"Cloner\".\n"
+"* 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.\n"
+"* La copie ne permet pas de logique personnalisée (contrairement aux "
+"constructeurs de copie en C++).\n"
+"* Le clonage est une opération plus générale et permet également un "
+"comportement personnalisé en implémentant le trait \"Cloner\".\n"
"* 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
@@ -4379,22 +5216,30 @@ 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.\n"
-"* Remove `Copy` from the `derive` attribute. The compiler error is now in the `println!` for `p1`.\n"
+"* Add a `String` field to `struct Point`. It will not compile because "
+"`String` is not a `Copy` type.\n"
+"* Remove `Copy` from the `derive` attribute. The compiler error is now in "
+"the `println!` for `p1`.\n"
"* Show that it works if you clone `p1` instead."
msgstr ""
-"* Ajoutez un champ `String` à `struct Point`. Il ne sera pas compilé car `String` n'est pas un type `Copy`.\n"
-"* Supprimer `Copy` de l'attribut `derive`. L'erreur du compilateur est maintenant dans `println!` pour `p1`.\n"
+"* Ajoutez un champ `String` à `struct Point`. Il ne sera pas compilé car "
+"`String` n'est pas un type `Copy`.\n"
+"* Supprimer `Copy` de l'attribut `derive`. L'erreur du compilateur est "
+"maintenant dans `println!` pour `p1`.\n"
"* 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\n"
-"at compile time. In this case the default implementations of `Copy` and `Clone` traits are generated."
+"If students ask about `derive`, it is sufficient to say that this is a way "
+"to generate code in Rust\n"
+"at compile time. In this case the default implementations of `Copy` and "
+"`Clone` traits are generated."
msgstr ""
-"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\n"
-"au moment de la compilation. Dans ce cas, les implémentations par défaut des traits `Copy` et `Clone` sont générées."
+"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\n"
+"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:1
#, fuzzy
@@ -4407,7 +5252,8 @@ msgid ""
"Instead of transferring ownership when calling a function, you can let a\n"
"function _borrow_ the value:"
msgstr ""
-"Au lieu de transférer la propriété lors de l'appel d'une fonction, vous pouvez laisser une\n"
+"Au lieu de transférer la propriété lors de l'appel d'une fonction, vous "
+"pouvez laisser une\n"
"la fonction _emprunte_ la valeur :"
#: src/ownership/borrowing.md:6
@@ -4445,9 +5291,11 @@ 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]. In the \"DEBUG\" optimization level, the addresses should change, while they stay the same when changing "
-"to the \"RELEASE\" setting:\n"
+"* Demonstrate that the return from `add` is cheap because the compiler can "
+"eliminate the copy operation. Change the above code to print stack addresses "
+"and run it on the [Playground]. In the \"DEBUG\" optimization level, the "
+"addresses should change, while they stay the same when changing to the "
+"\"RELEASE\" setting:\n"
"\n"
" ```rust,editable\n"
" #[derive(Debug)]\n"
@@ -4468,8 +5316,10 @@ msgid ""
" }\n"
" ```\n"
"* The Rust compiler can do return value optimization (RVO).\n"
-"* In C++, copy elision has to be defined in the language specification because constructors can have side effects. In Rust, this is not an issue at "
-"all. If RVO did not happen, Rust will always performs a simple and efficient `memcpy` copy."
+"* In C++, copy elision has to be defined in the language specification "
+"because constructors can have side effects. In Rust, this is not an issue at "
+"all. If RVO did not happen, Rust will always performs a simple and efficient "
+"`memcpy` copy."
msgstr ""
#: src/ownership/shared-unique-borrows.md:1
@@ -4480,7 +5330,9 @@ msgstr "# Emprunts partagés et uniques"
#: 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 :"
+msgstr ""
+"Rust impose des contraintes sur la manière dont vous pouvez emprunter des "
+"valeurs :"
#: src/ownership/shared-unique-borrows.md:5
#, fuzzy
@@ -4512,15 +5364,22 @@ msgstr ""
#: src/ownership/shared-unique-borrows.md:25
#, fuzzy
msgid ""
-"* The above code does not compile because `a` is borrowed as mutable (through `c`) and as immutable (through `b`) at the same time.\n"
-"* Move the `println!` statement for `b` before the scope that introduces `c` to make the code compile.\n"
-"* After that change, the compiler realizes that `b` is only ever used before the new mutable borrow of `a` through `c`. This is a feature of the "
-"borrow checker called \"non-lexical lifetimes\"."
+"* The above code does not compile because `a` is borrowed as mutable "
+"(through `c`) and as immutable (through `b`) at the same time.\n"
+"* Move the `println!` statement for `b` before the scope that introduces `c` "
+"to make the code compile.\n"
+"* After that change, the compiler realizes that `b` is only ever used before "
+"the new mutable borrow of `a` through `c`. This is a feature of the borrow "
+"checker called \"non-lexical lifetimes\"."
msgstr ""
-"* 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.\n"
-"* Déplacez l'instruction `println!` pour `b` avant la portée qui introduit `c` pour que le code soit compilé.\n"
-"* 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\"."
+"* 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.\n"
+"* Déplacez l'instruction `println!` pour `b` avant la portée qui introduit "
+"`c` pour que le code soit compilé.\n"
+"* 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:1
#, fuzzy
@@ -4534,14 +5393,20 @@ msgstr "Une valeur empruntée a une _durée de vie_ :"
#: src/ownership/lifetimes.md:5
msgid ""
-"* The lifetime can be elided: `add(p1: &Point, p2: &Point) -> Point`.\n"
+"* The lifetime can be implicit: `add(p1: &Point, p2: &Point) -> Point`.\n"
"* Lifetimes can also be explicit: `&'a Point`, `&'document str`.\n"
"* Read `&'a Point` as \"a borrowed `Point` which is valid for at least the\n"
" lifetime `a`\".\n"
-"* Lifetimes are always inferred by the compiler: you cannot assign a lifetime\n"
+"* Lifetimes are always inferred by the compiler: you cannot assign a "
+"lifetime\n"
" yourself.\n"
-" * Lifetime annotations create constraints; the compiler verifies that there is\n"
-" a valid solution."
+" * Lifetime annotations create constraints; the compiler verifies that "
+"there is\n"
+" a valid solution.\n"
+"* Lifetimes for function arguments and return values must be fully "
+"specified,\n"
+" but Rust allows these to be elided in most cases with [a few simple\n"
+" rules](https://doc.rust-lang.org/nomicon/lifetime-elision.html)."
msgstr ""
#: src/ownership/lifetimes-function-calls.md:1
@@ -4551,8 +5416,12 @@ msgstr "# Durées de vie dans les appels de fonction"
#: 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 :"
+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 ""
@@ -4583,14 +5452,17 @@ msgid ""
" * The _at least_ part is important when parameters are in different scopes."
msgstr ""
"* `'a` est un paramètre générique, il est déduit par le compilateur.\n"
-"* Les durées de vie commencent par `'` et `'a` est un nom par défaut typique.\n"
+"* Les durées de vie commencent par `'` et `'a` est un nom par défaut "
+"typique.\n"
"* Lire `&'a Point` comme \"un `Point` emprunté qui est valide pour au moins\n"
" durée de vie 'a'\".\n"
-" * La partie _au moins_ est importante lorsque les paramètres sont dans des portées différentes."
+" * 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 a new scope (`{ ... }`), resulting in the following code:\n"
+"* Move the declaration of `p2` and `p3` into a new scope (`{ ... }`), "
+"resulting in the following code:\n"
" ```rust,ignore\n"
" #[derive(Debug)]\n"
" struct Point(i32, i32);\n"
@@ -4611,13 +5483,17 @@ msgid ""
" ```\n"
" Note how this does not compile since `p3` outlives `p2`.\n"
"\n"
-"* Reset the workspace and change the function signature to `fn left_most<'a, 'b>(p1: &'a Point, p2: &'a Point) -> &'b Point`. This will not compile "
+"* Reset the workspace and change the function signature to `fn left_most<'a, "
+"'b>(p1: &'a Point, p2: &'a Point) -> &'b Point`. This will not compile "
"because the relationship between the lifetimes `'a` and `'b` is unclear.\n"
"* Another way to explain it:\n"
-" * Two references to two values are borrowed by a function and the function returns\n"
+" * Two references to two values are borrowed by a function and the function "
+"returns\n"
" another reference.\n"
-" * It must have come from one of those two inputs (or from a global variable).\n"
-" * Which one is it? The compiler needs to to know, so at the call site the returned reference is not used\n"
+" * It must have come from one of those two inputs (or from a global "
+"variable).\n"
+" * Which one is it? The compiler needs to know, so at the call site the "
+"returned reference is not used\n"
" for longer than a variable from where the reference came from."
msgstr ""
@@ -4628,8 +5504,11 @@ msgstr "# Durées de vie dans les structures de données"
#: 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 :"
+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 ""
@@ -4642,7 +5521,8 @@ msgid ""
"}\n"
"\n"
"fn main() {\n"
-" let text = String::from(\"The quick brown fox jumps over the lazy dog.\");\n"
+" let text = String::from(\"The quick brown fox jumps over the lazy dog."
+"\");\n"
" let fox = Highlight(&text[4..19]);\n"
" let dog = Highlight(&text[35..43]);\n"
" // erase(text);\n"
@@ -4655,23 +5535,34 @@ msgstr ""
#: src/ownership/lifetimes-data-structures.md:25
#, fuzzy
msgid ""
-"* In the above example, the annotation on `Highlight` enforces that the data underlying the contained `&str` lives at least as long as any instance "
-"of `Highlight` that uses that data.\n"
-"* If `text` is consumed before the end of the lifetime of `fox` (or `dog`), the borrow checker throws an error.\n"
-"* Types with borrowed data force users to hold on to the original data. This can be useful for creating lightweight views, but it generally makes "
-"them somewhat harder to use.\n"
+"* In the above example, the annotation on `Highlight` enforces that the data "
+"underlying the contained `&str` lives at least as long as any instance of "
+"`Highlight` that uses that data.\n"
+"* If `text` is consumed before the end of the lifetime of `fox` (or `dog`), "
+"the borrow checker throws an error.\n"
+"* Types with borrowed data force users to hold on to the original data. This "
+"can be useful for creating lightweight views, but it generally makes them "
+"somewhat harder to use.\n"
"* When possible, make data structures own their data directly.\n"
-"* Some structs with multiple references inside can have more than one lifetime annotation. This can be necessary if there is a need to describe "
-"lifetime relationships between the references themselves, in addition to the lifetime of the struct itself. Those are very advanced use cases."
+"* Some structs with multiple references inside can have more than one "
+"lifetime annotation. This can be necessary if there is a need to describe "
+"lifetime relationships between the references themselves, in addition to the "
+"lifetime of the struct itself. Those are very advanced use cases."
msgstr ""
-"* 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 "
+"* 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.\n"
-"* 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.\n"
-"* 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 "
+"* 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.\n"
+"* 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.\n"
-"* Dans la mesure du possible, faites en sorte que les structures de données soient directement propriétaires de leurs données.\n"
-"* 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 "
+"* Dans la mesure du possible, faites en sorte que les structures de données "
+"soient directement propriétaires de leurs données.\n"
+"* 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
@@ -4703,10 +5594,12 @@ msgstr "# Concevoir une bibliothèque"
#: src/exercises/day-1/book-library.md:3
#, fuzzy
msgid ""
-"We will learn much more about structs and the `Vec` type tomorrow. For now,\n"
+"We will learn much more about structs and the `Vec` type tomorrow. For "
+"now,\n"
"you just need to know part of its API:"
msgstr ""
-"Nous en apprendrons beaucoup plus sur les structures et le type `Vec` demain. Pour l'instant,\n"
+"Nous en apprendrons beaucoup plus sur les structures et le type `Vec` "
+"demain. Pour l'instant,\n"
"vous avez juste besoin de connaître une partie de son API :"
#: src/exercises/day-1/book-library.md:6
@@ -4715,27 +5608,29 @@ msgid ""
"fn main() {\n"
" let mut vec = vec![10, 20];\n"
" vec.push(30);\n"
-" println!(\"middle value: {}\", vec[vec.len() / 2]);\n"
-" for item in vec.iter() {\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:17
+#: src/exercises/day-1/book-library.md:18
#, fuzzy
msgid ""
"Use this to create a library application. Copy the code below to\n"
" 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\n"
-" et mettez à jour les types pour le faire compiler :"
+"Utilisez-le pour créer une application de bibliothèque. Copiez le code ci-"
+"dessous pour\n"
+" et mettez à jour les types pour le faire "
+"compiler :"
-#: src/exercises/day-1/book-library.md:20
+#: src/exercises/day-1/book-library.md:21
msgid ""
"```rust,should_panic\n"
-"\n"
"struct Library {\n"
" books: Vec,\n"
"}\n"
@@ -4755,36 +5650,36 @@ msgid ""
" }\n"
"}\n"
"\n"
-"// This makes it possible to print Book values with {}.\n"
-"impl std::fmt::Display for Book {\n"
-" fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n"
-" write!(f, \"{} ({})\", self.title, self.year)\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"
-" unimplemented!()\n"
+" todo!(\"Initialize and return a `Library` value\")\n"
" }\n"
"\n"
" //fn len(self) -> usize {\n"
-" // unimplemented!()\n"
+" // todo!(\"Return the length of `self.books`\")\n"
" //}\n"
"\n"
" //fn is_empty(self) -> bool {\n"
-" // unimplemented!()\n"
+" // todo!(\"Return `true` if `self.books` is empty\")\n"
" //}\n"
"\n"
" //fn add_book(self, book: Book) {\n"
-" // unimplemented!()\n"
+" // todo!(\"Add a new book to `self.books`\")\n"
" //}\n"
"\n"
" //fn print_books(self) {\n"
-" // unimplemented!()\n"
+" // todo!(\"Iterate over `self.books` and each book's title and "
+"year\")\n"
" //}\n"
"\n"
" //fn oldest_book(self) -> Option<&Book> {\n"
-" // unimplemented!()\n"
+" // todo!(\"Return a reference to the oldest book (if any)\")\n"
" //}\n"
"}\n"
"\n"
@@ -4795,29 +5690,29 @@ msgid ""
"fn main() {\n"
" let library = Library::new();\n"
"\n"
-" //println!(\"Our library is empty: {}\", library.is_empty());\n"
-"\n"
-" let favorite_book = Book::new(\"Lord of the Rings\", 1954);\n"
-" println!(\"Our favorite book {favorite_book} should go in the library\");\n"
-" //library.add_book(favorite_book);\n"
-" //library.add_book(Book::new(\"Alice's Adventures in Wonderland\", 1865));\n"
+" //println!(\"The library is empty: {}\", library.is_empty());\n"
+" //\n"
+" //library.add_book(Book::new(\"Lord of the Rings\", 1954));\n"
+" //library.add_book(Book::new(\"Alice's Adventures in Wonderland\", "
+"1865));\n"
+" //\n"
+" //println!(\"The library is no longer empty: {}\", library.is_empty());\n"
+" //\n"
" //\n"
" //library.print_books();\n"
" //\n"
" //match library.oldest_book() {\n"
-" // Some(book) => println!(\"My oldest book is {book}\"),\n"
-" // None => println!(\"My library is empty!\"),\n"
+" // Some(book) => println!(\"The oldest book is {}\", book.title),\n"
+" // None => println!(\"The library is empty!\"),\n"
" //}\n"
" //\n"
-" //println!(\"Our library has {} books\", library.len());\n"
-" for book in library.books {\n"
-" println!(\"{book}\");\n"
-" }\n"
+" //println!(\"The library has {} books\", library.len());\n"
+" //library.print_books();\n"
"}\n"
"```"
msgstr ""
-#: src/exercises/day-1/book-library.md:104
+#: 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)"
@@ -4832,12 +5727,15 @@ msgstr "# Itérateurs et propriété"
msgid ""
"The ownership model of Rust affects many APIs. An example of this is the\n"
"[`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) and\n"
-"[`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator.html)\n"
+"[`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator."
+"html)\n"
"traits."
msgstr ""
-"Le modèle de propriété de Rust affecte de nombreuses API. Un exemple en est le\n"
+"Le modèle de propriété de Rust affecte de nombreuses API. Un exemple en est "
+"le\n"
"[`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) et\n"
-"[`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator.html)\n"
+"[`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator."
+"html)\n"
"caractéristiques."
#: src/exercises/day-1/iterators-and-ownership.md:8
@@ -4848,11 +5746,15 @@ 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\n"
-"`Iterator` trait simply says that you can call `next` until you get `None` back:"
+"Traits are like interfaces: they describe behavior (methods) for a type. "
+"The\n"
+"`Iterator` trait simply says that you can call `next` until you get `None` "
+"back:"
msgstr ""
-"Les traits sont comme des interfaces : ils décrivent le comportement (méthodes) d'un type. Le\n"
-"Le trait `Iterator` indique simplement que vous pouvez appeler `next` jusqu'à ce que vous obteniez `None` :"
+"Les traits sont comme des interfaces : ils décrivent le comportement "
+"(méthodes) d'un type. Le\n"
+"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 ""
@@ -4916,10 +5818,13 @@ msgstr "## `IntoIterator`"
#, fuzzy
msgid ""
"The `Iterator` trait tells you how to _iterate_ once you have created an\n"
-"iterator. The related trait `IntoIterator` tells you how to create the iterator:"
+"iterator. The related trait `IntoIterator` tells you how to create the "
+"iterator:"
msgstr ""
-"Le trait `Iterator` vous indique comment _itérer_ une fois que vous avez créé un\n"
-"itérateur. Le trait connexe \"IntoIterator\" vous indique comment créer l'itérateur :"
+"Le trait `Iterator` vous indique comment _itérer_ une fois que vous avez "
+"créé un\n"
+"itérateur. Le trait connexe \"IntoIterator\" vous indique comment créer "
+"l'itérateur :"
#: src/exercises/day-1/iterators-and-ownership.md:53
msgid ""
@@ -4969,7 +5874,8 @@ msgstr "Comme précédemment, quel est le type retourné par l'itérateur ?"
msgid ""
"```rust,editable,compile_fail\n"
"fn main() {\n"
-" let v: Vec = vec![String::from(\"foo\"), String::from(\"bar\")];\n"
+" let v: Vec = vec![String::from(\"foo\"), String::"
+"from(\"bar\")];\n"
" let mut iter = v.into_iter();\n"
"\n"
" let v0: Option<..> = iter.next();\n"
@@ -4986,11 +5892,13 @@ 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.\n"
+"Now that we know both `Iterator` and `IntoIterator`, we can build `for` "
+"loops.\n"
"They call `into_iter()` on an expression and iterates over the resulting\n"
"iterator:"
msgstr ""
-"Maintenant que nous connaissons à la fois `Iterator` et `IntoIterator`, nous pouvons construire des boucles `for`.\n"
+"Maintenant que nous connaissons à la fois `Iterator` et `IntoIterator`, nous "
+"pouvons construire des boucles `for`.\n"
"Ils appellent `into_iter()` sur une expression et itèrent sur le résultat\n"
"itérateur :"
@@ -4998,7 +5906,8 @@ msgstr ""
msgid ""
"```rust,editable\n"
"fn main() {\n"
-" let v: Vec = vec![String::from(\"foo\"), String::from(\"bar\")];\n"
+" let v: Vec = vec![String::from(\"foo\"), String::"
+"from(\"bar\")];\n"
"\n"
" for word in &v {\n"
" println!(\"word: {word}\");\n"
@@ -5019,18 +5928,24 @@ 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\n"
+"Experiment with the code above and then consult the documentation for "
+"[`impl\n"
"IntoIterator for\n"
-"&Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-for-%26%27a%20Vec%3CT%2C%20A%3E)\n"
+"&Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-"
+"IntoIterator-for-%26%27a%20Vec%3CT%2C%20A%3E)\n"
"and [`impl IntoIterator for\n"
-"Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-for-Vec%3CT%2C%20A%3E)\n"
+"Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-"
+"for-Vec%3CT%2C%20A%3E)\n"
"to check your answers."
msgstr ""
-"Expérimentez avec le code ci-dessus, puis consultez la documentation de [`impl\n"
+"Expérimentez avec le code ci-dessus, puis consultez la documentation de "
+"[`impl\n"
"IntoIterator pour\n"
-"&Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-for-%26%27a%20Vec%3CT%2C%20A%3E)\n"
+"&Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-"
+"IntoIterator-for-%26%27a%20Vec%3CT%2C%20A%3E)\n"
"et [`impl IntoIterator for\n"
-"Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-for-Vec%3CT%2C%20A%3E)\n"
+"Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-"
+"for-Vec%3CT%2C%20A%3E)\n"
"pour vérifier vos réponses."
#: src/welcome-day-2.md:1
@@ -5041,7 +5956,9 @@ 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 :"
+msgstr ""
+"Maintenant que nous avons vu une bonne quantité de Rust, nous allons "
+"continuer avec :"
#: src/welcome-day-2.md:5
#, fuzzy
@@ -5050,22 +5967,27 @@ msgid ""
"\n"
"* Pattern matching: destructuring enums, structs, and arrays.\n"
"\n"
-"* Control flow constructs: `if`, `if let`, `while`, `while let`, `break`, and\n"
+"* Control flow constructs: `if`, `if let`, `while`, `while let`, `break`, "
+"and\n"
" `continue`.\n"
"\n"
-"* The Standard Library: `String`, `Option` and `Result`, `Vec`, `HashMap`, `Rc`\n"
+"* The Standard Library: `String`, `Option` and `Result`, `Vec`, `HashMap`, "
+"`Rc`\n"
" and `Arc`.\n"
"\n"
"* Modules: visibility, paths, and filesystem hierarchy."
msgstr ""
"* Structures, énumérations, méthodes.\n"
"\n"
-"* Pattern matching : déstructuration des énumérations, des structures et des tableaux.\n"
+"* Pattern matching : déstructuration des énumérations, des structures et des "
+"tableaux.\n"
"\n"
-"* Constructions de flux de contrôle : `if`, `if let`, `while`, `while let`, `break` et\n"
+"* Constructions de flux de contrôle : `if`, `if let`, `while`, `while let`, "
+"`break` et\n"
" 'continuer'.\n"
"\n"
-"* La bibliothèque standard : `String`, `Option` et `Result`, `Vec`, `HashMap`, `Rc`\n"
+"* La bibliothèque standard : `String`, `Option` et `Result`, `Vec`, "
+"`HashMap`, `Rc`\n"
" et \"Arc\".\n"
"\n"
"* Modules : visibilité, chemins et hiérarchie du système de fichiers."
@@ -5107,27 +6029,30 @@ msgid ""
"```"
msgstr ""
-#: src/structs.md:29
+#: src/structs.md:31 src/enums.md:33 src/enums/sizes.md:29 src/methods.md:30
+#: src/methods/example.md:46 src/pattern-matching.md:25
+#: src/pattern-matching/match-guards.md:22 src/control-flow/blocks.md:42
#, fuzzy
-msgid ""
-"\n"
-"Key Points: "
-msgstr ""
-"\n"
-"Points clés:"
+msgid "Key Points:"
+msgstr "Points clés:"
-#: src/structs.md:32
+#: src/structs.md:33
msgid ""
"* Structs work like in C or C++.\n"
" * Like in C++, and unlike in C, no typedef is needed to define a type.\n"
" * Unlike in C++, there is no inheritance between structs.\n"
-"* Methods are defined in an `impl` block, which we will see in following slides.\n"
-"* This may be a good time to let people know there are different types of structs. \n"
-" * Zero-sized structs `e.g., struct Foo;` might be used when implementing a trait on some type but don’t have any data that you want to store in "
-"the value itself. \n"
-" * The next slide will introduce Tuple structs, used when the field names are not important.\n"
-"* The syntax `..peter` allows us to copy the majority of the fields from the old struct without having to explicitly type it all out. It must always "
-"be the last element."
+"* Methods are defined in an `impl` block, which we will see in following "
+"slides.\n"
+"* This may be a good time to let people know there are different types of "
+"structs. \n"
+" * Zero-sized structs `e.g., struct Foo;` might be used when implementing a "
+"trait on some type but don’t have any data that you want to store in the "
+"value itself. \n"
+" * The next slide will introduce Tuple structs, used when the field names "
+"are not important.\n"
+"* The syntax `..peter` allows us to copy the majority of the fields from the "
+"old struct without having to explicitly type it all out. It must always be "
+"the last element."
msgstr ""
#: src/structs/tuple-structs.md:1
@@ -5138,7 +6063,9 @@ msgstr "# Structures de tuple"
#: 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 :"
+msgstr ""
+"Si les noms de champ ne sont pas importants, vous pouvez utiliser une "
+"structure tuple :"
#: src/structs/tuple-structs.md:5
msgid ""
@@ -5155,15 +6082,16 @@ 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):"
+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 PoundOfForce(f64);\n"
+"struct PoundsOfForce(f64);\n"
"struct Newtons(f64);\n"
"\n"
-"fn compute_thruster_force() -> PoundOfForce {\n"
+"fn compute_thruster_force() -> PoundsOfForce {\n"
" todo!(\"Ask a rocket scientist at NASA\")\n"
"}\n"
"\n"
@@ -5182,20 +6110,29 @@ 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:\n"
+"* Newtypes are a great way to encode additional information about the value "
+"in a primitive type, for example:\n"
" * The number is measured in some units: `Newtons` in the example above.\n"
-" * The value passed some validation when it was created, so you no longer have to validate it again at every use: 'PhoneNumber(String)` or "
+" * The value passed some validation when it was created, so you no longer "
+"have to validate it again at every use: 'PhoneNumber(String)` or "
"`OddNumber(u32)`.\n"
-"* Demonstrate how to add a `f64` value to a `Newtons` type by accessing the single field in the newtype.\n"
-" * Rust generally doesn’t like inexplicit things, like automatic unwrapping or for instance using booleans as integers.\n"
+"* Demonstrate how to add a `f64` value to a `Newtons` type by accessing the "
+"single field in the newtype.\n"
+" * Rust generally doesn’t like inexplicit things, like automatic "
+"unwrapping or for instance using booleans as integers.\n"
" * Operator overloading is discussed on Day 3 (generics). "
msgstr ""
-"* Les nouveaux types sont un excellent moyen d'encoder des informations supplémentaires sur la valeur dans un type primitif, par exemple :\n"
-" * Le nombre est mesuré dans certaines unités : `Newtons` dans l'exemple ci-dessus.\n"
-" * 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 "
+"* Les nouveaux types sont un excellent moyen d'encoder des informations "
+"supplémentaires sur la valeur dans un type primitif, par exemple :\n"
+" * Le nombre est mesuré dans certaines unités : `Newtons` dans l'exemple ci-"
+"dessus.\n"
+" * 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)`.\n"
-"* Montrez comment ajouter une valeur `f64` à un type `Newtons` en accédant au champ unique dans le nouveau type.\n"
-" * 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.\n"
+"* Montrez comment ajouter une valeur `f64` à un type `Newtons` en accédant "
+"au champ unique dans le nouveau type.\n"
+" * 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.\n"
" * La surcharge des opérateurs est discutée le jour 3 (génériques)."
#: src/structs/field-shorthand.md:1
@@ -5236,7 +6173,8 @@ msgstr ""
#: src/structs/field-shorthand.md:27
msgid ""
-"* The `new` function could be written using `Self` as a type, as it is interchangeable with the struct type name\n"
+"* The `new` function could be written using `Self` as a type, as it is "
+"interchangeable with the struct type name\n"
"\n"
" ```rust,editable\n"
" #[derive(Debug)]\n"
@@ -5250,7 +6188,8 @@ msgid ""
" }\n"
" }\n"
" ``` \n"
-"* Implement the `Default` trait for the struct. Define some fields and use the default values for the other fields.\n"
+"* Implement the `Default` trait for the struct. Define some fields and use "
+"the default values for the other fields.\n"
"\n"
" ```rust,editable\n"
" #[derive(Debug)]\n"
@@ -5278,7 +6217,8 @@ msgid ""
" ```\n"
"\n"
"* Methods are defined in the `impl` block.\n"
-"* Use struct update syntax to define a new structure using `peter`. Note that the variable `peter` will no longer be accessible afterwards.\n"
+"* Use struct update syntax to define a new structure using `peter`. Note "
+"that the variable `peter` will no longer be accessible afterwards.\n"
"* Use `{:#?}` when printing structs to request the `Debug` representation."
msgstr ""
@@ -5324,32 +6264,34 @@ msgid ""
"```"
msgstr ""
-#: src/enums.md:33 src/enums/sizes.md:29 src/methods.md:30 src/methods/example.md:46 src/pattern-matching.md:25 src/pattern-matching/match-guards.md:22
-#: src/control-flow/blocks.md:42
-#, fuzzy
-msgid "Key Points:"
-msgstr "Points clés:"
-
#: src/enums.md:35
#, fuzzy
msgid ""
"* Enumerations allow you to collect a set of values under one type\n"
-"* This page offers an enum type `CoinFlip` with two variants `Heads` and `Tail`. You might note the namespace when using variants.\n"
+"* This page offers an enum type `CoinFlip` with two variants `Heads` and "
+"`Tail`. You might note the namespace when using variants.\n"
"* This might be a good time to compare Structs and Enums:\n"
-" * In both, you can have a simple version without fields (unit struct) or one with different types of fields (variant payloads). \n"
+" * In both, you can have a simple version without fields (unit struct) or "
+"one with different types of fields (variant payloads). \n"
" * In both, associated functions are defined within an `impl` block.\n"
-" * You could even implement the different variants of an enum with separate structs but then they wouldn’t be the same type as they would if they "
-"were all defined in an enum. "
+" * You could even implement the different variants of an enum with separate "
+"structs but then they wouldn’t be the same type as they would if they were "
+"all defined in an enum. "
msgstr ""
-"* Les énumérations vous permettent de collecter un ensemble de valeurs sous un type\n"
-"* 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 de variantes.\n"
+"* Les énumérations vous permettent de collecter un ensemble de valeurs sous "
+"un type\n"
+"* 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 "
+"de variantes.\n"
"* C'est peut-être le bon moment pour comparer Structs et Enums :\n"
-" * Dans les deux cas, vous pouvez avoir une version simple sans champs (structure d'unité) ou une version avec différents types de champs (charges "
+" * Dans les deux cas, vous pouvez avoir une version simple sans champs "
+"(structure d'unité) ou une version avec différents types de champs (charges "
"utiles variantes).\n"
-" * Dans les deux cas, les fonctions associées sont définies dans un bloc `impl`.\n"
-" * Vous pouvez même implémenter les différentes variantes d'une énumération avec des structures distinctes, mais elles ne seraient alors pas du "
-"même type que si elles étaient toutes définies dans une énumération."
+" * Dans les deux cas, les fonctions associées sont définies dans un bloc "
+"`impl`.\n"
+" * Vous pouvez même implémenter les différentes variantes d'une énumération "
+"avec des structures distinctes, mais elles ne seraient alors pas du même "
+"type que si elles étaient toutes définies dans une énumération."
#: src/enums/variant-payloads.md:1
#, fuzzy
@@ -5359,10 +6301,12 @@ msgstr "# Charges utiles variantes"
#: src/enums/variant-payloads.md:3
#, fuzzy
msgid ""
-"You can define richer enums where the variants carry data. You can then use the\n"
+"You can define richer enums where the variants carry data. You can then use "
+"the\n"
"`match` statement to extract the data from each variant:"
msgstr ""
-"Vous pouvez définir des énumérations plus riches où les variantes transportent des données. Vous pouvez ensuite utiliser le\n"
+"Vous pouvez définir des énumérations plus riches où les variantes "
+"transportent des données. Vous pouvez ensuite utiliser le\n"
"instruction `match` pour extraire les données de chaque variante :"
#: src/enums/variant-payloads.md:6
@@ -5398,33 +6342,48 @@ msgstr ""
#: src/enums/variant-payloads.md:35
#, fuzzy
msgid ""
-"* The values in the enum variants can only be accessed after being pattern matched. The pattern binds references to the fields in the \"match arm\" "
+"* The values in the enum variants can only be accessed after being pattern "
+"matched. The pattern binds references to the fields in the \"match arm\" "
"after the `=>`.\n"
-" * The expression is matched against the patterns from top to bottom. There is no fall-through like in C or C++.\n"
-" * The match expression has a value. The value is the last expression in the match arm which was executed.\n"
-" * Starting from the top we look for what pattern matches the value then run the code following the arrow. Once we find a match, we stop. \n"
-"* Demonstrate what happens when the search is inexhaustive. Note the advantage the Rust compiler provides by confirming when all cases are "
+" * The expression is matched against the patterns from top to bottom. There "
+"is no fall-through like in C or C++.\n"
+" * The match expression has a value. The value is the last expression in "
+"the match arm which was executed.\n"
+" * Starting from the top we look for what pattern matches the value then "
+"run the code following the arrow. Once we find a match, we stop. \n"
+"* Demonstrate what happens when the search is inexhaustive. Note the "
+"advantage the Rust compiler provides by confirming when all cases are "
"handled. \n"
"* `match` inspects a hidden discriminant field in the `enum`.\n"
-"* It is possible to retrieve the discriminant by calling `std::mem::discriminant()`\n"
-" * This is useful, for example, if implementing `PartialEq` for structs where comparing field values doesn't affect equality.\n"
-"* `WebEvent::Click { ... }` is not exactly the same as `WebEvent::Click(Click)` with a top level `struct Click { ... }`. The inlined version cannot "
-"implement traits, for example. \n"
+"* It is possible to retrieve the discriminant by calling `std::mem::"
+"discriminant()`\n"
+" * This is useful, for example, if implementing `PartialEq` for structs "
+"where comparing field values doesn't affect equality.\n"
+"* `WebEvent::Click { ... }` is not exactly the same as `WebEvent::"
+"Click(Click)` with a top level `struct Click { ... }`. The inlined version "
+"cannot implement traits, for example. \n"
" "
msgstr ""
-"* Les valeurs des variantes enum ne sont accessibles qu'après avoir été mises en correspondance avec le modèle. Le modèle lie les références aux "
+"* Les valeurs des variantes enum ne sont accessibles qu'après avoir été "
+"mises en correspondance avec le modèle. Le modèle lie les références aux "
"champs dans le \"match arm\" après le `=>`.\n"
-" * L'expression est comparée aux modèles de haut en bas. Il n'y a pas de basculement comme en C ou C++.\n"
-" * L'expression de correspondance a une valeur. La valeur est la dernière expression du bras de correspondance qui a été exécutée.\n"
-" * En partant du haut, nous cherchons quel modèle correspond à la valeur, puis exécutons le code en suivant la flèche. Une fois que nous trouvons "
-"une correspondance, nous nous arrêtons.\n"
-"* Démontrer ce qui se passe lorsque la recherche est inépuisable. Notez l'avantage que le compilateur Rust fournit en confirmant quand tous les cas "
+" * L'expression est comparée aux modèles de haut en bas. Il n'y a pas de "
+"basculement comme en C ou C++.\n"
+" * L'expression de correspondance a une valeur. La valeur est la dernière "
+"expression du bras de correspondance qui a été exécutée.\n"
+" * En partant du haut, nous cherchons quel modèle correspond à la valeur, "
+"puis exécutons le code en suivant la flèche. Une fois que nous trouvons une "
+"correspondance, nous nous arrêtons.\n"
+"* Démontrer ce qui se passe lorsque la recherche est inépuisable. Notez "
+"l'avantage que le compilateur Rust fournit en confirmant quand tous les cas "
"sont traités.\n"
"* `match` inspecte un champ discriminant caché dans `enum`.\n"
-"* Il est possible de récupérer le discriminant en appelant `std::mem::discriminant()`\n"
-" * Ceci est utile, par exemple, si vous implémentez `PartialEq` pour des structures où la comparaison des valeurs de champ n'affecte pas "
-"l'égalité.\n"
-"* `WebEvent::Click { ... }` n'est pas exactement le même que `WebEvent::Click(Click)` avec un niveau supérieur `struct Click { ... }`. La version en "
+"* Il est possible de récupérer le discriminant en appelant `std::mem::"
+"discriminant()`\n"
+" * Ceci est utile, par exemple, si vous implémentez `PartialEq` pour des "
+"structures où la comparaison des valeurs de champ n'affecte pas l'égalité.\n"
+"* `WebEvent::Click { ... }` n'est pas exactement le même que `WebEvent::"
+"Click(Click)` avec un niveau supérieur `struct Click { ... }`. La version en "
"ligne ne peut pas implémenter de traits, par exemple.\n"
" "
@@ -5435,8 +6394,12 @@ msgstr "# Tailles d'énumération"
#: src/enums/sizes.md:3
#, fuzzy
-msgid "Rust enums are packed tightly, taking constraints due to alignment into account:"
-msgstr "Les énumérations de rouille sont emballées étroitement, en tenant compte des contraintes dues à l'alignement :"
+msgid ""
+"Rust enums are packed tightly, taking constraints due to alignment into "
+"account:"
+msgstr ""
+"Les énumérations de rouille sont emballées étroitement, en tenant compte des "
+"contraintes dues à l'alignement :"
#: src/enums/sizes.md:5
msgid ""
@@ -5463,14 +6426,20 @@ msgstr ""
#: src/enums/sizes.md:25
#, fuzzy
-msgid "* See the [Rust Reference](https://doc.rust-lang.org/reference/type-layout.html)."
-msgstr "* Voir la [Rust Reference](https://doc.rust-lang.org/reference/type-layout.html)."
+msgid ""
+"* See the [Rust Reference](https://doc.rust-lang.org/reference/type-layout."
+"html)."
+msgstr ""
+"* Voir la [Rust Reference](https://doc.rust-lang.org/reference/type-layout."
+"html)."
#: src/enums/sizes.md:31
msgid ""
-" * Internally Rust is using a field (discriminant) to keep track of the enum variant.\n"
+" * Internally Rust is using a field (discriminant) to keep track of the enum "
+"variant.\n"
"\n"
-" * You can control the discriminant if needed (e.g., for compatibility with C):\n"
+" * You can control the discriminant if needed (e.g., for compatibility with "
+"C):\n"
" \n"
" ```rust,editable\n"
" #[repr(u32)]\n"
@@ -5487,33 +6456,41 @@ msgid ""
" }\n"
" ```\n"
"\n"
-" Without `repr`, the discriminant type takes 2 bytes, because 10001 fits 2\n"
+" Without `repr`, the discriminant type takes 2 bytes, because 10001 fits "
+"2\n"
" bytes.\n"
"\n"
"\n"
" * Try out other types such as\n"
" \n"
" * `dbg_size!(bool)`: size 1 bytes, align: 1 bytes,\n"
-" * `dbg_size!(Option)`: size 1 bytes, align: 1 bytes (niche optimization, see below),\n"
-" * `dbg_size!(&i32)`: size 8 bytes, align: 8 bytes (on a 64-bit machine),\n"
-" * `dbg_size!(Option<&i32>)`: size 8 bytes, align: 8 bytes (null pointer optimization, see below).\n"
+" * `dbg_size!(Option)`: size 1 bytes, align: 1 bytes (niche "
+"optimization, see below),\n"
+" * `dbg_size!(&i32)`: size 8 bytes, align: 8 bytes (on a 64-bit "
+"machine),\n"
+" * `dbg_size!(Option<&i32>)`: size 8 bytes, align: 8 bytes (null pointer "
+"optimization, see below).\n"
"\n"
" * Niche optimization: Rust will merge use unused bit patterns for the enum\n"
" discriminant.\n"
"\n"
" * Null pointer optimization: For [some\n"
-" types](https://doc.rust-lang.org/std/option/#representation), Rust guarantees\n"
+" types](https://doc.rust-lang.org/std/option/#representation), Rust "
+"guarantees\n"
" that `size_of::()` equals `size_of::