- 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