Avatar ·

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.