0 Tage Serie
Code-Bibliothek

Rust für Fortgeschrittene

Lies diese Rust-Snippets für Fortgeschrittene Zeile für Zeile — jedes kommt mit einer Erklärung, was der Code tut und warum.

Rust · Mittel

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…

Memory ManagementSyntax
Snippet öffnen →
Rust · Mittel

Generische Schranken mit Traits

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…

SyntaxFunktionen
Snippet öffnen →
Rust · Mittel

Funktionale Iterator-Adapter

Iteratoren in Rust sind 'lazy' (träge) und mächtig. 'filter' und 'map' ermöglichen Datentransformationen im funktionalen Stil ohne unnötige Zwischenspeicherungen.

PerformanceBest Practices
Snippet öffnen →
Rust · Mittel

Fehlerfortpflanzung mit dem ?-Operator

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.

FehlerbehandlungKontrollstrukturen
Snippet öffnen →
Rust · Mittel

Interne Veränderbarkeit mit RefCell

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…

Memory ManagementBest Practices
Snippet öffnen →
Rust · Mittel

Effiziente Map-Updates mit der Entry-API

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…

PerformanceFunktionen
Snippet öffnen →
Rust · Mittel

Umgebung mit 'move' Closures einfangen

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…

FunktionenSyntax
Snippet öffnen →
Rust · Mittel

Option<T> für Null-Sicherheit

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ö…

FehlerbehandlungDatentypen
Snippet öffnen →
Rust · Mittel

Iterator-Ketten mit Closures

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…

SyntaxFunktionen
Snippet öffnen →
Rust · Mittel

Struct-Methoden mit Impl

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…

SyntaxBest Practices
Snippet öffnen →
Rust · Mittel

Result<T, E> für behebbare Fehler

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…

FehlerbehandlungBest Practices
Snippet öffnen →
Rust · Mittel

Lebenszeiten in Rust verstehen

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…

Memory ManagementSyntax
Snippet öffnen →
Rust · Mittel

Closures: Umgebungsvariablen erfassen

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…

FunktionenMemory Management
Snippet öffnen →
Rust · Mittel

Slices: Mit Datenabschnitten arbeiten

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…

DatentypenFunktionen
Snippet öffnen →
Rust · Mittel

Innere Veränderlichkeit mit Cell-Typen

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…

Memory ManagementDatentypen
Snippet öffnen →
Rust · Mittel

Assoziierte Typen in Traits

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…

SyntaxBest Practices
Snippet öffnen →
Rust · Mittel

Lazy Initialisierung mit OnceLock

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…

Memory ManagementPerformance
Snippet öffnen →
Rust · Mittel

Unsafe Rohe Zeiger und MaybeUninit

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…

Memory ManagementUnsafe
Snippet öffnen →
Rust · Mittel

Musterabgleich mit Match-Ausdrücken

Match-Ausdrücke in Rust bieten leistungsstarke Musterabgleich-Fähigkeiten. Sie können auf Enum-Varianten matchen, Wächterklauseln mit 'if'-Bedingungen einbeziehen und komplexe Daten direkt im Muste…

SyntaxDatentypenKontrollstrukturen
Snippet öffnen →
Rust · Mittel

Box<T> für Heap-Allokation und Smart Pointer

Box<T> alloziert Werte auf dem Heap statt auf dem Stack. Es ist der primäre Weg, um singly-linked Datenstrukturen wie Bäume und verkettete Listen in Rust zu erstellen. Box<T> implementiert das Dere…

Memory ManagementDatentypenBest Practices
Snippet öffnen →