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 (українська)
Soluzioni
Solutions to the Chromium exercises can be found in
this series of CLs
.