diff --git a/po/pt-BR.po b/po/pt-BR.po
index 0f70ec71..11c10eb6 100644
--- a/po/pt-BR.po
+++ b/po/pt-BR.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Comprehensive Rust 🦀\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2023-06-09 09:32-0300\n"
+"PO-Revision-Date: 2023-06-29 13:11-0700\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: pt_BR\n"
@@ -10,7 +10,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Poedit 3.3.1\n"
+"X-Generator: Poedit 3.3.2\n"
#: src/SUMMARY.md:3
msgid "Welcome to Comprehensive Rust 🦀"
@@ -18,7 +18,7 @@ msgstr "Bem-vindo ao Comprehensive Rust 🦀"
#: src/SUMMARY.md:4
msgid "Running the Course"
-msgstr "Executando o Curso"
+msgstr "Conduzindo o Curso"
#: src/SUMMARY.md:5
msgid "Course Structure"
@@ -26,11 +26,11 @@ msgstr "Estrutura do Curso"
#: src/SUMMARY.md:6
msgid "Keyboard Shortcuts"
-msgstr "Atalhos do Teclado"
+msgstr "Atalhos de Teclado"
#: src/SUMMARY.md:7
msgid "Translations"
-msgstr ""
+msgstr "Traduções"
#: src/SUMMARY.md:8
msgid "Using Cargo"
@@ -52,8 +52,8 @@ msgstr "Executando o Cargo Localmente"
msgid "Day 1: Morning"
msgstr "Dia 1: Manhã"
-#: src/SUMMARY.md:18 src/SUMMARY.md:75 src/SUMMARY.md:128 src/SUMMARY.md:185
-#: src/SUMMARY.md:211 src/SUMMARY.md:259
+#: src/SUMMARY.md:18 src/SUMMARY.md:75 src/SUMMARY.md:128 src/SUMMARY.md:185 src/SUMMARY.md:211
+#: src/SUMMARY.md:261
msgid "Welcome"
msgstr "Bem-vindo"
@@ -103,7 +103,7 @@ msgstr "Referências"
#: src/SUMMARY.md:30
msgid "Dangling References"
-msgstr "Referências Pendentes"
+msgstr "Referências Soltas"
#: src/SUMMARY.md:31
msgid "Slices"
@@ -279,7 +279,7 @@ msgstr "Tamanhos de Enum"
msgid "Method Receiver"
msgstr "Receptor de Método"
-#: src/SUMMARY.md:84 src/SUMMARY.md:159 src/SUMMARY.md:272
+#: src/SUMMARY.md:84 src/SUMMARY.md:159 src/SUMMARY.md:274
msgid "Example"
msgstr "Exemplo"
@@ -297,7 +297,7 @@ msgstr "Desestruturando Structs"
#: src/SUMMARY.md:88
msgid "Destructuring Arrays"
-msgstr "Desestruturando Vetores"
+msgstr "Desestruturando Matrizes"
#: src/SUMMARY.md:89
msgid "Match Guards"
@@ -315,7 +315,7 @@ msgstr "Pontos e Polígonos"
msgid "Day 2: Afternoon"
msgstr "Dia 2: Tarde"
-#: src/SUMMARY.md:96 src/SUMMARY.md:286
+#: src/SUMMARY.md:96 src/SUMMARY.md:288
msgid "Control Flow"
msgstr "Controle de Fluxo"
@@ -599,7 +599,7 @@ msgstr "Implementando Traits Inseguros"
msgid "Safe FFI Wrapper"
msgstr "Invólucro FFI seguro"
-#: src/SUMMARY.md:181 src/SUMMARY.md:249
+#: src/SUMMARY.md:181 src/SUMMARY.md:251
msgid "Android"
msgstr "Android"
@@ -647,7 +647,7 @@ msgstr "Cliente"
msgid "Changing API"
msgstr "Alterando API"
-#: src/SUMMARY.md:197 src/SUMMARY.md:240
+#: src/SUMMARY.md:197 src/SUMMARY.md:241
msgid "Logging"
msgstr "Gerando Registros (Log)"
@@ -744,14 +744,18 @@ msgid "Application Processors"
msgstr ""
#: src/SUMMARY.md:231
-msgid "Inline Assembly"
+msgid "Getting Ready to Rust"
msgstr ""
#: src/SUMMARY.md:232
-msgid "MMIO"
+msgid "Inline Assembly"
msgstr ""
#: src/SUMMARY.md:233
+msgid "MMIO"
+msgstr ""
+
+#: src/SUMMARY.md:234
msgid "Let's Write a UART Driver"
msgstr ""
@@ -759,19 +763,19 @@ msgstr ""
msgid "More Traits"
msgstr "Mais Traits (Características)"
-#: src/SUMMARY.md:235
+#: src/SUMMARY.md:236
msgid "A Better UART Driver"
msgstr ""
-#: src/SUMMARY.md:236
+#: src/SUMMARY.md:237
msgid "Bitflags"
msgstr ""
-#: src/SUMMARY.md:237
+#: src/SUMMARY.md:238
msgid "Multiple Registers"
msgstr ""
-#: src/SUMMARY.md:238
+#: src/SUMMARY.md:239
msgid "Driver"
msgstr ""
@@ -780,34 +784,39 @@ msgid "Using It"
msgstr "Usando o Cargo"
#: src/SUMMARY.md:243
+#, fuzzy
+msgid "Exceptions"
+msgstr "Funções"
+
+#: src/SUMMARY.md:245
msgid "Useful Crates"
msgstr ""
-#: src/SUMMARY.md:244
+#: src/SUMMARY.md:246
msgid "zerocopy"
msgstr ""
-#: src/SUMMARY.md:245
+#: src/SUMMARY.md:247
msgid "aarch64-paging"
msgstr ""
-#: src/SUMMARY.md:246
+#: src/SUMMARY.md:248
msgid "buddy_system_allocator"
msgstr ""
-#: src/SUMMARY.md:247
+#: src/SUMMARY.md:249
msgid "tinyvec"
msgstr ""
-#: src/SUMMARY.md:248
+#: src/SUMMARY.md:250
msgid "spin"
msgstr ""
-#: src/SUMMARY.md:250
+#: src/SUMMARY.md:252
msgid "vmbase"
msgstr ""
-#: src/SUMMARY.md:252
+#: src/SUMMARY.md:254
msgid "RTC Driver"
msgstr ""
@@ -815,51 +824,51 @@ msgstr ""
msgid "Concurrency: Morning"
msgstr "Concorrência: Manhã"
-#: src/SUMMARY.md:260
+#: src/SUMMARY.md:262
msgid "Threads"
msgstr "Threads"
-#: src/SUMMARY.md:261
+#: src/SUMMARY.md:263
msgid "Scoped Threads"
msgstr "Threads com Escopo"
-#: src/SUMMARY.md:262
+#: src/SUMMARY.md:264
msgid "Channels"
msgstr "Canais (channels)"
-#: src/SUMMARY.md:263
+#: src/SUMMARY.md:265
msgid "Unbounded Channels"
msgstr "Canais Ilimitados"
-#: src/SUMMARY.md:264
+#: src/SUMMARY.md:266
msgid "Bounded Channels"
msgstr "Canais Delimitados"
-#: src/SUMMARY.md:265
+#: src/SUMMARY.md:267
msgid "Send and Sync"
msgstr "Send e Sync"
-#: src/SUMMARY.md:265
+#: src/SUMMARY.md:267
msgid "Send"
msgstr "Send"
-#: src/SUMMARY.md:265
+#: src/SUMMARY.md:267
msgid "Sync"
msgstr "Sync"
-#: src/SUMMARY.md:268
+#: src/SUMMARY.md:270
msgid "Examples"
msgstr "Exemplos"
-#: src/SUMMARY.md:269
+#: src/SUMMARY.md:271
msgid "Shared State"
msgstr "Estado Compartilhado"
-#: src/SUMMARY.md:270
+#: src/SUMMARY.md:272
msgid "Arc"
msgstr "Arc"
-#: src/SUMMARY.md:271
+#: src/SUMMARY.md:273
msgid "Mutex"
msgstr "Mutex"
@@ -867,7 +876,7 @@ msgstr "Mutex"
msgid "Dining Philosophers"
msgstr "Filósofos Jantando"
-#: src/SUMMARY.md:275
+#: src/SUMMARY.md:277
msgid "Multi-threaded Link Checker"
msgstr "Verificador de Links Multi-Threads"
@@ -875,15 +884,15 @@ msgstr "Verificador de Links Multi-Threads"
msgid "Concurrency: Afternoon"
msgstr "Concorrência: Tarde"
-#: src/SUMMARY.md:279
+#: src/SUMMARY.md:281
msgid "Async Basics"
msgstr ""
-#: src/SUMMARY.md:280
+#: src/SUMMARY.md:282
msgid "async/await"
msgstr ""
-#: src/SUMMARY.md:281
+#: src/SUMMARY.md:283
msgid "Futures"
msgstr ""
@@ -891,7 +900,7 @@ msgstr ""
msgid "Runtimes"
msgstr "Tempos de Execução"
-#: src/SUMMARY.md:283
+#: src/SUMMARY.md:285
msgid "Tokio"
msgstr ""
@@ -903,23 +912,23 @@ msgstr "Tarefas"
msgid "Async Channels"
msgstr "Canais Assíncronos"
-#: src/SUMMARY.md:287
+#: src/SUMMARY.md:289
msgid "Join"
msgstr ""
-#: src/SUMMARY.md:288
+#: src/SUMMARY.md:290
msgid "Select"
msgstr ""
-#: src/SUMMARY.md:289
+#: src/SUMMARY.md:291
msgid "Pitfalls"
msgstr ""
-#: src/SUMMARY.md:290
+#: src/SUMMARY.md:292
msgid "Blocking the Executor"
msgstr ""
-#: src/SUMMARY.md:291
+#: src/SUMMARY.md:293
msgid "Pin"
msgstr ""
@@ -1000,7 +1009,10 @@ msgid "# Welcome to Comprehensive Rust 🦀"
msgstr "# Bem-vindo ao Comprehensive Rust 🦀"
#: src/welcome.md:3
-msgid "[![Build workflow](https://img.shields.io/github/actions/workflow/status/google/comprehensive-rust/build.yml?style=flat-square)](https://github.com/google/comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain)"
+msgid ""
+"[![Build workflow](https://img.shields.io/github/actions/workflow/status/google/comprehensive-rust/"
+"build.yml?style=flat-square)](https://github.com/google/comprehensive-rust/actions/workflows/build."
+"yml?query=branch%3Amain)"
msgstr ""
#: src/welcome.md:3
@@ -1009,8 +1021,11 @@ msgstr ""
#: src/welcome.md:3
msgid ""
-"[![Build workflow](https://img.shields.io/github/actions/workflow/status/google/comprehensive-rust/build.yml?style=flat-square)](https://github.com/google/comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain)\n"
-"[![GitHub contributors](https://img.shields.io/github/contributors/google/comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/graphs/contributors)"
+"[![Build workflow](https://img.shields.io/github/actions/workflow/status/google/comprehensive-rust/"
+"build.yml?style=flat-square)](https://github.com/google/comprehensive-rust/actions/workflows/build."
+"yml?query=branch%3Amain)\n"
+"[![GitHub contributors](https://img.shields.io/github/contributors/google/comprehensive-rust?"
+"style=flat-square)](https://github.com/google/comprehensive-rust/graphs/contributors)"
msgstr ""
#: src/welcome.md:4
@@ -1019,8 +1034,10 @@ msgstr ""
#: src/welcome.md:4
msgid ""
-"[![GitHub contributors](https://img.shields.io/github/contributors/google/comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/graphs/contributors)\n"
-"[![GitHub stars](https://img.shields.io/github/stars/google/comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/stargazers)"
+"[![GitHub contributors](https://img.shields.io/github/contributors/google/comprehensive-rust?"
+"style=flat-square)](https://github.com/google/comprehensive-rust/graphs/contributors)\n"
+"[![GitHub stars](https://img.shields.io/github/stars/google/comprehensive-rust?style=flat-square)]"
+"(https://github.com/google/comprehensive-rust/stargazers)"
msgstr ""
"[![Contribuições no GitHub](https://img.shields.io/github/contributors/google/comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/graphs/contributors)\n"
"[![Estrelas no GitHub](https://img.shields.io/github/stars/google/comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/stargazers)"
@@ -1030,7 +1047,9 @@ msgid "GitHub stars"
msgstr ""
#: src/welcome.md:5
-msgid "[![GitHub stars](https://img.shields.io/github/stars/google/comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/stargazers)"
+msgid ""
+"[![GitHub stars](https://img.shields.io/github/stars/google/comprehensive-rust?style=flat-square)]"
+"(https://github.com/google/comprehensive-rust/stargazers)"
msgstr ""
#: src/welcome.md:7
@@ -1048,7 +1067,7 @@ msgid ""
"The goal of the course is to teach you Rust. We assume you don't know anything\n"
"about Rust and hope to:"
msgstr ""
-"O objetivo do curso é ensinar Rust a você. Nós assumimos que você não sabe nada\n"
+"O objetivo do curso é ensinar Rust a você. Nós assumimos que você não saiba nada\n"
"sobre Rust e esperamos:"
#: src/welcome.md:14
@@ -1066,6 +1085,8 @@ msgid ""
"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 ""
+"Os três primeiros dias lhe mostram os fundamentos de Rust. Em seguida, você está\n"
+"convidado(a) a mergulhar a fundo em um ou mais tópicos especializados:"
#: src/welcome.md:21
msgid ""
@@ -1079,6 +1100,15 @@ msgid ""
" mutexes) and async/await concurrency (cooperative multitasking using\n"
" futures)."
msgstr ""
+"* [Android](android.md): um curso de meio dia sobre a utilização de Rust no desenvolvimento para a plataforma\n"
+"Android (AOSP). Isto inclui interoperabilidade com C, C++ e Java.\n"
+"* [Bare-metal](bare-metal.md): uma aula de um dia sobre a utilização de Rust para o desenvolvimento\n"
+"\"bare metal\" (sistema embarcado). Tanto micro-controladores quanto processadores de aplicação são\n"
+" cobertos.\n"
+"* [Concorrência](concurrency.md): uma aula de um dia inteiro sobre concorrência em Rust. Nós\n"
+" cobrimos tanto concorrência clássica (escalonamento preemptivo utilizando threads e\n"
+" mutexes) quanto concorrência async/await (multitarefa cooperativa utilizando\n"
+" _futures_)."
#: src/welcome.md:32
msgid "## Non-Goals"
@@ -1104,7 +1134,7 @@ msgstr ""
#: src/welcome.md:41
msgid "## Assumptions"
-msgstr "## Suposições"
+msgstr "## Premissas"
#: src/welcome.md:43
msgid ""
@@ -1113,8 +1143,8 @@ msgid ""
"explain or contrast the Rust approach."
msgstr ""
"O curso pressupõe que você já saiba programar. Rust é uma linguagem de tipagem estática\n"
-"e às vezes comparamos com C e C++ para melhor\n"
-"explicar ou contrastar a abordagem Rust."
+"e ocasionalmente faremos comparações com C e C++ para melhor\n"
+"explicar ou contrastar a abordagem do Rust."
#: src/welcome.md:47
msgid ""
@@ -1124,19 +1154,17 @@ msgstr ""
"Se você sabe programar em uma linguagem de tipagem dinâmica, como Python ou\n"
"JavaScript, então você também será capaz de acompanhar."
-#: src/welcome.md:50 src/cargo/rust-ecosystem.md:19
-#: src/cargo/code-samples.md:22 src/cargo/running-locally.md:68
-#: src/welcome-day-1.md:14 src/welcome-day-1/what-is-rust.md:19
+#: src/welcome.md:50 src/cargo/rust-ecosystem.md:19 src/cargo/code-samples.md:22
+#: src/cargo/running-locally.md:68 src/welcome-day-1.md:14 src/welcome-day-1/what-is-rust.md:19
#: src/hello-world.md:20 src/hello-world/small-example.md:21 src/why-rust.md:9
-#: src/why-rust/compile-time.md:14 src/why-rust/runtime.md:8
-#: src/why-rust/modern.md:19 src/basic-syntax/scalar-types.md:19
-#: src/basic-syntax/compound-types.md:28 src/basic-syntax/references.md:21
-#: src/basic-syntax/slices.md:18 src/basic-syntax/string-slices.md:25
-#: src/basic-syntax/functions.md:33 src/basic-syntax/rustdoc.md:22
-#: src/basic-syntax/methods.md:32 src/basic-syntax/functions-interlude.md:25
-#: src/exercises/day-1/morning.md:9 src/exercises/day-1/for-loops.md:90
-#: src/basic-syntax/variables.md:15 src/basic-syntax/type-inference.md:24
-#: src/basic-syntax/static-and-const.md:46
+#: src/why-rust/compile-time.md:14 src/why-rust/runtime.md:8 src/why-rust/modern.md:19
+#: src/basic-syntax/scalar-types.md:19 src/basic-syntax/compound-types.md:28
+#: src/basic-syntax/references.md:21 src/basic-syntax/slices.md:18
+#: src/basic-syntax/string-slices.md:25 src/basic-syntax/functions.md:33
+#: src/basic-syntax/rustdoc.md:22 src/basic-syntax/methods.md:32
+#: src/basic-syntax/functions-interlude.md:25 src/exercises/day-1/morning.md:9
+#: src/exercises/day-1/for-loops.md:90 src/basic-syntax/variables.md:15
+#: src/basic-syntax/type-inference.md:24 src/basic-syntax/static-and-const.md:46
#: src/basic-syntax/scopes-shadowing.md:23 src/memory-management/stack.md:26
#: src/memory-management/rust.md:12 src/ownership/move-semantics.md:20
#: src/ownership/moves-function-calls.md:18 src/ownership/copy-clone.md:33
@@ -1147,60 +1175,44 @@ msgstr ""
#: src/structs.md:29 src/structs/tuple-structs.md:35
#: src/structs/field-shorthand.md:25 src/enums.md:32
#: src/enums/variant-payloads.md:33 src/enums/sizes.md:27 src/methods.md:28
-#: src/methods/receiver.md:22 src/methods/example.md:44
-#: src/pattern-matching.md:23 src/pattern-matching/destructuring-enums.md:33
-#: src/pattern-matching/destructuring-structs.md:21
-#: src/pattern-matching/destructuring-arrays.md:19
-#: src/pattern-matching/match-guards.md:20 src/exercises/day-2/morning.md:9
-#: src/exercises/day-2/points-polygons.md:115 src/control-flow/blocks.md:40
-#: src/control-flow/if-expressions.md:33
-#: src/control-flow/if-let-expressions.md:21
-#: src/control-flow/while-let-expressions.md:24
-#: src/control-flow/for-expressions.md:23
-#: src/control-flow/loop-expressions.md:25
-#: src/control-flow/match-expressions.md:26 src/std.md:23
-#: src/std/option-result.md:16 src/std/string.md:28 src/std/vec.md:35
-#: src/std/hashmap.md:36 src/std/box.md:32 src/std/box-recursive.md:31
-#: src/std/rc.md:29 src/modules.md:26 src/modules/visibility.md:37
-#: src/modules/filesystem.md:42 src/exercises/day-2/afternoon.md:5
-#: src/generics/data-types.md:19 src/generics/methods.md:23
-#: src/traits/trait-objects.md:70 src/traits/default-methods.md:30
-#: src/traits/trait-bounds.md:33 src/traits/impl-trait.md:21
-#: src/traits/iterator.md:30 src/traits/from-iterator.md:15
-#: src/traits/from-into.md:27 src/traits/drop.md:32 src/traits/default.md:38
-#: src/traits/operators.md:24 src/traits/closures.md:23
+#: src/methods/receiver.md:22 src/methods/example.md:44 src/pattern-matching.md:23
+#: src/pattern-matching/destructuring-enums.md:33 src/pattern-matching/destructuring-structs.md:21
+#: src/pattern-matching/destructuring-arrays.md:19 src/pattern-matching/match-guards.md:20
+#: src/exercises/day-2/morning.md:9 src/exercises/day-2/points-polygons.md:115
+#: src/control-flow/blocks.md:40 src/control-flow/if-expressions.md:33
+#: src/control-flow/if-let-expressions.md:21 src/control-flow/while-let-expressions.md:24
+#: src/control-flow/for-expressions.md:23 src/control-flow/loop-expressions.md:25
+#: src/control-flow/match-expressions.md:26 src/std.md:23 src/std/option-result.md:16
+#: src/std/string.md:28 src/std/vec.md:35 src/std/hashmap.md:36 src/std/box.md:32
+#: src/std/box-recursive.md:31 src/std/rc.md:29 src/modules.md:26 src/modules/visibility.md:37
+#: src/modules/filesystem.md:42 src/exercises/day-2/afternoon.md:5 src/generics/data-types.md:19
+#: src/generics/methods.md:23 src/traits/trait-objects.md:70 src/traits/default-methods.md:30
+#: src/traits/trait-bounds.md:33 src/traits/impl-trait.md:21 src/traits/iterator.md:30
+#: src/traits/from-iterator.md:15 src/traits/from-into.md:27 src/traits/drop.md:32
+#: src/traits/default.md:38 src/traits/operators.md:24 src/traits/closures.md:23
#: src/exercises/day-3/morning.md:5 src/error-handling/result.md:25
-#: src/error-handling/try-operator.md:46
-#: src/error-handling/converting-error-types-example.md:48
-#: src/error-handling/deriving-error-enums.md:37
-#: src/error-handling/dynamic-errors.md:34
-#: src/error-handling/error-contexts.md:33 src/unsafe.md:26
-#: src/unsafe/raw-pointers.md:25 src/unsafe/mutable-static-variables.md:30
-#: src/unsafe/unions.md:19 src/unsafe/writing-unsafe-functions.md:31
-#: src/unsafe/extern-functions.md:19 src/unsafe/unsafe-traits.md:28
-#: src/exercises/day-3/afternoon.md:5
-#: src/android/interoperability/with-c/rust.md:81
-#: src/exercises/android/morning.md:10 src/bare-metal/minimal.md:15
-#: src/bare-metal/alloc.md:37 src/bare-metal/microcontrollers.md:23
-#: src/bare-metal/microcontrollers/mmio.md:62
-#: src/bare-metal/microcontrollers/pacs.md:47
-#: src/bare-metal/microcontrollers/hals.md:37
-#: src/bare-metal/microcontrollers/board-support.md:26
+#: src/error-handling/try-operator.md:46 src/error-handling/converting-error-types-example.md:48
+#: src/error-handling/deriving-error-enums.md:37 src/error-handling/dynamic-errors.md:34
+#: src/error-handling/error-contexts.md:33 src/unsafe.md:26 src/unsafe/raw-pointers.md:25
+#: src/unsafe/mutable-static-variables.md:30 src/unsafe/unions.md:19
+#: src/unsafe/writing-unsafe-functions.md:31 src/unsafe/extern-functions.md:19
+#: src/unsafe/unsafe-traits.md:28 src/exercises/day-3/afternoon.md:5
+#: src/android/interoperability/with-c/rust.md:81 src/exercises/android/morning.md:10
+#: src/bare-metal/minimal.md:15 src/bare-metal/alloc.md:37 src/bare-metal/microcontrollers.md:23
+#: src/bare-metal/microcontrollers/mmio.md:62 src/bare-metal/microcontrollers/pacs.md:47
+#: src/bare-metal/microcontrollers/hals.md:37 src/bare-metal/microcontrollers/board-support.md:26
#: src/bare-metal/microcontrollers/type-state.md:30
-#: src/bare-metal/microcontrollers/embedded-hal.md:17
-#: src/bare-metal/microcontrollers/probe-rs.md:14
+#: src/bare-metal/microcontrollers/embedded-hal.md:17 src/bare-metal/microcontrollers/probe-rs.md:14
#: src/bare-metal/microcontrollers/debugging.md:25
-#: src/bare-metal/microcontrollers/other-projects.md:16
-#: src/exercises/bare-metal/morning.md:5 src/bare-metal/aps.md:7
+#: src/bare-metal/microcontrollers/other-projects.md:16 src/exercises/bare-metal/morning.md:5
+#: src/bare-metal/aps.md:7 src/bare-metal/aps/entry-point.md:75
#: src/bare-metal/aps/inline-assembly.md:41 src/bare-metal/aps/mmio.md:7
#: src/bare-metal/aps/uart.md:53 src/bare-metal/aps/uart/traits.md:22
-#: src/bare-metal/aps/better-uart.md:24
-#: src/bare-metal/aps/better-uart/bitflags.md:35
-#: src/bare-metal/aps/better-uart/registers.md:39
-#: src/bare-metal/aps/better-uart/driver.md:62
+#: src/bare-metal/aps/better-uart.md:24 src/bare-metal/aps/better-uart/bitflags.md:35
+#: src/bare-metal/aps/better-uart/registers.md:39 src/bare-metal/aps/better-uart/driver.md:62
#: src/bare-metal/aps/better-uart/using.md:49 src/bare-metal/aps/logging.md:48
-#: src/bare-metal/aps/logging/using.md:44
-#: src/bare-metal/useful-crates/zerocopy.md:43
+#: src/bare-metal/aps/logging/using.md:44 src/bare-metal/aps/exceptions.md:62
+#: src/bare-metal/aps/other-projects.md:15 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
@@ -1229,23 +1241,21 @@ msgid ""
"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 ""
-"Este é um exemplo de _nota do instrutor_. Nós os usaremos para adicionar\n"
-"informações aos slides. Estes podem ser pontos chave em que o instrutor deve\n"
-"cobrir respostas à perguntas típicas que surgem em sala de aula."
+"Este é um exemplo de uma _nota do instrutor_. Nós as usaremos para adicionar\n"
+"informações complementares aos slides. Elas podem ser tanto pontos-chave que o instrutor deve\n"
+"cobrir quanto respostas a perguntas típicas que surgem em sala de aula."
-#: 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/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:46 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
@@ -1279,38 +1289,29 @@ msgstr ""
#: src/traits/from-into.md:33 src/traits/drop.md:42 src/traits/default.md:47
#: src/traits/operators.md:40 src/traits/closures.md:38
#: src/exercises/day-3/morning.md:11 src/error-handling/result.md:33
-#: src/error-handling/try-operator.md:53
-#: src/error-handling/converting-error-types-example.md:60
-#: src/error-handling/deriving-error-enums.md:45
-#: src/error-handling/dynamic-errors.md:41
-#: src/error-handling/error-contexts.md:42 src/unsafe.md:32
-#: src/unsafe/raw-pointers.md:43 src/unsafe/mutable-static-variables.md:35
-#: src/unsafe/unions.md:28 src/unsafe/writing-unsafe-functions.md:38
-#: src/unsafe/extern-functions.md:28 src/unsafe/unsafe-traits.md:37
-#: src/exercises/day-3/afternoon.md:11
-#: src/android/interoperability/with-c/rust.md:86
-#: src/exercises/android/morning.md:15 src/bare-metal/no_std.md:65
-#: src/bare-metal/minimal.md:26 src/bare-metal/alloc.md:49
-#: src/bare-metal/microcontrollers.md:29
-#: src/bare-metal/microcontrollers/mmio.md:72
-#: src/bare-metal/microcontrollers/pacs.md:65
-#: src/bare-metal/microcontrollers/hals.md:49
+#: src/error-handling/try-operator.md:53 src/error-handling/converting-error-types-example.md:60
+#: src/error-handling/deriving-error-enums.md:45 src/error-handling/dynamic-errors.md:41
+#: src/error-handling/error-contexts.md:42 src/unsafe.md:32 src/unsafe/raw-pointers.md:43
+#: src/unsafe/mutable-static-variables.md:35 src/unsafe/unions.md:28
+#: src/unsafe/writing-unsafe-functions.md:38 src/unsafe/extern-functions.md:28
+#: src/unsafe/unsafe-traits.md:37 src/exercises/day-3/afternoon.md:11
+#: src/android/interoperability/with-c/rust.md:86 src/exercises/android/morning.md:15
+#: src/bare-metal/no_std.md:65 src/bare-metal/minimal.md:26 src/bare-metal/alloc.md:49
+#: src/bare-metal/microcontrollers.md:29 src/bare-metal/microcontrollers/mmio.md:72
+#: src/bare-metal/microcontrollers/pacs.md:65 src/bare-metal/microcontrollers/hals.md:49
#: src/bare-metal/microcontrollers/board-support.md:40
#: src/bare-metal/microcontrollers/type-state.md:43
-#: src/bare-metal/microcontrollers/embedded-hal.md:23
-#: src/bare-metal/microcontrollers/probe-rs.md:29
+#: src/bare-metal/microcontrollers/embedded-hal.md:23 src/bare-metal/microcontrollers/probe-rs.md:29
#: src/bare-metal/microcontrollers/debugging.md:38
-#: src/bare-metal/microcontrollers/other-projects.md:26
-#: src/exercises/bare-metal/morning.md:11 src/bare-metal/aps.md:15
+#: src/bare-metal/microcontrollers/other-projects.md:26 src/exercises/bare-metal/morning.md:11
+#: src/bare-metal/aps.md:15 src/bare-metal/aps/entry-point.md:101
#: src/bare-metal/aps/inline-assembly.md:58 src/bare-metal/aps/mmio.md:17
#: src/bare-metal/aps/uart/traits.md:27 src/bare-metal/aps/better-uart.md:28
-#: src/bare-metal/aps/better-uart/bitflags.md:40
-#: src/bare-metal/aps/better-uart/registers.md:46
-#: src/bare-metal/aps/better-uart/driver.md:67
-#: src/bare-metal/aps/better-uart/using.md:55 src/bare-metal/aps/logging.md:52
-#: src/bare-metal/aps/logging/using.md:49
-#: src/bare-metal/useful-crates/zerocopy.md:53
-#: src/bare-metal/useful-crates/aarch64-paging.md:33
+#: src/bare-metal/aps/better-uart/bitflags.md:40 src/bare-metal/aps/better-uart/registers.md:46
+#: src/bare-metal/aps/better-uart/driver.md:67 src/bare-metal/aps/better-uart/using.md:55
+#: src/bare-metal/aps/logging.md:52 src/bare-metal/aps/logging/using.md:49
+#: src/bare-metal/aps/exceptions.md:75 src/bare-metal/aps/other-projects.md:29
+#: 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
@@ -1375,18 +1376,52 @@ msgid ""
"\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"
+" laptop (see the [installation instructions][3]). This ensures optimal performance with no lag "
+"as you change pages.\n"
" Using your laptop will also allow you to fix typos as you or the course\n"
" participants spot them.\n"
"\n"
"1. Let people solve the exercises by themselves or in small groups.\n"
-" We typically spend 30-45 minutes on exercises in the morning and in the afternoon (including time to review the solutions).\n"
+" We typically spend 30-45 minutes on exercises in the morning and in the afternoon (including "
+"time to review the solutions).\n"
" Make sure to\n"
" ask people if they're stuck or if there is anything you can help with. When\n"
" you see that several people have the same problem, call it out to the class\n"
" and offer a solution, e.g., by showing people where to find the relevant\n"
" information in the standard library."
msgstr ""
+"1. Familiarize-se com o material do curso. Incluímos notas do instrutor\n"
+" para ajudar a destacar os pontos principais (ajude-nos contribuindo com mais\n"
+" notas!). Ao apresentar, certifique-se de abrir as notas do instrutor em um\n"
+" pop-up (clique no link com uma pequena seta ao lado de \"Speaker Notes\" ou \"Notas do Instrutor\"). Desta forma\n"
+" você tem uma tela limpa para apresentar à turma.\n"
+"\n"
+"1. Decida as datas. Como o curso leva pelo menos três dias completos, recomendamos que você\n"
+" agende os dias ao longo de duas semanas. Os participantes do curso disseram que\n"
+" eles acham útil ter uma lacuna no curso, pois os ajuda a processar\n"
+" todas as informações que lhes damos.\n"
+"\n"
+"1. Encontre uma sala grande o suficiente para seus participantes presenciais. Recomendamos\n"
+" turmas de 15 a 25 pessoas. Isso é pequeno o suficiente para que as pessoas se sintam confortáveis\n"
+" fazendo perguntas --- também é pequeno o suficiente para que um instrutor tenha\n"
+" tempo para responder às perguntas. Certifique-se de que a sala tenha _mesas_ para você e para os\n"
+" alunos: todos vocês precisam ser capazes de sentar e trabalhar com seus laptops.\n"
+" Em particular, você fará muita codificação ao vivo como instrutor, portanto, um pódio não\n"
+" será muito útil para você.\n"
+"\n"
+"1. No dia do seu curso, chegue um pouco mais cedo na sala para acertar as coisas.\n"
+" Recomendamos apresentar diretamente usando `mdbook serve` rodando em seu\n"
+" laptop (consulte as [instruções de instalação][3]). Isso garante um desempenho ideal sem atrasos conforme você muda de página.\n"
+" Usar seu laptop também permitirá que você corrija erros de digitação enquanto você ou os participantes\n"
+" do curso os identificam.\n"
+"\n"
+"1. Deixe as pessoas resolverem os exercícios sozinhas ou em pequenos grupos.\n"
+" Normalmente gastamos de 30 a 45 minutos em exercícios pela manhã e à tarde (incluindo o tempo para revisar as soluções).\n"
+" Tenha certeza de\n"
+" perguntar às pessoas se elas estão em dificuldades ou se há algo em que você possa ajudar. Quando\n"
+" você vir que várias pessoas têm o mesmo problema, chame a turma\n"
+" e ofereça uma solução, por exemplo, mostrando às pessoas onde encontrar as informações relevantes\n"
+" na biblioteca padrão (\"standard library\")."
#: src/running-the-course.md:43
msgid ""
@@ -1402,7 +1437,7 @@ msgid ""
"course. We would love to hear what worked well for you and what can be made\n"
"better. Your students are also very welcome to [send us feedback][2]!"
msgstr ""
-"Por favor, [forneça feedback][1] depois para que possamos continuar melhorando o\n"
+"Por favor, [dê seu feedback][1] depois para que possamos continuar melhorando o\n"
"curso. Adoraríamos saber o que funcionou bem para você e o que pode ser melhorado.\n"
"Seus alunos também são muito bem-vindos para [nos enviar feedback][2]!"
@@ -1420,19 +1455,21 @@ msgid ""
"* Day 2: Compound data types, pattern matching, the standard library.\n"
"* Day 3: Traits and generics, error handling, testing, unsafe Rust."
msgstr ""
-"* Dia 1: Rust básico, ownership e verificador de empréstimo (borrow checker).\n"
+"* Dia 1: Rust básico, _ownership_ (\"posse\") e o _borrow checker_ (\"verificador de empréstimo\").\n"
"* Dia 2: Tipos de dados compostos, correspondência de padrões e a biblioteca padrão.\n"
-"* Dia 3: Traits e generics, tratamento de erros, testes e Rust inseguro."
+"* Dia 3: _Traits_ (\"características\") e genéricos, tratamento de erros, testes e _unsafe_ (\"inseguro\") Rust."
#: src/running-the-course/course-structure.md:11
msgid "## Deep Dives"
-msgstr ""
+msgstr "## Análises Detalhadas"
#: 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 ""
+"Além do curso de 3 dias sobre fundamentos de Rust, nós abordamos alguns tópicos\n"
+"mais especializados:"
#: src/running-the-course/course-structure.md:16
msgid "### Android"
@@ -1444,6 +1481,9 @@ msgid ""
"Android platform development. This includes interoperability with C, C++, and\n"
"Java."
msgstr ""
+"O [Android Deep Dive](../android.md) é um curso de meio dia sobre o uso de Rust para\n"
+"o desenvolvimento na plataforma Android. Isso inclui interoperabilidade com C, C++ e\n"
+"Java."
#: src/running-the-course/course-structure.md:22
msgid ""
@@ -1452,10 +1492,10 @@ msgid ""
"the root of your AOSP checkout. This will ensure that the Android build system\n"
"sees the `Android.bp` files in `src/android/`."
msgstr ""
-"Você precisará de um [checkout do AOSP][1]. Faça um checkout do [repositório\n"
-"do curso][2] no mesmo computador e mova o diretório `src/android/` para a raiz\n"
-"do seu checkout do AOSP. Isso garantirá que o sistema de compilação do Android veja os\n"
-"arquivos `Android.bp` em `src/android/`."
+"Você precisará de um [_checkout_ do AOSP][1]. Faça um checkout do [repositório\n"
+"do curso][2] no mesmo computador e mova o diretório `src/android/` para\n"
+"a raiz do seu checkout do AOSP. Isso garantirá que o sistema de compilação do Android\n"
+"veja os arquivos `Android.bp` em `src/android/`."
#: src/running-the-course/course-structure.md:27
msgid ""
@@ -1464,12 +1504,12 @@ msgid ""
"commands it runs and make sure they work when you run them by hand."
msgstr ""
"Certifique-se de que `adb sync` funcione com seu emulador ou dispositivo físico e pré-compile\n"
-"todos os exemplos do Android usando `src/android/build_all.sh`. Leia o script para ver\n"
+"todos os exemplos do Android usando `src/android/build_all.sh`. Leia o roteiro para ver\n"
"os comandos executados e verifique se eles funcionam quando você os executa manualmente."
#: src/running-the-course/course-structure.md:34
msgid "### Bare-Metal"
-msgstr ""
+msgstr "### Bare-Metal"
#: src/running-the-course/course-structure.md:36
msgid ""
@@ -1477,6 +1517,9 @@ msgid ""
"bare-metal (embedded) development. Both microcontrollers and application\n"
"processors are covered."
msgstr ""
+"O [Bare-Metal Deep Dive](../bare-metal.md) é uma aula de um dia sobre o uso de Rust para\n"
+"o desenvolvimento _bare-metal_ (sistema embarcado). Tanto micro-controladores quanto processadores\n"
+"de aplicações são cobertos."
#: src/running-the-course/course-structure.md:40
msgid ""
@@ -1485,6 +1528,10 @@ msgid ""
"will need to install a number of packages as described on the [welcome\n"
"page](../bare-metal.md)."
msgstr ""
+"Para a parte do micro-controlador, você precisará comprar a placa\n"
+"de desenvolvimento [BBC micro:bit](https://microbit.org/) v2 com\n"
+"antecedência. Todos precisarão instalar vários pacotes, conforme\n"
+"descrito na [página inicial](../bare-metal.md)."
#: src/running-the-course/course-structure.md:45
msgid "### Concurrency"
@@ -1495,6 +1542,8 @@ msgid ""
"The [Concurrency Deep Dive](../concurrency.md) is a full day class on classical\n"
"as well as `async`/`await` concurrency."
msgstr ""
+"O [Concurrency Deep Dive](../concurrency.md) é uma aula de um dia sobre\n"
+"concorrência clássica e `async`/`await`."
#: src/running-the-course/course-structure.md:50
msgid ""
@@ -1502,6 +1551,9 @@ msgid ""
"go. You can then copy/paste the examples into `src/main.rs` to experiment with\n"
"them:"
msgstr ""
+"Você precisará de um novo _crate_ configurado e as dependências baixadas e prontas\n"
+"para uso. Você pode então copiar/colar os exemplos para `src/main.rs` para\n"
+"experimentá-los:"
#: src/running-the-course/course-structure.md:54
msgid ""
@@ -1528,16 +1580,16 @@ msgid ""
"The course is meant to be very interactive and we recommend letting the\n"
"questions drive the exploration of Rust!"
msgstr ""
-"O curso pretende ser muito interativo e recomendamos deixar as\n"
-"perguntas conduzirem a exploração de Rust!"
+"O curso foi projetado para ser bastante interativo e recomendamos\n"
+"deixar as perguntas conduzirem a exploração de Rust!"
#: src/running-the-course/keyboard-shortcuts.md:1
msgid "# Keyboard Shortcuts"
-msgstr "# Atalhos do teclado"
+msgstr "# Atalhos de Teclado"
#: src/running-the-course/keyboard-shortcuts.md:3
msgid "There are several useful keyboard shortcuts in mdBook:"
-msgstr "Existem vários atalhos de teclado úteis no mdBook:"
+msgstr "Existem vários atalhos de teclado úteis no _mdBook_:"
#: src/running-the-course/keyboard-shortcuts.md:5
msgid ""
@@ -1546,10 +1598,10 @@ msgid ""
"* Ctrl + Enter: Execute the code sample that has focus.\n"
"* s: Activate the search bar."
msgstr ""
-"* Seta para a esquerda: Navega para a página anterior.\n"
-"* Seta para a direita: Navega para a próxima página.\n"
+"* Seta para a esquerda: Vai para a página anterior.\n"
+"* Seta para a direita: Vai para a próxima página.\n"
"* Ctrl + Enter: Executa o exemplo de código que tem o foco.\n"
-"* s: ativa a barra de pesquisa."
+"* S: Ativa a barra de pesquisa."
#: src/running-the-course/translations.md:1
msgid "# Translations"
@@ -1560,39 +1612,52 @@ msgid ""
"The course has been translated into other languages by a set of wonderful\n"
"volunteers:"
msgstr ""
+"O curso foi traduzido para outros idiomas por um grupo de voluntários\n"
+"maravilhosos:"
#: src/running-the-course/translations.md:6
msgid ""
"* [Brazilian Portuguese][pt-BR] by [@rastringer] and [@hugojacob].\n"
"* [Korean][ko] by [@keispace], [@jiyongp] and [@jooyunghan]."
msgstr ""
+"* [Português do Brasil][pt-BR] por [@rastringer] e [@hugojacob].\n"
+"* [Coreano][ko] por [@keispace], [@jiyongp] e [@jooyunghan]."
#: src/running-the-course/translations.md:9
msgid "Use the language picker in the top-right corner to switch between languages."
-msgstr ""
+msgstr "Use o seletor de idioma no canto superior direito para alternar entre os idiomas."
#: src/running-the-course/translations.md:11
msgid "## Incomplete Translations"
-msgstr "## Traduções incompletas"
+msgstr "## Traduções Incompletas"
#: src/running-the-course/translations.md:13
msgid ""
"There is a large number of in-progress translations. We link to the most\n"
"recently updated translations:"
msgstr ""
+"Há um grande número de traduções em andamento. Nós referenciamos as\n"
+"traduções mais recentemente atualizadas:"
#: src/running-the-course/translations.md:16
msgid ""
+"* [Bengali][bn] by [@raselmandol].\n"
"* [French][fr] by [@KookaS] and [@vcaen].\n"
"* [German][de] by [@Throvn] and [@ronaldfw].\n"
"* [Japanese][ja] by [@CoinEZ-JPN] and [@momotaro1105]."
msgstr ""
+"* [Bengali][bn] por [@raselmandol].\n"
+"* [Francês][fr] por [@KookaS] e [@vcaen].\n"
+"* [Alemão][de] por [@Throvn] e [@ronaldfw].\n"
+"* [Japonês][ja] por [@CoinEZ-JPN] e [@momotaro1105]."
-#: src/running-the-course/translations.md:20
+#: src/running-the-course/translations.md:21
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 ""
+"Se você quiser ajudar com esse esforço, consulte [nossas instruções][our instructions] sobre\n"
+"como proceder. As traduções são coordenadas no _[issue tracker]_."
#: src/cargo.md:1
msgid "# Using Cargo"
@@ -1600,12 +1665,14 @@ msgstr "# Usando o 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"
+"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 ""
-"Quando você começar a ler sobre Rust, logo conhecerá o [Cargo](https://doc.rust-lang.org/cargo/), a ferramenta padrão\n"
+"Quando você começar a ler sobre Rust, logo conhecerá o [Cargo](https://doc.rust-lang.org/cargo/), "
+"a ferramenta padrão\n"
"usada no ecossistema Rust para criar e executar aplicativos Rust. Aqui nós queremos\n"
"dar uma breve visão geral do que é o Cargo e como ele se encaixa no ecossistema mais amplo\n"
"e como ele se encaixa neste treinamento."
@@ -1619,12 +1686,20 @@ msgid "### Rustup (Recommended)"
msgstr "### Rustup (Recomendado)"
#: src/cargo.md:12
-msgid "You can follow the instructions to install cargo and rust compiler, among other standard ecosystem tools with the [rustup][3] tool, which is maintained by the Rust Foundation."
-msgstr "Você pode seguir as instruções para instalar o cargo e o compilador de Rust, entre outras ferramentas padrão do ecossistema com a ferramenta [rustup][3], que é mantida pela Rust Foundation."
+msgid ""
+"You can follow the instructions to install cargo and rust compiler, among other standard ecosystem "
+"tools with the [rustup][3] tool, which is maintained by the Rust Foundation."
+msgstr ""
+"Você pode seguir as instruções para instalar o cargo e o compilador de Rust, entre outras "
+"ferramentas padrão do ecossistema com a ferramenta [rustup][3], que é mantida pela Rust Foundation."
#: src/cargo.md:14
-msgid "Along with cargo and rustc, Rustup will install itself as a command line utility that you can use to install/switch toolchains, setup cross compilation, etc."
-msgstr "Juntamente com cargo e rustc, o Rustup se instalará como um utilitário de linha de comando que você pode usar para instalar/alternar ferramentas, configurar compilação cruzada, etc."
+msgid ""
+"Along with cargo and rustc, Rustup will install itself as a command line utility that you can use "
+"to install/switch toolchains, setup cross compilation, etc."
+msgstr ""
+"Juntamente com cargo e rustc, o Rustup se instalará como um utilitário de linha de comando que "
+"você pode usar para instalar/alternar ferramentas, configurar compilação cruzada, etc."
#: src/cargo.md:16
msgid "### Package Managers"
@@ -1636,7 +1711,7 @@ msgstr "#### Debian"
#: src/cargo.md:20
msgid "On Debian/Ubuntu, you can install Cargo, the Rust source and the [Rust formatter][6] with"
-msgstr "No Debian/Ubuntu, você pode instalar o Cargo e o fonte Rust com"
+msgstr "No Debian/Ubuntu, você pode instalar o Cargo, o código-fonte Rust e o [formatador Rust][6] com"
#: src/cargo.md:22
msgid ""
@@ -1645,7 +1720,7 @@ msgid ""
"```"
msgstr ""
"```shell\n"
-"$ sudo apt install cargo rust-src\n"
+"$ sudo apt install cargo rust-src rustfmt\n"
"```"
#: src/cargo.md:26
@@ -1657,8 +1732,15 @@ msgstr ""
"[VS Code][2] para editar o código (mas qualquer editor compatível com LSP funciona)."
#: 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."
-msgstr "Algumas pessoas também gostam de usar a família de IDEs [JetBrains][4], que fazem suas próprias análises, mas têm suas próprias vantagens e desvantagens. Se você preferir, pode instalar o [Plugin Rust][5]. Observe que, a partir de Janeiro de 2023, a depuração funciona apenas na versão CLion do pacote JetBrains IDEA."
+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."
+msgstr ""
+"Algumas pessoas também gostam de usar a família de IDEs [JetBrains][4], que fazem suas próprias "
+"análises, mas têm suas próprias vantagens e desvantagens. Se você preferir, pode instalar o "
+"[Plugin Rust][5]. Observe que, a partir de Janeiro de 2023, a depuração funciona apenas na versão "
+"CLion do pacote JetBrains IDEA."
#: src/cargo/rust-ecosystem.md:1
msgid "# The Rust Ecosystem"
@@ -1684,27 +1766,24 @@ msgid ""
" library. You can have multiple versions of Rust installed at once and `rustup`\n"
" will let you switch between them as needed."
msgstr ""
-"* `rustc`: o compilador do Rust que transforma arquivos`.rs` em binários e outros\n"
-" formatos intermediários.\n"
+"* `rustc`: o compilador Rust que converte arquivos `.rs` em binários e outros\n"
+" formatos intermediários.\n"
"\n"
-"* `cargo`: o gerenciador de dependências e ferramenta de compilação da linguagem. Cargo sabe como\n"
-" baixar dependências hospedadas em e vai passar elas para\n"
-" `rustc` durante a compilação do seu projeto. Cargo inclui um ambiente para\n"
-" executar testes unitários.\n"
+"* `cargo`: o gerenciador de dependências e ferramenta de compilação do Rust. O Cargo sabe como\n"
+" baixar dependências hospedadas em e ele as passará para o \n"
+" `rustc` quando compilar o seu projeto. O Cargo também vem com um gerenciador de\n"
+" testes embutido que é utilizado para a execução de testes unitários.\n"
"\n"
-"* `rustup`: o instalador e atualizador do ferramental do Rust. Esta ferramenta é utilizada para\n"
-" instalar e atualizar o `rustc` e o `cargo` quando novas versões da linguagem forem lançadas.\n"
-" Além disso, `rustup` também pode baixar a documentação da biblioteca\n"
-" padrão. Você pode ter várias versões do Rust instaladas ao mesmo tempo e `rustup`\n"
-" permitirá que você alterne entre elas conforme necessário."
+"* `rustup`: o instalador e atualizador do conjunto de ferramentas do Rust. Esta ferramenta é utilizada para\n"
+" instalar e atualizar o `rustc` e o `cargo` quando novas versões do Rust forem lançadas.\n"
+" Além disso, `rustup` também pode baixar a documentação da biblioteca\n"
+" padrão. Você pode ter múltiplas versões do Rust instaladas ao mesmo tempo e `rustup`\n"
+" permitirá que você alterne entre elas conforme necessário."
-#: src/cargo/rust-ecosystem.md:21 src/hello-world.md:25
-#: src/hello-world/small-example.md:27 src/why-rust/runtime.md:10
-#: src/why-rust/modern.md:21 src/basic-syntax/compound-types.md:30
-#: src/basic-syntax/references.md:23
-#: src/pattern-matching/destructuring-enums.md:35
-#: src/error-handling/try-operator.md:48
-#: src/error-handling/converting-error-types-example.md:50
+#: src/cargo/rust-ecosystem.md:21 src/hello-world.md:25 src/hello-world/small-example.md:27
+#: src/why-rust/runtime.md:10 src/why-rust/modern.md:21 src/basic-syntax/compound-types.md:30
+#: src/basic-syntax/references.md:23 src/pattern-matching/destructuring-enums.md:35
+#: src/error-handling/try-operator.md:48 src/error-handling/converting-error-types-example.md:50
#: src/concurrency/threads.md:30 src/async/async-await.md:25
msgid "Key points:"
msgstr "Pontos chave:"
@@ -1732,9 +1811,11 @@ msgid ""
" * To avoid splitting the ecosystem, Rust compilers can mix code\n"
" written for different editions.\n"
"\n"
-" * Mention that it is quite rare to ever use the compiler directly not through `cargo` (most users never do).\n"
+" * Mention that it is quite rare to ever use the compiler directly not through `cargo` (most "
+"users never do).\n"
"\n"
-" * It might be worth alluding that Cargo itself is an extremely powerful and comprehensive tool. It is capable of many advanced features including but not limited to: \n"
+" * It might be worth alluding that Cargo itself is an extremely powerful and comprehensive tool. "
+"It is capable of many advanced features including but not limited to: \n"
" * Project/package structure\n"
" * [workspaces]\n"
" * Dev Dependencies and Runtime Dependency management/caching\n"
@@ -1743,10 +1824,41 @@ msgid ""
" * It is also extensible with sub command plugins as well (such as [cargo clippy]).\n"
" * Read more from the [official Cargo Book]"
msgstr ""
+"* O Rust tem um cronograma de lançamento rápido com um novo lançamento saindo\n"
+" a cada seis semanas. Novos lançamentos mantêm compatibilidade com versões\n"
+" anteriores — além disso, eles habilitam novas funcionalidades.\n"
+"\n"
+"* Existem três canais de lançamento: _\"stable\"_, _\"beta\"_ e _\"nightly\"_.\n"
+"\n"
+"* Novos recursos estão sendo testados em \"nightly\", \"beta\" é o que se torna\n"
+" \"stable\" a cada seis semanas.\n"
+"\n"
+"* O Rust também tem [edições][editions]: a edição atual é o Rust 2021. As edições\n"
+" anteriores foram o Rust 2015 e o Rust 2018.\n"
+"\n"
+"* As edições podem fazer alterações incompatíveis com versões anteriores\n"
+" da linguagem.\n"
+"\n"
+" * Para evitar quebra de código, as edições são opcionais: você seleciona a\n"
+" edição para o seu _crate_ através do arquivo `Cargo.toml`.\n"
+"\n"
+" * Para evitar a divisão do ecossistema, os compiladores Rust podem misturar código\n"
+" escrito para diferentes edições.\n"
+"\n"
+" * Mencione que é muito raro usar o compilador diretamente, não através do `cargo` (a maioria dos usuários nunca o faz).\n"
+"\n"
+" * Pode valer a pena mencionar que o próprio Cargo é uma ferramenta extremamente poderosa e abrangente. Ele é capaz de muitos recursos avançados, incluindo, entre outros:\n"
+" * Estrutura do projeto/pacote\n"
+" * [Espaços de trabalho][workspaces]\n"
+" * Dependências de desenvolvimento e gerenciamento/cache de dependência de tempo de execução\n"
+" * [Criar scripts][build scripting]\n"
+" * [Instalação global][global installation]\n"
+" * Também é extensível com plugins de sub-comando (tais como [cargo clippy]).\n"
+" * Leia mais no [livro oficial do Cargo][official Cargo Book]"
#: src/cargo/code-samples.md:1
msgid "# Code Samples in This Training"
-msgstr "# Exemplos de código neste treinamento"
+msgstr "# Exemplos de Código neste Treinamento"
#: src/cargo/code-samples.md:3
msgid ""
@@ -1812,17 +1924,17 @@ msgid ""
" solve the exercises using a local Rust installation or via the\n"
" Playground."
msgstr ""
-"* Os playgrounds embutidos não conseguem executar teste unitários. Copie\n"
-" O código e cole no Playground real para demonstrar os testes.\n"
+"* Os _playgrounds_ embutidos não conseguem executar testes unitários. Copie o\n"
+" código e cole no _Playground_ real para demonstrar os testes unitários.\n"
"\n"
-"* Os playgrounds embutidos perdem seu estado no momento em que você navega\n"
-" fora da página! Esta é a razão pela qual os alunos devem\n"
-" resolver os exercícios usando uma instalação Rust local ou via\n"
-" Playground real."
+"* Os _playgrounds_ embutidos perdem seu estado no momento em que você navega\n"
+" para outra página! Esta é a razão pela qual os alunos devem\n"
+" resolver os exercícios usando uma instalação do Rust local ou via\n"
+" Playground real."
#: src/cargo/running-locally.md:1
msgid "# Running Code Locally with Cargo"
-msgstr "# Executando código localmente com o Cargo"
+msgstr "# Executando Código Localmente com o Cargo"
#: src/cargo/running-locally.md:3
msgid ""
@@ -1832,9 +1944,9 @@ msgid ""
"writing, the latest stable Rust release has these version numbers:"
msgstr ""
"Se você quiser experimentar o código em seu próprio sistema, precisará\n"
-"primeiro instalar o Rust. Faça isso seguindo as [instruções][1].\n"
-"Isso deve fornecer o `rustc` e o `cargo` funcionando. Ao escrever\n"
-"Este curso, a última versão estável do Rust é:"
+"primeiro instalar o Rust. Faça isso seguindo as [instruções no Livro do Rust][1].\n"
+"Isso deve fornecer o `rustc` e o `cargo` funcionando. Quando este curso\n"
+"foi escrito, as últimas versões estáveis do Rust são:"
#: src/cargo/running-locally.md:8
msgid ""
@@ -1910,6 +2022,53 @@ msgid ""
" run `cargo` commands, it will automatically download and compile missing\n"
" dependencies for you."
msgstr ""
+"1. Clique no botão _\"Copy to clipboard\"_ (\"Copiar para a área de transferência\") no exemplo que deseja copiar.\n"
+"\n"
+"2. Use `cargo new exercise` para criar um novo diretório `exercise/` para o seu código:\n"
+"\n"
+" ```shell\n"
+" $ cargo new exercise\n"
+" Created binary (application) `exercise` package\n"
+" ```\n"
+"\n"
+"3. Navegue até `exercise/` e use `cargo run` para compilar e executar seu binário:\n"
+"\n"
+" ```shell\n"
+" $ cd exercise\n"
+" $ cargo run\n"
+" Compiling exercise v0.1.0 (/home/mgeisler/tmp/exercise)\n"
+" Finished dev [unoptimized + debuginfo] target(s) in 0.75s\n"
+" Running `target/debug/exercise`\n"
+" Hello, world!\n"
+" ```\n"
+"\n"
+"4. Substitua o código gerado em `src/main.rs` pelo seu próprio código. Por\n"
+" exemplo, usando o exemplo da página anterior, faça `src/main.rs` parecer como\n"
+"\n"
+" ```rust\n"
+" fn main() {\n"
+" println!(\"Edit me!\");\n"
+" }\n"
+" ```\n"
+"\n"
+"5. Use `cargo run` para compilar e executar seu binário atualizado:\n"
+"\n"
+" ```shell\n"
+" $ cargo run\n"
+" Compiling exercise v0.1.0 (/home/mgeisler/tmp/exercise)\n"
+" Finished dev [unoptimized + debuginfo] target(s) in 0.24s\n"
+" Running `target/debug/exercise`\n"
+" Edit me!\n"
+" ```\n"
+"\n"
+"6. Use `cargo check` para verificar rapidamente se há erros em seu projeto, use `cargo build`\n"
+" para compilá-lo sem executá-lo. Você encontrará a saída em `target/debug/`\n"
+" para uma compilação de depuração normal. Use `cargo build --release` para produzir um binário\n"
+" otimizado em `target/release/`.\n"
+"\n"
+"7. Você pode adicionar dependências para seu projeto editando `Cargo.toml`. Quando você\n"
+" execute os comandos `cargo`, ele irá baixar e compilar automaticamente\n"
+" dependências para você."
#: src/cargo/running-locally.md:70
msgid ""
@@ -1943,12 +2102,20 @@ msgid ""
"\n"
"* Ownership: move semantics, copying and cloning, borrowing, and lifetimes."
msgstr ""
+"Sintaxe Rust básica: variáveis, tipos escalares e compostos, enums, structs,\n"
+"referências, funções e métodos.\n"
+"\n"
+"Gerenciamento de memória: pilha versus heap, gerenciamento de memória manual, gerenciamento de memória baseado em\n"
+"escopo e _garbage collection_ (coleta de lixo).\n"
+"\n"
+"_Ownership_ (posse): semântica de _move_, cópia e clonagem, _borrow_ (empréstimo) e _lifetime_ (tempo de vida)."
#: src/welcome-day-1.md:16
msgid "Please remind the students that:"
msgstr "Lembre aos alunos 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"
@@ -1964,10 +2131,10 @@ msgstr ""
"* Eles devem fazer perguntas na hora, não as guarde para o fim.\n"
"* A aula é para ser interativa e as discussões são muito encorajadas!\n"
" * Como instrutor, você deve tentar manter as discussões relevantes, ou seja,\n"
-" mantenha o que é relacionado a como o Rust faz as coisas versus alguma outra linguagem.\n"
-" Pode ser difícil encontrar o equilíbrio certo, mas erre permitindo mais discussões,\n"
-" uma vez que engajam as pessoas muito mais do que uma comunicação unidirecional.\n"
-"* As perguntas provavelmente farão com que falemos sobre as coisas antes dos slides.\n"
+" mantenha as discussões relacionadas a como o Rust faz as coisas versus alguma outra linguagem.\n"
+" Pode ser difícil encontrar o equilíbrio certo, mas procure permitir mais discussões,\n"
+" uma vez que elas engajam as pessoas muito mais do que uma comunicação unidirecional.\n"
+"* As perguntas provavelmente farão com que falemos sobre coisas antes dos slides.\n"
" * Isso está perfeitamente OK! A repetição é uma parte importante do aprendizado. Lembre-se\n"
" que os slides são apenas um suporte e você está livre para ignorá-los quando\n"
" quiser."
@@ -1979,8 +2146,8 @@ msgid ""
"and we should show students this right away."
msgstr ""
"A ideia para o primeiro dia é mostrar _apenas o suficiente_ de Rust para poder falar\n"
-"sobre o famoso verificador de empréstimos. A maneira como o Rust lida com a memória é uma característica importante\n"
-"e devemos mostrar isso aos alunos imediatamente."
+"sobre o famoso _borrow checker_ (verificador de empréstimos). A maneira como o Rust lida\n"
+"com a memória é uma característica importante e devemos mostrar isso aos alunos imediatamente."
#: src/welcome-day-1.md:33
msgid ""
@@ -2004,7 +2171,7 @@ msgid ""
"we recommend a break every hour!"
msgstr ""
"É claro que você pode ajustar isso conforme necessário. Certifique-se de incluir pausas,\n"
-" Recomendamos uma pausa a cada hora!"
+"recomendamos uma a cada hora!"
#: src/welcome-day-1/what-is-rust.md:1
msgid "# What is Rust?"
@@ -2012,7 +2179,7 @@ msgstr "# O 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 é uma nova linguagem de programação que teve sua versão 1.0 lançada em 2015:"
+msgstr "Rust é uma nova linguagem de programação que teve sua [versão 1.0 lançada em 2015][1]:"
#: src/welcome-day-1/what-is-rust.md:5
msgid ""
@@ -2056,13 +2223,13 @@ msgid ""
msgstr ""
"* Alta flexibilidade.\n"
"* Alto nível de controle.\n"
-"* Pode ser reduzido para dispositivos com menos poder computacional, como telefones celulares.\n"
-"* Não tem runtime ou garbage collection.\n"
-"* Concentra-se na confiabilidade e segurança sem sacrificar o desempenho."
+"* Pode ser reduzido para dispositivos com menor poder computacional, como telefones celulares.\n"
+"* Não tem _runtime_ ou _garbage collection_.\n"
+"* Concentra-se em confiabilidade e segurança sem sacrificar o desempenho."
#: src/hello-world.md:1
msgid "# Hello World!"
-msgstr "# Olá mundo!"
+msgstr "# Olá Mundo!"
#: src/hello-world.md:3
msgid ""
@@ -2099,7 +2266,7 @@ msgstr ""
"* Funções são introduzidas com `fn`.\n"
"* Os blocos são delimitados por chaves como em C e C++.\n"
"* A função `main` é o ponto de entrada do programa.\n"
-"* Rust tem macros, `println!` é um exemplo disso.\n"
+"* Rust tem macros \"higiênicas\", `println!` é um exemplo disso.\n"
"* As strings Rust são codificadas em UTF-8 e podem conter qualquer caractere Unicode."
#: src/hello-world.md:22
@@ -2125,6 +2292,18 @@ msgid ""
" the scope they are used in. Rust macros are actually only\n"
" [partially hygienic](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene.html)."
msgstr ""
+"* Rust é muito parecido com outras linguagens na tradição C/C++/Java. É\n"
+"imperativo (não funcional) e não tenta reinventar as coisas, a menos que\n"
+"seja absolutamente necessário.\n"
+"\n"
+"* Rust é moderno com suporte total para coisas como Unicode.\n"
+"\n"
+"* Rust usa macros para situações em que você deseja ter um número variável\n"
+"de argumentos (sem [sobrecarga de função](basic-syntax/functions-interlude.md)).\n"
+"\n"
+"* As macros sendo ‘higiênicas’ significa que elas não capturam acidentalmente\n"
+"identificadores do escopo em que são usadas. As macros em Rust são, na verdade,\n"
+"apenas [parcialmente higiênicas](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene.html)."
#: src/hello-world/small-example.md:1
msgid "# Small Example"
@@ -2155,7 +2334,7 @@ msgstr ""
"```rust,editable\n"
"fn main() { // Ponto de entrada do programa\n"
" let mut x: i32 = 6; // Atribuição de uma variável mutável\n"
-" print!(\"{x}\"); // Macro para escrever na tela, como printf\n"
+" print!(\"{x}\"); // Macro para escrever na tela, como printf\n"
" while x != 1 { // Sem parênteses ao redor de expressões\n"
" if x % 2 == 0 { // Matemática como em outras linguagens\n"
" x = x / 2;\n"
@@ -2193,8 +2372,27 @@ msgid ""
"\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."
+" students become familiar with searching in the standard library.\n"
+" \n"
+" * In a shell `rustup doc std::fmt` will open a browser on the local std::fmt documentation"
msgstr ""
+"* Explique que todas as variáveis são tipadas estaticamente. Tente remover `i32`\n"
+"para acionar a inferência de tipo. Em vez disso, tente com `i8` e cause um estouro\n"
+"de número inteiro (_integer overflow_) em tempo de execução.\n"
+"\n"
+"* Altere `let mut x` para `let x`, discuta o erro do compilador.\n"
+"\n"
+"* Mostre como `print!` cause um erro de compilação se os\n"
+"argumentos não corresponderem à string de formato.\n"
+"\n"
+"* Mostre como você precisa usar `{}` como um espaço reservado se quiser\n"
+"imprimir uma expressão que seja mais complexa do que apenas uma única variável.\n"
+"\n"
+"* Mostre aos alunos a biblioteca padrão (_standard library_), mostre como pesquisar\n"
+"`std::fmt`, o qual possui as regras da mini-linguagem de formatação. É importante que\n"
+"os alunos se familiarizem com pesquisas na biblioteca padrão.\n"
+"\n"
+" * Em um shell `rustup doc std::fmt` abrirá um navegador na documentação std::fmt local."
#: src/why-rust.md:1
msgid "# Why Rust?"
@@ -2219,7 +2417,8 @@ msgid ""
"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 ""
-"Certifique-se de perguntar à classe com quais linguagens de programação eles têm experiência. Dependendo\n"
+"Certifique-se de perguntar à classe com quais linguagens de programação eles têm experiência. "
+"Dependendo\n"
"da resposta você pode destacar diferentes características do Rust:"
#: src/why-rust.md:14
@@ -2235,18 +2434,18 @@ msgid ""
" as well as access to low-level hardware (should you need it)"
msgstr ""
"* Experiência com C ou C++: Rust elimina toda uma classe de _erros em tempo de execução_\n"
-" através do verificador de empréstimos (borrow checker). Você ganha performance como em C e C++, mas você não\n"
-" sem os problemas de insegurança de memória. Somado a isso, você tem uma linguagem\n"
-" com funcionalidades modernas como correspondência de padrões e gerenciamento de dependências nativo.\n"
+" através do verificador de empréstimos (_borrow checker_). Você obtém desempenho como em C e C++, mas sem\n"
+" os problemas de insegurança de memória. Além disso, você tem uma linguagem com\n"
+" funcionalidades modernas como correspondência de padrões e gerenciamento de dependência integrado.\n"
"\n"
-"* Experiência com Java, Go, Python, JavaScript...: Você obtém a mesma segurança de memória\n"
-" como nessas linguagens, além de um sentimento de linguagem de alto nível semelhante. Além disso\n"
-" você obtém desempenho rápido e previsível como C e C++ (sem coletor de lixo)\n"
-" bem como acesso a hardware de baixo nível (caso você precise)"
+"* Experiência com Java, Go, Python, JavaScript...: Você tem a mesma segurança de memória\n"
+" como nessas linguagens, além de uma semelhança com linguagens de alto nível. Além disso\n"
+" você obtém desempenho rápido e previsível como C e C++ (sem coletor de lixo ou \"_garbage collector_\")\n"
+" bem como acesso a hardware de baixo nível (caso você precise)"
#: src/why-rust/compile-time.md:1
msgid "# Compile Time Guarantees"
-msgstr "# Garantias de tempo de compilação"
+msgstr "# Garantias em Tempo de Compilação"
#: src/why-rust/compile-time.md:3
msgid "Static memory management at compile time:"
@@ -2263,24 +2462,25 @@ msgid ""
"* No data races between threads.\n"
"* No iterator invalidation."
msgstr ""
-"* Nenhuma variável não inicializada.\n"
+"* Sem variáveis não inicializadas.\n"
"* Sem vazamentos de memória (_quase_, veja as notas).\n"
-"* Sem _double-free_.\n"
-"* Sem _user-afer-free_'.\n"
+"* Sem _double-frees_.\n"
+"* Sem _use-after-free_.\n"
"* Sem ponteiros `NULL`.\n"
-"* Sem mutexes bloqueados esquecidos.\n"
+"* Sem _mutexes_ bloqueados esquecidos.\n"
"* Sem concorrência de dados entre _threads_.\n"
-"* Nenhuma invalidação de iteradores."
+"* Sem invalidação de iteradores."
#: src/why-rust/compile-time.md:16
msgid ""
"It is possible to produce memory leaks in (safe) Rust. Some examples\n"
"are:"
msgstr ""
-"É possível produzir vazamentos de memória no Rust seguro. Alguns exemplos\n"
+"É possível produzir vazamentos de memória no Rust (seguro). Alguns exemplos\n"
"são:"
#: src/why-rust/compile-time.md:19
+#, fuzzy
msgid ""
"* 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"
@@ -2291,14 +2491,14 @@ msgid ""
"* In fact, some will consider infinitely populating a collection a memory\n"
" leak and Rust does not protect from those."
msgstr ""
-"* Você pode usar [`Box::leak`] para vazar um ponteiro. Um uso disso poderia\n"
+"* Você pode usar [`Box::leak`] para vazar um ponteiro. Um uso para isso poderia\n"
" ser para obter variáveis estáticas inicializadas e dimensionadas em tempo de execução\n"
"* Você pode usar [`std::mem::forget`] para fazer o compilador \"esquecer\" sobre\n"
" um valor (o que significa que o destrutor nunca é executado).\n"
"* Você também pode criar acidentalmente uma [referência cíclica][reference cycle] com `Rc` ou\n"
" `Arc`.\n"
-"* Na verdade, alguns considerarão preencher infinitamente uma coleção (estruturas de dados)\n"
-" como vazamento de memória e Rust não protege disso."
+"* Na verdade, alguns considerarão que preencher infinitamente uma coleção (estruturas de dados)\n"
+" seja um vazamento de memória e o Rust não protege disso."
#: src/why-rust/compile-time.md:28
msgid ""
@@ -2310,7 +2510,7 @@ msgstr ""
#: src/why-rust/runtime.md:1
msgid "# Runtime Guarantees"
-msgstr "# Garantias de tempo de execução"
+msgstr "# Garantias em Tempo de Execução"
#: src/why-rust/runtime.md:3
msgid "No undefined behavior at runtime:"
@@ -2321,7 +2521,7 @@ msgid ""
"* Array access is bounds checked.\n"
"* Integer overflow is defined."
msgstr ""
-"* O acesso à vetores tem limites verificados.\n"
+"* O acesso a matrizes tem limites verificados.\n"
"* Estouro de números inteiros é definido."
#: src/why-rust/runtime.md:12
@@ -2336,19 +2536,19 @@ msgid ""
" `unsafe` allows you to call functions such as `slice::get_unchecked`\n"
" which does not do bounds checking."
msgstr ""
-"* O estouro de números inteiros é definido por meio de um sinalizador de tempo de compilação. As opções são\n"
-" ou um pânico (uma falha controlada do programa) ou semântica\n"
-" wrap-around (números voltam pro inicio após passar o limite superior, e vice versa). Por padrão, você obtém pânico no modo de depuração (`cargo build`)\n"
-" e wrap-around no modo de produção (`cargo build --release`).\n"
+"* O estouro de números inteiros é definido por meio de uma _flag_ em tempo de compilação. As opções são\n"
+" um pânico (uma falha controlada do programa) ou semântica\n"
+" wrap-around. Por padrão, você obtém pânicos em modo de depuração (`cargo build`)\n"
+" e wrap-around em modo de produção (`cargo build --release`).\n"
"\n"
-"* A checagem de bordas não pode ser desabilitada com um sinalizador durante a compilação. Ela também\n"
-" não pode ser desativada diretamente com o uso da palavra chave `unsafe`. Entretanto,\n"
-" `unsafe` te permite chamar funções como `slice::get_unchecked`\n"
-" que não faz checagem de bordas."
+"* A verificação de limites (\"_bounds checking_\") não pode ser desativada com uma _flag_ do compilador.\n"
+"Ela também não pode ser desativada diretamente com a palavra-chave `unsafe`. No entanto,\n"
+" `unsafe` permite que você chame funções como `slice::get_unchecked`\n"
+" que não faz verificação de limites."
#: src/why-rust/modern.md:1
msgid "# Modern Features"
-msgstr "# Recursos modernos"
+msgstr "# Recursos Modernos"
#: src/why-rust/modern.md:3
msgid "Rust is built with all the experience gained in the last 40 years."
@@ -2356,7 +2556,7 @@ msgstr "O Rust é construído com toda a experiência adquirida nos últimos 40
#: src/why-rust/modern.md:5
msgid "## Language Features"
-msgstr "## Características da linguagem"
+msgstr "## Características da Linguagem"
#: src/why-rust/modern.md:7
msgid ""
@@ -2366,8 +2566,8 @@ msgid ""
"* Zero-cost abstractions."
msgstr ""
"* Enums e correspondência de padrões.\n"
-"* Generics.\n"
-"* FFI sem overhead.\n"
+"* _Generics_.\n"
+"* FFI sem _overhead_.\n"
"* Abstrações de custo zero."
#: src/why-rust/modern.md:12
@@ -2426,14 +2626,50 @@ msgid ""
"* [rust-analyzer] is a well supported LSP implementation used in major\n"
" IDEs and text editors."
msgstr ""
+"* Abstrações de custo zero, semelhantes ao C++, significa que você não precisa ‘pagar’\n"
+" por construções de programação de alto nível com memória ou CPU. Por exemplo,\n"
+" escrever um loop usando `for` deve resultar aproximadamente no mesmo nível\n"
+" de instruções de baixo nível quanto usar a construção `.iter().fold()`.\n"
+"\n"
+"* Pode valer a pena mencionar que Rust enums são ‘Tipos de Dados Algébricos’\n"
+"(‘_Algebraic Data Types_’), também conhecidos como ‘tipos de soma’, que permitem que o\n"
+"sistema de tipos expresse coisas como `Option` e `Result`.\n"
+"\n"
+"* Lembre as pessoas de lerem os erros --- muitos desenvolvedores se acostumaram\n"
+" ignore as longas mensagens do compilador. O compilador Rust é significativamente mais\n"
+" \"verbal\" do que outros compiladores. Muitas vezes, ele lhe fornecerá sugestões _práticas_,\n"
+"prontas para copiar e colar em seu código.\n"
+"\n"
+"* A biblioteca padrão do Rust (_Rust standard library_) é pequena comparada a linguagens\n"
+"como Java, Python e Go. Rust não vem com várias coisas que você pode considerar padrão e essencial:\n"
+"\n"
+" * um gerador de números aleatórios, mas veja [rand].\n"
+" * suporte para SSL ou TLS, mas consulte [rusttls].\n"
+" * suporte para JSON, mas consulte [serde_json].\n"
+"\n"
+" O raciocínio por trás disso é que funcionalidade na biblioteca padrão não pode\n"
+" ser descartada, portanto ela tem que ser muito estável. Para os exemplos acima,\n"
+" a comunidade do Rust ainda está trabalhando para encontrar a melhor solução --- e\n"
+" talvez não exista uma única \"melhor solução\" para algumas dessas coisas.\n"
+"\n"
+" Rust vem com um gerenciador de pacotes embutido na forma de Cargo e isso torna\n"
+" trivial baixar e compilar _crates_ de terceiros. Uma consequência disso\n"
+" é que a biblioteca padrão pode ser menor.\n"
+"\n"
+" Descobrir bons _crates_ de terceiros pode ser um problema. Sites como\n"
+" ajudam com isso, permitindo que você compare métricas de\n"
+" _crates_ para encontrar um bom e confiável.\n"
+" \n"
+"* [rust-analyzer] é uma implementação LSP bem suportada usada pelas principais\n"
+" IDEs e editores de texto."
#: src/basic-syntax.md:1
msgid "# Basic Syntax"
-msgstr "# Sintaxe básica"
+msgstr "# Sintaxe Básica"
#: src/basic-syntax.md:3
msgid "Much of the Rust syntax will be familiar to you from C, C++ or Java:"
-msgstr "Grande parte da sintaxe do Rust será familiar para você em C ou C++:"
+msgstr "Grande parte da sintaxe do Rust será familiar para você que vem de C, C++ ou Java:"
#: src/basic-syntax.md:5
msgid ""
@@ -2451,18 +2687,25 @@ msgstr ""
#: src/basic-syntax/scalar-types.md:1
msgid "# Scalar Types"
-msgstr "# Tipos escalares"
+msgstr "# Tipos Escalares"
#: src/basic-syntax/scalar-types.md:3
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\"`, `\"two\\nlines\"` |\n"
-"| Unicode scalar values | `char` | `'a'`, `'α'`, `'∞'` |\n"
-"| Booleans | `bool` | `true`, `false` |"
+"| Signed integers | `i8`, `i16`, `i32`, `i64`, `i128`, `isize` | `-10`, `0`, `1_000`, "
+"`123i64` |\n"
+"| Unsigned integers | `u8`, `u16`, `u32`, `u64`, `u128`, `usize` | `0`, `123`, "
+"`10u16` |\n"
+"| Floating point numbers | `f32`, `f64` | `3.14`, `-10.0e20`, "
+"`2f32` |\n"
+"| Strings | `&str` | `\"foo\"`, "
+"`\"two\\nlines\"` |\n"
+"| Unicode scalar values | `char` | `'a'`, `'α'`, "
+"`'∞'` |\n"
+"| Booleans | `bool` | `true`, "
+"`false` |"
msgstr ""
"| | Tipos | Literais |\n"
"|---------------------------|--------------------------------------------|------------------------------ |\n"
@@ -2475,7 +2718,7 @@ msgstr ""
#: src/basic-syntax/scalar-types.md:12
msgid "The types have widths as follows:"
-msgstr "Os tipos têm tamanhos como se segue:"
+msgstr "Os tipos têm os seguintes tamanhos:"
#: src/basic-syntax/scalar-types.md:14
msgid ""
@@ -2484,14 +2727,14 @@ msgid ""
"* `char` is 32 bit wide,\n"
"* `bool` is 8 bit wide."
msgstr ""
-"* `iN`, `uN` e `fN` são _N_ bits,\n"
-"* `isize` e `usize` são o tamanho de um ponteiro,\n"
+"* `iN`, `uN` e `fN` têm _N_ bits,\n"
+"* `isize` e `usize` são do tamanho de um ponteiro,\n"
"* `char` tem 32 bits,\n"
"* `bool` tem 8 bits."
#: src/basic-syntax/scalar-types.md:21
msgid "There are a few syntaxes which are not shown above:"
-msgstr ""
+msgstr "Há algumas sintaxes que não são mostradas acima:"
#: src/basic-syntax/scalar-types.md:23
msgid ""
@@ -2515,10 +2758,29 @@ msgid ""
" }\n"
" ```"
msgstr ""
+"- Strings brutas permitem que você crie um valor `&str` com caracteres de escape desabilitados: `r\"\\n\"\n"
+" == \"\\\\\\\\n\"`. Você pode embutir aspas duplas utilizando uma quantidade igual de `#` em\n"
+" Ambos os lados das aspas:\n"
+"\n"
+" ```rust,editable\n"
+" fn main() {\n"
+" println!(r#\"link\"#);\n"
+" println!(\"link\");\n"
+" }\n"
+" ```\n"
+"\n"
+"- Strings de byte permitem que você crie um valor `&[u8]` diretamente:\n"
+"\n"
+" ```rust,editable\n"
+" fn main() {\n"
+" println!(\"{:?}\", b\"abc\");\n"
+" println!(\"{:?}\", &[97, 98, 99]);\n"
+" }\n"
+" ```"
#: src/basic-syntax/compound-types.md:1
msgid "# Compound Types"
-msgstr "# Tipos compostos"
+msgstr "# Tipos Compostos"
#: src/basic-syntax/compound-types.md:3
msgid ""
@@ -2529,12 +2791,12 @@ msgid ""
msgstr ""
"| | Tipos | Literais |\n"
"|--------|-------------------------------|-----------------------------------|\n"
-"| Vetores | `[T; N]` | `[20, 30, 40]`, `[0; 3]` |\n"
-"| Tuplas | `()`, `(T,)`, `(T1, T2)`, ... | `()`, `('x',)`, `('x', 1.2)`, ... |"
+"| Matrizes | `[T; N]` | `[20, 30, 40]`, `[0; 3]` |\n"
+"| Tuplas | `()`, `(T,)`, `(T1, T2)`, ... | `()`, `('x',)`, `('x', 1.2)`, ... |"
#: src/basic-syntax/compound-types.md:8
msgid "Array assignment and access:"
-msgstr "Atribuição e acesso a vetores:"
+msgstr "Atribuição e acesso a matrizes:"
#: src/basic-syntax/compound-types.md:10
msgid ""
@@ -2595,6 +2857,18 @@ msgid ""
"\n"
"* Adding `#`, eg `{a:#?}`, invokes a \"pretty printing\" format, which can be easier to read."
msgstr ""
+"* Matrizes têm elementos do mesmo tipo, `T`, and tamanho, `N`, o qual é uma constante em tempo de compilação.\n"
+" Note que o tamanho de uma matriz é *parte do seu tipo*, o que significa que `[u8; 3]` e\n"
+" `[u8; 4]` são considerados dois tipos diferentes.\n"
+"\n"
+"* Nós podemos usar literais para atribuir valores para matrizes.\n"
+"\n"
+"* Na função `main`, o comando `print` pede a implementação de depuração (_debug_) com o parâmetro\n"
+" de formato formato `?`: `{}` produz a saída padrão, `{:?}` produz a saída de depuração. Nós\n"
+" também poderíamos ter usado `{a}` e `{a:?}` sem especificar o valor depois da string\n"
+" de formato.\n"
+"\n"
+"* Adicionando `#`, p.ex. `{a:#?}`, invoca um formato \"_pretty printing_\" (\"impressão bonita\"), que pode ser mais legível."
#: src/basic-syntax/compound-types.md:47
msgid "Tuples:"
@@ -2615,18 +2889,18 @@ msgid ""
" * You can think of it as `void` that can be familiar to you from other \n"
" programming languages."
msgstr ""
-"* Como vetores, tuplas tem tamanho fixo.\n"
+"* Assim como matrizes, tuplas têm tamanho fixo.\n"
"\n"
"* Tuplas agrupam valores de diferentes tipos em um tipo composto.\n"
"\n"
"* Campos de uma tupla podem ser acessados com um ponto e o índice do valor, e.g. `t.0`, `t.1`.\n"
"\n"
-"* A tupla vazia `()` também é conhecida como \"tipo unitário\". É um tipo e\n"
-" o único valor válido desse tipo - ou seja, tanto o tipo como seu valor\n"
-" são expressos por `()`. É usado para indicar, por exemplo, que uma função ou\n"
-" uma expressão não tem valor de retorno, como veremos em um próximo slide.\n"
-" * Você pode pensar nisso como um ‘void’ que pode ser familiar para você de outras\n"
-" linguagens de programação."
+"* A tupla vazia `()` também é conhecida como \"tipo unidade\" (_unit type_). É tanto\n"
+"um tipo quanto o único valor válido desse tipo - ou seja, o tipo e seu valor\n"
+"são expressos como `()`. É usado para indicar, por exemplo, que uma função ou\n"
+"expressão não tem valor de retorno, como veremos em um slide futuro.\n"
+" * Você pode pensar nisso como um `void`, que talvez lhe seja familiar\n"
+" de outras linguagens de programação."
#: src/basic-syntax/references.md:1
msgid "# References"
@@ -2634,7 +2908,7 @@ msgstr "# Referências"
#: src/basic-syntax/references.md:3
msgid "Like C++, Rust has references:"
-msgstr "Como C++, Rust tem referências:"
+msgstr "Como C++, o Rust tem referências:"
#: src/basic-syntax/references.md:5
msgid ""
@@ -2659,9 +2933,9 @@ msgid ""
" methods (try `ref_x.count_ones()`).\n"
"* References that are declared as `mut` can be bound to different values over their lifetime."
msgstr ""
-"* Devemos desreferenciar `ref_x` ao atribuir um valor, semelhante à ponteiros em C e C++.\n"
-"* Rust desreferenciará automaticamente em alguns casos, em particular ao invocar\n"
-" métodos (tente `ref_x.count_ones()`).\n"
+"* Devemos desreferenciar `ref_x` ao atribuí-lo um valor, semelhante à ponteiros em C e C++.\n"
+"* Em alguns casos, o Rust desreferenciará automaticamente, em particular ao invocar\n"
+" métodos (tente `ref_x.count_ones()`).\n"
"* As referências que são declaradas como `mut` podem ser vinculadas a diferentes valores ao longo de seu tempo de vida."
#: src/basic-syntax/references.md:25
@@ -2676,7 +2950,7 @@ msgstr ""
#: src/basic-syntax/references-dangling.md:1
msgid "# Dangling References"
-msgstr "# Referências pendentes"
+msgstr "# Referências Soltas"
#: src/basic-syntax/references-dangling.md:3
msgid "Rust will statically forbid dangling references:"
@@ -2706,7 +2980,7 @@ msgstr ""
"* Diz-se que uma referência \"pega emprestado\" o valor a que se refere.\n"
"* Rust está rastreando os tempos de vida de todas as referências para garantir que elas durem\n"
" o suficiente.\n"
-"* Falaremos mais sobre empréstimos quando chegarmos à ownership."
+"* Falaremos mais sobre empréstimos quando chegarmos à _ownership_."
#: src/basic-syntax/slices.md:1
msgid "# Slices"
@@ -2714,7 +2988,7 @@ msgstr "# Slices"
#: src/basic-syntax/slices.md:3
msgid "A slice gives you a view into a larger collection:"
-msgstr "Uma slice oferece uma visão de uma coleção maior:"
+msgstr "Uma _slice_ (fatia) oferece uma visão de uma coleção maior:"
#: src/basic-syntax/slices.md:5
msgid ""
@@ -2743,42 +3017,47 @@ msgid ""
"* Slices borrow data from the sliced type.\n"
"* Question: What happens if you modify `a[3]`?"
msgstr ""
-"* As slices pegam dados emprestados.\n"
+"* As slices pegam dados emprestados do tipo original.\n"
"* Pergunta: O que acontece se você modificar `a[3]`?"
#: src/basic-syntax/slices.md:20
msgid ""
"* We create a slice by borrowing `a` and specifying the starting and ending indexes in brackets.\n"
"\n"
-"* If the slice starts at index 0, Rust’s range syntax allows us to drop the starting index, meaning that `&a[0..a.len()]` and `&a[..a.len()]` are identical.\n"
+"* If the slice starts at index 0, Rust’s range syntax allows us to drop the starting index, "
+"meaning that `&a[0..a.len()]` and `&a[..a.len()]` are identical.\n"
" \n"
"* The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are identical.\n"
"\n"
"* To easily create a slice of the full array, we can therefore use `&a[..]`.\n"
"\n"
-"* `s` is a reference to a slice of `i32`s. Notice that the type of `s` (`&[i32]`) no longer mentions the array length. This allows us to perform computation on slices of different sizes.\n"
+"* `s` is a reference to a slice of `i32`s. Notice that the type of `s` (`&[i32]`) no longer "
+"mentions the array length. This allows us to perform computation on slices of different sizes.\n"
" \n"
-"* Slices always borrow from another object. In this example, `a` has to remain 'alive' (in scope) for at least as long as our slice. \n"
+"* Slices always borrow from another object. In this example, `a` has to remain 'alive' (in scope) "
+"for at least as long as our slice. \n"
" \n"
-"* The question about modifying `a[3]` can spark an interesting discussion, but the answer is that for memory safety reasons\n"
-" you cannot do it through `a` after you created a slice, but you can read the data from both `a` and `s` safely. \n"
+"* The question about modifying `a[3]` can spark an interesting discussion, but the answer is that "
+"for memory safety reasons\n"
+" you cannot do it through `a` after you created a slice, but you can read the data from both `a` "
+"and `s` safely. \n"
" More details will be explained in the borrow checker section."
msgstr ""
-"* Nós criamos uma slice pegando emprestado `a` e especificando os índices de inicio e fim entre colchetes.\n"
+"* Nós criamos uma _slice_ emprestando `a` e especificando os índices de início e fim entre colchetes.\n"
"\n"
-"* Se a slice começa no índice 0, a sintaxe de intervalo do Rust nos permite omitir o índice inicial, significando que `&a[0..a.len()]` e `&a[..a.len()]` são idênticos.\n"
-" \n"
-"* O mesmo é verdade para o último índice, então `&a[2..a.len()]` e `&a[2..]` são idênticos.\n"
+"* Se a _slice_ começa no índice 0, a sintaxe de _range_ (faixa) nos permite omitir o índice inicial, o que significa que `&a[0..a.len()]` e `&a[..a.len()]` são idênticos.\n"
"\n"
-"* Para criar uma slice de um vetor completo, podemos utilizar `&a[..]`.\n"
+"* O mesmo vale para o último índice, logo `&a[2..a.len()]` e `&a[2..]` são idênticos.\n"
"\n"
-"* `s` é uma referência a uma slice de `i32`. Observe que o tipo de `s` (`&[i32]`) não menciona mais o tamanho do vetor. Isso nos permite realizar cálculos em slices de tamanhos diferentes.\n"
+"* Para criar facilmente uma _slice_ de uma matriz completa, podemos utilizar`&a[..]`.\n"
+"\n"
+"* `s` é uma referência a uma _slice_ de `i32`. Observe que o tipo de `s` (`&[i32]`) não menciona mais o tamanho da matriz. Isso nos permite realizar cálculos em _slices_ de tamanhos diferentes.\n"
" \n"
-"* As slices sempre pegam emprestado de outro objeto. Neste exemplo, `a` deve permanecer 'vivo' (no escopo) por pelo menos tanto tempo quanto nossa slice.\n"
-" \n"
-"* A questão sobre a modificação de `a[3]` pode gerar uma discussão interessante, mas a resposta é por motivos de segurança de memória\n"
-" você não pode fazer isso por meio de `a` depois de criar uma slice, mas pode ler os dados de `a` e `s` com segurança.\n"
-" Mais detalhes serão explicados na seção do verificador de empréstimo."
+"* As _slices_ sempre pegam emprestado de outro objeto. Neste exemplo, `a` deve permanecer ‘vivo’ (em escopo) por pelo menos tanto tempo quanto nossa _slice_.\n"
+" \n"
+"* A questão sobre a modificação de `a[3]` pode gerar uma discussão interessante, mas a resposta é que por motivos de segurança de memória\n"
+" você não pode fazer isso por meio de `a` depois de criar uma _slice_, mas você pode ler os dados de `a` e `s` com segurança.\n"
+" Mais detalhes serão explicados na seção do verificador de empréstimos."
#: src/basic-syntax/string-slices.md:1
msgid "# `String` vs `str`"
@@ -2829,8 +3108,8 @@ msgid ""
"* `&str` an immutable reference to a string slice.\n"
"* `String` a mutable string buffer."
msgstr ""
-"* `&str` é uma referência imutável para uma slice de string.\n"
-"* `String` é um buffer de string mutável."
+"* `&str` é uma referência imutável para uma _slice_ de string.\n"
+"* `String` é um _buffer_ de string mutável."
#: src/basic-syntax/string-slices.md:27
msgid ""
@@ -2839,8 +3118,10 @@ msgid ""
"\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"
" accepts the same format specification as `println!()`.\n"
@@ -2849,34 +3130,41 @@ msgid ""
" \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"
+" (main difference: it can only contain UTF-8 encoded bytes and will never use a small-string "
+"optimization).\n"
" "
msgstr ""
-"* `&str` introduz uma slice de string, que é uma referência imutável para os dados de uma string em formato UTF-8 \n"
-" armazenados em um bloco de memória. Literais de string (`\"Olá\"`), são armazenados no binário do programa.\n"
+"* `&str` introduz uma _slice_ de string, a qual é uma referência imutável para os dados da string em formato UTF-8\n"
+" armazenados em um bloco de memória. Literais de string (`\"Hello\"`) são armazenadas no código binário do programa.\n"
"\n"
-"* O tipo `String` do Rust é um e uma camada em volta de um vetor de bytes. Assim como `Vec`, é dono dos valores.\n"
-" \n"
-"* Assim como diversos outros tipos `String::from()` cria a string a partir de um literal; `String::new()` \n"
-" cria uma nova string vazia, na qual dados podem ser adicionados com os métodos `push()` e `push_str()`.\n"
+"* O tipo `String` do Rust é um invólucro ao redor de uma matriz de bytes. Assim como um `Vec`, ele é _owned_.\n"
"\n"
-"* A macro `format!()` é uma maneira conveniente de gerar uma string a partir de valores dinâmicos. Ela\n"
+"* Da mesma forma que outros tipos, `String::from()` cria uma string a partir de um literal; `String::new()` \n"
+" cria uma nova string vazia, na qual dados de string podem ser adicionados com os métodos `push()` e `push_str()`.\n"
+"\n"
+"* A macro `format!()` é uma maneira conveniente de gerar uma string _owned_ a partir de valores dinâmicos. Ela\n"
" aceita os mesmos formatadores que `println!()`.\n"
" \n"
-"* Você pode emprestar slices `&str` de `String` através do operador `&` e, opcionalmente, selecionar um intervalo.\n"
+"* Você pode emprestar _slices_ `&str` de `String` através do operador `&` e, opcionalmente, selecionar um _range_ (\"intervalo\").\n"
" \n"
"* Para programadores C++: pense em `&str` como `const char*` de C++, mas que sempre aponta\n"
" para uma string válida na memória. Em Rust, `String` é um equivalente aproximado de `std::string` de C++\n"
-" (principal diferença: ele só pode conter bytes codificados em UTF-8 e nunca usará uma otimização de string pequena).\n"
-" "
+" (principal diferença: ele só pode conter bytes codificados em UTF-8 e nunca usará uma otimização "
+"de string pequena).\n"
+" \n"
+""
#: src/basic-syntax/functions.md:1
msgid "# Functions"
msgstr "# Funções"
#: src/basic-syntax/functions.md:3
-msgid "A Rust version of the famous [FizzBuzz](https://en.wikipedia.org/wiki/Fizz_buzz) interview question:"
-msgstr "Uma versão em Rust da famosa pergunta de entrevistas [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 ""
+"Uma versão em Rust da famosa pergunta de entrevistas [FizzBuzz](https://en.wikipedia.org/wiki/"
+"Fizz_buzz):"
#: src/basic-syntax/functions.md:5
msgid ""
@@ -2911,16 +3199,21 @@ msgstr ""
#: src/basic-syntax/functions.md:35
msgid ""
-"* We refer in `main` to a function written below. Neither forward declarations nor headers are necessary. \n"
-"* Declaration parameters are followed by a type (the reverse of some programming languages), then a return type.\n"
-"* The last expression in a function body (or any block) becomes the return value. Simply omit the `;` at the end of the expression.\n"
-"* Some functions have no return value, and return the 'unit type', `()`. The compiler will infer this if the `-> ()` return type is omitted.\n"
-"* The range expression in the `for` loop in `print_fizzbuzz_to()` contains `=n`, which causes it to include the upper bound."
+"* We refer in `main` to a function written below. Neither forward declarations nor headers are "
+"necessary. \n"
+"* Declaration parameters are followed by a type (the reverse of some programming languages), then "
+"a return type.\n"
+"* The last expression in a function body (or any block) becomes the return value. Simply omit the "
+"`;` at the end of the expression.\n"
+"* Some functions have no return value, and return the 'unit type', `()`. The compiler will infer "
+"this if the `-> ()` return type is omitted.\n"
+"* The range expression in the `for` loop in `print_fizzbuzz_to()` contains `=n`, which causes it "
+"to include the upper bound."
msgstr ""
"* Nos referimos em `main` a uma função escrita abaixo. Nem declarações prévias e nem cabeçalhos são necessários.\n"
"* Os parâmetros de declaração são seguidos por um tipo (o inverso de algumas linguagens de programação) e, em seguida, um tipo de retorno.\n"
"* A última expressão em um corpo de uma função (ou qualquer bloco) torna-se o valor de retorno. Simplesmente omita o `;` no final da expressão.\n"
-"* Algumas funções não têm valor de retorno e retornam o 'tipo unitário', `()`. O compilador vai inferir isso se o tipo de retorno `-> ()` for omitido.\n"
+"* Algumas funções não têm valor de retorno e retornam o 'tipo unitário', `()`. O compilador irá inferir isso se o tipo de retorno `-> ()` for omitido.\n"
"* A expressão de intervalo no loop `for` em `fizzbuzz_to()` contém `=n`, o que faz com que inclua o limite superior."
#: src/basic-syntax/rustdoc.md:1
@@ -3164,8 +3457,7 @@ msgstr ""
#: src/exercises/day-1/morning.md:22 src/exercises/day-1/afternoon.md:11
#: src/exercises/day-2/morning.md:11 src/exercises/day-2/afternoon.md:7
#: src/exercises/day-3/morning.md:7 src/exercises/bare-metal/morning.md:7
-#: src/exercises/bare-metal/afternoon.md:7
-#: src/exercises/concurrency/morning.md:12
+#: src/exercises/bare-metal/afternoon.md:7 src/exercises/concurrency/morning.md:12
#: src/exercises/concurrency/afternoon.md:13
msgid "After looking at the exercises, you can look at the [solutions] provided."
msgstr "Depois de ver os exercícios, você pode ver as [soluções] fornecidas."
@@ -3242,7 +3534,8 @@ msgid ""
"sufficient to only implement `From` to get a respective `Into` implementation automatically."
msgstr ""
"O mesmo se aplica a suas próprias implementações de `From` para seus tipos, então é\n"
-"suficiente implementar apenas `From` para obter uma respectiva implementação `Into` automaticamente."
+"suficiente implementar apenas `From` para obter uma respectiva implementação `Into` "
+"automaticamente."
#: src/exercises/day-1/implicit-conversions.md:33
msgid ""
@@ -3464,11 +3757,15 @@ msgstr ""
#: src/basic-syntax/variables.md:17
msgid ""
-"* Due to type inference the `i32` is optional. We will gradually show the types less and less as the course progresses.\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 ""
-"* Devido à inferência de tipos, o `i32` é opcional. Gradualmente mostraremos os tipos cada vez menos à medida que o curso progride.\n"
-"* Observe que como `println!` é uma macro, `x` não é movido, mesmo usando uma sintaxe parecida com a de uma função `println!(\"x: {}\", x)`"
+"* Devido à inferência de tipos, o `i32` é opcional. Gradualmente mostraremos os tipos cada vez "
+"menos à medida que o curso progride.\n"
+"* Observe que como `println!` é uma macro, `x` não é movido, mesmo usando uma sintaxe parecida com "
+"a de uma função `println!(\"x: {}\", x)`"
#: src/basic-syntax/type-inference.md:1
msgid "# Type Inference"
@@ -3501,25 +3798,35 @@ msgid ""
msgstr ""
#: src/basic-syntax/type-inference.md:26
-msgid "This slide demonstrates how the Rust compiler infers types based on constraints given by variable declarations and usages."
+msgid ""
+"This slide demonstrates how the Rust compiler infers types based on constraints given by variable "
+"declarations and usages."
msgstr ""
#: src/basic-syntax/type-inference.md:28
-#, 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 ""
-"Este slide demonstra como o compilador Rust infere tipos com base em restrições dadas por declarações e usos de variáveis.\n"
+"Este slide demonstra como o compilador Rust infere tipos com base em restrições dadas por "
+"declarações e usos de variáveis.\n"
" \n"
-"É muito importante enfatizar que variáveis declaradas assim não são de um tipo dinâmico \"qualquer tipo\" que possa\n"
-"armazenar quaisquer dados. O código de máquina gerado por tal declaração é idêntico à declaração explícita de um tipo.\n"
+"É muito importante enfatizar que variáveis declaradas assim não são de um tipo dinâmico \"qualquer "
+"tipo\" que possa\n"
+"armazenar quaisquer dados. O código de máquina gerado por tal declaração é idêntico à declaração "
+"explícita de um tipo.\n"
"O compilador faz o trabalho para nós e nos ajuda a escrever um código mais conciso."
#: src/basic-syntax/type-inference.md:32
-msgid "The following code tells the compiler to copy into a certain generic container without the code ever explicitly specifying the contained type, using `_` as a placeholder:"
-msgstr "O código a seguir informa ao compilador para copiar para um determinado contêiner genérico sem que o código especifique explicitamente o tipo contido, usando `_` como placeholder:"
+msgid ""
+"The following code tells the compiler to copy into a certain generic container without the code "
+"ever explicitly specifying the contained type, using `_` as a placeholder:"
+msgstr ""
+"O código a seguir informa ao compilador para copiar para um determinado contêiner genérico sem que "
+"o código especifique explicitamente o tipo contido, usando `_` como placeholder:"
#: src/basic-syntax/type-inference.md:34
#, fuzzy
@@ -3548,8 +3855,14 @@ msgstr ""
"```"
#: src/basic-syntax/type-inference.md:46
-msgid "[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator.html#method.collect) relies on `FromIterator`, 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) depende de `FromIterator`, que [`HashSet`](https:/ /doc.rust-lang.org/std/iter/trait.FromIterator.html) implementa."
+msgid ""
+"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator.html#method.collect) relies "
+"on `FromIterator`, which [`HashSet`](https://doc.rust-lang.org/std/iter/trait.FromIterator.html) "
+"implements."
+msgstr ""
+"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator.html#method.collect) depende "
+"de `FromIterator`, que [`HashSet`](https:/ /doc.rust-lang.org/std/iter/trait.FromIterator.html) "
+"implementa."
#: src/basic-syntax/static-and-const.md:1
msgid "# Static and Constant Variables"
@@ -3591,7 +3904,8 @@ msgstr ""
#: src/basic-syntax/static-and-const.md:27
#, fuzzy
msgid "According to the [Rust RFC Book][1] these are inlined upon use."
-msgstr "De acordo com o [Rust RFC Book][1], eles são expandidos no próprio local (inline) após o uso."
+msgstr ""
+"De acordo com o [Rust RFC Book][1], eles são expandidos no próprio local (inline) após o uso."
#: src/basic-syntax/static-and-const.md:29
msgid "## `static`"
@@ -3616,8 +3930,14 @@ msgstr ""
"static BANNER: &str = \"Bem-vindo ao RustOS 3.14\";"
#: src/basic-syntax/static-and-const.md:41
-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."
-msgstr "Conforme observado no [Rust RFC Book][1], `static` e `const` não são expandidos em linha (inlined) quando utilizados e possuem um local de memória real associado. Isso é útil para código inseguro e embarcado, e a variável sobrevive durante toda a execução do programa."
+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."
+msgstr ""
+"Conforme observado no [Rust RFC Book][1], `static` e `const` não são expandidos em linha (inlined) "
+"quando utilizados e possuem um local de memória real associado. Isso é útil para código inseguro e "
+"embarcado, e a variável sobrevive durante toda a execução do programa."
#: src/basic-syntax/static-and-const.md:44
msgid "We will look at mutating static data in the [chapter on Unsafe Rust](../unsafe.md)."
@@ -3626,12 +3946,16 @@ msgstr "Veremos a mutação de dados estáticos no [capítulo sobre Unsafe Rust]
#: src/basic-syntax/static-and-const.md:48
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 ""
"* Mencione que `const` se comporta semanticamente similar ao `constexpr` de C++.\n"
-"* `static`, por outro lado, é muito mais parecido com um `const` ou variável global mutável em C++.\n"
-"* Não é muito comum que alguém precise de uma constante avaliada em tempo de execução, mas é útil e mais seguro do que usar uma estática."
+"* `static`, por outro lado, é muito mais parecido com um `const` ou variável global mutável em C+"
+"+.\n"
+"* Não é muito comum que alguém precise de uma constante avaliada em tempo de execução, mas é útil "
+"e mais seguro do que usar uma estática."
#: src/basic-syntax/scopes-shadowing.md:1
msgid "# Scopes and Shadowing"
@@ -3686,15 +4010,22 @@ msgstr ""
#: src/basic-syntax/scopes-shadowing.md:25
msgid ""
-"* Definition: Shadowing is different from mutation, because after shadowing both variable's memory locations exist at the same time. Both are available under the same name, depending where you use it in the code. \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."
+"* 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 ""
-"* Definição: A sobreposição é diferente da mutação, porque após a sobreposição, os locais de memória de ambas as variáveis existem ao mesmo tempo. Ambos estão disponíveis com o mesmo nome, dependendo de onde você os usa no código.\n"
+"* Definição: A sobreposição é diferente da mutação, porque após a sobreposição, os locais de "
+"memória de ambas as variáveis existem ao mesmo tempo. Ambos estão disponíveis com o mesmo nome, "
+"dependendo de onde você os usa no código.\n"
"* Uma variável sobreposta pode ter um tipo diferente.\n"
-"* A sobreposição parece obscura a princípio, mas é conveniente para manter os valores após `.unwrap()`.\n"
-"* O código a seguir demonstra por que o compilador não pode simplesmente reutilizar locais de memória ao sobrepor uma variável imutável em um escopo, mesmo que o tipo não seja alterado."
+"* A sobreposição parece obscura a princípio, mas é conveniente para manter os valores após `."
+"unwrap()`.\n"
+"* O código a seguir demonstra por que o compilador não pode simplesmente reutilizar locais de "
+"memória ao sobrepor uma variável imutável em um escopo, mesmo que o tipo não seja alterado."
#: src/basic-syntax/scopes-shadowing.md:30
msgid ""
@@ -3722,7 +4053,8 @@ msgid ""
"* Full safety via automatic memory management at runtime: Java, Python, Go, Haskell, ..."
msgstr ""
"* Controle total através do gerenciamento manual de memória: C, C++, Pascal, ...\n"
-"* Segurança total através do gerenciamento automático de memória em tempo de execução: Java, Python, Go, Haskell, ..."
+"* Segurança total através do gerenciamento automático de memória em tempo de execução: Java, "
+"Python, Go, Haskell, ..."
#: src/memory-management.md:8
msgid "Rust offers a new mix:"
@@ -3777,7 +4109,8 @@ msgid ""
"Creating a `String` puts fixed-sized data on the stack and dynamically sized\n"
"data on the heap:"
msgstr ""
-"A criação de uma `String` coloca dados de tamanho fixo no stack e dados dimensionados dinamicamente\n"
+"A criação de uma `String` coloca dados de tamanho fixo no stack e dados dimensionados "
+"dinamicamente\n"
"no heap:"
#: src/memory-management/stack.md:6
@@ -3823,11 +4156,14 @@ msgstr ""
#: src/memory-management/stack.md:28
#, fuzzy
msgid ""
-"* Mention that a `String` is backed by a `Vec`, so it has a capacity and length and can grow if mutable via reallocation on the heap.\n"
+"* Mention that a `String` is backed by a `Vec`, so it has a capacity and length and can grow if "
+"mutable via reallocation on the heap.\n"
"\n"
-"* If students ask about it, you can mention that the underlying memory is heap allocated using the [System Allocator] and custom allocators can be implemented using the [Allocator API]\n"
+"* If students ask about it, you can mention that the underlying memory is heap allocated using the "
+"[System Allocator] and custom allocators can be implemented using the [Allocator API]\n"
"\n"
-"* We can inspect the memory layout with `unsafe` code. However, you should point out that this is rightfully unsafe!\n"
+"* We can inspect the memory layout with `unsafe` code. However, you should point out that this is "
+"rightfully unsafe!\n"
"\n"
" ```rust,editable\n"
" fn main() {\n"
@@ -3868,8 +4204,11 @@ msgid "You allocate and deallocate heap memory yourself."
msgstr "Você mesmo aloca e desaloca memória no heap."
#: src/memory-management/manual.md:5
-msgid "If not done with care, this can lead to crashes, bugs, security vulnerabilities, and memory leaks."
-msgstr "Se não for feito com cuidado, isso pode levar a travamentos, bugs, vulnerabilidades de segurança e vazamentos de memória."
+msgid ""
+"If not done with care, this can lead to crashes, bugs, security vulnerabilities, and memory leaks."
+msgstr ""
+"Se não for feito com cuidado, isso pode levar a travamentos, bugs, vulnerabilidades de segurança e "
+"vazamentos de memória."
#: src/memory-management/manual.md:7
msgid "## C Example"
@@ -3923,7 +4262,8 @@ msgid ""
"This is often called _resource acquisition is initialization_ (RAII) and gives\n"
"you smart pointers."
msgstr ""
-"Isso geralmente é chamado de _aquisição de recursos é inicialização_ (resource acquisition is initialization, RAII) e fornece\n"
+"Isso geralmente é chamado de _aquisição de recursos é inicialização_ (resource acquisition is "
+"initialization, RAII) e fornece\n"
"ponteiros inteligentes."
#: src/memory-management/scope-based.md:12
@@ -3958,7 +4298,8 @@ msgstr ""
#: src/memory-management/scope-based.md:25
msgid "Special move constructors are used when passing ownership to a function:"
-msgstr "Construtores especiais de movimento (move) são usados ao passar a \"ownership\" para uma função:"
+msgstr ""
+"Construtores especiais de movimento (move) são usados ao passar a \"ownership\" para uma função:"
#: src/memory-management/scope-based.md:27
msgid ""
@@ -3977,7 +4318,8 @@ msgid ""
"An alternative to manual and scope-based memory management is automatic memory\n"
"management:"
msgstr ""
-"Uma alternativa ao gerenciamento de memória manual e baseado em escopo é o gerenciamento automático\n"
+"Uma alternativa ao gerenciamento de memória manual e baseado em escopo é o gerenciamento "
+"automático\n"
"de memória:"
#: src/memory-management/garbage-collection.md:6
@@ -3986,7 +4328,8 @@ msgid ""
"* A garbage collector finds unused memory and deallocates it for the programmer."
msgstr ""
"* O programador nunca aloca ou desaloca memória explicitamente.\n"
-"* Um \"coletor de lixo\" (garbage collector) encontra memória não utilizada e a desaloca para o programador."
+"* Um \"coletor de lixo\" (garbage collector) encontra memória não utilizada e a desaloca para o "
+"programador."
#: src/memory-management/garbage-collection.md:9
msgid "## Java Example"
@@ -4021,26 +4364,36 @@ msgstr "O gerenciamento de memória no Rust é uma mistura:"
#: src/memory-management/rust.md:5
msgid ""
"* Safe and correct like Java, but without a garbage collector.\n"
-"* Depending on which abstraction (or combination of abstractions) you choose, can be a single unique pointer, reference counted, or atomically reference counted.\n"
+"* Depending on which abstraction (or combination of abstractions) you choose, can be a single "
+"unique pointer, reference counted, or atomically reference counted.\n"
"* Scope-based like C++, but the compiler enforces full adherence.\n"
-"* A Rust user can choose the right abstraction for the situation, some even have no cost at runtime like C."
+"* A Rust user can choose the right abstraction for the situation, some even have no cost at "
+"runtime like C."
msgstr ""
"* Seguro e correto como Java, mas sem coletor de lixo.\n"
-"* Dependendo de qual abstração (ou combinação de abstrações) você escolher, pode ser um simples ponteiro único, referência contada ou referência atomicamente contada.\n"
+"* Dependendo de qual abstração (ou combinação de abstrações) você escolher, pode ser um simples "
+"ponteiro único, referência contada ou referência atomicamente contada.\n"
"* Baseado em escopo como C++, mas o compilador impõe adesão total.\n"
-"* Um usuário do Rust pode escolher a abstração certa para a situação, algumas até sem custo em tempo de execução como C."
+"* Um usuário do Rust pode escolher a abstração certa para a situação, algumas até sem custo em "
+"tempo de execução como C."
#: src/memory-management/rust.md:10
-msgid "It achieves this by modeling _ownership_ explicitly."
+#, fuzzy
+msgid "Rust achieves this by modeling _ownership_ explicitly."
msgstr "Ele consegue isso modelando a propriedade (_ownership_) explicitamente."
#: 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."
-msgstr "* Neste ponto, se perguntado como, você pode mencionar que em Rust isso geralmente é tratado por wrappers RAII como [Box], [Vec], [Rc] ou [Arc]. Eles encapsulam a propriedade (ownership) e a alocação de memória por vários meios e evitam possíveis erros em C."
+msgstr ""
+"* Neste ponto, se perguntado como, você pode mencionar que em Rust isso geralmente é tratado por "
+"wrappers RAII como [Box], [Vec], [Rc] ou [Arc]. Eles encapsulam a propriedade (ownership) e a "
+"alocação de memória por vários meios e evitam possíveis erros em C."
#: src/memory-management/comparison.md:1
msgid "# Comparison"
@@ -4207,10 +4560,13 @@ msgstr ""
#: 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 "* Mencione que isso é o oposto dos padrões em C++, que copia por valor, a menos que você use `std::move` (e o construtor de movimento esteja definido!)."
+msgstr ""
+"* Mencione que isso é o oposto dos padrões em C++, que copia por valor, a menos que você use `std::"
+"move` (e o construtor de movimento esteja definido!)."
#: src/ownership/moved-strings-rust.md:1
msgid "# Moved Strings in Rust"
@@ -4433,17 +4789,23 @@ msgstr ""
#: src/ownership/moves-function-calls.md:20
msgid ""
-"* With the first call to `say_hello`, `main` gives up ownership of `name`. Afterwards, `name` cannot be used anymore within `main`.\n"
+"* 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"
+"* `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."
+"* 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 ""
-"* Com a primeira chamada para `say_hello`, `main` desiste da ownership de `name`. Depois disso, `name` não pode mais ser usado dentro de `main`.\n"
+"* Com a primeira chamada para `say_hello`, `main` desiste da ownership de `name`. Depois disso, "
+"`name` não pode mais ser usado dentro de `main`.\n"
"* A memória heap alocada para `name` será liberada no final da função `say_hello`.\n"
-"* `main` pode manter a ownership se passar `name` como uma referência (`&name`) e se `say_hello` aceitar uma referência como um parâmetro.\n"
+"* `main` pode manter a ownership se passar `name` como uma referência (`&name`) e se `say_hello` "
+"aceitar uma referência como um parâmetro.\n"
"* Alternativamente, `main` pode passar um clone de `name` na primeira chamada (`name.clone()`).\n"
-"* Rust torna mais difícil do que o C++ a criação de cópias inadvertidamente, tornando a semântica de movimento o padrão e forçando os programadores a tornar os clones explícitos."
+"* Rust torna mais difícil do que o C++ a criação de cópias inadvertidamente, tornando a semântica "
+"de movimento o padrão e forçando os programadores a tornar os clones explícitos."
#: src/ownership/copy-clone.md:1
msgid "# Copying and Cloning"
@@ -4520,12 +4882,15 @@ msgstr "Copiar e clonar não são a mesma coisa:"
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"
+"* 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 ""
-"* A cópia refere-se a cópias bit a bit de regiões de memória e não funciona em objetos arbitrários.\n"
+"* A cópia refere-se a cópias bit a bit de regiões de memória e não funciona em objetos "
+"arbitrários.\n"
"* A cópia não permite lógica personalizada (ao contrário dos construtores de cópia em C++).\n"
-"* A clonagem é uma operação mais geral e também permite um comportamento personalizado implementando a trait `Clone`.\n"
+"* A clonagem é uma operação mais geral e também permite um comportamento personalizado "
+"implementando a trait `Clone`.\n"
"* A cópia não funciona em tipos que implementam a característica `Drop`."
#: src/ownership/copy-clone.md:42 src/ownership/lifetimes-function-calls.md:29
@@ -4534,22 +4899,28 @@ msgstr "No exemplo acima, tente o seguinte:"
#: src/ownership/copy-clone.md:44
msgid ""
-"* Add a `String` field to `struct Point`. It will not compile because `String` is not a `Copy` type.\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 ""
-"* Adicione um campo `String` ao `struct Point`. Não irá compilar porque `String` não é um tipo `Copy`.\n"
+"* Adicione um campo `String` ao `struct Point`. Não irá compilar porque `String` não é um tipo "
+"`Copy`.\n"
"* Remova `Copy` do atributo `derive`. O erro do compilador agora está no `println!` para `p1`.\n"
"* Mostre que funciona se você clonar `p1` em vez disso."
#: 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 ""
"Se os alunos perguntarem sobre `derive`, basta dizer que esta é uma forma de gerar código em Rust\n"
-"em tempo de compilação. Nesse caso, as implementações padrão dos traits `Copy` e `Clone` são geradas.\n"
+"em tempo de compilação. Nesse caso, as implementações padrão dos traits `Copy` e `Clone` são "
+"geradas.\n"
" \n"
""
@@ -4607,7 +4978,10 @@ msgstr ""
#: src/ownership/borrowing.md:28
#, fuzzy
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"
@@ -4628,7 +5002,9 @@ 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 "
+"perform a simple and efficient `memcpy` copy."
msgstr ""
" fn main() {\n"
" let p1 = Ponto(3, 4);\n"
@@ -4639,7 +5015,9 @@ msgstr ""
" }\n"
" ```\n"
"* O compilador Rust pode fazer otimização de valor de retorno (RVO).\n"
-"* Em C++, a elisão de cópia deve ser definida na especificação da linguagem porque os construtores podem ter efeitos colaterais. Em Rust, isso não é um problema. Se o RVO não aconteceu, o Rust sempre executará uma cópia `memcpy` simples e eficiente."
+"* Em C++, a elisão de cópia deve ser definida na especificação da linguagem porque os construtores "
+"podem ter efeitos colaterais. Em Rust, isso não é um problema. Se o RVO não aconteceu, o Rust "
+"sempre executará uma cópia `memcpy` simples e eficiente."
#: src/ownership/shared-unique-borrows.md:1
msgid "# Shared and Unique Borrows"
@@ -4686,13 +5064,20 @@ msgstr ""
#: src/ownership/shared-unique-borrows.md:25
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 ""
-"* O código acima não compila porque `a` é emprestado como mutável (através de `c`) e como imutável (através de `b`) ao mesmo tempo.\n"
-"* Mova a instrução `println!` para `b` antes do escopo que introduz `c` para fazer o código compilar.\n"
-"* Após essa alteração, o compilador percebe que `b` só é usado antes do novo empréstimo mutável de `a` a `c`. Este é um recurso do verificador de empréstimo chamado \"tempo de vida não lexical\"."
+"* O código acima não compila porque `a` é emprestado como mutável (através de `c`) e como imutável "
+"(através de `b`) ao mesmo tempo.\n"
+"* Mova a instrução `println!` para `b` antes do escopo que introduz `c` para fazer o código "
+"compilar.\n"
+"* Após essa alteração, o compilador percebe que `b` só é usado antes do novo empréstimo mutável de "
+"`a` a `c`. Este é um recurso do verificador de empréstimo chamado \"tempo de vida não lexical\"."
#: src/ownership/lifetimes.md:1
msgid "# Lifetimes"
@@ -4799,7 +5184,9 @@ msgid ""
" ```\n"
" Note how this does not compile since `p3` outlives `p2`.\n"
"\n"
-"* Reset the workspace and change the function signature to `fn left_most<'a, 'b>(p1: &'a Point, p2: &'a Point) -> &'b Point`. This will not compile because the relationship between the lifetimes `'a` and `'b` is unclear.\n"
+"* Reset the workspace and change the function signature to `fn left_most<'a, 'b>(p1: &'a Point, "
+"p2: &'a Point) -> &'b Point`. This will not compile because the relationship between the lifetimes "
+"`'a` and `'b` is unclear.\n"
"* Another way to explain it:\n"
" * Two references to two values are borrowed by a function and the function returns\n"
" another reference.\n"
@@ -4807,12 +5194,15 @@ msgid ""
" * 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 ""
-"* Redefina o espaço de trabalho e altere a assinatura da função para `fn mais_a_esquerda<'a, 'b>(p1: &'a Ponto, p2: &'a Ponto) -> &'b Ponto`. Isso não será compilado porque a relação entre os tempos de vida `'a` e `'b` não é clara.\n"
+"* Redefina o espaço de trabalho e altere a assinatura da função para `fn mais_a_esquerda<'a, "
+"'b>(p1: &'a Ponto, p2: &'a Ponto) -> &'b Ponto`. Isso não será compilado porque a relação entre os "
+"tempos de vida `'a` e `'b` não é clara.\n"
"* Outra forma de explicar:\n"
" * Duas referências a dois valores são emprestadas por uma função e a função retorna\n"
" outra referência.\n"
" * Deve ter vindo de uma dessas duas entradas (ou de uma variável global).\n"
-" * Qual é? O compilador precisa saber, portanto, no local da chamada, a referência retornada não é usada\n"
+" * Qual é? O compilador precisa saber, portanto, no local da chamada, a referência retornada não "
+"é usada\n"
" por mais tempo do que uma variável de onde veio a referência."
#: src/ownership/lifetimes-data-structures.md:1
@@ -4857,17 +5247,28 @@ 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 ""
-"* No exemplo acima, a anotação em `Destaque` impõe que os dados subjacentes ao `&str` contido vivam pelo menos tanto quanto qualquer instância de `Destaque` que usa esses dados.\n"
-"* Se `texto` for consumido antes do final do tempo de vida de `raposa` (ou `cachorro`), o verificador de empréstimo lançará um erro.\n"
-"* Tipos com dados emprestados forçam os usuários a manter os dados originais. Isso pode ser útil para criar exibições leves, mas geralmente as tornam um pouco mais difíceis de usar.\n"
+"* No exemplo acima, a anotação em `Destaque` impõe que os dados subjacentes ao `&str` contido "
+"vivam pelo menos tanto quanto qualquer instância de `Destaque` que usa esses dados.\n"
+"* Se `texto` for consumido antes do final do tempo de vida de `raposa` (ou `cachorro`), o "
+"verificador de empréstimo lançará um erro.\n"
+"* Tipos com dados emprestados forçam os usuários a manter os dados originais. Isso pode ser útil "
+"para criar exibições leves, mas geralmente as tornam um pouco mais difíceis de usar.\n"
"* Quando possível, faça com que as _Structs_ de dados possuam seus dados diretamente.\n"
-"* Algumas _Structs_ com várias referências internas podem ter mais de uma anotação vitalícia. Isso pode ser necessário se houver necessidade de descrever relacionamentos de tempo de vida entre as próprias referências, além do tempo de vida da própria estrutura. Esses são casos de uso muito avançados.\n"
+"* Algumas _Structs_ com várias referências internas podem ter mais de uma anotação vitalícia. Isso "
+"pode ser necessário se houver necessidade de descrever relacionamentos de tempo de vida entre as "
+"próprias referências, além do tempo de vida da própria estrutura. Esses são casos de uso muito "
+"avançados.\n"
""
#: src/exercises/day-1/afternoon.md:1
@@ -5240,16 +5641,20 @@ msgstr "Qual é o tipo de `palavra` em cada laço?"
msgid ""
"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 ""
"Experimente o código acima e depois consulte a documentação para [`impl\n"
"IntoIterator para\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"
"e [`impl IntoIterator para\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"
"para verificar suas respostas."
#: src/welcome-day-2.md:1
@@ -5343,19 +5748,25 @@ msgid ""
" * 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"
+" * 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."
+"* 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 ""
"* Structs funcionam como em C ou C++.\n"
" * Como em C++, e ao contrário de C, nenhum typedef é necessário para definir um tipo.\n"
" * Ao contrário do C++, não há herança entre structs.\n"
"* Os métodos são definidos em um bloco `impl`, que veremos nos próximos slides.\n"
-"* Este pode ser um bom momento para que as pessoas saibam que existem diferentes tipos de structs.\n"
-" * _Structs_ de tamanho zero `por exemplo, struct Foo;` podem ser usadas ao implementar uma característica em algum tipo,\n"
+"* Este pode ser um bom momento para que as pessoas saibam que existem diferentes tipos de "
+"structs.\n"
+" * _Structs_ de tamanho zero `por exemplo, struct Foo;` podem ser usadas ao implementar uma "
+"característica em algum tipo,\n"
"mas não possuem nenhum dado que você deseja armazenar nelas.\n"
-" * O próximo slide apresentará as estruturas tuplas (_Tuple Structs_) usadas quando o nome dos campos não são importantes.\n"
-"* A sintaxe `..pedro` permite a cópia da maioria do campos de uma _struct_ sem precisar explicitar seus tipos.\n"
+" * O próximo slide apresentará as estruturas tuplas (_Tuple Structs_) usadas quando o nome dos "
+"campos não são importantes.\n"
+"* A sintaxe `..pedro` permite a cópia da maioria do campos de uma _struct_ sem precisar explicitar "
+"seus tipos.\n"
" Ele precisa ser o último elemento."
#: src/structs/tuple-structs.md:1
@@ -5413,16 +5824,24 @@ 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 `OddNumber(u32)`.\n"
-"* Demonstrate how to add a `f64` value to a `Newtons` type by accessing the single field in the newtype.\n"
-" * Rust generally doesn’t like inexplicit things, like automatic unwrapping or for instance using booleans as integers.\n"
-" * Operator overloading is discussed on Day 3 (generics). "
+" * The value passed some validation when it was created, so you no longer have to validate it "
+"again at every use: 'PhoneNumber(String)` or `OddNumber(u32)`.\n"
+"* Demonstrate how to add a `f64` value to a `Newtons` type by accessing the single field in the "
+"newtype.\n"
+" * Rust generally doesn’t like inexplicit things, like automatic unwrapping or for instance "
+"using booleans as integers.\n"
+" * Operator overloading is discussed on Day 3 (generics).\n"
+"* The example is a subtle reference to the [Mars Climate Orbiter](https://en.wikipedia.org/wiki/"
+"Mars_Climate_Orbiter) failure."
msgstr ""
-"Newtypes são uma ótima maneira de codificar informações adicionais sobre o valor em um tipo primitivo, por exemplo:\n"
+"Newtypes são uma ótima maneira de codificar informações adicionais sobre o valor em um tipo "
+"primitivo, por exemplo:\n"
" * O número é medido em algumas unidades: `Newtons` no exemplo acima.\n"
-" * O valor passou por alguma validação quando foi criado, então você não precisa mais validá-lo novamente a cada uso: `PhoneNumber(String)` ou `OddNumber(u32)`.\n"
+" * O valor passou por alguma validação quando foi criado, então você não precisa mais validá-lo "
+"novamente a cada uso: `PhoneNumber(String)` ou `OddNumber(u32)`.\n"
" \n"
""
@@ -5462,7 +5881,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"
@@ -5476,7 +5896,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"
@@ -5504,7 +5925,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 ""
@@ -5562,18 +5984,24 @@ msgstr ""
#, fuzzy
msgid ""
"* Enumerations allow you to collect a set of values under one type\n"
-"* This page offers an enum type `CoinFlip` with two variants `Heads` and `Tail`. You might note the namespace when using variants.\n"
+"* This page offers an enum type `CoinFlip` with two variants `Heads` and `Tail`. You might note "
+"the namespace when using variants.\n"
"* This might be a good time to compare Structs and Enums:\n"
-" * In both, you can have a simple version without fields (unit struct) or one with different types of fields (variant payloads). \n"
+" * In both, you can have a simple version without fields (unit struct) or one with different "
+"types of fields (variant payloads). \n"
" * In both, associated functions are defined within an `impl` block.\n"
-" * You could even implement the different variants of an enum with separate structs but then they wouldn’t be the same type as they would if they were all defined in an enum. "
+" * You could even implement the different variants of an enum with separate structs but then they "
+"wouldn’t be the same type as they would if they were all defined in an enum. "
msgstr ""
"* As enumerações permitem que você colete um conjunto de valores em um tipo\n"
-"* Esta página oferece um tipo de Enum `CoinFlip` com duas variantes `Heads` e `Tail`. Você pode observar o namespace ao usar variantes.\n"
+"* Esta página oferece um tipo de Enum `CoinFlip` com duas variantes `Heads` e `Tail`. Você pode "
+"observar o namespace ao usar variantes.\n"
"* Este pode ser um bom momento para comparar Structs e Enums:\n"
-" * Em ambos, você pode ter uma versão simples sem campos (unit struct) ou uma com diferentes tipos de campos (variant payloads).\n"
+" * Em ambos, você pode ter uma versão simples sem campos (unit struct) ou uma com diferentes "
+"tipos de campos (variant payloads).\n"
" * Em ambos, as funções associadas são definidas dentro de um bloco `impl`.\n"
-" * Você pode até mesmo implementar as diferentes variantes de uma Enum com Structs separadas, mas elas não seriam do mesmo tipo que seriam se todas fossem definidas em uma Enum.\n"
+" * Você pode até mesmo implementar as diferentes variantes de uma Enum com Structs separadas, mas "
+"elas não seriam do mesmo tipo que seriam se todas fossem definidas em uma Enum.\n"
""
#: src/enums/variant-payloads.md:1
@@ -5621,22 +6049,31 @@ 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\" after the `=>`.\n"
-" * The expression is matched against the patterns from top to bottom. There is no fall-through like in C or C++.\n"
-" * The match expression has a value. The value is the last expression in the match arm which was executed.\n"
-" * Starting from the top we look for what pattern matches the value then run the code following the arrow. Once we find a match, we stop. \n"
-"* Demonstrate what happens when the search is inexhaustive. Note the advantage the Rust compiler provides by confirming when all cases are handled. \n"
+"* The values in the enum variants can only be accessed after being pattern matched. The pattern "
+"binds references to the fields in the \"match arm\" after the `=>`.\n"
+" * The expression is matched against the patterns from top to bottom. There is no fall-through "
+"like in C or C++.\n"
+" * The match expression has a value. The value is the last expression in the match arm which was "
+"executed.\n"
+" * Starting from the top we look for what pattern matches the value then run the code following "
+"the arrow. Once we find a match, we stop. \n"
+"* Demonstrate what happens when the search is inexhaustive. Note the advantage the Rust compiler "
+"provides by confirming when all cases are handled. \n"
"* `match` inspects a hidden discriminant field in the `enum`.\n"
"* It is possible to retrieve the discriminant by calling `std::mem::discriminant()`\n"
-" * This is useful, for example, if implementing `PartialEq` for structs where comparing field values doesn't affect equality.\n"
-"* `WebEvent::Click { ... }` is not exactly the same as `WebEvent::Click(Click)` with a top level `struct Click { ... }`. The inlined version cannot implement traits, for example. \n"
+" * 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 ""
-"* No exemplo acima, acessar o `char` em `KeyPress`, ou `x` e `y` em `Click` só funciona dentro de uma instrução `match`\n"
+"* No exemplo acima, acessar o `char` em `KeyPress`, ou `x` e `y` em `Click` só funciona dentro de "
+"uma instrução `match`\n"
" ou em uma expressão `if let`.\n"
"* `match` inspeciona um campo discriminante oculto no `enum`.\n"
"* É possível recuperar o campo discriminante chamando `std::mem::discriminant()`.\n"
-"* `WebEvent::Click { ... }` não é exatamente o mesmo que `WebEvent::Click(Click)` com um `struct Click { ... }` de nível superior. A versão embutida não pode implementar traits, por exemplo."
+"* `WebEvent::Click { ... }` não é exatamente o mesmo que `WebEvent::Click(Click)` com um `struct "
+"Click { ... }` de nível superior. A versão embutida não pode implementar traits, por exemplo."
#: src/enums/sizes.md:1
msgid "# Enum Sizes"
@@ -5644,7 +6081,9 @@ msgstr "# Tamanhos de Enum"
#: src/enums/sizes.md:3
msgid "Rust enums are packed tightly, taking constraints due to alignment into account:"
-msgstr "Enums, em Rust, são empacotados firmemente, levando em consideração as restrições devido ao alinhamento:"
+msgstr ""
+"Enums, em Rust, são empacotados firmemente, levando em consideração as restrições devido ao "
+"alinhamento:"
#: src/enums/sizes.md:5
#, fuzzy
@@ -5710,9 +6149,10 @@ msgid ""
" * `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<&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"
+" * Niche optimization: Rust will merge unused bit patterns for the enum\n"
" discriminant.\n"
"\n"
" * Null pointer optimization: For [some\n"
@@ -5720,7 +6160,8 @@ msgid ""
" that `size_of::()` equals `size_of::