ROTA · 60 CLASSES · 5 GRUPOS
Imersão Rust
Da primeira linha a ownership, traits, concorrência e uma API com Axum.
Pré-requisitos orientam, mas nunca bloqueiam. Sete classes são grátis com conta, nas três rotas.O ARCO DA ROTA
ORDEM RECOMENDADA
60 classes, do primeiro passo ao fechamento.
Cada classe informa a duração estimada. Os exercícios usam Rust na sua máquina. Você pode sair da ordem quando outro nó fizer mais sentido.
- 01Primeiros passosBem-vindo ao Rust: segurança de memória sem coletor de lixo
Por que Rust existe: segurança de memória verificada em compilação, Rust seguro sem data races e abstrações de custo zero — com os tradeoffs honestos e seu primeiro programa completo.
- 02Primeiros passosrustup, cargo e o primeiro projeto na sua máquina
Instale a toolchain com rustup, entenda cada arquivo que o cargo new gera, a anatomia do Cargo.toml e a diferença entre cargo run, build, check e o modo release.
- 03Primeiros passosVariáveis, mutabilidade e tipos primitivos: o que cada let coloca na pilha
let, mut, shadowing e constantes; inteiros com e sem sinal, floats, bool e o char de 32 bits; tuplas e arrays — e o que cada declaração ocupa na pilha.
- 04Primeiros passosFunções, if/else e loops: quando um ponto e vírgula muda o programa
A diferença entre expressão e instrução, o if/else que devolve valor, os três laços (loop, while, for) e ranges — com o erro E0308 do ponto e vírgula decodificado.
- 05Primeiros passosUm programa de verdade: adivinhe o número com stdin, parse e match
O clássico jogo de adivinhação, completo e determinístico: leitura do teclado, parse com Result, comparação com match sobre Ordering e loop — o primeiro programa que reage ao mundo.
- 06OwnershipPilha, heap e o custo de cada valor
Descubra onde cada valor de Rust mora — pilha ou heap —, o que um header de String realmente guarda e por que len e capacity contam histórias diferentes.
- 07OwnershipOwnership: a regra do dono único
A regra que define Rust: cada valor tem um único dono. Veja o que um move realmente copia, decodifique seu primeiro E0382 e entenda por que double free não compila.
- 08OwnershipClone, Copy e quando cada um acontece
Por que um i32 sobrevive à atribuição e uma String não: o trait Copy, o custo real de um clone e o critério para decidir entre mover, copiar e clonar.
- 09OwnershipPosse entrando e saindo de funções
Chamar uma função move a posse para dentro; retornar move para fora. Aprenda a devolver ownership, o padrão da tupla — e por que ele pede uma ferramenta melhor.
- 10OwnershipEscopo, drop e RAII
Quando exatamente um valor morre em Rust: escopo, ordem inversa de drop, o trait Drop e o padrão RAII que fecha arquivos e solta locks sem você escrever uma linha.
- 11Ownership e BorrowingEmpréstimos: & e a leitura compartilhada
Aprenda a ler um valor sem tomar posse dele: como o & cria empréstimos compartilhados, por que vários leitores podem coexistir e o que o erro E0505 protege.
- 12Ownership e BorrowingOwnership por dentro: move, borrow e drop
Integre ownership, moves, empréstimos compartilhados e drop em um único modelo de pilha e heap.
- 13Ownership e Borrowing&mut: exclusividade e E0502
Entenda por que o &mut exige exclusividade total, como decodificar os erros E0502 e E0499 e como o compilador encerra empréstimos no último uso.
- 14Ownership e BorrowingSlices: emprestando pedaços
Aprenda a emprestar pedaços: como &str e &[T] funcionam por dentro como par (ponteiro, comprimento), o que os ranges fatiam e por que temporários derrubam referências (E0716).
- 15Ownership e BorrowingLifetimes: o tempo de vida dos empréstimos
Decodifique o E0106 do exemplo longest, aprenda as três regras de elisão que escondem lifetimes do dia a dia, entenda o 'static e saiba quando reestruturar em vez de anotar.
- 16Structs, enums e pattern matchingStructs: dados com nome
Aprenda a agrupar dados em structs com campos nomeados, structs de tupla e unit structs, e entenda update syntax, ownership de campos e moves parciais.
- 17Structs, enums e pattern matchingMétodos, impl e self
Organize comportamento em blocos impl, diferencie funções associadas de métodos e escolha entre &self, &mut self e self sem esconder ownership.
- 18Structs, enums e pattern matchingEnums: quando um valor é uma de várias coisas
Modele alternativas com enums cujas variantes carregam payloads diferentes, entenda ownership dos dados internos e processe cada forma com match.
- 19Structs, enums e pattern matchingOption: o fim do null
Represente ausência com Option<T>, processe Some e None com map, and_then e unwrap_or, e empreste valores internos sem mover o container.
- 20Structs, enums e pattern matchingmatch: pattern matching exaustivo
Use match como expressão exaustiva, desestruture enums, structs e tuplas, aplique guards e bindings e decodifique o diagnóstico E0004.
- 21Structs, enums e pattern matchingif let, let else e patterns no dia a dia
Aplique patterns focados com if let, while let, let else, matches! e bindings @, e saiba quando manter um match exaustivo.
- 22Structs, enums e pattern matchingModelando domínio com structs e enums
Combine structs, enums e patterns em uma máquina de estados de pedidos que carrega dados obrigatórios e remove estados inválidos do modelo.
- 23Traits e genericsTraits: comportamento compartilhado
Defina traits, implemente métodos obrigatórios e padrão, escolha receptores self e entenda as regras de coerência do Rust.
- 24Traits e genericsDebug, Display, PartialEq e derive
Implemente Debug e Display com intenção, modele igualdade com PartialEq e Eq e saiba quando derive preserva a semântica do tipo.
- 25Traits e genericsGenerics: código para muitos tipos
Escreva funções, structs e enums genéricos, entenda monomorfização e escolha um ou vários parâmetros de tipo com intenção.
- 26Traits e genericsTrait bounds e where
Use trait bounds, múltiplas capacidades, cláusulas where e impls condicionais para dizer ao compilador o que um tipo genérico pode fazer.
- 27Traits e genericsimpl Trait vs dyn Trait
Compare impl Trait e dyn Trait, entenda dispatch estático e dinâmico e leia um trait object como data pointer mais vtable pointer conceituais.
- 28Traits e genericsFrom, Into e conversões idiomáticas
Implemente From e TryFrom, use Into e TryInto por blanket impl e escolha entre conversões infalíveis e validação explícita.
- 29Traits e genericsCopy e Clone por dentro
Entenda o código gerado por derive, as condições legais de Copy, a semântica de ownership e por que recursos com Drop exigem move ou Clone explícito.
- 30Errospanic! vs Result: erros recuperáveis ou não
Escolha entre panic! e Result com base no que o chamador pode fazer, trate índices e parse sem dogmas e leia um backtrace de panic.
- 31ErrosResult: propagando com match
Leia Result<T, E> como um contrato exaustivo, use match e combinadores sem apagar a falha e diferencie erro de ausência com Option.
- 32ErrosO operador ?
Use ? para retorno antecipado em Result e Option, entenda a conversão por From e decodifique o E0277 quando o contexto de retorno é incompatível.
- 33ErrosTipos de erro próprios
Modele falhas com um enum, implemente Display e std::error::Error, preserve a causa em source e permita decisões por variante.
- 34Errosthiserror e anyhow na prática
Entenda o que thiserror gera para enums tipados, o que anyhow acrescenta em aplicações e como os dois preservam Display, From, source e contexto.
- 35ErrosEstratégia de erros em um programa real
Combine parse, validação, domínio e I/O com erros tipados na biblioteca, contexto na aplicação e um único relatório na borda externa.
- 36Collections, iterators e closuresVec por dentro: len, capacity e realocação
Entenda o header de Vec, a diferença entre len e capacity, quando push pode realocar e como get e o borrow checker protegem acessos.
- 37Collections, iterators e closuresHashMap: chaves, valores e entry
Use HashMap com ownership explícito, buscas emprestadas, get_mut e entry, sem depender da ordem de iteração ou do layout interno.
- 38Collections, iterators e closuresString vs &str de uma vez por todas
Diferencie String e &str, conte bytes e valores escalares UTF-8, recorte somente em fronteiras válidas e reconheça conversões que alocam.
- 39Collections, iterators e closuresClosures e os traits Fn/FnMut/FnOnce
Entenda capturas por borrow, borrow mutável e move, e leia Fn, FnMut e FnOnce como capacidades inferidas pelo uso dos valores capturados.
- 40Collections, iterators e closuresIterators: next, lazy e o custo zero
Implemente e consuma Iterator, acompanhe o estado de next, diferencie Iterator de IntoIterator e entenda laziness e abstração sem custo adicional.
- 41Collections, iterators e closuresmap, filter, collect e amigos
Combine map, filter, filter_map, flat_map, enumerate, zip, take, fold e collect com tipos, ownership e casos de borda explícitos.
- 42Collections, iterators e closuresRefatorando loops para iterators
Refatore loops para iterators sem mudar semântica, preserve curto-circuito e erros, controle efeitos colaterais e reconheça quando o loop é mais claro.
- 43Smart pointersBox: valores no heap por escolha
Use Box para colocar um valor no heap, dar tamanho conhecido a tipos recursivos e manter um único dono sem coleta de lixo.
- 44Smart pointersRc: múltiplos donos por contagem
Compartilhe ownership em uma thread com Rc, entenda contagens forte e fraca e evite confundir clone da handle com clone do valor.
- 45Smart pointersRefCell e a mutabilidade interior
Use RefCell para verificar em runtime a regra de empréstimo da própria célula, controlar guards e escolher entre panic e Result.
- 46Smart pointersRc<RefCell<T>>: o padrão e seus limites
Combine Rc e RefCell para estado mutável compartilhado em uma thread, controle guards, quebre ciclos com Weak e reconheça os limites.
- 47Smart pointersBox, Rc, RefCell: a tabela de decisão
Escolha entre valor direto, empréstimo, Box, Rc, RefCell e combinações, com critérios de ownership, mutação, threads, custo e ciclos.
- 48ConcorrênciaThreads: spawn, join e move
Crie threads do sistema, transfira ownership com closures move, recupere resultados com join e trate panics sem supor uma ordem de execução.
- 49ConcorrênciaChannels: mpsc e a posse atravessando threads
Transfira ownership por channels mpsc, coordene vários produtores, feche o fluxo corretamente e aplique backpressure com sync_channel.
- 50ConcorrênciaMutex, Arc e o estado compartilhado
Compartilhe ownership com Arc, proteja mutação com Mutex, limite seções críticas e trate poison somente após validar a invariável.
- 51ConcorrênciaSend e Sync: por que data race não compila
Entenda Send e Sync como unsafe auto traits, leia bounds de APIs concorrentes e explique por que Rc e RefCell falham entre threads.
- 52ConcorrênciaWorker pool e pipeline: padrões que funcionam
Monte um worker pool std-only com backpressure, shutdown, joins, resultados e panics; reconheça limites do Receiver compartilhado e evite deadlocks.
- 53Async e Tokioasync/await: o que o compilador gera
Entenda como async cria uma Future, como await pode suspender e como poll, Pending, Waker e Ready formam o trabalho cooperativo.
- 54Async e TokioTokio: o runtime na prática
Configure o Tokio, execute tarefas assíncronas e separe I/O bloqueante, trabalho curto bloqueante e processamento sustentado de CPU.
- 55Async e Tokiojoin!, select! e tarefas concorrentes
Combine Futures com join!, escolha a primeira com select!, use tarefas Tokio e proteja operações contra cancelamento parcial.
- 56Async e TokioErros e timeouts em código async
Desfaça Result aninhado, preserve contexto, defina timeouts e repita somente operações idempotentes com efeitos externos conhecidos.
- 57Async e TokioAsync vs threads: a decisão
Escolha entre código síncrono, threads do sistema e async com base em I/O, CPU, bibliotecas, custo de complexidade e medições.
- 58Projeto final: API com AxumAPI com Axum 1: rotas e estado
Monte um Router com sintaxe atual do Axum, handlers async, State com Arc, listener TCP e limites claros para estado compartilhado e trabalho de CPU.
- 59Projeto final: API com AxumAPI com Axum 2: JSON, extractors e erros
Receba Path, Query, Json e State na ordem correta, valide payloads após a extração e converta erros tipados em respostas HTTP seguras.
- 60Projeto final: API com AxumAPI com Axum 3: testes e entrega
Teste um Router com oneshot, colete corpos HTTP, configure o listener, conecte graceful shutdown à vida do servidor e revise a entrega final.
SUA PRIMEIRA CLASSE
Bem-vindo ao Rust: segurança de memória sem coletor de lixo
Por que Rust existe: segurança de memória verificada em compilação, Rust seguro sem data races e abstrações de custo zero — com os tradeoffs honestos e seu primeiro programa completo.
Entre para ler a aula, baixar o projeto e executar os testes com Cargo na sua máquina.
Começar pela rota →ESTA ROTA E TODAS AS OUTRAS
Qualquer plano abre os 126 nós.
Mensal R$19,90 · anual R$149 · lifetime R$499. Todos têm garantia de 7 dias.