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…
memoryperformance
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…
memoryperformance
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…
memoryasync
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…
syntaxfunctions
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…
syntaxbestpractices
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…
syntaxbestpractices
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
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…
memorysyntax
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…
functionsmemory
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…
datatypesmemory
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,…
controlflowsyntax
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…
testingfunctions
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…
errorhandlingcontrolflowbestpractices
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-…
memoryperformance
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…
errorhandlingcontrolflow
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…
memorysyntaxbestpractices
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…
syntaxbestpractices
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…
memorydatatypes
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…
syntaxcontrolflowbestpractices
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…
memorydatatypes
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…
asynccontrolflowperformance
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…
performancememorycontrolflow
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…
performancefunctionsbestpractices
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…
errorhandlingdatatypesbestpractices
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…
testingbestpracticesfunctions
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…
asyncperformance
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…
syntaxdatatypes
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…
testingbestpractices
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…
datatypessyntaxperformance
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…
errorhandlingdatatypesfunctions
Snippet öffnen →