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.
Exemplos de Código
2.3.
Executando o Cargo Localmente
Dia 1: Manhã
3.
Bem-vindo
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.
Strings
5.6.
Inferência de Tipo
5.7.
Exercício: Fibonacci
❱
5.7.1.
Solução
6.
Fundamentos de Controle de Fluxo
❱
6.1.
Condicionais
6.2.
Loops
❱
6.2.1.
for
6.2.2.
loop
6.3.
break e continue
❱
6.3.1.
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-vindo
8.
Tuplas e Matrizes
❱
8.1.
Tuplas e Matrizes
8.2.
Iterator de Matrizes
8.3.
Correspondência de Padrões
8.4.
Desestruturando
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.
Exercício: Geometria
❱
9.3.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.
Variáveis Estáticas e Constantes
10.5.
Aliases (Apelidos) de Tipo
10.6.
Exercício: Eventos de Elevador
❱
10.6.1.
Solução
Dia 2: Manhã
11.
Bem-vindo
12.
Correspondência de Padrões
❱
12.1.
Desestruturando
12.2.
Controle de Fluxo Let
12.3.
Exercício: Avaliação de Expressões
❱
12.3.1.
Solução
13.
Métodos e Traits
❱
13.1.
Métodos
13.2.
Traits
❱
13.2.1.
Implmementing Traits
13.2.2.
Associated Types
13.3.
Derivando
13.4.
Exercise: Generic Logger
❱
13.4.1.
Solução
14.
Genéricos (Generics)
❱
14.1.
Funções Genéricas
14.2.
Tipos de Dados Genéricos
14.3.
Trait Bounds (Limites de Trait)
14.4.
Trait impl
14.5.
Exercício: min Genérico
❱
14.5.1.
Solução
Dia 2: Tarde
15.
Bem-vindo
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-vindo
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 Trait
20.4.
Exercício: Árvore Binária
❱
20.4.1.
Solução
Dia 3: Tarde
21.
Bem-vindo
22.
Empréstimo (Borrowing)
❱
22.1.
Emprestando um Valor
22.2.
Verificação de Empréstimo
22.3.
Mutabilidade Interior
22.4.
Exercício: Estatísticas de Saúde
❱
22.4.1.
Solução
23.
Slices (Fatias) e Tempos de Vida (Lifetimes)
❱
23.1.
Slices: &\[T\]
23.2.
Referências de String
23.3.
Anotações de Tempo de Vida
23.4.
Elisão de Tempo de Vida
23.5.
Tempos de Vida de Structs
23.6.
Exercício: Análise de Protobuf
❱
23.6.1.
Solução
Dia 4: Manhã
24.
Bem-vindo
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.
Exercise: Modules for a GUI Library
❱
26.5.1.
Solução
27.
Testando
❱
27.1.
Módulos de Teste
27.2.
Outros Tipos de Testes
27.3.
Crates Úteis
27.4.
GoogleTest
27.5.
Mocking
27.6.
Lints do Compilador e Clippy
27.7.
Exercício: Algoritmo de Luhn
❱
27.7.1.
Solução
Dia 4: Tarde
28.
Bem-vindo
29.
Tratamento de Erros
❱
29.1.
Pânicos (Panics)
29.2.
Operador Try
29.3.
Conversões Try
29.4.
Trait Error
29.5.
thiserror e anyhow
29.6.
Exercício: Reescrevendo com Result
❱
29.6.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-vindo
32.
Configuração
33.
Regras de Compilação (Build Rules)
❱
33.1.
Binários
33.2.
Bibliotecas
34.
AIDL
❱
34.1.
Birthday Service Tutorial
❱
34.1.1.
Interface
34.1.2.
Service API
34.1.3.
Service
34.1.4.
Servidor
34.1.5.
Implantar
34.1.6.
Cliente
34.1.7.
Alterando API
34.1.8.
Updating Implementations
34.2.
AIDL Types
❱
34.2.1.
Primitive Types
34.2.2.
Array Types
34.2.3.
Sending Objects
34.2.4.
Parcelables
34.2.5.
Sending Files
35.
Gerando Registros (Log)
36.
Interoperabilidade
❱
36.1.
Com C
❱
36.1.1.
Chamando C com Bindgen
36.1.2.
Chamando Rust do C
36.2.
Com C++
❱
36.2.1.
O Módulo Bridge
36.2.2.
Bridge Rust
36.2.3.
C++ Gerado
36.2.4.
Bridge C++
36.2.5.
Tipos Compartilhados
36.2.6.
Enums Compartilhados
36.2.7.
Tratamento de Erros do Rust
36.2.8.
Tratamento de Erros do C++
36.2.9.
Tipos Adicionais
36.2.10.
Compilando para Android: C++
36.2.11.
Compilando para Android: Genrules
36.2.12.
Compilando para Android: Rust
36.3.
Com Java
37.
Exercícios
Chromium
38.
Bem-vindo
39.
Configuração
40.
Comparando os Ecossistemas do Chromium e do Cargo
41.
Política
42.
Regras de Compilação (Build Rules)
❱
42.1.
Código Inseguro (Unsafe)
42.2.
Dependendo de Código Rust do C++ do Chromium
42.3.
Visual Studio Code
42.4.
Exercício
43.
Testando
❱
43.1.
Biblioteca rust_gtest_interop
43.2.
Regras GN para Testes em Rust
43.3.
Macro chromium::import!
43.4.
Exercício
44.
Interoperabilidade com C++
❱
44.1.
Exemplo de Bindings
44.2.
Limitações do CXX
44.3.
Tratamento de Erros do CXX
❱
44.3.1.
Tratamento de Erros: Exemplo de QR
44.3.2.
Tratamento de Erros: Exemplo de PNG
44.4.
Usando CXX no Chromium
44.5.
Exercício
45.
Adicionando Crates de Terceiros
❱
45.1.
Configurando Cargo.toml
45.2.
Configurando gnrt_config.toml
45.3.
Baixando Crates
45.4.
Gerando Regras de Compilação gn
45.5.
Resolvendo Problemas
❱
45.5.1.
Scripts de Compilação que Geram Código
45.5.2.
Scripts de Compilação que Compilam C++ ou Tomam Ações Arbitrárias
45.6.
Dependendo de um Crate
45.7.
Revisões e Auditorias
45.8.
Submetendo ao Código Fonte do Chromium
45.9.
Mantendo Crates Atualizados
45.10.
Exercício
46.
Juntando Tudo - Exercício
47.
Soluções dos Exercícios
Bare Metal: Manhã
48.
Bem-vindo
49.
no_std
❱
49.1.
Um Pequeno Exemplo
49.2.
alloc
50.
Microcontroladores
❱
50.1.
MMIO Bruto
50.2.
PACs
50.3.
Crates HAL
50.4.
Crates de Suporte à Placa
50.5.
O Padrão de Estado de Tipo
50.6.
embedded-hal
50.7.
probe-rs e cargo-embed
❱
50.7.1.
Depuração
50.8.
Outros Projetos
51.
Exercícios
❱
51.1.
Bússola
51.2.
Soluções
Bare Metal: Tarde
52.
Processadores de Aplicação
❱
52.1.
Preparando-se para o Rust
52.2.
Assembly In-line
52.3.
MMIO
52.4.
Vamos Escrever um Driver UART
❱
52.4.1.
Mais Traits
52.5.
Um Driver UART Melhor
❱
52.5.1.
Bitflags
52.5.2.
Registradores Múltiplos
52.5.3.
Driver
52.5.4.
Usando-o
52.6.
Gerando Registros (Log)
❱
52.6.1.
Usando-o
52.7.
Exceções
52.8.
Outros Projetos
53.
Crates Úteis
❱
53.1.
zerocopy
53.2.
aarch64-paging
53.3.
buddy_system_allocator
53.4.
tinyvec
53.5.
spin
54.
Android
❱
54.1.
vmbase
55.
Exercícios
❱
55.1.
Driver RTC
55.2.
Soluções
Concorrência: Manhã
56.
Bem-vindo
57.
Threads
❱
57.1.
Threads com Escopo
58.
Canais (Channels)
❱
58.1.
Canais Ilimitados
58.2.
Canais Delimitados
59.
Send e Sync
❱
59.1.
Send
59.2.
Sync
59.3.
Exemplos
60.
Estado Compartilhado
❱
60.1.
Arc
60.2.
Mutex
60.3.
Exemplo
61.
Exercícios
❱
61.1.
Jantar dos Filósofos
61.2.
Verificador de Links Multi-Threads
61.3.
Soluções
Concorrência: Tarde
62.
Fundamentos de Async (Assincronicidade)
❱
62.1.
async/await
62.2.
Futures
62.3.
Tempos de Execução
❱
62.3.1.
Tokio
62.4.
Tarefas
62.5.
Canais Assíncronos
63.
Fluxo de Controle
❱
63.1.
Join
63.2.
Select
64.
Armadilhas
❱
64.1.
Bloqueando o Executor
64.2.
Pin
64.3.
Traits Assíncronos
64.4.
Cancelamento
65.
Exercícios
❱
65.1.
Jantar dos Filósofos
65.2.
Apliação de Chat de Transmissão
65.3.
Soluções
Palavras Finais
66.
Obrigado!
67.
Glossário
68.
Outros recursos
69.
Créditos
Light
Rust
Coal
Navy
Ayu
Comprehensive Rust 🦀
English
Brazilian Portuguese (Português do Brasil)
Chinese Simplified (汉语)
Chinese Traditional (漢語)
Korean (한국어)
Spanish (Español)
Soluções dos Exercícios
As soluções para os exercícios do Chromium podem ser encontradas nesta
série de CLs
.