
Unsafe Rust
Unsafe-Blöcke, Raw Pointers (*const T, *mut T), FFI, unsafe Traits, Undefined Behavior (UB), Safety-Invarianten
1Welches Schlüsselwort aktiviert die Superkräfte des unsafe-Modus in Rust?
Welches Schlüsselwort aktiviert die Superkräfte des unsafe-Modus in Rust?
Antwort
Das Schlüsselwort unsafe schaltet fünf in safe Rust verbotene Fähigkeiten frei: das Dereferenzieren von Raw Pointers, das Aufrufen von unsafe Funktionen, den Zugriff auf veränderbare statische Variablen, das Implementieren von unsafe Traits und den Zugriff auf Union-Felder. Dieser Block signalisiert dem Compiler, dass der Entwickler die Verantwortung für die Gewährleistung der Memory Safety übernimmt.
2Wie viele zusätzliche Fähigkeiten schaltet unsafe-Code im Vergleich zu safe Rust frei?
Wie viele zusätzliche Fähigkeiten schaltet unsafe-Code im Vergleich zu safe Rust frei?
Antwort
Der unsafe-Modus schaltet genau fünf Fähigkeiten frei: das Dereferenzieren von raw pointers, das Aufrufen von unsafe Funktionen oder Methoden, das Lesen oder Ändern veränderlicher statischer Variablen, das Implementieren von unsafe traits und den Zugriff auf union-Felder. Diese fünf Operationen sind die einzigen Unterschiede zwischen safe und unsafe Rust.
3Wie lautet die korrekte Syntax, um in Rust einen immutable raw pointer auf eine Variable zu erstellen?
Wie lautet die korrekte Syntax, um in Rust einen immutable raw pointer auf eine Variable zu erstellen?
Antwort
Die Syntax zum Erstellen eines immutable raw pointer lautet let ptr = &x as *const T. Der Typ *const T steht für einen immutable raw pointer. Das Erstellen von raw pointers ist safe, nur der deref erfordert einen unsafe-Block. Man kann auch die implizite Coercion mit let ptr: *const T = &x verwenden.
Was ist der Unterschied zwischen *const T und *mut T in Rust?
Warum ist das Erstellen von raw pointers in safe Rust erlaubt, das Dereferenzieren jedoch nicht?
+17 Interview-Fragen
Weitere Rust-Interviewthemen
Rust-Grundlagen
Ownership & Borrowing
Structs & Enums
Fehlerbehandlung
Collections
Module & Packages
Traits
Generics
Lifetimes
Iterators & Closures
Smart Pointers
Concurrency Basics
async/await
Testing
Cargo & Ecosystem
Pattern Matching
Makros
Serde & Serialisierung
Fortgeschrittene Traits
Fortgeschrittene Lifetimes
Type System
Tokio & Async I/O
Performance-Optimierung
Memory Management
Web Frameworks
Database Integration
Rust Design Patterns
Meistere Rust für dein nächstes Interview
Zugang zu allen Fragen, Flashcards, technischen Tests, Code-Review-Übungen und Interview-Simulatoren.
Kostenlos starten