diff --git a/po/pt-BR.po b/po/pt-BR.po index f267bc472e1..06a8455f394 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-08-25 12:03+0100\n" +"PO-Revision-Date: 2023-08-25 09:32-0700\n" "Last-Translator: \n" "Language-Team: \n" "Language: pt_BR\n" @@ -399,7 +399,7 @@ msgstr "Rc" #: src/SUMMARY.md:116 msgid "Cell/RefCell" -msgstr "" +msgstr "Cell/RefCell" #: src/SUMMARY.md:117 src/modules.md:1 msgid "Modules" @@ -938,9 +938,8 @@ msgid "Join" msgstr "" #: src/SUMMARY.md:292 src/async/control-flow/select.md:1 -#, fuzzy msgid "Select" -msgstr "Configurar" +msgstr "Select" #: src/SUMMARY.md:293 msgid "Pitfalls" @@ -1028,7 +1027,6 @@ msgid "Concurrency Afternoon" msgstr "Concorrência Tarde" #: src/index.md:3 -#, fuzzy msgid "" "[![Build workflow](https://img.shields.io/github/actions/workflow/status/" "google/comprehensive-rust/build.yml?style=flat-square)](https://github.com/" @@ -1039,23 +1037,24 @@ msgid "" "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/" +"[![Workflow do GitHub](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) [!" +"[Contribuições no GitHub](https://img.shields.io/github/contributors/google/" +"comprehensive-rust?style=flat-square)](https://github.com/google/" "comprehensive-rust/graphs/contributors) [![Estrelas no GitHub](https://img." "shields.io/github/stars/google/comprehensive-rust?style=flat-square)]" "(https://github.com/google/comprehensive-rust/stargazers)" #: src/index.md:7 -#, fuzzy msgid "" "This is a free Rust course developed by the Android team at Google. The " "course covers the full spectrum of Rust, from basic syntax to advanced " "topics like generics and error handling." msgstr "" -"Este é um curso de Rust de três dias desenvolvido pela equipe do Android. O " -"curso abrange o espectro completo da linguagem, desde a sintaxe básica até " -"tópicos avançados como 'generics' e tratamento de erros. Também inclui " -"conteúdo específico para Android no último dia." +"Este é um curso gratuito de Rust desenvolvido pela equipe do Android no " +"Google. O curso abrange o espectro completo da linguagem, desde sintaxe " +"básica até tópicos avançados como 'generics' e tratamento de erros." #: src/index.md:11 msgid "" @@ -1082,15 +1081,14 @@ msgstr "Demonstrar expressões idiomáticas comuns de Rust." #: src/index.md:18 msgid "We call the first three course days Rust Fundamentals." -msgstr "" +msgstr "Nós chamamos os três primeiros dias do curso de Fundamentos do Rust." #: src/index.md:20 -#, fuzzy msgid "" "Building on this, you're 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á convidado(a) a mergulhar a fundo em um ou mais tópicos especializados:" +"Em seguida, você está convidado(a) a mergulhar a fundo em um ou mais tópicos " +"especializados:" #: src/index.md:22 msgid "" @@ -1150,7 +1148,6 @@ msgid "Assumptions" msgstr "Premissas" #: src/index.md:44 -#, fuzzy msgid "" "The course assumes that you already know how to program. Rust is a " "statically-typed language and we will sometimes make comparisons with C and " @@ -1622,7 +1619,6 @@ msgstr "" "comportamentos inesperados. O comando seria:" #: src/cargo.md:18 -#, fuzzy msgid "" "```shell\n" "sudo apt install cargo rust-src rustfmt\n" @@ -1959,6 +1955,8 @@ msgid "" "You can use any later version too since Rust maintains backwards " "compatibility." msgstr "" +"Você também pode usar qualquer versão posterior, pois o Rust mantém " +"compatibilidade com versões anteriores." #: src/cargo/running-locally.md:17 msgid "" @@ -2101,13 +2099,12 @@ msgid "Welcome to Day 1" msgstr "Bem-vindo ao Dia 1" #: src/welcome-day-1.md:3 -#, fuzzy msgid "" "This is the first day of Rust Fundamentals. We will cover a lot of ground " "today:" msgstr "" -"Este é o primeiro dia do Comprehensive Rust. Nós cobriremos muitos pontos " -"hoje:" +"Este é o primeiro dia de Fundamentos do Rust. Nós iremos cobrir muitos " +"pontos hoje:" #: src/welcome-day-1.md:6 msgid "" @@ -2349,15 +2346,14 @@ msgstr "" "Unicode." #: src/hello-world.md:22 -#, fuzzy msgid "" "This slide tries to make the students comfortable with Rust code. They will " "see a ton of it over the next three days so we start small with something " "familiar." msgstr "" "Este slide tenta deixar os alunos familiarizados com o código em Rust. Eles " -"vão ver uma tonelada nos próximos quatro dias, então começamos pequeno e com " -"algo familiar." +"irão ver bastante conteúdo nos próximos três dias, então começamos devagar " +"com algo familiar." #: src/hello-world.md:27 msgid "" @@ -3888,13 +3884,12 @@ msgstr "" #: src/exercises/day-1/morning.md:22 src/exercises/day-2/morning.md:11 #: src/exercises/day-3/morning.md:7 src/exercises/bare-metal/morning.md:7 #: src/exercises/concurrency/morning.md:12 -#, fuzzy msgid "" "After looking at the exercises, you can look at the [solutions](solutions-" "morning.md) provided." msgstr "" -"Depois de ver o exercício, você pode ver a [solução](solutions-afternoon.md) " -"fornecida." +"Depois de ver os exercícios, você pode ver as [soluções](solutions-morning." +"md) fornecidas." #: src/exercises/day-1/implicit-conversions.md:3 msgid "" @@ -4049,7 +4044,6 @@ msgstr "" "intervalos) usando a palavra-chave `for`:" #: src/exercises/day-1/for-loops.md:21 -#, fuzzy msgid "" "```rust,editable\n" "fn main() {\n" @@ -4072,7 +4066,7 @@ msgstr "" "fn main() {\n" " let matriz = [10, 20, 30];\n" " print!(\"Iterando sobre a matriz:\");\n" -" for n in matriz {\n" +" for n in &matriz {\n" " print!(\" {n}\");\n" " }\n" " println!();\n" @@ -4210,10 +4204,12 @@ msgid "" "The use of the reference `&array` within `for n in &array` is a subtle " "preview of issues of ownership that will come later in the afternoon." msgstr "" +"O uso da referência `&matriz` em `for n in &matriz` é uma prévia sutil das " +"questões de propriedade que surgirão à tarde." #: src/exercises/day-1/for-loops.md:98 msgid "Without the `&`..." -msgstr "" +msgstr "Sem o `&`..." #: src/exercises/day-1/for-loops.md:99 msgid "" @@ -4221,12 +4217,17 @@ msgid "" "[introduced in the 2021 Edition](https://doc.rust-lang.org/edition-guide/" "rust-2021/IntoIterator-for-arrays.html)." msgstr "" +"O loop teria sido o que consome a matriz. Esta é uma mudança [introduzida na " +"Edição de 2021](https://doc.rust-lang.org/edition-guide/rust-2021/" +"IntoIterator-for-arrays.html)." #: src/exercises/day-1/for-loops.md:102 msgid "" "An implicit array copy would have occured. Since `i32` is a copy type, then " "`[i32; 3]` is also a copy type." msgstr "" +"Uma cópia implícita da matriz teria ocorrido. Como `i32` é um tipo de cópia " +"(*copy type*), então `[i32; 3]` também é um tipo de cópia." #: src/basic-syntax/variables.md:3 msgid "" @@ -4382,6 +4383,9 @@ msgid "" "scoped values that cannot be moved or reallocated during the execution of " "the program. " msgstr "" +"Variáveis estáticas e constantes são duas maneiras diferentes de criar " +"valores com escopo global que não podem ser movidos ou realocados durante a " +"execução do programa. " #: src/basic-syntax/static-and-const.md:6 msgid "`const`" @@ -4392,6 +4396,8 @@ msgid "" "Constant variables are evaluated at compile time and their values are " "inlined wherever they are used:" msgstr "" +"Constantes são avaliadas em tempo de compilação e seus valores são " +"incorporados onde quer que sejam usados:" #: src/basic-syntax/static-and-const.md:11 msgid "" @@ -4447,6 +4453,9 @@ msgid "" "Only functions marked `const` can be called at compile time to generate " "`const` values. `const` functions can however be called at runtime." msgstr "" +"Somente funções marcadas como `const` podem ser chamadas em tempo de " +"compilação para gerar valores `const`. As funções `const` podem, entretanto, " +"ser chamadas em tempo de execução." #: src/basic-syntax/static-and-const.md:33 msgid "`static`" @@ -4457,6 +4466,8 @@ msgid "" "Static variables will live during the whole execution of the program, and " "therefore will not move:" msgstr "" +"Variáveis estáticas permanecerão válidas durante toda a execução do programa " +"e, portanto, não serão movidas:" #: src/basic-syntax/static-and-const.md:37 msgid "" @@ -4477,7 +4488,6 @@ msgstr "" "```" #: src/basic-syntax/static-and-const.md:45 -#, fuzzy msgid "" "As noted in the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-" "vs-static.html), these are not inlined upon use and have an actual " @@ -4487,15 +4497,13 @@ msgid "" "`const` is generally preferred." msgstr "" "Conforme observado no [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-" -"const-vs-static.html), `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 (_unsafe_) e embarcado, e a variável " -"sobrevive durante toda a execução do programa. Quando um valor de escopo " -"global não tem uma razão para precisar identidade de objeto, geralmente " -"`const` é preferido." +"const-vs-static.html), eles não são expandidos no local (_inlined_) quando " +"utilizados e possuem um local de memória real associado. Isso é útil para " +"código inseguro (_unsafe_) e embarcado, e a variável é válida durante toda a " +"execução do programa. Quando um valor de escopo global não tem uma razão " +"para precisar de identidade de objeto, geralmente `const` é preferido." #: src/basic-syntax/static-and-const.md:49 -#, fuzzy msgid "" "Because `static` variables are accessible from any thread, they must be " "`Sync`. Interior mutability is possible through a [`Mutex`](https://doc.rust-" @@ -4504,111 +4512,109 @@ msgid "" "access to them requires `unsafe` code. We will look at [mutable statics](../" "unsafe/mutable-static-variables.md) in the chapter on Unsafe Rust." msgstr "" -"Como variáveis estáticas (`static`) são acessíveis a partir que qualquer " -"_thread_, elas precisam ser guardadas, por exemplo, por um [`Mutex`](https://" -"doc.rust-lang.org/std/sync/struct.Mutex.html), ou acessadas por meio de " -"código inseguro (`unsafe`). Nós iremos ver [dados estáticos mutáveis](../" -"unsafe/mutable-static-variables.md) no capítulo sobre Rust inseguro " -"(\"_Unsafe Rust_\")." +"Como variáveis estáticas (`static`) são acessíveis de qualquer _thread_, " +"elas precisam ser `Sync`. A mutabilidade interior é possível através de um " +"[`Mutex`](https://doc.rust-lang.org/std/sync/struct.Mutex.html), atômico ou " +"similar. Também é possível ter variáveis estáticas mutáveis, mas elas exigem " +"sincronização manual de forma que qualquer acesso a elas requer código " +"“inseguro”. Veremos [variáveis estáticas mutáveis](../unsafe/mutable-static-" +"variables.md) no capítulo sobre _Unsafe Rust_." #: src/basic-syntax/static-and-const.md:57 -#, fuzzy msgid "Mention that `const` behaves semantically similar to C++'s `constexpr`." msgstr "" -"Mencione que `const` se comporta semanticamente similar ao `constexpr` de C+" -"+." +"Mencione que `const` se comporta semanticamente de maneira similar ao " +"`constexpr` de C++." #: src/basic-syntax/static-and-const.md:58 -#, fuzzy msgid "" "`static`, on the other hand, is much more similar to a `const` or mutable " "global variable in C++." msgstr "" -"`static` oferece identidade de objeto: um endereço na memória e estado como " -"requerido por tipos com mutabilidade interna tais como `Mutex`." +"Por outro lado, `static` é muito mais similar a um `const` ou variável " +"global mutável em C++." #: src/basic-syntax/static-and-const.md:59 -#, fuzzy msgid "" "`static` provides object identity: an address in memory and state as " "required by types with interior mutability such as `Mutex`." msgstr "" -"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` fornece identidade de objeto: um endereço na memória e estado " +"conforme exigido por tipos com mutabilidade interior tais como `Mutex`." #: src/basic-syntax/static-and-const.md:60 msgid "" "It isn't super common that one would need a runtime evaluated constant, but " "it is helpful and safer than using a static." msgstr "" +"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 variável estática." #: src/basic-syntax/static-and-const.md:61 msgid "`thread_local` data can be created with the macro `std::thread_local`." msgstr "" +"Dados de `thread_local` podem ser criados com a macro `std::thread_local`." #: src/basic-syntax/static-and-const.md:63 msgid "Properties table:" -msgstr "" +msgstr "Tabela de propriedades:" #: src/basic-syntax/static-and-const.md:65 msgid "Property" -msgstr "" +msgstr "Propriedade" #: src/basic-syntax/static-and-const.md:65 -#, fuzzy msgid "Static" -msgstr "`static`" +msgstr "Static" #: src/basic-syntax/static-and-const.md:65 msgid "Constant" -msgstr "" +msgstr "Constant" #: src/basic-syntax/static-and-const.md:67 msgid "Has an address in memory" -msgstr "" +msgstr "Possui um endereço na memória" #: src/basic-syntax/static-and-const.md:67 #: src/basic-syntax/static-and-const.md:68 #: src/basic-syntax/static-and-const.md:70 #: src/basic-syntax/static-and-const.md:71 msgid "Yes" -msgstr "" +msgstr "Sim" #: src/basic-syntax/static-and-const.md:67 msgid "No (inlined)" -msgstr "" +msgstr "Não (_inlined_, i.e., expandida no local)" #: src/basic-syntax/static-and-const.md:68 -#, fuzzy msgid "Lives for the entire duration of the program" -msgstr "A função `main` é o ponto de entrada do programa." +msgstr "É válida durante toda a execução do programa" #: src/basic-syntax/static-and-const.md:68 #: src/basic-syntax/static-and-const.md:69 #: src/basic-syntax/static-and-const.md:71 msgid "No" -msgstr "" +msgstr "Não" #: src/basic-syntax/static-and-const.md:69 msgid "Can be mutable" -msgstr "" +msgstr "Pode ser mutável" #: src/basic-syntax/static-and-const.md:69 msgid "Yes (unsafe)" -msgstr "" +msgstr "Sim (inseguro)" #: src/basic-syntax/static-and-const.md:70 -#, fuzzy msgid "Evaluated at compile time" -msgstr "Os valores têm tamanhos fixos conhecidos em tempo de compilação." +msgstr "Avaliada em tempo de compilação" #: src/basic-syntax/static-and-const.md:70 msgid "Yes (initialised at compile time)" -msgstr "" +msgstr "Sim (inicializada em tempo de compilação)" #: src/basic-syntax/static-and-const.md:71 msgid "Inlined wherever it is used" -msgstr "" +msgstr "_Inlined_ (expandida no local) onde quer que seja utilizada" #: src/basic-syntax/scopes-shadowing.md:3 msgid "" @@ -4616,7 +4622,7 @@ msgid "" "the same scope:" msgstr "" "Você pode sobrepor (_shadow_) variáveis, tanto aquelas de escopos externos " -"quanto de variáveis do mesmo escopo:" +"quanto variáveis do mesmo escopo:" #: src/basic-syntax/scopes-shadowing.md:6 msgid "" @@ -4663,11 +4669,11 @@ msgstr "" "Definição: _Shadowing_ é diferente da mutação, porque após a sobreposição " "(_shadowing_), os locais de memória de ambas as variáveis existem ao mesmo " "tempo. Ambas estão disponíveis com o mesmo nome, dependendo de onde você as " -"usa no código." +"usa no código. " #: src/basic-syntax/scopes-shadowing.md:26 msgid "A shadowing variable can have a different type. " -msgstr "Uma variável sobreposta pode ter um tipo diferente." +msgstr "Uma variável sobreposta pode ter um tipo diferente. " #: src/basic-syntax/scopes-shadowing.md:27 msgid "" @@ -4698,6 +4704,14 @@ msgid "" "}\n" "```" msgstr "" +"```rust,editable\n" +"fn main() {\n" +" let a = 1;\n" +" let b = &a;\n" +" let a = a + 1;\n" +" println!(\"{a} {b}\");\n" +"}\n" +"```" #: src/memory-management.md:3 msgid "Traditionally, languages have fallen into two broad categories:" @@ -6292,13 +6306,12 @@ msgstr "Iteradores e _ownership_ (difícil)." #: src/exercises/day-1/afternoon.md:11 src/exercises/day-2/afternoon.md:7 #: src/exercises/bare-metal/afternoon.md:7 #: src/exercises/concurrency/afternoon.md:13 -#, fuzzy msgid "" "After looking at the exercises, you can look at the [solutions](solutions-" "afternoon.md) provided." msgstr "" -"Depois de ver o exercício, você pode ver a [solução](solutions-afternoon.md) " -"fornecida." +"Depois de ver os exercícios, você pode ver as [soluções](solutions-afternoon." +"md) fornecidas." #: src/exercises/day-1/book-library.md:3 msgid "" @@ -7880,18 +7893,16 @@ msgstr "" "podemos manter todo o código de implementação em um local previsível." #: src/methods.md:34 -#, fuzzy msgid "Point out the use of the keyword `self`, a method receiver." msgstr "Destaque o uso da palavra-chave `self`, um receptor de método." #: src/methods.md:35 -#, fuzzy msgid "" "Show that it is an abbreviated term for `self: Self` and perhaps show how " "the struct name could also be used." msgstr "" -"Mostre que é um termo abreviado para `self:&Self` e talvez mostre como o " -"nome da struct também poderia ser usado." +"Mostre que é um termo abreviado para `self:Self` e talvez mostre como o nome " +"da _struct_ também poderia ser usado." #: src/methods.md:36 msgid "" @@ -9006,23 +9017,20 @@ msgid "Other interesting parts of the exercise:" msgstr "Outras partes interessante do exercício:" #: src/exercises/day-2/points-polygons.md:122 -#, fuzzy msgid "" "Derive a `Copy` trait for some structs, as in tests the methods sometimes " "don't borrow their arguments." -msgstr "Outras partes interessantes do exercício:" +msgstr "" +"Derive um _trait_ `Copy` para algumas _structs_, já que em testes os métodos " +"às vezes não emprestam seus argumentos." #: src/exercises/day-2/points-polygons.md:123 -#, fuzzy msgid "" "Discover that `Add` trait must be implemented for two objects to be addable " "via \"+\". Note that we do not discuss generics until Day 3." msgstr "" -"Derive um _trait_ `Copy` para algumas estruturas, já que em testes os " -"métodos às vezes não emprestam seus argumentos.\n" -"\n" "Descubra que o trait `Add` deve ser implementado para que dois objetos sejam " -"adicionados via \"+\"." +"adicionados via \"+\". Note que nós não discutimos _generics_ até o Dia 3." #: src/control-flow.md:3 msgid "" @@ -9298,7 +9306,6 @@ msgstr "" "(`panic`/`return`/`break`/`continue`):" #: src/control-flow/if-let-expressions.md:28 -#, fuzzy msgid "" "```rust,editable\n" "fn main() {\n" @@ -9676,7 +9683,7 @@ msgid "" "reference/expressions/loop-expr.html#break-expressions)," msgstr "" "Se você quiser sair de um loop cedo, use [`break`](https://doc.rust-lang.org/" -"reference/expressions/loop-expr.html#break-expressions)." +"reference/expressions/loop-expr.html#break-expressions)," #: src/control-flow/break-continue.md:4 msgid "" @@ -9796,7 +9803,7 @@ msgid "" "`alloc` and `std`. " msgstr "" "Na verdade, o Rust contém várias camadas de Biblioteca Padrão: `core`, " -"`alloc` e `std`." +"`alloc` e `std`. " #: src/std.md:26 msgid "" @@ -9804,7 +9811,7 @@ msgid "" "`libc`, allocator or even the presence of an operating system. " msgstr "" "`core` inclui os tipos e funções mais básicos que não dependem de `libc`, " -"alocador ou até mesmo a presença de um sistema operacional." +"alocador ou até mesmo a presença de um sistema operacional. " #: src/std.md:28 msgid "" @@ -10640,24 +10647,23 @@ msgstr "" "```" #: src/std/rc.md:18 -#, fuzzy msgid "" "See [`Arc`](../concurrency/shared_state/arc.md) and [`Mutex`](https://doc." "rust-lang.org/std/sync/struct.Mutex.html) if you are in a multi-threaded " "context." msgstr "" -"Veja [`Arc`](https://doc.rust-lang.org/std/sync/struct.Mutex.html) e " -"[`Mutex`](https://doc.rust-lang.org/std/rc/struct.Weak.html) se você estiver " -"em um contexto multi-thread." +"Veja [`Arc`](../concurrency/shared_state/arc.md) e [`Mutex`](https://doc." +"rust-lang.org/std/sync/struct.Mutex.html) se você estiver em um contexto " +"multi-thread." #: src/std/rc.md:19 -#, fuzzy msgid "" "You can _downgrade_ a shared pointer into a [`Weak`](https://doc.rust-lang." "org/std/rc/struct.Weak.html) pointer to create cycles that will get dropped." msgstr "" -"Você pode demover (_downgrade_) um ponteiro compartilhado em um ponteiro " -"\\[`Weak`\\]\\[5\\] para criar ciclos que serão descartados." +"Você pode demover (_downgrade_) um ponteiro compartilhado para um ponteiro " +"[`Weak`](https://doc.rust-lang.org/std/rc/struct.Weak.html) (fraco) para " +"criar ciclos que serão descartados." #: src/std/rc.md:29 msgid "" @@ -10694,30 +10700,29 @@ msgid "Use `Rc::strong_count` to check the reference count." msgstr "Use `Rc::strong_count` para verificar a contagem de referência." #: src/std/rc.md:34 -#, fuzzy msgid "" "`Rc::downgrade` gives you a _weakly reference-counted_ object to create " "cycles that will be dropped properly (likely in combination with `RefCell`, " "on the next slide)." msgstr "" -"`Rc::downgrade` lhe fornece um objeto _contador de referências " +"`Rc::downgrade` lhe fornece um objeto _contador de referências_ " "\"fraco\" (weak)_ para criar ciclos que podem ser apropriadamente " -"descartados (provavelmente combinados com `RefCell`)." +"descartados (provavelmente combinados com `RefCell`, no próximo slide)." #: src/std/cell.md:1 msgid "`Cell` and `RefCell`" -msgstr "" +msgstr "`Cell` e `RefCell`" #: src/std/cell.md:3 -#, fuzzy msgid "" "[`Cell`](https://doc.rust-lang.org/std/cell/struct.Cell.html) and [`RefCell`]" "(https://doc.rust-lang.org/std/cell/struct.RefCell.html) implement what Rust " "calls _interior mutability:_ mutation of values in an immutable context." msgstr "" -"Veja [`Arc`](https://doc.rust-lang.org/std/sync/struct.Mutex.html) e " -"[`Mutex`](https://doc.rust-lang.org/std/rc/struct.Weak.html) se você estiver " -"em um contexto multi-thread." +"[`Cell`](https://doc.rust-lang.org/std/cell/struct.Cell.html) e [`RefCell`]" +"(https://doc.rust-lang.org/std/cell/struct.RefCell.html) implementam o que " +"Rust chama de _mutabilidade interior:_ mutação de valores em um contexto " +"imutável." #: src/std/cell.md:8 msgid "" @@ -10725,6 +10730,10 @@ msgid "" "values. More complex interior types typically use `RefCell`, which tracks " "shared and exclusive references at runtime and panics if they are misused." msgstr "" +"`Cell` é normalmente usado para tipos simples, pois requer copiar ou mover " +"valores. Tipos interiores mais complexos normalmente usam `RefCell`, que " +"rastreia referências compartilhadas e exclusivas em tempo de execução e " +"retorna um pânico (_panic_) se forem mal utilizadas." #: src/std/cell.md:12 msgid "" @@ -10762,6 +10771,39 @@ msgid "" "}\n" "```" msgstr "" +"```rust,editable\n" +"use std::cell::RefCell;\n" +"use std::rc::Rc;\n" +"\n" +"#[derive(Debug, Default)]\n" +"struct Node {\n" +" value: i64,\n" +" children: Vec>>,\n" +"}\n" +"\n" +"impl Node {\n" +" fn new(value: i64) -> Rc> {\n" +" Rc::new(RefCell::new(Node { value, ..Node::default() }))\n" +" }\n" +"\n" +" fn sum(&self) -> i64 {\n" +" self.value + self.children.iter().map(|c| c.borrow().sum()).sum::" +"()\n" +" }\n" +"}\n" +"\n" +"fn main() {\n" +" let root = Node::new(1);\n" +" root.borrow_mut().children.push(Node::new(5));\n" +" let subtree = Node::new(10);\n" +" subtree.borrow_mut().children.push(Node::new(11));\n" +" subtree.borrow_mut().children.push(Node::new(12));\n" +" root.borrow_mut().children.push(subtree);\n" +"\n" +" println!(\"graph: {root:#?}\");\n" +" println!(\"graph sum: {}\", root.borrow().sum());\n" +"}\n" +"```" #: src/std/cell.md:47 msgid "" @@ -10770,18 +10812,26 @@ msgid "" "This is safe because there's always one, un-referenced value in the cell, " "but it's not ergonomic." msgstr "" +"Se estivéssemos usando `Cell` em vez de `RefCell` neste exemplo, teríamos " +"que mover o `Node` para fora do `Rc` para enviar os filhos e, em seguida, " +"movê-lo de volta. Isso é seguro porque sempre há um, valor não referenciado " +"em `cell`, mas não é ergonômico." #: src/std/cell.md:48 msgid "" "To do anything with a Node, you must call a `RefCell` method, usually " "`borrow` or `borrow_mut`." msgstr "" +"Para fazer qualquer coisa com um Node, você deve chamar um método `RefCell`, " +"geralmente `borrow` ou `borrow_mut`." #: src/std/cell.md:49 msgid "" "Demonstrate that reference loops can be created by adding `root` to `subtree." "children` (don't try to print it!)." msgstr "" +"Demonstre que loops de referência podem ser criados adicionando `root` a " +"`subtree.children` (não tente imprimi-lo!)." #: src/std/cell.md:50 msgid "" @@ -10790,6 +10840,10 @@ msgid "" "the presence of the reference loop, with `thread 'main' panicked at 'already " "borrowed: BorrowMutError'`." msgstr "" +"Para demonstrar um pânico em tempo de execução, adicione um `fn inc(&mut " +"self)` que incrementa `self.value` e chama o mesmo método em seus filhos. " +"Isso criará um pânico na presença do loop de referência, com `thread 'main' " +"em pânico no 'já emprestado: BorrowMutError'`." #: src/modules.md:3 msgid "We have seen how `impl` blocks let us namespace functions to a type."