Quiz 06 - Introdução
1. **O que é o conceito de "Borrowing" (Empréstimo) no Rust?**
Mover o Ownership para outra função
Acessar o valor sem se tornar o dono (usando referências)
Copiar os dados na Heap
Deletar a variável original
> **Explicação**: Tomar emprestado significa usar um valor temporariamente através de uma referência (`&`).
2. **Qual o símbolo representativo de uma referência em Rust?**
`*`
`@`
`&`
`$`
> **Explicação**: O e comercial (`&`) indica que estamos criando uma referência ao dado.
3. **Por padrão, as referências em Rust são:**
Sempre mutáveis
Imutáveis
Definidas pelo desenvolvedor no Cargo.toml
Referências à pilha apenas
> **Explicação**: Assim como as variáveis, as referências são imutáveis por padrão para garantir segurança.
4. **Qual a regra sobre referências mutáveis?**
Você pode ter infinitas referências mutáveis
Você só pode ter **uma** referência mutável por vez para um dado
Referências mutáveis não podem existir
Só funcionam com números inteiros
> **Explicação**: Limitar a uma referência mutável evita corridas de dados (*data races*).
5. **Podemos ter uma referência mutável se já houver uma referência imutável ativa?**
Sim, o Rust permite tudo
Não, elas não podem coexistir no mesmo escopo
Apenas se a variável for global
Somente em modo release
> **Explicação**: Leitores e escritores não podem coexistir para garantir que os dados não mudem inesperadamente enquanto são lidos.
6. **O que é o "Borrow Checker"?**
Um plugin do VS Code
Uma parte do compilador que verifica as regras de referências
Um comando do terminal para limpar o cache
O sistema de atualização do Rust
> **Explicação**: O Borrow Checker é o "cão de guarda" que garante a segurança em tempo de compilação.
7. **O que acontece se você tentar criar uma "referência pendente" (dangling reference)?**
O programa crasha em execução
O Rust impede a compilação
O valor da referência torna-se zero
O sistema operacional encerra o processo
> **Explicação**: O Rust garante que os dados apontados por uma referência vivam pelo menos tanto quanto a própria referência.
8. **Diferente de C/C++, as referências em Rust:**
Podem ser nulas
Têm a garantia de que sempre apontam para memória válida
São mais lentas que ponteiros manuais
São apenas para variáveis da pilha
> **Explicação**: A segurança de memória do Rust elimina ponteiros nulos ou inválidos.
9. **O escopo de uma referência termina:**
Sempre no fim da função
Onde ela é usada pela última vez
No fim do arquivo
Quando o computador desliga
> **Explicação**: O compilador é inteligente para saber exatamente onde a vida útil da referência acaba.
10. **A passagem de referência como parâmetro para uma função é chamada de:**
Passing by Move
Passing by Reference / Borrowing
Passing by Copy
Passing by Pointer
> **Explicação**: É o método padrão para que uma função use dados sem "sequestrar" a posse deles.