Quelle est la différence entre String et str en Rust ?
Salut ! Je viens de commencer à apprendre Rust et je suis confronté à une confusion entre `String` et `str`. Dans d'autres langages, comme Python ou JavaScript, les chaînes sont juste des chaînes, mais ici c'est une sorte de zoo.
J'ai écrit ce code :
```rust
fn main() {
let greeting = "Hello"; // C'est str ?
let name = String::from("World"); // Et ça c'est String ?
println!("{} {}", greeting, name);
// J'ai essayé de modifier greeting
// greeting.push_str("!"); // Erreur !
// Mais name peut être modifié
name.push_str("!"); // Ça marche
println!("{}", name);
}
```
Je comprends que `String` peut être modifié, mais pas `str`. Mais pourquoi ? Quand utiliser quel type ? Et qu'est-ce que `&str` ? J'ai vu que dans les fonctions on écrit souvent `&str`, mais je ne comprends pas pourquoi.
J'ai aussi remarqué que `str` n'a pas de taille connue à la compilation, alors que `String` en a une. Est-ce que c'est lié au fait que les chaînes sont stockées sur le tas ? Aidez-moi à comprendre, parce que je me casse déjà la tête.