Einfache Lifetime-Annotationen
Lifetimes stellen sicher, dass Referenzen so lange gültig bleiben, wie sie benötigt werden. Die Annotation '<'a>' teilt dem Compiler mit, dass das Struct nicht länger leben darf als die enthaltene…
Snippet öffnen →Lies diese Rust-Snippets für Fortgeschrittene Zeile für Zeile — jedes kommt mit einer Erklärung, was der Code tut und warum.
Lifetimes stellen sicher, dass Referenzen so lange gültig bleiben, wie sie benötigt werden. Die Annotation '<'a>' teilt dem Compiler mit, dass das Struct nicht länger leben darf als die enthaltene…
Snippet öffnen →Generische Schranken ermöglichen es, einen generischen Typ so einzuschränken, dass er bestimmte Verhaltensweisen (Traits) implementieren muss. Dies stellt sicher, dass die Funktion die benötigten M…
Snippet öffnen →Iteratoren in Rust sind 'lazy' (träge) und mächtig. 'filter' und 'map' ermöglichen Datentransformationen im funktionalen Stil ohne unnötige Zwischenspeicherungen.
Snippet öffnen →Der '?' Operator ist eine prägnante Art, Fehler zu behandeln. Wenn ein Result ein 'Err' ist, kehrt die Funktion vorzeitig mit diesem Fehler zurück; andernfalls wird der 'Ok'-Wert entpackt.
Snippet öffnen →Rust-Enums sind algebraische Datentypen. Sie können in jeder Variante verschiedene Datentypen speichern, die mit 'match' elegant extrahiert werden können.
Snippet öffnen →RefCell<T> bietet 'Interne Veränderbarkeit', ein Muster, das es ermöglicht, Daten zu verändern, selbst wenn man eine unveränderliche Referenz auf diese Daten hat. Die Borrowing-Regeln werden zur La…
Snippet öffnen →Arc (Atomic Reference Counted) ermöglicht es mehreren Threads, Eigentümer derselben Daten zu sein, während Mutex (Mutual Exclusion) sicherstellt, dass jeweils nur ein Thread die Daten verändern kann.
Snippet öffnen →Raw Pointers (*const T und *mut T) ermöglichen es, die Ownership- und Borrowing-Regeln von Rust zu umgehen. Das Dereferenzieren gilt als unsicher, da der Compiler nicht garantieren kann, dass der P…
Snippet öffnen →Die Entry-API ermöglicht es, die Existenz eines Schlüssels zu prüfen und eine Operation in einem einzigen Schritt durchzuführen. Dies vermeidet doppelte Lookups und bietet eine ausdrucksstärkere Ar…
Snippet öffnen →Das Schlüsselwort 'move' zwingt eine Closure dazu, das Eigentum an den Variablen zu übernehmen, die sie aus der Umgebung einfängt, anstatt sie nur auszuleihen. Dies ist oft erforderlich, wenn Closu…
Snippet öffnen →Musterabgleich mit match-Ausdrücken ist Rosts leistungsstarke Methode zur Behandlung von Enums. Der Compiler stellt sicher, dass alle Fälle abgedeckt sind, was den Code erschöpfend und sicher macht…
Snippet öffnen →Rust kennt keine Null-Werte. Stattdessen repräsentiert Option<T> optionale Werte: Some(T) enthält einen Wert, None repräsentiert Abwesenheit. Dies macht Null-Zeiger-Ausnahmen zur Kompilierzeit unmö…
Snippet öffnen →Rust-Iteratoren sind faul — sie tun nichts bis sie konsumiert werden. Methoden wie filter, map und take sind Adaptoren, die Iteratoren transformieren ohne auszuführen. Die collect-Methode konsumier…
Snippet öffnen →impl-Blöcke definieren Methoden auf Structs. &self borgt das Struct unveränderlich, &mut self borgt veränderlich, und kein self erzeugt eine assoziierte Funktion (Konstruktor). Self bezieht sich au…
Snippet öffnen →Result<T, E> repräsentiert behebbare Fehler: Ok(T) für Erfolg, Err(E) für Fehlschlag. Der ?-Operator propagiert Fehler früh, verlässt die Funktion sofort bei Err. Dies ist idiomatische Rust-Fehlerb…
Snippet öffnen →Lebenszeiten sind Rusts Methode zur Gewährleistung von Speichersicherheit ohne Garbage Collection. Sie verfolgen, wie lange Referenzen gültig sind. Die 'a Lebenszeit-Annotation verbindet Eingabe- u…
Snippet öffnen →Trait-Grenzen beschränken generische Typen so, dass nur Werte akzeptiert werden die bestimmte Verhaltensweisen implementieren. Man kann mehrere Grenzen mit + kombinieren. Die impl Trait Syntax biet…
Snippet öffnen →Closures können Variablen aus ihrer umgebenden Umgebung erfassen. Rust bestimmt den Erfassungsmodus automatisch basierend darauf wie die Closure die Variable nutzt: by Reference, by Mutable Referen…
Snippet öffnen →Slices erlauben es auf eine zusammenhängende Sequenz von Elementen innerhalb einer Collection zu referenzieren ohne die Eigentümerschaft zu übernehmen. Der Slice-Typ wird geschrieben als &[T] für A…
Snippet öffnen →Cell-Typen ermöglichen mutable Datenteilung in Singlethread-Szenarien wo Borrow-Regeln normalerweise dagegen sprechen würden. Cell<T> funktioniert nur mit Copy-Typen und bietet set und get Methoden…
Snippet öffnen →Assoziierte Typen ermöglichen es Ihnen, Platzhaltertypen innerhalb eines Traits zu definieren, die implementierende Typen angeben müssen. Im Gegensatz zu generischen Typparametern erzwingen assozii…
Snippet öffnen →Benutzerdefinierte Fehlertypen kapseln domänenspezifische Fehlerfälle. Durch die Implementierung von Display werden Fehler menschenlesbar. Das Error-Trait ermöglicht Komponierbarkeit mit Rusts ?-Op…
Snippet öffnen →Rusts async/await-Syntax baut auf dem Future-Trait auf. Ein Future repräsentiert einen Wert, der möglicherweise noch nicht verfügbar ist. Die poll-Methode wird vom Executor aufgerufen, um zu prüfen…
Snippet öffnen →Rc<T> bietet gemeinsames Eigentum durch Referenzzählung. Jedes Klone erhöht den Zähler, jeder Drop verringert ihn. Wenn der Zähler Null erreicht, wird der Wert freigegeben. Rc kann jedoch Referenzk…
Snippet öffnen →Rust bietet gestaffelte Fehlerbehandlungsstrategien. catch_unwind fängt Paniken zur sanften Wiederherstellung ab. expect bietet klare Fehlermeldungen für Option/Result. unwrap_or bietet Fallback-We…
Snippet öffnen →Const Generics ermöglichen die Verwendung von Konstanten als Typparameter und ermöglichen so Typen, die zur Kompilierzeit parametrisiert sind. Im Gegensatz zu C++-Templates mit Nicht-Typ-Parametern…
Snippet öffnen →Das Newtype Pattern umschließt primitive Typen in Tuple-Structs um verschiedene Typen mit null Laufzeitkosten zu erstellen. Dies bietet Kompilierzeit-Einheitsprüfung—Rust weigert sich, Kilogramm zu…
Snippet öffnen →OnceLock bietet Thread-sichere lazy Initialisierung für statische Daten. Die Konfiguration wird nur beim ersten Zugriff von der Festplatte gelesen, nicht beim Programmstart. Dies verbessert die Sta…
Snippet öffnen →Unsafe Rust gewährt direkten Speicherzugriff über das hinaus, was sicheres Rust erlaubt. Rohe Zeiger (*const T, *mut T) können nur in unsafe Blöcken dereferenziert werden, was Risiken von undefinie…
Snippet öffnen →Const Functions werden in const Kontexten zur Kompilierzeit ausgeführt und ermöglichen echte Zero-Cost Abstraktionen. Im Gegensatz zu C++ constexpr hat Rust const fn strengere Regeln, ist aber für…
Snippet öffnen →