Programmiersprache: Rust könnte neue Technik für Unsafe Pointer bekommen

In einem sehr ausführlichen Blogpost beschreibt die Entwicklerin Aria Beingessner verschiedene Probleme(öffnet im neuen Fenster) im aktuellen Umgang der Programmiersprache Rust mit Unsafe Pointern, also jenen Zeigern, für die die sonst in Rust üblichen Sicherheitsgarantien nicht gelten. Beingessner verantwortet die Dokumentation für Unsafe Rust und hat die Pointer-API der Sprache umgestaltet. Sie schreibt nun: "Ich denke viel über unsichere Zeiger in Rust nach und ich hasse sie absolut."
Die verfügbare Umsetzung der Pointer in Rust sei "zutiefst fehlerhaft" . Mit einem wachsenden Verständnis der Beteiligten dafür, wie die Zeiger eigentlich funktionieren sollten, seien die Mängel der bisherigen Technik umso eklatanter, schreibt Beingessner.
Sie führt weiter aus, dass der derzeit mögliche Umgang mit Tagged Pointern(öffnet im neuen Fenster) in Rust zu Schwierigkeiten führe, ein Speichermodell für die Programmiersprache formal zu definieren. Probleme gebe es außerdem beim Erstellen von sogenannten Sanitizern, die undefiniertes Verhalten und damit mögliche Sicherheitsrisiken erkennen sollen. Ebenso bekomme Rust Probleme mit CPU-Architekturen wie aus dem Cheri-Projekt , das einen inhärenten Speicherschutz bieten soll.
Für Probleme sorgen die Pointer auch im Zusammenspiel mit den in Rust genutzten Referenzen(öffnet im neuen Fenster) , die laut Beingessner eigentlich nie zusammen verwendet werden sollten. Das ist aber wohl nicht einfach. Darüber hinaus sei auch die Semantik beim Dereferenzieren eher verwirrend, so die Entwicklerin. In Safe Rust helfe hier dann immerhin noch der Compiler, falls etwas schief laufe. In Unsafe Rust seien die Entwickler aber auf sich allein gestellt.
Als Lösung macht Beingessner sehr detaillierte Vorschläge. Dazu gehört die strikte Trennung von eigentlichen Adressen und Pointern sowie die Einführung von syntaktischem Zucker für Pointer Offsets. Einen ersten Teil der Arbeiten setzt Beingessner laut Aussagen auf Twitter bereits um. Ob und in welcher Form die Änderung letztlich in einer stabilen Rust-Version landen, ist derzeit aber noch nicht absehbar.



