← Ver a árvore completa

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

01Fundamentos02Dados03Funções04Concorrência05Web

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.

  1. 01
    Primeiros 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.

  2. 02
    Primeiros 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.

  3. 03
    Primeiros 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.

  4. 04
    Primeiros 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.

  5. 05
    Primeiros 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.

  6. 06
    OwnershipPilha, 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.

  7. 07
    OwnershipOwnership: 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.

  8. 08
    OwnershipClone, 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.

  9. 09
    OwnershipPosse 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.

  10. 10
    OwnershipEscopo, 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.

  11. 11
    Ownership 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.

  12. 12
    Ownership e BorrowingOwnership por dentro: move, borrow e drop

    Integre ownership, moves, empréstimos compartilhados e drop em um único modelo de pilha e heap.

  13. 13
    Ownership 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.

  14. 14
    Ownership 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).

  15. 15
    Ownership 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.

  16. 16
    Structs, 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.

  17. 17
    Structs, 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.

  18. 18
    Structs, 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.

  19. 19
    Structs, 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.

  20. 20
    Structs, 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.

  21. 21
    Structs, 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.

  22. 22
    Structs, 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.

  23. 23
    Traits 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.

  24. 24
    Traits 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.

  25. 25
    Traits 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.

  26. 26
    Traits 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.

  27. 27
    Traits 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.

  28. 28
    Traits 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.

  29. 29
    Traits 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.

  30. 30
    Errospanic! 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.

  31. 31
    ErrosResult: 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.

  32. 32
    ErrosO 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.

  33. 33
    ErrosTipos 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.

  34. 34
    Errosthiserror 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.

  35. 35
    ErrosEstraté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.

  36. 36
    Collections, 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.

  37. 37
    Collections, 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.

  38. 38
    Collections, 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.

  39. 39
    Collections, 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.

  40. 40
    Collections, 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.

  41. 41
    Collections, 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.

  42. 42
    Collections, 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.

  43. 43
    Smart 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.

  44. 44
    Smart 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.

  45. 45
    Smart 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.

  46. 46
    Smart 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.

  47. 47
    Smart 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.

  48. 48
    Concorrê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.

  49. 49
    Concorrê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.

  50. 50
    Concorrê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.

  51. 51
    Concorrê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.

  52. 52
    Concorrê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.

  53. 53
    Async 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.

  54. 54
    Async 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.

  55. 55
    Async 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.

  56. 56
    Async 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.

  57. 57
    Async 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.

  58. 58
    Projeto 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.

  59. 59
    Projeto 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.

  60. 60
    Projeto 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.

Pratique com um projeto local

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.

Comparar os 3 planos →Começar pelas classes grátis