Bem-vindo ao Comprehensive Rust 🦀
1.
Conduzindo o Curso
❱
1.1.
Estrutura do Curso
1.2.
Atalhos de Teclado
1.3.
Traduções
2.
Usando o Cargo
❱
2.1.
O Ecossistema do Rust
2.2.
Amostras de Código
2.3.
Executando o Cargo Localmente
Dia 1: Manhã
3.
Bem-vindo
❱
3.1.
O que é Rust?
4.
Olá Mundo!
❱
4.1.
Um Pequeno Exemplo
5.
Por que Rust?
❱
5.1.
Garantias em Tempo de Compilação
5.2.
Garantias em Tempo de Execução
5.3.
Recursos Modernos
6.
Sintaxe Básica
❱
6.1.
Tipos Escalares
6.2.
Tipos Compostos
6.3.
Referências
❱
6.3.1.
Referências Soltas
6.4.
Slices
❱
6.4.1.
String vs str
6.5.
Funções
❱
6.5.1.
Rustdoc
6.5.2.
Métodos
6.5.3.
Sobrecarga
7.
Exercícios
❱
7.1.
Conversões Implícitas
7.2.
Matrizes e Loops for
Dia 1: Tarde
8.
Controle de Fluxo
❱
8.1.
Blocos
8.2.
Expressões if
8.3.
Loops for
8.4.
Loops while
8.5.
break e continue
8.6.
Expressões loop
9.
Variáveis
❱
9.1.
Inferência de Tipo
9.2.
Variáveis Estáticas e Constantes
9.3.
Escopos e Sobreposição
10.
Enums
❱
10.1.
Conteúdos Variantes
10.2.
Tamanhos de Enum
11.
Novel Control Flow
❱
11.1.
Expressões if let
11.2.
Loops while let
11.3.
Expressões match (Correspondência)
12.
Correspondência de Padrões
❱
12.1.
Desestruturando Enums
12.2.
Desestruturando Structs
12.3.
Desestruturando Matrizes
12.4.
Guardas de Correspondência (Match Guards)
13.
Exercícios
❱
13.1.
Algoritmo de Luhn
13.2.
Pattern Matching (TBD)
Dia 2: Manhã
14.
Bem-vindo
15.
Gerenciamento de Memória
❱
15.1.
Stack vs Heap
15.2.
Memória de Pilha
15.3.
Gerenciamento Manual de Memória
15.4.
Gerenciamento de Memória Baseado em Escopo
15.5.
Gerenciamento Automático de Memória
15.6.
Gerenciamento de Memória no Rust
15.7.
Comparação
16.
Ownership
❱
16.1.
Semântica do Move (mover)
16.2.
Strings Movidas em Rust
❱
16.2.1.
Liberações Duplas em C++ Moderno
16.3.
Move em Chamadas de Função
16.4.
Copia e Clonagem
16.5.
Empréstimo (Borrowing)
❱
16.5.1.
Empréstimos Compartilhados e Únicos
16.6.
Tempos de Vida (Lifetimes)
16.7.
Tempos de vida (Lifetimes) em Chamadas de Função
16.8.
Tempos de Vida em Estruturas de Dados
17.
Exercícios
❱
17.1.
Armazenando Livros
17.2.
Iteradores e Ownership (Posse)
18.
Structs
❱
18.1.
Estruturas de Tuplas (Tuple Structs)
18.2.
Sintaxe Abreviada de Campos
19.
Métodos
❱
19.1.
Receptor de Método
19.2.
Exemplo
20.
Exercícios
❱
20.1.
Estatísticas de Saúde
Dia 2: Tarde
21.
Biblioteca Padrão
❱
21.1.
Option e Result
21.2.
String
21.3.
Vec
21.4.
HashMap
21.5.
Box
❱
21.5.1.
Box com Estruturas de Dados Recursivas
21.5.2.
Otimização de Nicho
21.6.
Rc
21.7.
Cell/RefCell
22.
Módulos
❱
22.1.
Visibilidade
22.2.
Caminhos
22.3.
Hierarquia do Sistema de Arquivos
23.
Exercícios
❱
23.1.
Strings e Iteradores
Dia 3: Manhã
24.
Bem-vindo
25.
Generics
❱
25.1.
Tipos de Dados Genéricos
25.2.
Métodos Genéricos
25.3.
Monomorfização
26.
Traits
❱
26.1.
Objetos Trait
26.2.
Traits Derivados
26.3.
Métodos Padrão
26.4.
Limites de trait
26.5.
Trait impl
27.
Traits Importantes
❱
27.1.
Iterator
27.2.
FromIterator
27.3.
From e Into
27.4.
Read e Write
27.5.
Drop
27.6.
Default
27.7.
Operadores: Add, Mul, ...
27.8.
Closures: Fn, FnMut, FnOnce
28.
Exercícios
❱
28.1.
Uma Biblioteca GUI Simples
28.2.
Pontos e Polígonos
Dia 3: Tarde
29.
Tratamento de Erros
❱
29.1.
Panics (Pânico)
❱
29.1.1.
Capturando o Desenrolar da Pilha
29.2.
Tratamento Estruturado de Erros
29.3.
Propagando Erros com ?
❱
29.3.1.
Convertendo Tipos de Erro
❱
29.3.1.1.
Exemplo
29.3.2.
Derivando Enums de Erro
29.3.3.
Tipos de Erros Dinâmicos
29.3.4.
Adicionando Contexto aos Erros
30.
Testando
❱
30.1.
Testes Unitários
30.2.
Módulos de Teste
30.3.
Testes de Documentação
30.4.
Testes de Integração
30.5.
Crates Úteis para Testes
31.
Rust Inseguro (unsafe)
❱
31.1.
Desreferenciando Ponteiros Brutos
31.2.
Variáveis Estáticas Mutáveis
31.3.
Uniões
31.4.
Chamando Funções Inseguras
❱
31.4.1.
Escrevendo Funções Inseguras
31.4.2.
Funções Externas
31.5.
Implementando Traits Inseguros
32.
Exercícios
❱
32.1.
Wrapper FFI seguro
Android
33.
Bem-vindo
34.
Configurar
35.
Regras de Construção (Build)
❱
35.1.
Binários do Rust
35.2.
Bibliotecas do Rust
36.
AIDL
❱
36.1.
Interfaces AIDL
36.2.
Implementação
36.3.
Servidor
36.4.
Implantar
36.5.
Cliente
36.6.
Alterando API
37.
Gerando Registros (Log)
38.
Interoperabilidade
❱
38.1.
Com C
❱
38.1.1.
Chamando C com Bindgen
38.1.2.
Chamando Rust do C
38.2.
Com C++
38.3.
Com Java
39.
Exercícios
Bare Metal: Manhã
40.
Bem-vindo
41.
no_std
❱
41.1.
Um pequeno exemplo
41.2.
alloc
42.
Microcontrollers
❱
42.1.
Raw MMIO
42.2.
PACs
42.3.
HAL Crates
42.4.
Board Support Crates
42.5.
The Type State Pattern
42.6.
embedded-hal
42.7.
probe-rs, cargo-embed
❱
42.7.1.
Debugging
42.8.
Outros Projetos
43.
Exercícios
❱
43.1.
Bússola
Bare Metal: Tarde
44.
Application Processors
❱
44.1.
Getting Ready to Rust
44.2.
Inline Assembly
44.3.
MMIO
44.4.
Let's Write a UART Driver
❱
44.4.1.
Mais Traits (Características)
44.5.
A Better UART Driver
❱
44.5.1.
Bitflags
44.5.2.
Multiple Registers
44.5.3.
Driver
44.5.4.
Usando o Cargo
44.6.
Gerando Registros (Log)
❱
44.6.1.
Usando o Cargo
44.7.
Exceções
44.8.
Outros Projetos
45.
Useful Crates
❱
45.1.
zerocopy
45.2.
aarch64-paging
45.3.
buddy_system_allocator
45.4.
tinyvec
45.5.
spin
46.
Android
❱
46.1.
vmbase
47.
Exercícios
❱
47.1.
RTC Driver
Concorrência: Manhã
48.
Bem-vindo
49.
Threads
❱
49.1.
Threads com Escopo
50.
Canais (channels)
❱
50.1.
Canais Ilimitados
50.2.
Canais Delimitados
51.
Send e Sync
❱
51.1.
Send
51.2.
Sync
51.3.
Exemplos
52.
Estado Compartilhado
❱
52.1.
Arc
52.2.
Mutex
52.3.
Exemplo
53.
Exercícios
❱
53.1.
Filósofos Jantando
53.2.
Verificador de Links Multi-Threads
Concorrência: Tarde
54.
Async Basics
❱
54.1.
async/await
54.2.
Closures
54.3.
Tempos de Execução
❱
54.3.1.
Tokio
54.4.
Tarefas
54.5.
Canais Assíncronos
55.
Controle de Fluxo
❱
55.1.
Join
55.2.
Select
56.
Pitfalls
❱
56.1.
Blocking the Executor
56.2.
Pin
56.3.
Traits (Características)
56.4.
Cancelar
57.
Exercícios
❱
57.1.
Filósofos Jantando
57.2.
Broadcast Chat Application
Palavras Finais
58.
Obrigado!
59.
Outros recursos
60.
Créditos
Soluções
61.
Soluções
❱
61.1.
Dia 1 Manhã
61.2.
Dia 1 Tarde
61.3.
Dia 2 Manhã
61.4.
Dia 2 Tarde
61.5.
Dia 3 Manhã
61.6.
Dia 3 Tarde
61.7.
Bare Metal Rust Morning
61.8.
Bare Metal Rust Tarde
61.9.
Concorrência Manhã
61.10.
Concorrência Tarde
Light
Rust
Coal
Navy
Ayu
Comprehensive Rust 🦀
English
Brazilian Portuguese (Português do Brasil)
Chinese Simplified (汉语)
Chinese Traditional (漢語)
Korean (한국어)
Spanish (Español)
Crates Úteis para Testes
We’ll go over a few crates which solve some common problems in bare-metal programming.