Pular para conteúdo

Quiz 05 - Introdução

1. **Qual a principal função do sistema de Ownership do Rust?**
Aumentar o tempo de compilação
Gerenciar a memória sem um Garbage Collector
Converter código para JavaScript
Criar interfaces gráficas > **Explicação**: O Ownership permite que o Rust garanta segurança de memória em tempo de compilação sem custos de runtime (GC).
2. **Onde são armazenados dados com tamanho fixo e conhecido em tempo de compilação?**
Heap
Stack (Pilha)
Disco Rígido
Cloud > **Explicação**: A Stack é usada para tipos simples e rápidos como inteiros.
3. **A Heap (Monte) é usada para armazenar:**
Apenas booleanos
Dados com tamanho dinâmico ou desconhecido no build (ex: Strings)
O código-fonte do programa
Nenhum dado, é apenas um conceito > **Explicação**: Dados que podem crescer ou diminuir são alocados dinamicamente na Heap.
4. **Qual destas é uma regra de Ownership do Rust?**
Uma variável pode ter múltiplos donos
Só pode haver um dono por vez para um dado valor
Se o dono sai de escopo, os dados permanecem na memória
Variáveis numéricas não têm donos > **Explicação**: A regra do "único dono" evita ambiguidades sobre quem deve liberar a memória.
5. **O que acontece quando o "dono" de um dado sai de escopo?**
O Rust pausa para rodar o Garbage Collector
O valor é automaticamente descartado (chamada da função `drop`)
Acontece um erro de compilação
A variável é movida para a pilha > **Explicação**: O Rust garante a limpeza imediata da memória assim que ela não é mais necessária.
6. **O que é o conceito de "Move" (Movimentação) no Rust?**
Copiar os dados da Heap para outra variável
Transferir a posse de um dado de uma variável para outra, invalidando a primeira
Mover o binário para outra pasta
Alterar o valor de um inteiro > **Explicação**: Move evita o erro de "Double Free" (liberar a mesma memória duas vezes).
7. **Para fazer uma cópia completa (profunda) de dados na Heap, usamos:**
O sinal de igual (`=`)
O método `.clone()`
A palavra-chave `copy`
O método `.duplicate()` > **Explicação**: O `clone` aloca novos dados na Heap e copia o conteúdo.
8. **Tipos simples como `i32` e `bool` são copiados automaticamente porque:**
Eles não têm dono
Implementam a trait `Copy` e vivem apenas na Stack
O compilador os ignora
Eles são sempre globais > **Explicação**: Como vivem na Stack, a cópia é trivial e barata para o processador.
9. **Por que o código `let s1 = String::from("oi"); let s2 = s1; println!("{}", s1);` falha?**
Porque `s1` é imutável
Porque os dados de `s1` foram movidos para `s2`
Porque faltou um `&`
O código não falha, ele funciona normalmente > **Explicação**: Após o move, a variável de origem deixa de ser válida.
10. **A "limpeza automática" da memória no fim do escopo é conhecida em computação como:**
Garbage Collection
RAII (Resource Acquisition Is Initialization)
Manual Deallocation
Segfault > **Explicação**: Embora Rust tenha suas regras, ele se aproxima do padrão RAII do C++.