Rust em 2025: por que agora?
\n\nNos últimos três anos, o Rust fez um verdadeiro avanço. A linguagem que inicialmente parecia "complexa e de nicho" hoje é usada no kernel do Linux, em navegadores (Firefox, parcialmente Chromium), em ferramentas para DevOps (ripgrep, fd, bat) e até no desenvolvimento web. Em 2025, Rust não é apenas "mais uma linguagem", mas sim a ferramenta número um para escrever código seguro, rápido e confiável.
\n\nMas há um problema: a barreira de entrada. Rust é famoso por seu borrow checker, tempos de vida (lifetimes) e sistema de tipos rigoroso. Muitos iniciantes desistem do aprendizado na segunda semana, ao se depararem com erros do compilador.
\n\nEste artigo é um roadmap para aprender Rust em 2025. Eu organizei a ordem dos tópicos, dei exemplos reais de código e expliquei o que estudar obrigatoriamente e o que pode ser deixado para depois. Vamos lá!
\n\nEtapa 1: Fundamentos (Semanas 1–2)
\n\n1.1 Instalação e primeiro programa
\n\nVamos começar com a instalação via rustup — o instalador oficial. Ele gerencia as versões do compilador e da toolchain.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nrustc --version\ncargo --version\n\nSeu primeiro arquivo main.rs:
fn main() {\n println!("Olá, mundo Rust 2025!");\n}\n\nCompilamos: rustc main.rs && ./main. Mas é melhor já se acostumar com o Cargo — gerenciador de pacotes e construtor:
cargo new my_first_project\ncd my_first_project\ncargo run\n\n1.2 Variáveis, tipos, estruturas de controle
\n\nRust é fortemente tipado, mas o compilador frequentemente infere os tipos sozinho. A principal diferença do Python ou JavaScript é que as variáveis são imutáveis por padrão (immutable).
\n\nfn main() {\n let x = 5; // imutável\n let mut y = 10; // mutável\n y += 5;\n\n let name = "Rust";\n let year: u32 = 2025;\n\n if year > 2024 {\n println!("{} — o futuro já chegou!", name);\n }\n\n for i in 0..5 {\n println!("Contagem: {}", i);\n }\n}\n\n1.3 Propriedade (Ownership) — a pedra angular
\n\nIsso é o que mais assusta os iniciantes. Mas sem entender ownership, você não escreverá nenhum projeto real. A essência: cada valor em Rust tem exatamente um dono. Quando o dono sai do escopo, a memória é liberada.
\n\nfn main() {\n let s1 = String::from("olá");\n let s2 = s1; // a propriedade é movida para s2\n\n // println!("{}", s1); // ERRO! s1 não possui mais a string\n println!("{}", s2); // ok\n}\n\nSe precisar passar dados sem perder a propriedade, usamos uma referência (reference):
\n\nfn main() {\n let s = String::from("Rust");\n let len = calculate_length(&s); // emprestamos\n println!("Tamanho de '{}' = {}", s, len); // s ainda está disponível\n}\n\nfn calculate_length(s: &String) -> usize {\n s.len()\n}\n\nEtapa 2: Aprofundamento (Semanas 3–5)
\n\n2.1 Structs, enums e pattern matching
\n\nRust não é uma linguagem OOP no sentido clássico, mas structs e traits cobrem 90% das necessidades.
\n\nstruct User {\n username: String,\n email: String,\n active: bool,\n}\n\nenum Status {\n Active,\n Inactive,\n Banned { reason: String },\n}\n\nfn check_status(status: Status) {\n match status {\n Status::Active => println!("Usuário ativo"),\n Status::Inactive => println!("Inativo"),\n Status::Banned { reason } => println!("Banido: {}", reason),\n }\n}\n\n2.2 Tratamento de erros: Option e Result
\n\nEm Rust não há exceções (exceptions). Em vez disso, temos os elegantes Result<T, E> e Option<T>. Esqueça o try/except — agora você usa match ou ?
Blogs
Book Recommendations
Leia também
Documentação do Projeto Go: Guia Completo de A a Z
Salários de desenvolvedores Kotlin na Rússia: panorama do mercado 2024
Bibliotecas Java 2024: guia completo da ecossistema para desenvolvedores
Trabalhando com datas e horas em Go: guia completo
push_back vs emplace_back: qual a diferença e o que escolher para iniciantes?