Pourquoi Rust n'optimise-t-il pas le code si deux références mutables (mutable references) ne peuvent pas être en alias ?
Bonjour à tous ! J'ai commencé à étudier Rust et je suis tombé sur un point intéressant. Je sais que la règle principale de sécurité en Rust est que nous ne pouvons pas avoir deux références mutables (`&mut T`) sur les mêmes données en même temps. Le compilateur vérifie cela strictement à l'étape de compilation via le système de borrowing.
Cependant, j'ai remarqué quelque chose d'étrange. Lorsque j'écris une fonction simple qui additionne deux nombres, en les passant comme références mutables, le compilateur ne génère pas le code le plus optimal.
Voici un exemple :
```rust
pub fn add(x: &mut u32, y: &mut u32) -> u32 {
*x + *y
}
```
Je m'attendais à ce que le compilateur (LLVM) comprenne : puisque `x` et `y` sont des `&mut`, ils ne pointent garantiment pas vers la même zone mémoire (noalias). Donc, on pourrait simplement charger les valeurs à ces adresses et les additionner. Mais quand je regarde la sortie assembleur (par exemple, sur godbolt.org), je vois que le compilateur génère du code avec des instructions explicites de chargement et de déréférencement, au lieu de simplement additionner des registres.
Pourquoi cela se produit-il ?