Bienvenue à Comprehensive Rust (le guide complet de Rust) 🦀
1.
Comment présenter le cours
❱
1.1.
Structure du cours
1.2.
Raccourcis clavier
1.3.
Traductions
2.
Utiliser Cargo
❱
2.1.
Écosystème de Rust
2.2.
Exemples de code
2.3.
Exécuter Cargo localement
Jour 1 : Matin
3.
Bienvenue
4.
Bonjour le monde!
❱
4.1.
Qu'est-ce que Rust ?
4.2.
Benefits of Rust
4.3.
Playground
5.
Types and Values
❱
5.1.
Bonjour le monde!
5.2.
Variables
5.3.
Values
5.4.
Arithmetic
5.5.
Inférence de type
5.6.
Exercise: Fibonacci
❱
5.6.1.
Solutions
6.
Flux de contrôle
❱
6.1.
expressions "si"
6.2.
Boucles for
❱
6.2.1.
Boucles for
6.2.2.
loop
6.3.
pause et continue
❱
6.3.1.
Labels
6.4.
Blocks and Scopes
❱
6.4.1.
Portée et masquage
6.5.
Fonctions
6.6.
Macros
6.7.
Exercise: Collatz Sequence
❱
6.7.1.
Solutions
Jour 1 : Après-midi
7.
Bienvenue
8.
Tuples and Arrays
❱
8.1.
Arrays
8.2.
Tuples
8.3.
Iterator
8.4.
Déstructuration des énumérations
8.5.
Exercise: Nested Arrays
❱
8.5.1.
Solutions
9.
Références
❱
9.1.
Références
9.2.
Références invalides
9.3.
Slices: &\[T\]
9.4.
Cordes
9.5.
Exercise: Geometry
❱
9.5.1.
Solutions
10.
User-Defined Types
❱
10.1.
Structures
10.2.
Structures tuple
10.3.
Énumérations
10.4.
statique
10.5.
const
10.6.
Type Aliases
10.7.
Exercise: Elevator Events
❱
10.7.1.
Solutions
Jour 2 : Matin
11.
Bienvenue
12.
Filtrage par motif
❱
12.1.
Matching Values
12.2.
Déstructuration des énumérations
12.3.
Flux de contrôle
12.4.
Exercise: Expression Evaluation
❱
12.4.1.
Solutions
13.
Read et Write
❱
13.1.
Méthodes
13.2.
Traits
❱
13.2.1.
Implémentation de traits non sécurisés
13.2.2.
Plus de traits
13.2.3.
Types scalaires
13.3.
Traits dérivés
13.4.
Exercices
❱
13.4.1.
Solutions
14.
Génériques
❱
14.1.
Fonctions externes
14.2.
Types de données génériques
14.3.
Génériques
14.4.
Traits lié
14.5.
Trait d'implémentation
14.6.
Exercise: Generic min
❱
14.6.1.
Solutions
Jour 2 : Après-midi
15.
Bienvenue
16.
Bibliothèque standard
❱
16.1.
Bibliothèque standard
16.2.
Tests de documentation
16.3.
Durée
16.4.
Option, Résultat
16.5.
String
16.6.
Vec
16.7.
HashMap
16.8.
Exercices
❱
16.8.1.
Solutions
17.
Bibliothèque standard
❱
17.1.
Comparaison
17.2.
Itérateurs
17.3.
De et Dans
17.4.
Tester
17.5.
Lire et Ecrire
17.6.
Default, struct update syntax
17.7.
Fermetures
17.8.
Exercices
❱
17.8.1.
Solutions
Jour 3 : Matin
18.
Bienvenue
19.
Gestion de la mémoire
❱
19.1.
Review of Program Memory
19.2.
Gestion automatique de la mémoire
19.3.
Possession
19.4.
Sémantique de déplacement
19.5.
Clone
19.6.
Types composés
19.7.
Drop
19.8.
Exercise: Builder Type
❱
19.8.1.
Solutions
20.
Smart Pointers
❱
20.1.
Boîte
20.2.
Rc
20.3.
Objets traits
20.4.
Exercise: Binary Tree
❱
20.4.1.
Solutions
Jour 3 : Après-midi
21.
Bienvenue
22.
Emprunts
❱
22.1.
Emprunts
22.2.
Emprunts
22.3.
Interopérabilité
22.4.
Statistiques de santé
❱
22.4.1.
Solutions
23.
Durées de vie
❱
23.1.
Durées de vie dans les appels de fonction
23.2.
Durées de vie
23.3.
Durées de vie
23.4.
Exercise: Protobuf Parsing
❱
23.4.1.
Solutions
Jour 1 : Matin
24.
Bienvenue
25.
Itérateurs
❱
25.1.
Itérateur
25.2.
IntoIterator
25.3.
FromIterator
25.4.
Exercise: Iterator Method Chaining
❱
25.4.1.
Solutions
26.
Modules
❱
26.1.
Modules
26.2.
Hiérarchie du système de fichiers
26.3.
Visibilité
26.4.
use, super, self
26.5.
Une bibliothèque d'interface graphique
❱
26.5.1.
Solutions
27.
Tester
❱
27.1.
Modules de test
27.2.
Autres projets
27.3.
Compiler Lints and Clippy
27.4.
Algorithme de Luhn
❱
27.4.1.
Solutions
Jour 1 : Après-midi
28.
Bienvenue
29.
Gestion des erreurs
❱
29.1.
Paniques
29.2.
Iterator
29.3.
Conversions implicites
29.4.
"Erreur"
29.5.
De et Dans
29.6.
Gestion structurée des erreurs avec Result
❱
29.6.1.
Solutions
30.
Rust non sécurisé (unsafe)
❱
30.1.
Rust non sécurisé (unsafe)
30.2.
Déréférencement des pointeurs nus
30.3.
Variables statiques mutables
30.4.
Unions
30.5.
Appel de fonctions non sécurisées
30.6.
Implémentation de traits non sécurisés
30.7.
Enveloppe FFI sécurisée
❱
30.7.1.
Solutions
Android
31.
Bienvenue
32.
Installation
33.
Règles de compilation
❱
33.1.
Binaire
33.2.
Bibliothèque
34.
AIDL
❱
34.1.
service_anniversaire/src/lib.rs :
❱
34.1.1.
Interface
34.1.2.
Service API
34.1.3.
Serveur
34.1.4.
Serveur
34.1.5.
Déployer
34.1.6.
Client
34.1.7.
Modification de l'API
34.1.8.
Mise en œuvre
34.2.
Types
❱
34.2.1.
Primitive Types
34.2.2.
Types composés
34.2.3.
Objets traits
34.2.4.
Variables
34.2.5.
Sending Files
35.
Tester
❱
35.1.
GoogleTest
35.2.
Mocking
36.
Journalisation
37.
Interopérabilité
❱
37.1.
Avec C
❱
37.1.1.
Appeler C avec Bindgen
37.1.2.
Appeler Rust depuis C
37.2.
Avec C++
❱
37.2.1.
Modules de test
37.2.2.
Binaires Rust
37.2.3.
Generated C++
37.2.4.
C++ Bridge
37.2.5.
Types scalaires
37.2.6.
Shared Enums
37.2.7.
Gestion des erreurs
37.2.8.
Gestion des erreurs
37.2.9.
Additional Types
37.2.10.
Building for Android: C++
37.2.11.
Building for Android: Genrules
37.2.12.
Building for Android: Rust
37.3.
Avec Java
38.
Exercices
Chromium
39.
Bienvenue
40.
Installation
41.
Comparing Chromium and Cargo Ecosystems
42.
Policy
43.
Règles de compilation
❱
43.1.
Rust non sécurisé (unsafe)
43.2.
Depending on Rust Code from Chromium C++
43.3.
Visual Studio Code
43.4.
Exercices
44.
Tester
❱
44.1.
rust_gtest_interop Library
44.2.
GN Rules for Rust Tests
44.3.
chromium::import! Macro
44.4.
Exercices
45.
Interopérabilité avec C
❱
45.1.
Exemples
45.2.
Limitations of CXX
45.3.
Gestion des erreurs
❱
45.3.1.
Gestion des erreurs
45.3.2.
Gestion des erreurs
45.4.
Using CXX in Chromium
45.5.
Exercices
46.
Adding Third Party Crates
❱
46.1.
Configuring Cargo.toml
46.2.
Configuring gnrt_config.toml
46.3.
Downloading Crates
46.4.
Generating gn Build Rules
46.5.
Resolving Problems
❱
46.5.1.
Build Scripts Which Generate Code
46.5.2.
Build Scripts Which Build C++ or Take Arbitrary Actions
46.6.
Depending on a Crate
46.7.
Reviews and Audits
46.8.
Checking into Chromium Source Code
46.9.
Keeping Crates Up to Date
46.10.
Exercices
47.
Bringing It Together - Exercise
48.
Solutions
Bare Metal : Matin
49.
Bienvenue
50.
no_std
❱
50.1.
Un exemple minimal
50.2.
allouer
51.
Microcontrôleurs
❱
51.1.
MMIO brut
51.2.
PACs
51.3.
HAL Crates
51.4.
Board Support Crates
51.5.
Le modèle d'état de type
51.6.
embedded-hal
51.7.
probe-rs, cargo-embed
❱
51.7.1.
Débogage
51.8.
Autres projets
52.
Exercices
❱
52.1.
Boussole
52.2.
Solutions
Bare Metal : Après-midi
53.
Processeurs d'applications
❱
53.1.
Getting Ready to Rust
53.2.
Assembleur en ligne
53.3.
MMIO
53.4.
Écrivons un pilote UART
❱
53.4.1.
Plus de traits
53.5.
Un meilleur pilote UART
❱
53.5.1.
Bitflags
53.5.2.
Registres multiples
53.5.3.
Pilote
53.5.4.
Utilisation
53.6.
Journalisation
❱
53.6.1.
Utilisation
53.7.
Exceptions
53.8.
Autres projets
54.
Crates utiles
❱
54.1.
zérocopie
54.2.
aarch64-pagination
54.3.
buddy_system_allocator
54.4.
tinyvec
54.5.
tourner
55.
Android
❱
55.1.
vmbase
56.
Exercices
❱
56.1.
Pilote RTC
56.2.
Solutions
Concurrence : Matin
57.
Bienvenue
58.
Threads
❱
58.1.
Threads délimités
59.
Canaux
❱
59.1.
Canaux illimités
59.2.
Canaux limités
60.
Envoyer et Synchroniser
❱
60.1.
Envoyer
60.2.
Synchroniser
60.3.
Exemples
61.
État partagé
❱
61.1.
Arc
61.2.
Mutex
61.3.
Exemple
62.
Exercices
❱
62.1.
Dîner des philosophes
62.2.
Vérificateur de liens à plusieurs threads
62.3.
Solutions
Concurrence : Après-midi
63.
Async Basics
❱
63.1.
async/await
63.2.
Fermetures
63.3.
Garanties d'exécution
❱
63.3.1.
Tokio
63.4.
Tâches
63.5.
Canaux asynchrones
64.
Flux de contrôle
❱
64.1.
Join
64.2.
Select
65.
Pièges
❱
65.1.
Bloquer l'exécuteur
65.2.
Pin
65.3.
Traits asynchrones
65.4.
Annulation
66.
Exercices
❱
66.1.
Dîner des philosophes
66.2.
Broadcast Chat Application
66.3.
Solutions
Derniers mots
67.
Merci!
68.
Glossary
69.
Autres ressources
70.
Crédits
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 utiles
We'll go over a few crates which solve some common problems in bare-metal programming.