Avatar ·

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.