Spec Sistemas Com Rust • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 06.1 — Referências Imutáveis (&T) e Empréstimo sem Perda de Ownership

Contexto: Referências Imutáveis (&T) e Empréstimo sem Perda de Ownership no contexto de Borrowing, Referências Imutáveis e Mutáveis (&, &mut).

Requisitos de Execução:

  1. Passar &String para função de cálculo de tamanho mantendo a posse na função chamadora.

Resultado Esperado

Empréstimo imutável executado com sucesso.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_06_1_SeuNome
  2. Envie na tarefa: Atividade Cap 06 - Borrowing, Referências Imutáveis e Mutáveis (&, &mut)
🔑 Gabarito de Código & Solução Comentada
// borrowing_imutavel.rs
fn calcular_tamanho(texto: &String) -> usize {
    texto.len()
}

fn main() {
    let msg = String::from("Rust Systems");
    let tam = calcular_tamanho(&msg);
    println!("Mensagem '{}' possui {} caracteres.", msg, tam);
}

🔍 Nível 2: Prática

Problema 06.2 — Referências Mutáveis (&mut T) e Regra de Exclusividade

Contexto: Referências Mutáveis (&mut T) e Regra de Exclusividade no contexto de Borrowing, Referências Imutáveis e Mutáveis (&, &mut).

Requisitos de Execução:

  1. Modificar conteúdo de uma string através de referência mutável exclusiva &mut s.

Resultado Esperado

String modificada via referência mutável com garantia de zero data races.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_06_2_SeuNome
  2. Envie na tarefa: Atividade Cap 06 - Borrowing, Referências Imutáveis e Mutáveis (&, &mut)
🔑 Gabarito de Código & Solução Comentada
// borrowing_mutavel.rs
fn adicionar_sufixo(s: &mut String) {
    s.push_str(" -> OK");
}

fn main() {
    let mut log = String::from("Status");
    adicionar_sufixo(&mut log);
    println!("Log atualizado: {}", log);
}

⚡ Nível 3: Integração

Problema 06.3 — Regra de Ouro do Borrow Checker (1 Mutável OU Múltiplas Imutáveis)

Contexto: Regra de Ouro do Borrow Checker (1 Mutável OU Múltiplas Imutáveis) no contexto de Borrowing, Referências Imutáveis e Mutáveis (&, &mut).

Requisitos de Execução:

  1. Demonstrar que o compilador proíbe referências mutáveis concorrentes com referências imutáveis ativas.

Resultado Esperado

Concorrência de referências validada e garantida pelo Borrow Checker.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_06_3_SeuNome
  2. Envie na tarefa: Atividade Cap 06 - Borrowing, Referências Imutáveis e Mutáveis (&, &mut)
🔑 Gabarito de Código & Solução Comentada
// borrow_checker.rs
fn main() {
    let mut dado = String::from("Dado");
    {
        let r1 = &dado;
        let r2 = &dado;
        println!("Refs imutaveis: {} e {}", r1, r2);
    } // r1 e r2 saem de escopo
    let r3 = &mut dado;
    r3.push_str(" Modificado");
    println!("Ref mutavel: {}", r3);
}

🏆 Nível 4: Desafio Corporativo

Problema 06.4 — Prevenção de Dangling References em Tempo de Compilação

Contexto: Prevenção de Dangling References em Tempo de Compilação no contexto de Borrowing, Referências Imutáveis e Mutáveis (&, &mut).

Requisitos de Execução:

  1. Demonstrar como o Rust impede o retorno de referências para variáveis locais que sairiam de escopo.

Resultado Esperado

Dangling pointer prevenido pelo compilador do Rust.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_06_4_SeuNome
  2. Envie na tarefa: Atividade Cap 06 - Borrowing, Referências Imutáveis e Mutáveis (&, &mut)
🔑 Gabarito de Código & Solução Comentada
// no_dangling.rs
fn criar_string() -> String {
    let s = String::from("Seguro");
    s // Retorna a posse da String, nao uma referencia para a pilha local!
}

fn main() {
    let dados = criar_string();
    println!("Dados recebidos com seguranca: {}", dados);
}

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos