Warum optimiert Rust keinen Code unter der Annahme, dass zwei mutable Referenzen nicht aliasing sind?
Hallo zusammen! Ich lerne Rust und versuche zu verstehen, wie der Compiler Sicherheitsgarantien zur Code-Optimierung nutzt. Bekanntlich sind mutable Referenzen (`&mut T`) in Rust einzigartig: Es kann zu jedem Zeitpunkt nur eine mutable Referenz auf die Daten geben. Diese Regel wird vom Compiler während der Borrow-Check-Phase garantiert. Das sollte LLVM starke Optimierungshinweise geben, ähnlich wie `restrict` in C/C++. Allerdings habe ich bemerkt, dass Rust in einigen einfachen Benchmarks Code generiert, der diese Annahme nicht nutzt.
Hier ist ein einfaches Beispiel:
```rust
pub fn add_assign(x: &mut u32, y: &mut u32) {
*x += *y;
*x += *y;
}
```
Ich hatte erwartet, dass der Compiler dies zu `*x += *y * 2` optimiert, da `x` und `y` nicht auf denselben Speicher zeigen können.
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen
Blogs