- Die Programmiersprache Rust
- Vorwort
- Einführung
- 1. Erste Schritte
- 1.1. Installation
- 1.2. Hallo Welt
- 1.3. Hallo Cargo
- 2. Ein Ratespiel programmieren
- 3. Allgemeine Programmierkonzepte
- 3.1. Variablen und Veränderbarkeit
- 3.2. Datentypen
- 3.3. Funktionen
- 3.4. Kommentare
- 3.5. Kontrollfluss
- 4. Eigentümerschaft (ownership) verstehen
- 4.1. Was ist Eigentümerschaft (ownership)?
- 4.2. Referenzen und Ausleihen (borrowing)
- 4.3. Der Anteilstyp (slice)
- 5. Strukturen (structs) für zusammenhängende Daten verwenden
- 5.1. Strukturen (structs) definieren und instanziieren
- 5.2. Beispielprogramm mit Strukturen (structs)
- 5.3. Methodensyntax
- 6. Aufzählungen (enums) und Musterabgleich (pattern matching)
- 6.1. Eine Aufzählung (enum) definieren
- 6.2. Das Kontrollflusskonstrukt match
- 6.3. Prägnanter Kontrollfluss mit if let
- 7. Wachsende Projekte verwalten mit Paketen (packages), Kisten (crates) und Modulen
- 7.1. Pakete (packages) und Kisten (crates)
- 7.2. Mit Modulen den Kontrollumfang und Datenschutz steuern
- 7.3. Mit Pfaden auf ein Element im Modulbaum verweisen
- 7.4. Pfade in den Gültigkeitsbereich bringen mit dem Schlüsselwort use
- 7.5. Module in verschiedene Dateien aufteilen
- 8. Allgemeine Kollektionen
- 8.1. Wertlisten in Vektoren ablegen
- 8.2. UTF-8-kodierten Text in Zeichenketten (strings) ablegen
- 8.3. Schlüssel mit zugehörigen Werten in Hashtabellen ablegen
- 9. Fehlerbehandlung
- 9.1. Nicht behebbare Fehler mit panic!
- 9.2. Behebbare Fehler mit Result
- 9.3. Wann panic! aufrufen und wann nicht?
- 10. Generische Typen, Merkmale (traits) und Lebensdauer
- 10.1. Generische Datentypen
- 10.2. Merkmale (traits): Gemeinsames Verhalten definieren
- 10.3. Referenzen validieren mit Lebensdauern
- 11. Automatisierte Tests schreiben
- 11.1. Tests schreiben
- 11.2. Steuern wie Tests ausgeführt werden
- 11.3. Testverwaltung
- 12. Ein E/A-Projekt: Ein Kommandozeilenprogramm erstellen
- 12.1. Kommandozeilenargumente entgegennehmen
- 12.2. Eine Datei einlesen
- 12.3. Refaktorierung um die Modularität und Fehlerbehandlung zu verbessern
- 12.4. Bibliotheksfunktionalität mit testgetriebener Entwicklung erstellen
- 12.5. Mit Umgebungsvariablen arbeiten
- 12.6. Fehlermeldungen in die Standardfehlerausgabe anstatt der Standardausgabe schreiben
- 13. Funktionale Sprachelemente: Iteratoren und Funktionsabschlüsse (closures)
- 13.1. Funktionsabschlüsse (closures): Anonyme Funktionen, die ihre Umgebung erfassen
- 13.2. Eine Reihe von Elementen verarbeiten mit Iteratoren
- 13.3. Unser E/A-Projekt verbessern
- 13.4. Performanzvergleich: Schleifen vs. Iteratoren
- 14. Mehr über Cargo und Crates.io
- 14.1. Bauvorgang anpassen mit Freigabeprofilen (release profiles)
- 14.2. Kisten (crate) auf crates.io veröffentlichen
- 14.3. Cargo-Arbeitsbereiche
- 14.4. Installieren von Binärdateien mit cargo install
- 14.5. Cargo um benutzerdefinierte Befehle erweitern
- 15. Intelligente Zeiger
- 15.1. Mit Box<T> auf Daten im Haldenspeicher zeigen
- 15.2. Intelligente Zeiger wie normale Referenzen behandeln mit dem Merkmal (trait) Deref
- 15.3. Programmcode beim Aufräumen ausführen mit dem Merkmal (trait) Drop
- 15.4. Der referenzzählende intelligente Zeiger Rc<T>
- 15.5. RefCell<T> und das innere Veränderbarkeitsmuster
- 15.6. Referenzzyklen können zu einem Speicherleck führen
- 16. Furchtlose Nebenläufigkeit
- 16.1. Mit Strängen (threads) Programmcode gleichzeitig ausführen
- 16.2. Nachrichtenaustausch zwischen Strängen (threads)
- 16.3. Nebenläufigkeit mit gemeinsamem Zustand
- 16.4. Erweiterbare Nebenläufigkeit mit den Merkmalen (traits) Sync und Send
- 17. Async und Await
- 17.1. Futures und die asynchrone Syntax
- 17.2. Nebenläufigkeit mit async
- 17.3. Arbeiten mit einer beliebigen Anzahl von Futures
- 17.4. Ströme (streams)
- 17.5. Merkmale für async
- 17.6. Futures, Aufgaben und Stränge
- 18. Objektorientierte Sprachelemente von Rust
- 18.1. Charakteristiken objektorientierter Sprachen
- 18.2. Merkmalsobjekte (trait objects) die Werte unterschiedlicher Typen erlauben
- 18.3. Ein objektorientiertes Entwurfsmuster implementieren
- 19. Muster (patterns) und Abgleich (matching)
- 19.1. Alle Stellen an denen Muster (patterns) verwendet werden können
- 19.2. Abweisbarkeit: Falls ein Muster (pattern) mal nicht passt
- 19.3. Mustersyntax
- 20. Fortgeschrittene Sprachelemente
- 20.1. Unsicheres (unsafe) Rust
- 20.2. Fortgeschrittene Merkmale (traits)
- 20.3. Fortgeschrittene Typen
- 20.4. Erweiterte Funktionen und Funktionsabschlüsse (closures)
- 20.5. Makros
- 21. Abschlussprojekt: Einen mehrsträngigen (multi-threaded) Webserver erstellen
- 21.1. Einen einsträngigen (single-threaded) Webserver erstellen
- 21.2. Unseren einsträngigen (single-threaded) Webserver in einen mehrsträngigen (multi-threaded) Webserver verwandeln
- 21.3. Kontrolliertes Beenden und Aufräumen
- 22. Anhang
- 22.1. A - Schlüsselwörter
- 22.2. B - Operatoren und Symbole
- 22.3. C - Ableitbare Merkmale (traits)
- 22.4. D - Nützliche Entwicklungswerkzeuge
- 22.5. E - Ausgaben
- 22.6. F - Übersetzungen des Buchs
- 22.7. G - Wie Rust erstellt wird und „nächtliches Rust“