- Willkommen bei Comprehensive Rust đŠ
- 1. Ablauf des Kurses
â±
- 1.1. Kursstruktur
- 1.2. TastaturkĂŒrzel
- 1.3. Ăbersetzungen
- 2. Cargo verwenden
â±
- 2.1. Das 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(Arrays)
- 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(Strings)
- 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(Enums)
- 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(Traits)
â±
- 13.2.1. Implementierung von Merkmalen
- 13.2.2. gekoppelte Merkmale (Supertraits)
- 13.2.3. Datentypen von Merkmalen (Associated Types)
- 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. Merkmal impl
- 15.6. Merkmal dyn
- 15.7. Ăbung: Allgemeine ' min' Funktion
â±
- 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 von Merkmalen
â±
- 17.1. Vergleiche
- 17.2. Operatoren
- 17.3. From und Into
- 17.4. Datentypen festlegen (Casting)
- 17.5. Read und Write
- 17.6. Der Default, Struktur syntax
- 17.7. Anonyme Funktionen (closures)
- 17.8. Ăbung: ROT13
â±
- 17.8.1. Lösungen
- Tag 3: Vormittags
- 18. Willkommen
- 19. Speicherverwaltung
â±
- 19.1. ĂberprĂŒfung des Programmspeichers
- 19.2. AnsÀtze zur Speicherverwaltung
- 19.3. EigentĂŒmerschaft
- 19.4. Semantik des Verschiebens
- 19.5. Clone
- 19.6. Verbundtypen
- 19.7. Drop
- 19.8. Ăbung: Datentypen erzeugen
â±
- 19.8.1. Lösungen
- 20. erweiterter Zeigertyp (Smart pointer)
â±
- 20.1. Kasten
- 20.2. Rc
- 20.3. Aneignung von Merkmalsobjekten
- 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. Ăbung: Gesundheitsstatistiken
â±
- 22.5.1. Lösungen
- 23. Lebensdauer
â±
- 23.1. Lebensdauern in Funktionsaufrufen
- 23.2. Lebensdauern
- 23.3. Lebensdauer von Strukturen
- 23.4. Ăbung: Protobuf Analyse
â±
- 23.4.1. Lösungen
- Tag 4: Vormittags
- 24. Willkommen
- 25. Iteratoren
â±
- 25.1. Motivation
- 25.2. Iterator Merkmale
- 25.3. Iterator Hilfsmethoden
- 25.4. collect
- 25.5. IntoIterator
- 25.6. Ăbung: Anwendung verschiedener Iteratormethoden
â±
- 25.6.1. Lösungen
- 26. Module
â±
- 26.1. Module
- 26.2. Dateisystemhierarchie
- 26.3. Sichtbarkeit
- 26.4. Verkapselung
- 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 und 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. \`Try Operator
- 29.4. Try Konvertierungen
- 29.5. Ărror\` Merkmal
- 29.6. thiserror
- 29.7. anyhow
- 29.8. Ăbung: Fehlerbehandlung mit Result
â±
- 29.8.1. Lösungen
- 30. Unsicheres Rust
â±
- 30.1. Unsicherheit
- 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. Ăbung: Ein FFI-Wrapper
â±
- 30.7.1. Lösungen
- Android
- 31. Willkommen
- 32. Einrichtung
- 33. Regeln zum Erstellen
â±
- 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. Aktualsierung von Implementierungen
- 34.2. AIDL 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. Das Verbindungsmodul (bridge)
- 37.2.2. Verbindungen mit Rust
- 37.2.3. C++ Generierung
- 37.2.4. Verbindungen mit C++
- 37.2.5. Gemeinsame Datentypen
- 37.2.6. Gemeinsam genutzte AufzÀhlungstypen (Enums)
- 37.2.7. Fehlerbehandlung in Rust
- 37.2.8. Fehlerbehandlung in C++
- 37.2.9. ZusÀtzliche Datentypen
- 37.2.10. Programmierung fĂŒr Android: C++
- 37.2.11. Programmierung fĂŒr Android: Allgemeine Regeln
- 37.2.12. Programmierung fĂŒr Android: Rust
- 37.3. Mit Java
- Chromium
- 38. Willkommen
- 39. Einrichtung
- 40. Vergleich zwischen Chromium und dem Cargo Ăkosystem
- 41. Vorgaben
- 42. Regeln zum Erstellen
â±
- 42.1. Unsicherer Programmcode
- 42.2. AbhÀngigkeit des Rust Codes vom Chromium C++
- 42.3. Visual Studio Code
- 42.4. Ăbung
- 43. Tests
â±
- 43.1. rust_gtest_interop Bibliothek
- 43.2. GN Regeln fĂŒr Rust Tests
- 43.3. chromium::import! Macro
- 43.4. Ăbung
- 44. InteroperabilitÀt mit C++
â±
- 44.1. Beispiele
- 44.2. Die Grenzen von CXX
- 44.3. Fehlerbehandlung in CXX
â±
- 44.3.1. Fehlerbehandlung: QR Beispiel
- 44.3.2. Fehlerbehandlung: PNG Beispiel
- 44.4. Die Benutzung von CXX in Chromium
- 44.5. Ăbung
- 45. HinzufĂŒgen von externen Kisten
â±
- 45.1. Konfiguration von Cargo.toml
- 45.2. Konfiguration von gnrt_config.toml
- 45.3. Herunterladen von Kisten (crates)
- 45.4. Erzeugung von gn Bauvorschriften
- 45.5. Probleme auflösen
â±
- 45.5.1. Bauanleitungen, welche Programmcode erzeugen
- 45.5.2. Bauanleitungen, welche C++ erzeugen oder spezielle Aktionen auslösen
- 45.6. AbhÀngigkeit von Kisten
- 45.7. ĂberprĂŒfungen und Audits
- 45.8. Quellcode in Chromium einbauen
- 45.9. Kisten auf den aktuellen Stand halten
- 45.10. Ăbung
- 46. Zusammenfassung aller Einzelteile - Ăbung
- 47. LösungsvorschlĂ€ge der Ăbungen
- Hardwarenahes Rust: Vormittags
- 48. Willkommen
- 49. no_std
â±
- 49.1. Kleines Beispiel
- 49.2. alloc
- 50. Mikrokontroller
â±
- 50.1. Direktes MMIO
- 50.2. PACs
- 50.3. HAL Kisten
- 50.4. Helfer Kisten
- 50.5. Das Typzustandsmuster
- 50.6. embedded-hal
- 50.7. probe-rs und cargo-embed
â±
- 50.7.1. Debugging
- 50.8. Andere Projekte
- 51. Ăbungen
â±
- 51.1. Kompass
- 51.2. Lösungen
- Bare-Metal: Nachmittags
- 52. Applikationsprozessoren
â±
- 52.1. Los gehts mit Rust
- 52.2. Inline Assembler
- 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 Projekte
- 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 auf Android
â±
- 54.1. vmbase
- 55. Ăbungen
â±
- 55.1. RTC Treiber
- 55.2. Lösungen
- ParallelitÀt: 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. Marker 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
- ParallelitÀt: 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. KanÀle und 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. Programmabbruch
- 66. Ăbungen
â±
- 66.1. Philosophenproblem
- 66.2. Allgemeine Chat Anwendung
- 66.3. Lösungen
- Letzte Worte
- 67. Danke!
- 68. Glossary
- 69. Andere Ressourcen
- 70. WĂŒrdigungen