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.
Futures
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 (æ±èŻ)
Korean (íê”ìŽ)
Spanish (Español)
Crates Ăteis para Testes
Weâll go over a few crates which solve some common problems in bare-metal programming.