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


🎯 Nível 1: Fundamentos

Problema 07.1 — Elision Rules de Lifetimes em Funções Simples

Contexto: Elision Rules de Lifetimes em Funções Simples no contexto de Lifetimes Estáticos e Explícitos (‘a).

Requisitos de Execução:

  1. Escrever função recebendo e retornando &str aplicando regras de elisão de tempo de vida automáticas.

Resultado Esperado

Função com elisão de lifetime compilada sem anotações manuais.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_1_SeuNome
  2. Envie na tarefa: Atividade Cap 07 - Lifetimes Estáticos e Explícitos ('a)
🔑 Gabarito de Código & Solução Comentada
// lifetime_elision.rs
fn primeiro_caractere(s: &str) -> &str {
    &s[0..1]
}

fn main() {
    println!("Primeiro: {}", primeiro_caractere("Rust"));
}

🔍 Nível 2: Prática

Problema 07.2 — Anotação Explícita de Lifetimes com Generic Lifetime Parameter (‘a)

Contexto: Anotação Explícita de Lifetimes com Generic Lifetime Parameter (‘a) no contexto de Lifetimes Estáticos e Explícitos (‘a).

Requisitos de Execução:

  1. Implementar função maior_string<'a>(s1: &'a str, s2: &'a str) -> &'a str retornando a maior fatia.

Resultado Esperado

Tempo de vida compartilhado anotado e validado pelo borrow checker.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_2_SeuNome
  2. Envie na tarefa: Atividade Cap 07 - Lifetimes Estáticos e Explícitos ('a)
🔑 Gabarito de Código & Solução Comentada
// generic_lifetime.rs
fn maior<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() { x } else { y }
}

fn main() {
    let str1 = "Rust Lang";
    let str2 = "C++";
    println!("Maior: {}", maior(str1, str2));
}

⚡ Nível 3: Integração

Problema 07.3 — Lifetimes em Definições de Structs

Contexto: Lifetimes em Definições de Structs no contexto de Lifetimes Estáticos e Explícitos (‘a).

Requisitos de Execução:

  1. Declarar struct TrechoTexto<'a> contendo referência com lifetime explícito.

Resultado Esperado

Struct armazenando referência com tempo de vida vinculado à fonte de dados.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_3_SeuNome
  2. Envie na tarefa: Atividade Cap 07 - Lifetimes Estáticos e Explícitos ('a)
🔑 Gabarito de Código & Solução Comentada
// struct_lifetime.rs
struct TrechoTexto<'a> {
    parte: &'a str,
}

fn main() {
    let texto = String::from("Linha de log corporativo");
    let trecho = TrechoTexto { parte: &texto[0..5] };
    println!("Trecho: {}", trecho.parte);
}

🏆 Nível 4: Desafio Corporativo

Problema 07.4 — Lifetime Estático (‘static) para Constantes e Literais

Contexto: Lifetime Estático (‘static) para Constantes e Literais no contexto de Lifetimes Estáticos e Explícitos (‘a).

Requisitos de Execução:

  1. Declarar referência com tempo de vida estático &'static str persistente por toda a execução do programa.

Resultado Esperado

Lifetime estático 'static configurado para dados embutidos no binário.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_4_SeuNome
  2. Envie na tarefa: Atividade Cap 07 - Lifetimes Estáticos e Explícitos ('a)
🔑 Gabarito de Código & Solução Comentada
// static_lifetime.rs
const BANNER: &'static str = "SISTEMA RUST DE ALTA PERFORMANCE";

fn main() {
    println!("{    println!("Status: OK");
}", BANNER);
    println!("Status: OK");
}