🧩 Exercícios: Lifetimes Estáticos e Explícitos (‘a)
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:
- Escrever função recebendo e retornando
&straplicando 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)
- Salve o arquivo como:
Atividade_07_1_SeuNome - 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:
- Implementar função
maior_string<'a>(s1: &'a str, s2: &'a str) -> &'a strretornando a maior fatia.
Resultado Esperado
Tempo de vida compartilhado anotado e validado pelo borrow checker.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_07_2_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_07_3_SeuNome - 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:
- Declarar referência com tempo de vida estático
&'static strpersistente 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)
- Salve o arquivo como:
Atividade_07_4_SeuNome - 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");
}