Was ist Unsafe? Verträge & Undefined Behavior
Das Versprechen von Rust
Rusts Typ- und Borrow-Checker verhindern ganze Fehlerklassen zur Compile-Zeit. Aber manches lässt sich nicht automatisch prüfen. Ein unsafe-Feature ist eines, das einen Vertrag auferlegt: Regeln, die Rust nicht selbst erzwingen kann, die du aber befolgen musst, um undefiniertes Verhalten (UB) zu vermeiden.
Undefined Behavior ist Verhalten, von dem Rust annimmt, dass es nie eintritt. Trifft es doch ein, macht Rust keine Vorhersagen über die Folgen — von verwirrenden Abstürzen bis zur Übergabe deines Computers an einen Angreifer.
Beispiel: Ein roher Zeiger, der über das Ende seines Ursprungsobjekts hinaus läuft, verstößt gegen den Zeiger-Vertrag. Rust kompiliert das trotzdem — die Sicherheitsprüfung erkennt es nicht. Du trägst die Verantwortung.
Unsafe-Features
Diese Optionen stehen dir in unsafe zur Verfügung:
unsafe-Funktionen aufrufen- Rohe Zeiger dereferenzieren
- Felder von
unions lesen - Mutable
static-Variablen zugreifen - FFI-Funktionen/-Variablen (aus anderen Sprachen) benutzen
Ein Vertrag geht über Typ-Checks hinaus
Ein Vertrag sind Regeln zusätzlich zu den üblichen Typ- und Lifetime-Checks. Rust kennt den Vertrag meist gar nicht — er steht nur in der Doku des Unsafe-Features. Verstößt du dagegen, gibst du deinen Teil des Deals mit Rust auf, und Rust weigert sich, die Konsequenzen vorherzusagen.
📝 Schnellprüfung
Was bedeutet Undefined Behavior (UB) in Rust?
✅ Wichtige Erkenntnisse
Haken setzen, um deinen Lernfortschritt zu markieren: