Avatar ·

Quelle est la différence entre String et str en Rust ? Quand utiliser quoi ?

Bonjour, collègues ! J'ai commencé à apprendre Rust et je suis tombé sur un sujet très déroutant : les chaînes. Dans la documentation, je rencontre constamment `String` et `&str`, mais je n'arrive pas à comprendre la différence entre eux et quand utiliser quel type. J'ai écrit un petit exemple : ```rust fn main() { let s1 = "hello"; // c'est str ? let s2 = String::from("hello"); // et ça c'est String ? println!("{}", s1); println!("{}", s2); // Pourquoi ça marche ? let s3: &str = &s2; println!("{}", s3); // Et ça non ? // let s4: String = s1; // erreur ! } ``` Je vois que `s1` est un littéral de chaîne, et `s2` est créé via `String::from()`. Mais quand j'essaie d'assigner `s1` à une variable de type `String`, le compilateur se plaint. Pourtant, je peux prendre une référence sur `s2` et l'assigner à `&str`. Quelqu'un pourrait-il expliquer en termes simples : 1. Qu'est-ce que `String` et qu'est-ce que `str` ? 2. Pourquoi `str` est-il toujours accompagné d'une esperluette (`&str`) ? 3. Dans quelles situations faut-il utiliser `String`