Willkommen bei Comprehensive Rust 🦀
1.
Ablauf des Kurses
❱
1.1.
Kursstruktur
1.2.
Tastaturkürzel
1.3.
Übersetzungen
2.
Cargo verwenden
❱
2.1.
Rust Ökosystem
2.2.
Codebeispiele
2.3.
Cargo lokal ausführen
Tag 1: Morgens
3.
Willkommen
4.
Hallo Welt!
❱
4.1.
Was ist Rust?
4.2.
Hallo Welt!
4.3.
Benefits of Rust
4.4.
Playground
5.
Types and Values
❱
5.1.
Variablen
5.2.
Values
5.3.
Arithmetic
5.4.
&str
5.5.
Typinferenz
5.6.
Exercise: Fibonacci
❱
5.6.1.
Lösungen
6.
Kontrollfluss
❱
6.1.
Conditionals
6.2.
for-Schleifen
6.3.
break und continue
6.4.
Blocks and Scopes
6.5.
Funktionen
6.6.
Macros
6.7.
Exercise: Collatz Sequence
❱
6.7.1.
Lösungen
Tag 1: Nachmittags
7.
Willkommen
8.
Tuples and Arrays
❱
8.1.
Tuples and Arrays
8.2.
Iterator
8.3.
Musterabgleich
8.4.
Aufzählungstypen destrukturieren
8.5.
Exercise: Nested Arrays
❱
8.5.1.
Lösungen
9.
Referenzen
❱
9.1.
Referenzen
9.2.
Hängende Referenzen
9.3.
Exercise: Geometry
❱
9.3.1.
Lösungen
10.
User-Defined Types
❱
10.1.
Strukturen
10.2.
Tupelstrukturen
10.3.
Aufzählungstypen
10.4.
static & const
10.5.
Type Aliases
10.6.
Exercise: Elevator Events
❱
10.6.1.
Lösungen
Tag 2: Morgens
11.
Willkommen
12.
Musterabgleich
❱
12.1.
Aufzählungstypen destrukturieren
12.2.
Kontrollfluss
12.3.
Exercise: Expression Evaluation
❱
12.3.1.
Lösungen
13.
Read und Write
❱
13.1.
Methoden
13.2.
Merkmale
13.3.
Ableitung von Merkmalen
13.4.
Merkmalsobjekte
13.5.
Exercise: Generic Logger
❱
13.5.1.
Lösungen
14.
Generische Datentypen und Methoden
❱
14.1.
Externe Funktionen
14.2.
Generische Datentypen
14.3.
Merkmalsgrenzen
14.4.
imple Merkmal
14.5.
Exercise: Generic min
❱
14.5.1.
Lösungen
Tag 2: Nachmittags
15.
Willkommen
16.
Standardbibliothek
❱
16.1.
Standardbibliothek
16.2.
Dokumentationstests
16.3.
Option
16.4.
Result
16.5.
String
16.6.
Vec
16.7.
HashMap
16.8.
Übungen
❱
16.8.1.
Lösungen
17.
Standardbibliothek
❱
17.1.
Vergleich
17.2.
Iteratoren
17.3.
Von und Nach
17.4.
Testen
17.5.
Lesen und Schreiben
17.6.
Default, struct update syntax
17.7.
Schließungen
17.8.
Übungen
❱
17.8.1.
Lösungen
Tag 3: Morgens
18.
Willkommen
19.
Speicherverwaltung
❱
19.1.
Review of Program Memory
19.2.
Automatische Speicherverwaltung
19.3.
Eigentümerschaft
19.4.
Semantik des Verschiebens
19.5.
Clone
19.6.
Verbundtypen
19.7.
Drop
19.8.
Exercise: Builder Type
❱
19.8.1.
Lösungen
20.
Smart Pointers
❱
20.1.
Kasten
20.2.
Rc
20.3.
Exercise: Binary Tree
❱
20.3.1.
Lösungen
Tag 3: Nachmittags
21.
Willkommen
22.
Ausleihen
❱
22.1.
Ausleihen
22.2.
Ausleihen
22.3.
Interoperabilität
22.4.
Gesundheitsstatistiken
❱
22.4.1.
Lösungen
23.
Lebensdauern
❱
23.1.
Slices: &\[T\]
23.2.
Hängende Referenzen
23.3.
Lebensdauern in Funktionsaufrufen
23.4.
Lebensdauern
23.5.
Lebensdauern
23.6.
Exercise: Protobuf Parsing
❱
23.6.1.
Lösungen
Tag 1: Morgens
24.
Willkommen
25.
Iteratoren
❱
25.1.
Iterator
25.2.
IntoIterator
25.3.
FromIterator
25.4.
Exercise: Iterator Method Chaining
❱
25.4.1.
Lösungen
26.
Module
❱
26.1.
Module
26.2.
Dateisystemhierarchie
26.3.
Sichtbarkeit
26.4.
use, super, self
26.5.
Exercise: Modules for a GUI Library
❱
26.5.1.
Lösungen
27.
Testen
❱
27.1.
Testmodule
27.2.
Andere Ressourcen
27.3.
Nützliche Kisten
27.4.
GoogleTest
27.5.
Mocking
27.6.
Compiler Lints and Clippy
27.7.
Luhn-Algorithmus
❱
27.7.1.
Lösungen
Tag 1: Nachmittags
28.
Willkommen
29.
Fehlerbehandlung
❱
29.1.
Laufzeitabbrüche
29.2.
Iterator
29.3.
Implizite Konvertierungen
29.4.
Die Drop-Eigenschaft
29.5.
Von und Nach
29.6.
Strukturierte Fehlerbehandlung mit Result
❱
29.6.1.
Lösungen
30.
Unsicheres Rust
❱
30.1.
Unsicheres Rust
30.2.
Roh-zeiger dereferenzieren
30.3.
Veränderbare statische Variablen
30.4.
Vereinigungen
30.5.
Unsichere Funktionen aufrufen
30.6.
Unsichere Merkmale implementieren
30.7.
Sicherer FFI-Wrapper
❱
30.7.1.
Lösungen
Android
31.
Willkommen
32.
Einrichtung
33.
Regeln beim Bauen
❱
33.1.
Binärdatei
33.2.
Bibliothek
34.
AIDL
❱
34.1.
Schnittstelle
34.2.
Implementierung
34.3.
Server
34.4.
Einsetzen
34.5.
Klient
34.6.
API verändern
35.
Protokollierung
36.
Interoperabilität
❱
36.1.
Mit C
❱
36.1.1.
Aufruf von C-Funktionen mit Bindgen
36.1.2.
Aufruf von Rust aus C
36.2.
Mit C++
❱
36.2.1.
Testmodule
36.2.2.
Rust-Binärdateien
36.2.3.
Generated C++
36.2.4.
C++ Bridge
36.2.5.
Skalare Typen
36.2.6.
Shared Enums
36.2.7.
Fehlerbehandlung
36.2.8.
Fehlerbehandlung
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.
Mit Java
37.
Übungen
Chromium
38.
Willkommen
39.
Einrichtung
40.
Comparing Chromium and Cargo Ecosystems
41.
Policy
42.
Regeln beim Bauen
❱
42.1.
Unsicheres Rust
42.2.
Depending on Rust Code from Chromium C++
42.3.
Visual Studio Code
42.4.
Übungen
43.
Testen
❱
43.1.
rust_gtest_interop Library
43.2.
GN Rules for Rust Tests
43.3.
chromium::import! Macro
43.4.
Übungen
44.
Interoperabilität mit C
❱
44.1.
Beispiele
44.2.
Limitations of CXX
44.3.
Fehlerbehandlung
❱
44.3.1.
Fehlerbehandlung
44.3.2.
Fehlerbehandlung
44.4.
Using CXX in Chromium
44.5.
Übungen
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.
Übungen
46.
Bringing It Together - Exercise
47.
Lösungen
Hardwarenahes Rust: Morgens
48.
Willkommen
49.
no_std
❱
49.1.
Kleines Beispiel
49.2.
alloc
50.
Mikrokontroller
❱
50.1.
MMIO
50.2.
PACs
50.3.
HAL Kisten
50.4.
Helfer Kisten
50.5.
Das Typzustandsmuster
50.6.
embedded-hal
50.7.
probe-rs and cargo-embed
❱
50.7.1.
Debugging
50.8.
Andere Ressourcen
51.
Übungen
❱
51.1.
Kompass
51.2.
Lösungen
Bare-Metal: Nachmittags
52.
Applikationsprozessoren
❱
52.1.
Getting Ready to Rust
52.2.
Inline Assembly
52.3.
MMIO
52.4.
Schreiben eines UART Treibers
❱
52.4.1.
Noch mehr Merkmale
52.5.
Ein besserer UART Treiber
❱
52.5.1.
Bitflags
52.5.2.
Mehrere Register
52.5.3.
Treiber
52.5.4.
Benutzung
52.6.
Protokollierung
❱
52.6.1.
Benutzung
52.7.
Funktionen
52.8.
Andere Ressourcen
53.
Nützliche Kisten
❱
53.1.
zerocopy
53.2.
aarch64-paging
53.3.
buddy_system_allocator
53.4.
tinyvec
53.5.
statisch
54.
Android
❱
54.1.
vmbase
55.
Übungen
❱
55.1.
RTC Treiber
55.2.
Lösungen
Nebenläufigkeit: Morgens
56.
Willkommen
57.
Ausführungsstrang
❱
57.1.
Ausführungsstrang mit Sichtbarkeitsbereich
58.
Kanäle
❱
58.1.
Unbegrenzte Kanäle
58.2.
Unbeschränkte Kanäle
59.
Senden und Synchronisieren
❱
59.1.
Senden
59.2.
Synchronisieren
59.3.
Beispiele
60.
Geteilter Zustand
❱
60.1.
Bogen
60.2.
Mutex
60.3.
Beispiel
61.
Übungen
❱
61.1.
Philosophenproblem
61.2.
Link Überprüfung mit mehreren Ausführungssträngen
61.3.
Lösungen
Nebenläufigkeit: Nachmittags
62.
Async Grundlagen
❱
62.1.
async/await
62.2.
Schließungen
62.3.
Laufzeiten
❱
62.3.1.
Tokio
62.4.
Aufgaben
62.5.
Async Kanäle
63.
Kontrollfluss
❱
63.1.
Join
63.2.
Aufstellen
64.
Tücken
❱
64.1.
Blockieren des Ausführers
64.2.
Pin
64.3.
Async Merkmale
64.4.
Installation
65.
Übungen
❱
65.1.
Philosophenproblem
65.2.
Broadcast Chat Application
65.3.
Lösungen
Letzte Worte
66.
Danke!
67.
Glossary
68.
Andere Ressourcen
69.
Würdigungen
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 (українська)
Nützliche Kisten (Crates)
We'll go over a few crates which solve some common problems in bare-metal programming.