Rust : type de chaînes de caractères
Il existe un certain nombre de types de chaîne de caractère en Rust, ils ont tous un intérêt(plus ou moins) mais dépendant de l'usage.
Les deux grands types sont String et &str, les autres sont plus exceptionnels.
String
Type utilisé pour les chaînes que l'on modifie/manipule, donc « Mutable ». Le type String est en fait un Vec
En mémoire, dans la « stack » est enregistré :
- le pointeur vers les données dans la « Heap »
- la « capacity » qui représente l'espace mémoire réservé pour cette variable
- la « length » qui la longueur effective de la chaîne et forcément inférieure ou égale à la capacité.
À utiliser pour de la manipulation de chaîne.
&str
- Type utilisé pour les chaînes fixes qui n'ont pas vocation autre qu'à être lues, donc « Immutable ». À l'inverse du String, il n'est pas propriétaire de l'espace mémoire mais l'emprunte (« Borrower »).
En mémoire, dans la « stack » est enregistré :
- le pointeur vers les données dans un espace mémoire en lecture seule.
- la « length » qui la longueur effective de la chaîne.
Bien plus efficace en terme d'espace mémoire et de rapidité de traitement du fait de son « Immutabilité », à préférer.
OsString / OsStr
À utiliser pour interagir avec le système d'exploitation et le cross-platform, par exemple, les chemins des fichiers : OsString et OsStr.
Raw string
Par exemple : r#"il était une fois"#.
Pratique dans le cadre de l'utilisation de regexp, il n'y a pas besoin d'échapper les caractères.
Autre
- Cstr et CString : pour des interaction avec le C
- Path (str) et PathBuf (String) : pour la gestion des chemins
- byte string :
let hello: &[u8;8] = b"badaboum";
Sources
Le bouquin
J'ajoute un autre post sur le sujet de Steve Klabnik.