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. Le String est propriétaire (« Owner ») de l'espace mémoire.

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.