Bem-vindos 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.
Exemplos de CĂłdigo
2.3.
Executando o Cargo Localmente
Dia 1: ManhĂŁ
3.
Bem-vindos
4.
OlĂĄ, Mundo
â±
4.1.
O que Ă© Rust?
4.2.
BenefĂcios do Rust
4.3.
Playground
5.
Tipos e Valores
â±
5.1.
OlĂĄ, Mundo
5.2.
VariĂĄveis
5.3.
Valores
5.4.
Aritimética
5.5.
InferĂȘncia de Tipo
5.6.
ExercĂcio: Fibonacci
â±
5.6.1.
Solução
6.
Fundamentos de Controle de Fluxo
â±
6.1.
ExpressÔes if
6.2.
Loops
â±
6.2.1.
for
6.2.2.
loop
6.3.
break e continue
â±
6.3.1.
RĂłtulos (Labels)
6.4.
Blocos e Escopos
â±
6.4.1.
Escopos e Shadowing (Sobreposição)
6.5.
FunçÔes
6.6.
Macros
6.7.
ExercĂcio: SequĂȘncia de Collatz
â±
6.7.1.
Solução
Dia 1: Tarde
7.
Bem-vindos
8.
Tuplas e Matrizes
â±
8.1.
Matrizes
8.2.
Tuplas
8.3.
Iterator de Matrizes
8.4.
PadrÔes e Desestruturação
8.5.
ExercĂcio: Matrizes Aninhadas
â±
8.5.1.
Solução
9.
ReferĂȘncias
â±
9.1.
ReferĂȘncias Compartilhadas
9.2.
ReferĂȘncias Exclusivas
9.3.
Slices: &\[T\]
9.4.
Strings
9.5.
ExercĂcio: Geometria
â±
9.5.1.
Solução
10.
Tipos Definidos pelo UsuĂĄrio
â±
10.1.
Structs (Estruturas) Nomeadas
10.2.
Structs de Tuplas
10.3.
Enums (EnumeraçÔes)
10.4.
Static
10.5.
Const
10.6.
Aliases (Apelidos) de Tipo
10.7.
ExercĂcio: Eventos de Elevador
â±
10.7.1.
Solução
Dia 2: ManhĂŁ
11.
Bem-vindos
12.
CorrespondĂȘncia de PadrĂ”es
â±
12.1.
Correspondendo Valores
12.2.
Desestruturando Structs
12.3.
Desestruturando Enums
12.4.
Controle de Fluxo Let
12.5.
ExercĂcio: Avaliação de ExpressĂ”es
â±
12.5.1.
Solução
13.
MĂ©todos e Traits
â±
13.1.
MĂ©todos
13.2.
Traits
â±
13.2.1.
Implementando Traits
13.2.2.
Supertraits
13.2.3.
Tipos Associados
13.3.
Derivando
13.4.
ExercĂcio: Logger GenĂ©rico
â±
13.4.1.
Solução
Dia 2: Tarde
14.
Bem-vindos
15.
Genéricos (Generics)
â±
15.1.
FunçÔes Genéricas
15.2.
Tipos de Dados Genéricos
15.3.
Traits Genéricos
15.4.
Trait Bounds (Limites de Trait)
15.5.
impl Trait
15.6.
dyn Trait
15.7.
ExercĂcio: min GenĂ©rico
â±
15.7.1.
Solução
16.
Tipos da Biblioteca PadrĂŁo
â±
16.1.
Biblioteca PadrĂŁo
16.2.
Documentação
16.3.
Option
16.4.
Result
16.5.
String
16.6.
Vec
16.7.
HashMap
16.8.
ExercĂcio: Contador
â±
16.8.1.
Solução
17.
Traits da Biblioteca PadrĂŁo
â±
17.1.
ComparaçÔes
17.2.
Operadores
17.3.
From e Into
17.4.
ConversÔes
17.5.
Read e Write
17.6.
Default, sintaxe de atualização de struct
17.7.
Closures
17.8.
ExercĂcio: ROT13
â±
17.8.1.
Solução
Dia 3: ManhĂŁ
18.
Bem-vindos
19.
Gerenciamento de MemĂłria
â±
19.1.
RevisĂŁo da MemĂłria de Programa
19.2.
Abordagens para Gerenciamento de MemĂłria
19.3.
Ownership
19.4.
SemĂąntica de Movimento
19.5.
Clone
19.6.
Tipos CopiĂĄveis
19.7.
Drop
19.8.
ExercĂcio: Tipo Builder
â±
19.8.1.
Solução
20.
Ponteiros Inteligentes (Smart Pointers)
â±
20.1.
Box<T>
20.2.
Rc
20.3.
Objetos de Trait ProprietĂĄrios
20.4.
ExercĂcio: Ărvore BinĂĄria
â±
20.4.1.
Solução
Dia 3: Tarde
21.
Bem-vindos
22.
Empréstimo (Borrowing)
â±
22.1.
Emprestando um Valor
22.2.
Verificação de Empréstimo
22.3.
Erros de Empréstimo
22.4.
Mutabilidade Interior
22.5.
ExercĂcio: EstatĂsticas de SaĂșde
â±
22.5.1.
Solução
23.
Tempos de Vida (Lifetimes)
â±
23.1.
AnotaçÔes de Tempo de Vida
23.2.
ElisĂŁo de Tempo de Vida
23.3.
Tempos de Vida de Structs
23.4.
ExercĂcio: AnĂĄlise de Protobuf
â±
23.4.1.
Solução
Dia 4: ManhĂŁ
24.
Bem-vindos
25.
Iteradores
â±
25.1.
Iterator
25.2.
IntoIterator
25.3.
FromIterator
25.4.
ExercĂcio: Encadeamento de MĂ©todos de Iterador
â±
25.4.1.
Solução
26.
MĂłdulos
â±
26.1.
MĂłdulos
26.2.
Hierarquia do Sistema de Arquivos
26.3.
Visibilidade
26.4.
use, super, self
26.5.
ExercĂcio: MĂłdulos para uma Biblioteca GUI
â±
26.5.1.
Solução
27.
Testes
â±
27.1.
MĂłdulos de Teste
27.2.
Outros Tipos de Testes
27.3.
Lints do Compilador e Clippy
27.4.
ExercĂcio: Algoritmo de Luhn
â±
27.4.1.
Solução
Dia 4: Tarde
28.
Bem-vindos
29.
Tratamento de Erros
â±
29.1.
PĂąnicos (Panics)
29.2.
Result
29.3.
Operador Try
29.4.
ConversÔes Try
29.5.
Trait Error
29.6.
thiserror e anyhow
29.7.
ExercĂcio: Reescrevendo com Result
â±
29.7.1.
Solução
30.
Rust Inseguro (Unsafe)
â±
30.1.
Inseguro (Unsafe)
30.2.
Desreferenciando Ponteiros Brutos
30.3.
VariĂĄveis EstĂĄticas MutĂĄveis
30.4.
UniÔes
30.5.
FunçÔes Inseguras
30.6.
Traits Inseguros
30.7.
ExercĂcio: Wrapper FFI
â±
30.7.1.
Solução
Android
31.
Bem-vindos
32.
Configuração
33.
Regras de Compilação (Build Rules)
â±
33.1.
BinĂĄrios
33.2.
Bibliotecas
34.
AIDL
â±
34.1.
Tutorial do Serviço de Aniversårio
â±
34.1.1.
Interface
34.1.2.
API de Serviço
34.1.3.
Serviço
34.1.4.
Servidor
34.1.5.
Implantar
34.1.6.
Cliente
34.1.7.
Alterando API
34.1.8.
Atualizando ImplementaçÔes
34.2.
Tipos AIDL
â±
34.2.1.
Tipos Primitivos
34.2.2.
Tipos de Matriz
34.2.3.
Enviando Objetos
34.2.4.
Parcelables
34.2.5.
Enviando Arquivos
35.
Testes
â±
35.1.
GoogleTest
35.2.
Mocking
36.
Gerando Registros (Log)
37.
Interoperabilidade
â±
37.1.
Com C
â±
37.1.1.
Chamando C com Bindgen
37.1.2.
Chamando Rust do C
37.2.
Com C++
â±
37.2.1.
O MĂłdulo Bridge
37.2.2.
Bridge Rust
37.2.3.
C++ Gerado
37.2.4.
Bridge C++
37.2.5.
Tipos Compartilhados
37.2.6.
Enums Compartilhados
37.2.7.
Tratamento de Erros do Rust
37.2.8.
Tratamento de Erros do C++
37.2.9.
Tipos Adicionais
37.2.10.
Compilando para Android: C++
37.2.11.
Compilando para Android: Genrules
37.2.12.
Compilando para Android: Rust
37.3.
Com Java
38.
ExercĂcios
Chromium
39.
Bem-vindos
40.
Configuração
41.
Comparando os Ecossistemas do Chromium e do Cargo
42.
PolĂtica
43.
Regras de Compilação (Build Rules)
â±
43.1.
CĂłdigo Inseguro (Unsafe)
43.2.
Dependendo de CĂłdigo Rust do C++ do Chromium
43.3.
Visual Studio Code
43.4.
ExercĂcio
44.
Testes
â±
44.1.
Biblioteca rust_gtest_interop
44.2.
Regras GN para Testes em Rust
44.3.
Macro chromium::import!
44.4.
ExercĂcio
45.
Interoperabilidade com C++
â±
45.1.
Exemplo de Bindings
45.2.
LimitaçÔes do CXX
45.3.
Tratamento de Erros do CXX
â±
45.3.1.
Tratamento de Erros: Exemplo de QR
45.3.2.
Tratamento de Erros: Exemplo de PNG
45.4.
Usando CXX no Chromium
45.5.
ExercĂcio
46.
Adicionando Crates de Terceiros
â±
46.1.
Configurando Cargo.toml
46.2.
Configurando gnrt_config.toml
46.3.
Baixando Crates
46.4.
Gerando Regras de Compilação gn
46.5.
Resolvendo Problemas
â±
46.5.1.
Scripts de Compilação que Geram Código
46.5.2.
Scripts de Compilação que Compilam C++ ou Tomam AçÔes Arbitrårias
46.6.
Dependendo de um Crate
46.7.
RevisÔes e Auditorias
46.8.
Submetendo ao CĂłdigo Fonte do Chromium
46.9.
Mantendo Crates Atualizados
46.10.
ExercĂcio
47.
Juntando Tudo - ExercĂcio
48.
SoluçÔes dos ExercĂcios
Bare Metal: ManhĂŁ
49.
Bem-vindos
50.
no_std
â±
50.1.
Um Pequeno Exemplo
50.2.
alloc
51.
Microcontroladores
â±
51.1.
MMIO Bruto
51.2.
PACs
51.3.
Crates HAL
51.4.
Crates de Suporte Ă Placa
51.5.
O PadrĂŁo de Estado de Tipo
51.6.
embedded-hal
51.7.
probe-rs e cargo-embed
â±
51.7.1.
Depuração
51.8.
Outros Projetos
52.
ExercĂcios
â±
52.1.
BĂșssola
52.2.
SoluçÔes
Bare Metal: Tarde
53.
Processadores de Aplicação
â±
53.1.
Preparando-se para o Rust
53.2.
Assembly In-line
53.3.
MMIO
53.4.
Vamos Escrever um Driver UART
â±
53.4.1.
Mais Traits
53.5.
Um Driver UART Melhor
â±
53.5.1.
Bitflags
53.5.2.
Registradores MĂșltiplos
53.5.3.
Driver
53.5.4.
Usando-o
53.6.
Gerando Registros (Log)
â±
53.6.1.
Usando-o
53.7.
ExceçÔes
53.8.
Outros Projetos
54.
Crates Ăteis
â±
54.1.
zerocopy
54.2.
aarch64-paging
54.3.
buddy_system_allocator
54.4.
tinyvec
54.5.
spin
55.
Android
â±
55.1.
vmbase
56.
ExercĂcios
â±
56.1.
Driver RTC
56.2.
SoluçÔes
ConcorrĂȘncia: ManhĂŁ
57.
Bem-vindos
58.
Threads
â±
58.1.
Threads Simples
58.2.
Threads com Escopo
59.
Canais (Channels)
â±
59.1.
Transmissores e Receptores
59.2.
Canais Ilimitados
59.3.
Canais Delimitados
60.
Send e Sync
â±
60.1.
Traits Marker
60.2.
Send
60.3.
Sync
60.4.
Exemplos
61.
Estado Compartilhado
â±
61.1.
Arc
61.2.
Mutex
61.3.
Exemplo
62.
ExercĂcios
â±
62.1.
Jantar dos FilĂłsofos
62.2.
Verificador de Links Multi-Threads
62.3.
SoluçÔes
ConcorrĂȘncia: Tarde
63.
Bem-vindos
64.
Fundamentos de Async (Assincronicidade)
â±
64.1.
async/await
64.2.
Futures
64.3.
Tempos de Execução
â±
64.3.1.
Tokio
64.4.
Tarefas
65.
Canais e Controle de Fluxo
â±
65.1.
Canais AssĂncronos
65.2.
Join
65.3.
Select
66.
Armadilhas
â±
66.1.
Bloqueando o Executor
66.2.
Pin
66.3.
Traits AssĂncronos
66.4.
Cancelamento
67.
ExercĂcios
â±
67.1.
Jantar dos FilĂłsofos
67.2.
Apliação de Chat de Transmissão
67.3.
SoluçÔes
Palavras Finais
68.
Obrigado!
69.
GlossĂĄrio
70.
Outros recursos
71.
Créditos
Light
Rust
Coal
Navy
Ayu
Comprehensive Rust đŠ
English
Brazilian Portuguese (PortuguĂȘs do Brasil)
Chinese Simplified (æ±èŻ)
Chinese Traditional (æŒąèȘ)
Japanese (æ„æŹèȘ)
Korean (íê”ìŽ)
Farsi (Ùۧ۱۳Û)
Spanish (Español)
Ukrainian (ŃĐșŃĐ°ŃĐœŃŃĐșĐ°)
Crates Ăteis
Vamos ver algumas
crates
que resolvem alguns problemas comuns na programação
bare-metal
.