Rust · Experte
Standardmäßig sind Typen, die Raw Pointer enthalten, weder Send noch Sync. Um sie zwischen Threads zu übergeben oder Referenzen threadübergreifend zu teilen, müssen diese Marker-Traits manuell impl…
Memory ManagementPerformance
Snippet öffnen →Rust · Experte
'UnsafeCell' ist der einzige legale Weg, in Rust eine mutable Referenz aus einer immutablen zu erhalten. Es ist das Primitiv hinter 'Cell' und 'RefCell'. Die direkte Verwendung ist hochgradig unsic…
Memory ManagementPerformance
Snippet öffnen →Rust · Experte
Der 'Pin'-Wrapper stellt sicher, dass ein Wert an einer festen Speicheradresse bleibt. Dies ist kritisch für selbstreferenzierende Strukturen, bei denen ein Feld einen Pointer auf ein anderes Feld…
Memory ManagementAsync & Concurrency
Snippet öffnen →Rust · Experte
Higher-Rank Trait Bounds (HRTB) ermöglichen es, anzugeben, dass eine Bindung für alle möglichen Lebensdauern gilt. Die 'for<'a>'-Syntax stellt sicher, dass die Closure eine Referenz mit jeder belie…
SyntaxFunktionen
Snippet öffnen →Rust · Experte
Generic Associated Types ermöglichen es assoziierten Typen, Lebensdauer- oder Typparameter zu tragen. Dies ist essenziell für 'Lending Iteratoren', bei denen das vom Iterator gelieferte Element vom…
SyntaxBest Practices
Snippet öffnen →Rust · Experte
Das Typestate-Pattern nutzt Rusts Typsystem, um Zustandsübergänge zur Kompilierzeit zu erzwingen. Durch die Verwendung von PhantomData können wir Zustände unterscheiden, ohne Laufzeit-Speicher-Over…
SyntaxBest Practices
Snippet öffnen →Rust · Experte
Portable SIMD (Single Instruction, Multiple Data) ermöglicht es, Operationen auf mehreren Werten gleichzeitig mittels CPU-Vektorinstruktionen auszuführen. Durch das Packen von vier f32-Werten in ei…
PerformanceArrays & Listen
Snippet öffnen →Rust · Experte
Varianz bestimmt, wie das Subtyping zwischen Lifetimes die Kompatibilität komplexer Typen beeinflusst. Unveränderliche Referenzen sind kovariant über ihre Lifetime, was bedeutet, dass man eine läng…
Memory ManagementSyntax
Snippet öffnen →Rust · Experte
Nicht alle Traits können als dynamische Trait-Objekte (dyn Trait) verwendet werden. Damit ein Trait 'objekt-sicher' ist, darf er keine generischen Methoden haben. Man kann die Objekt-Sicherheit jed…
FunktionenMemory Management
Snippet öffnen →Rust · Experte
Dynamisch skalierte Typen (DSTs) wie benutzerdefinierte Slices oder Arrays mit vorangestelltem Header erfordern eine manuelle Speicherallokation und den Aufbau von Fat-Pointers in Rust. Wir erstell…
DatentypenMemory Management
Snippet öffnen →Rust · Experte
Das `ControlFlow`-Enum der Standardbibliothek vereinheitlicht Muster zur vorzeitigen Ablaufsteuerung (Break vs. Continue). Es ermöglicht Entwicklern, eigene Traversierungsalgorithmen zu schreiben,…
KontrollstrukturenSyntax
Snippet öffnen →Rust · Experte
Beim Schreiben von Unit-Tests in Rust laufen diese standardmäßig parallel. Um globale Funktionen oder FFI-Zustände ohne Race-Conditions sicher zu mocken, können wir `thread_local!` verwenden. Dies…
TestingFunktionen
Snippet öffnen →Rust · Experte
In der Systemprogrammierung ist die Gewährleistung eines Zustands-Rollbacks bei Fehlern oder Panics entscheidend. Dieser Schnipsel implementiert einen Scope-Guard mittels des `Drop`-Traits. Wenn ei…
FehlerbehandlungKontrollstrukturenBest Practices
Snippet öffnen →Rust · Experte
Dieses Snippet demonstriert die manuelle Speicherverwaltung auf dem Heap unter Verwendung der rohen Allokations-API der Standardbibliothek. Wir erstellen ein Speicherlayout für ein Array aus 4 u32-…
Memory ManagementPerformance
Snippet öffnen →Rust · Experte
In Rust führen Panics zum Unwinding des Stacks, es sei denn, sie sind auf Abort konfiguriert. Mit catch_unwind können wir Panics an FFI-Grenzen oder Thread-Wurzeln abfangen und so ein Abstürzen des…
FehlerbehandlungKontrollstrukturen
Snippet öffnen →Rust · Experte
Standardmäßig sind Referenzen und Typen, die Lebensdauern parametrisieren, kovariant. Typen, die Mutationen erlauben (wie veränderliche Referenzen oder Cells), müssen jedoch über ihre Typparameter…
Memory ManagementSyntaxBest Practices
Snippet öffnen →Rust · Experte
Dieses Beispiel zeigt die Verwendung von Higher-Rank Trait Bounds (HRTB) mit der `for<'a>`-Syntax. Durch HRTB legen wir fest, dass die Closure eine Referenz mit einer beliebigen Lebensdauer `'a` ak…
SyntaxBest Practices
Snippet öffnen →Rust · Experte
Dieses Snippet demonstriert, wie man eine selbstreferenzielle Struktur in Rust unter Verwendung von `Pin` und `PhantomPinned` erstellt. Die Fixierung (Pinning) stellt sicher, dass die Struktur im S…
Memory ManagementDatentypen
Snippet öffnen →Rust · Experte
Dieses Snippet implementiert das Typestate-Muster, welches das Typsystem von Rust nutzt, um gültige Zustandsübergänge eines Objekts zur Kompilierzeit zu erzwingen. Durch den Verbrauch von `self` in…
SyntaxKontrollstrukturenBest Practices
Snippet öffnen →Rust · Experte
Dynamisch skalierte Typen (DSTs) wie Slices können nicht einfach auf dem Stack erstellt werden. Über die Standard-Allocator-API können wir benutzerdefinierte DSTs manuell erstellen, indem wir Layou…
Memory ManagementDatentypen
Snippet öffnen →Rust · Experte
Das Schreiben benutzerdefinierter Futures erfordert die manuelle Implementierung des Future-Traits und die Verwaltung von Task-Wakern. Dieser asynchrone Timer startet einen Worker-Thread und aktual…
Async & ConcurrencyKontrollstrukturenPerformance
Snippet öffnen →Rust · Experte
Sperrenfreie Strukturen basieren auf atomaren CAS-Operationen (Compare-And-Swap). Dieser konkurrierende Stapelspeicher verwendet compare_exchange_weak in einer Schleife, um den Head-Pointer sperren…
PerformanceMemory ManagementKontrollstrukturen
Snippet öffnen →Rust · Experte
Während die standardmäßige externe Iteration next() verwendet, führt die interne Iteration über die fold-Methode oft zu einer besseren Leistung. Durch das Überschreiben von fold bei einem benutzerd…
PerformanceFunktionenBest Practices
Snippet öffnen →Rust · Experte
Um robuste Bibliotheken in Rust zu erstellen, sollten Sie benutzerdefinierte Fehler entwerfen, die std::error::Error implementieren. Durch das Überschreiben der source-Methode legen Sie die zugrund…
FehlerbehandlungDatentypenBest Practices
Snippet öffnen →Rust · Experte
Das Mocken von Abhängigkeiten in multithreaded Test-Runnern kann zu Race Conditions führen, wenn ein globaler Zustand verwendet wird. Durch die Nutzung von thread-lokalem Speicher (thread_local!) k…
TestingBest PracticesFunktionen
Snippet öffnen →Rust · Experte
Das Erstellen benutzerdefinierter asynchroner Laufzeit-Executors erfordert eine direkte Schnittstelle mit dem Waker-System von Rust über RawWaker und RawWakerVTable. Durch manuelles Verwalten von R…
Async & ConcurrencyPerformance
Snippet öffnen →Rust · Experte
Standard-Rust-Iteratoren liefern Elemente mit Lebensdauern, die unabhängig vom Iterator selbst sind. Lending-Iteratoren (oder Streaming-Iteratoren) nutzen Generic Associated Types (GATs), um die Le…
SyntaxDatentypen
Snippet öffnen →Rust · Experte
Bei fortgeschrittenen Tests oder Multithreading-Diagnosen erfasst die Standard-Panic-Behandlung möglicherweise keine ausreichende Kontexttelemetrie oder erhöht keine Metrikzähler. Durch Registriere…
TestingBest Practices
Snippet öffnen →Rust · Experte
Veranschaulicht das performante Parsen von Binärprotokollen ohne Allokation. Durch die direkte Verknüpfung der Lebenszeit des parsenden Struct-Felds mit dem Eingabe-Slice wird Speicherallokation vo…
DatentypenSyntaxPerformance
Snippet öffnen →Rust · Experte
Zeigt, wie man Callstacks am genauen Ort der Fehlererstellung mithilfe des Backtrace-Typs der Rust-Standardbibliothek erfasst und so Debugging-Funktionen ohne Frameworks von Drittanbietern bereitst…
FehlerbehandlungDatentypenFunktionen
Snippet öffnen →