Benvenuti a Comprehensive Rust 🦀
1.
Esecuzione del corso
❱
1.1.
Struttura del corso
1.2.
Tasti rapidi
1.3.
Traduzioni
2.
Utilizzo di Cargo
❱
2.1.
Ecosistema di Rust
2.2.
Esempi di codice
2.3.
Eseguire Cargo in locale
Giorno 1: Mattino
3.
Benvenuti
4.
Hello World!
❱
4.1.
Cos’è Rust?
4.2.
Hello World!
4.3.
Benefits of Rust
4.4.
Playground
5.
Types and Values
❱
5.1.
Variabili
5.2.
Values
5.3.
Arithmetic
5.4.
Corde
5.5.
Inferenza del Tipo
5.6.
Esercizio: Valutazione Espressione
❱
5.6.1.
Soluzioni
6.
Flusso di Controllo
❱
6.1.
Conditionals
6.2.
cicli for
6.3.
break e continue
6.4.
Blocks and Scopes
6.5.
Funzioni
6.6.
Macros
6.7.
Exercise: Collatz Sequence
❱
6.7.1.
Soluzioni
Giorno 1: Pomeriggio
7.
Benvenuti
8.
Tuples and Arrays
❱
8.1.
Tuples and Arrays
8.2.
Iteratore (Iterator)
8.3.
Pattern Matching
8.4.
Destrutturazione di Enum
8.5.
Exercise: Nested Arrays
❱
8.5.1.
Soluzioni
9.
Riferimenti
❱
9.1.
Riferimenti
9.2.
Riferimenti pendenti
9.3.
Exercise: Geometry
❱
9.3.1.
Soluzioni
10.
User-Defined Types
❱
10.1.
Strutture (Struct)
10.2.
Strutture a Tupla (Tuple Structs)
10.3.
Enumerazioni (Enums)
10.4.
static & const
10.5.
Type Aliases
10.6.
Esercizio: Valutazione Espressione
❱
10.6.1.
Soluzioni
Giorno 2: Mattina
11.
Benvenuti
12.
Pattern Matching
❱
12.1.
Destrutturazione di Enum
12.2.
Flusso di Controllo
12.3.
Esercizio: Valutazione Espressione
❱
12.3.1.
Soluzioni
13.
Read e Write
❱
13.1.
Metodi
13.2.
Traits
13.3.
Tratti derivati
13.4.
Oggetti che implementano Trait (Trait Objects)
13.5.
Exercise: Generic Logger
❱
13.5.1.
Soluzioni
14.
Generics
❱
14.1.
Funzioni Esterne (Extern)
14.2.
Tipi di dati Generic
14.3.
Trait Bounds
14.4.
Impl Tratto
14.5.
Exercise: Generic min
❱
14.5.1.
Soluzioni
Giorno 2: Pomeriggio
15.
Benvenuti
16.
Libreria standard
❱
16.1.
Libreria standard
16.2.
Test nella documentazione
16.3.
Durata
16.4.
Opzione, Risultato
16.5.
Stringa (String)
16.6.
Vec
16.7.
Mappa hash
16.8.
Esercizi
❱
16.8.1.
Soluzioni
17.
Libreria standard
❱
17.1.
Comparazione
17.2.
Iteratori
17.3.
Da e Into
17.4.
Testare
17.5.
Leggi e Scrivi
17.6.
Default, struct update syntax
17.7.
Closures
17.8.
Esercizi
❱
17.8.1.
Soluzioni
Giorno 3: Mattina
18.
Benvenuti
19.
Gestione della Memoria
❱
19.1.
Review of Program Memory
19.2.
Gestione automatica della Memoria
19.3.
Proprietà
19.4.
Semantica di move
19.5.
Clone
19.6.
Tipi Composti
19.7.
Rilascio (Drop)
19.8.
Exercise: Builder Type
❱
19.8.1.
Soluzioni
20.
Smart Pointers
❱
20.1.
Scatola
20.2.
Rc
20.3.
Exercise: Binary Tree
❱
20.3.1.
Soluzioni
Giorno 3: Pomeriggio
21.
Benvenuti
22.
Prestito (Borrowing)
❱
22.1.
Prestito (Borrowing)
22.2.
Prestito (Borrowing)
22.3.
Interoperabilità
22.4.
Salute (Health) Statistics
❱
22.4.1.
Soluzioni
23.
Lifetime
❱
23.1.
Slices: &\[T\]
23.2.
Riferimenti pendenti
23.3.
Lifetime in Chiamate a Funzione
23.4.
Lifetime
23.5.
Lifetime
23.6.
Exercise: Protobuf Parsing
❱
23.6.1.
Soluzioni
Giorno 1: Mattino
24.
Benvenuti
25.
Iteratori
❱
25.1.
Iteratore
25.2.
IntoIterator
25.3.
FromIterator
25.4.
Exercise: Iterator Method Chaining
❱
25.4.1.
Soluzioni
26.
Moduli
❱
26.1.
Moduli
26.2.
Gerarchia del filesystem
26.3.
Visibilità
26.4.
use, super, self
26.5.
Exercise: Modules for a GUI Library
❱
26.5.1.
Soluzioni
27.
Testare
❱
27.1.
Moduli (Module) di Test
27.2.
Altri progetti
27.3.
Crates Utili
27.4.
GoogleTest
27.5.
Mocking
27.6.
Compiler Lints and Clippy
27.7.
Algoritmo di Luhn
❱
27.7.1.
Soluzioni
Giorno 1: Pomeriggio
28.
Benvenuti
29.
Gestione degli errori
❱
29.1.
Panico (Panics)
29.2.
Iteratore (Iterator)
29.3.
Conversione implicita
29.4.
Errore
29.5.
Da e Into
29.6.
Gestione strutturata degli errori con Result
❱
29.6.1.
Soluzioni
30.
Unsafe Rust
❱
30.1.
Unsafe Rust
30.2.
Dereferenziamento dei Puntatori (Pointers) Grezzi (Raw)
30.3.
Variabili Statiche Mutabili
30.4.
Unioni
30.5.
Chiamare Funzioni Unsafe
30.6.
Implementare Unsafe Traits
30.7.
Safe FFI Wrapper
❱
30.7.1.
Soluzioni
Android
31.
Benvenuti
32.
Setup
33.
Regole (Rules) di Build
❱
33.1.
Binario
33.2.
Libreria (Library)
34.
AIDL
❱
34.1.
Interfaccia
34.2.
Implementazione
34.3.
Server
34.4.
Deploy
34.5.
Client
34.6.
Cambiare API
35.
Logging
36.
Interoperabilità
❱
36.1.
Con C
❱
36.1.1.
Invocare C con Bindgen
36.1.2.
Invocare Rust da C
36.2.
Con C++
❱
36.2.1.
Moduli (Module) di Test
36.2.2.
Binari Rust
36.2.3.
Generated C++
36.2.4.
C++ Bridge
36.2.5.
Tipi Scalari
36.2.6.
Shared Enums
36.2.7.
Gestione degli errori
36.2.8.
Gestione degli errori
36.2.9.
Additional Types
36.2.10.
Building for Android: C++
36.2.11.
Building for Android: Genrules
36.2.12.
Building for Android: Rust
36.3.
Con Java
37.
Esercizi
Chromium
38.
Benvenuti
39.
Setup
40.
Comparing Chromium and Cargo Ecosystems
41.
Policy
42.
Regole (Rules) di Build
❱
42.1.
Unsafe Rust
42.2.
Depending on Rust Code from Chromium C++
42.3.
Visual Studio Code
42.4.
Esercizi
43.
Testare
❱
43.1.
rust_gtest_interop Library
43.2.
GN Rules for Rust Tests
43.3.
chromium::import! Macro
43.4.
Esercizi
44.
Interoperabilità con C
❱
44.1.
Esempi
44.2.
Limitations of CXX
44.3.
Gestione degli errori
❱
44.3.1.
Gestione degli errori
44.3.2.
Gestione degli errori
44.4.
Using CXX in Chromium
44.5.
Esercizi
45.
Adding Third Party Crates
❱
45.1.
Configuring Cargo.toml
45.2.
Configuring gnrt_config.toml
45.3.
Downloading Crates
45.4.
Generating gn Build Rules
45.5.
Resolving Problems
❱
45.5.1.
Build Scripts Which Generate Code
45.5.2.
Build Scripts Which Build C++ or Take Arbitrary Actions
45.6.
Depending on a Crate
45.7.
Reviews and Audits
45.8.
Checking into Chromium Source Code
45.9.
Keeping Crates Up to Date
45.10.
Esercizi
46.
Bringing It Together - Exercise
47.
Soluzioni
Bare Metal: Mattino
48.
Benvenuti
49.
no_std
❱
49.1.
Un Esempio Minimo
49.2.
alloc
50.
Microcontroller
❱
50.1.
Raw MMIO
50.2.
PAC
50.3.
HAL Crates
50.4.
Crate di supporto per Board
50.5.
Il modello (Pattern) di Type State
50.6.
hal incorporato
50.7.
probe-rs, cargo-embed
❱
50.7.1.
Debugging
50.8.
Altri Progetti
51.
Esercizi
❱
51.1.
Bussola
51.2.
Soluzioni
Bare Metal: Pomeriggio
52.
Processori di Applicazioni
❱
52.1.
Preparativi per lavorare con Rust
52.2.
Inline Assembly
52.3.
MMIO
52.4.
Scriviamo un driver UART
❱
52.4.1.
Traits addizionali
52.5.
Un migliore driver UART
❱
52.5.1.
Bitflag
52.5.2.
Registri multipli
52.5.3.
Driver
52.5.4.
Usandolo
52.6.
Logging
❱
52.6.1.
Usandolo
52.7.
Eccezioni
52.8.
Altri Progetti
53.
Crates Utili
❱
53.1.
zerocopia
53.2.
aarch64-paging
53.3.
buddy_system_allocator
53.4.
tinyvec
53.5.
gira
54.
Android
❱
54.1.
vmbase
55.
Esercizi
❱
55.1.
Driver RTC
55.2.
Soluzioni
Concorrenza: Mattino
56.
Benvenuti
57.
Threads
❱
57.1.
Thread con Scope (Scoped Threads)
58.
Canali (Channels)
❱
58.1.
Canali illimitati (Unbounded Channels)
58.2.
Canali delimitati (Bounded Channels)
59.
Invia e Sincronizza
❱
59.1.
Invia
59.2.
Sincronizza
59.3.
Esempi
60.
Stato Condiviso
❱
60.1.
Arco
60.2.
Mutex
60.3.
Esempio
61.
Esercizi
❱
61.1.
Filosofi a tavola
61.2.
Correttore di Link a Thread multipli
61.3.
Soluzioni
Concorrenza: Pomeriggio
62.
Nozioni di base sulla programmazione Async (asincrona)
❱
62.1.
asincrono/aspetta
62.2.
Futures
62.3.
Esecutori
❱
62.3.1.
Tokio
62.4.
Compiti (Tasks)
62.5.
Canali asincroni (Async Channels)
63.
Flusso di Controllo
❱
63.1.
Giunzione (Join)
63.2.
Selezione (Select)
64.
Insidie
❱
64.1.
Blocco dell’Esecutore
64.2.
Pin
64.3.
Trait asincroni (Async Trait)
64.4.
Cancellazione (cancellation)
65.
Esercizi
❱
65.1.
Filosofi a tavola
65.2.
Applicazione Chat-Broadcast
65.3.
Soluzioni
Parole finali
66.
Grazie!
67.
Glossario
68.
Altre risorse
69.
Crediti
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 utili
We'll go over a few crates which solve some common problems in bare-metal programming.