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: Vormittags
3.
Willkommen
4.
Hallo Welt!
â±
4.1.
Was ist Rust?
4.2.
Vorteile von Rust
4.3.
Testumgebung
5.
Datentypen und Wertebereiche
â±
5.1.
Hallo Welt!
5.2.
Variablen
5.3.
Wertebereiche
5.4.
Arithmetik
5.5.
Typinferenz
5.6.
Ăbung: Fibonacci Reihe
â±
5.6.1.
Lösungen
6.
Kontrollfluss
â±
6.1.
if Anweisungen
6.2.
Match Anweisungen
6.3.
Schleifen
â±
6.3.1.
for Schleifen
6.3.2.
loop Schleifen
6.4.
break und continue
â±
6.4.1.
Bezeichner
6.5.
Blöcke und GĂŒltigkeitsbereiche
â±
6.5.1.
GĂŒltigkeitsbereiche und Verschattungen
6.6.
Funktionen
6.7.
Makros
6.8.
Ăbung: Die Collatz Sequenz
â±
6.8.1.
Lösungen
Tag 1: Nachmittags
7.
Willkommen
8.
Tuples und Datenfelder
â±
8.1.
Datenfelder
8.2.
Tupel
8.3.
Iteration ĂŒber Datenfelder
8.4.
Muster und Zerlegung
8.5.
Ăbung: Verschachtelte Datenfelder
â±
8.5.1.
Lösungen
9.
Referenzen
â±
9.1.
Geteilte Referenzen
9.2.
Exklusive Referenzen
9.3.
Anteilstypen
9.4.
Zeichenketten
9.5.
Referenzen
9.6.
Ăbung: Geometrie
â±
9.6.1.
Lösungen
10.
Benutzerdefinierte Datentypen
â±
10.1.
Strukturen
10.2.
Tupelstrukturen
10.3.
AufzÀhlungstypen
10.4.
Konstanten
10.5.
static
10.6.
Type Aliases
10.7.
Exercise: Elevator Events
â±
10.7.1.
Lösungen
Tag 2: Vormittags
11.
Willkommen
12.
Mustervergleich
â±
12.1.
Wertevergleich
12.2.
Strukturen auflösen
12.3.
AufzÀhlungstypen auflösen
12.4.
Flusskontrolle mit Let
12.5.
Ăbung: Untersuchung von AusdrĂŒcken
â±
12.5.1.
Lösungen
13.
Methoden und Merkmale
â±
13.1.
Methoden
13.2.
Merkmale
â±
13.2.1.
Implementierung von Merkmalen
13.2.2.
ZĂŒge
13.2.3.
Skalare Typen
13.3.
Ableitung von Merkmalen
13.4.
Ăbung: Allgemeiner Datenlogger
â±
13.4.1.
Lösungen
Tag 2: Nachmittags
14.
Willkommen
15.
Generische Datentypen und Methoden
â±
15.1.
Generische Funktionen
15.2.
Generische Datentypen
15.3.
Generische Methoden
15.4.
Merkmalsgrenzen
15.5.
imple Merkmal
15.6.
imple Merkmal
15.7.
Exercise: Generic min
â±
15.7.1.
Lösungen
16.
Standardbibliothek Datentypen
â±
16.1.
Standardbibliothek
16.2.
Dokumentation
16.3.
Option
16.4.
Result
16.5.
String
16.6.
Vec
16.7.
HashMap
16.8.
Ăbung: ZĂ€hler
â±
16.8.1.
Lösungen
17.
Standardbibliothek Methoden
â±
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: Vormittags
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.
Merkmalsobjekte
20.4.
Ăbung: BinĂ€rer Baum
â±
20.4.1.
Lösungen
Tag 3: Nachmittags
21.
Willkommen
22.
Ausborgen
â±
22.1.
Ausborgen von Werten
22.2.
Ausborgen - ĂberprĂŒfung
22.3.
Ausborgen - Fehler
22.4.
InteroperabilitÀt
22.5.
Gesundheitsstatistiken
â±
22.5.1.
Lösungen
23.
Lebensdauern
â±
23.1.
Lebensdauern in Funktionsaufrufen
23.2.
Lebensdauern
23.3.
Lebensdauer von Strukturen
23.4.
Exercise: Protobuf Parsing
â±
23.4.1.
Lösungen
Tag 4: Vormittags
24.
Willkommen
25.
Iteratoren
â±
25.1.
Motivation
25.2.
Iterator
25.3.
Iterator
25.4.
collect
25.5.
IntoIterator
25.6.
Exercise: Iterator Method Chaining
â±
25.6.1.
Lösungen
26.
Module
â±
26.1.
Module
26.2.
Dateisystemhierarchie
26.3.
Sichtbarkeit
26.4.
Ăbersetzungen
26.5.
use, super, self
26.6.
Ăbung: Module fĂŒr eine GUI Bibliothek
â±
26.6.1.
Lösungen
27.
Tests
â±
27.1.
Unit-Tests
27.2.
Andere Testmöglichkeiten
27.3.
Compiler Lints and Clippy
27.4.
Luhn-Algorithmus
â±
27.4.1.
Lösungen
Tag 4: Nachmittags
28.
Willkommen
29.
Fehlerbehandlung
â±
29.1.
LaufzeitabbrĂŒche
29.2.
Result
29.3.
Iterator
29.4.
Implizite Konvertierungen
29.5.
Die Drop-Eigenschaft
29.6.
thiserror
29.7.
anyhow
29.8.
Strukturierte Fehlerbehandlung mit Result
â±
29.8.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.
Tutorial: Geburtstagsdienst
â±
34.1.1.
Schnittstelle
34.1.2.
Service API
34.1.3.
Dienst
34.1.4.
Server
34.1.5.
Verteilen
34.1.6.
Klient
34.1.7.
API verÀndern
34.1.8.
Implementierung
34.2.
Typen
â±
34.2.1.
Einfache Datentypen
34.2.2.
Arrays
34.2.3.
Merkmalsobjekte
34.2.4.
Variablen
34.2.5.
Dateien versenden
35.
Tests
â±
35.1.
Google Test
35.2.
Mocking
36.
Protokollierung
37.
InteroperabilitÀt
â±
37.1.
Mit C
â±
37.1.1.
Aufruf von C-Funktionen mit Bindgen
37.1.2.
Aufruf von Rust aus C
37.2.
Mit C++
â±
37.2.1.
The Bridge Module
37.2.2.
Rust Bridge
37.2.3.
Generated C++
37.2.4.
C++ Bridge
37.2.5.
Skalare Typen
37.2.6.
Shared Enums
37.2.7.
Fehlerbehandlung in Rust
37.2.8.
Fehlerbehandlung in C++
37.2.9.
ZusÀtzliche Datentypen
37.2.10.
Building for Android: C++
37.2.11.
Building for Android: Genrules
37.2.12.
Building for Android: Rust
37.3.
Mit Java
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.
Tests
â±
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: Vormittags
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.4.2.
Benutzung
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.
Ausnahmen
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.
spin
54.
Hardwarenahes Rust: Morgens
â±
54.1.
vmbase
55.
Ăbungen
â±
55.1.
RTC Treiber
55.2.
Lösungen
NebenlÀufigkeit: Vormittags
56.
Willkommen
57.
AblÀufe
â±
57.1.
Geradlinige AblÀufe
57.2.
AusfĂŒhrungsstrang mit Sichtbarkeitsbereich
58.
KanÀle
â±
58.1.
Sender und EmpfÀnger
58.2.
Unbegrenzte KanÀle
58.3.
UnbeschrÀnkte KanÀle
59.
Send und Sync
â±
59.1.
Noch mehr Merkmale
59.2.
Send
59.3.
Sync
59.4.
Beispiele
60.
Geteilter Zustand
â±
60.1.
Arc
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.
Willkommen
63.
Grundlagen asynchroner ProgrammablÀufe
â±
63.1.
async/await
63.2.
SchlieĂungen
63.3.
Laufzeiten
â±
63.3.1.
Tokio
63.4.
Aufgaben
64.
Kontrollfluss
â±
64.1.
Asynchrone KanÀle
64.2.
Join
64.3.
Select
65.
TĂŒcken
â±
65.1.
Blockieren des AusfĂŒhrers
65.2.
Pin
65.3.
Async Merkmale
65.4.
Installation
66.
Ăbungen
â±
66.1.
Philosophenproblem
66.2.
Broadcast Chat Application
66.3.
Lösungen
Letzte Worte
67.
Danke!
68.
Glossary
69.
Andere Ressourcen
70.
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 (ŃĐșŃĐ°ŃĐœŃŃĐșĐ°)
Lösungen
Solutions to the Chromium exercises can be found in
this series of CLs
.