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 (українська)
Soluções dos Exercícios
As soluções para os exercícios do Chromium podem ser encontradas nesta
série de CLs
.