Avatar ·

Warum optimiert Rust keinen Code, wenn zwei mutable references nicht aliased werden können?

Hallo zusammen! Ich habe angefangen, Rust zu lernen, und bin auf eine interessante Sache gestoßen. Ich weiß, dass die wichtigste Sicherheitsregel in Rust ist, dass wir nicht zwei mutable references (`&mut T`) auf dieselben Daten gleichzeitig haben können. Der Compiler prüft dies strikt zur Kompilierzeit über das Borrowing-System. Allerdings habe ich etwas Seltsames bemerkt. Wenn ich eine einfache Funktion schreibe, die zwei Zahlen addiert, indem ich sie als mutable references übergebe, generiert der Compiler nicht den optimalsten Code. Hier ist ein Beispiel: ```rust pub fn add(x: &mut u32, y: &mut u32) -> u32 { *x + *y } ``` Ich hatte erwartet, dass der Compiler (LLVM) versteht: Da `x` und `y` `&mut` sind, zeigen sie garantiert nicht auf denselben Speicherbereich (noalias). Also könnte man einfach die Werte an diesen Adressen laden und addieren. Aber wenn ich mir die Assembler-Ausgabe ansehe (z.B. auf godbolt.org), sehe ich, dass der Compiler Code mit expliziten Lade- und Dereferenzierungsinstruktionen generiert, anstatt einfach Register zu addieren. Warum passiert das?