Avatar ·

Qu'est-ce qu'un "fat pointer" (pointeur gras) en Rust et en quoi diffère-t-il d'un pointeur ordinaire ?

Bonjour, collègues ! J'ai commencé à étudier Rust et je suis tombé sur le terme "fat pointer" (pointeur gras). Dans les livres, on écrit que c'est "un pointeur avec des métadonnées supplémentaires", mais je n'arrive pas à comprendre à quoi cela sert et où cela est utilisé. Je sais qu'en Rust, il y a des références ordinaires `&T` qui pointent simplement vers des données. Mais voici, par exemple, les slices. J'ai écrit ce code : ```rust fn main() { let arr = [1, 2, 3, 4, 5]; let slice: &[i32] = &arr[1..4]; println!("Longueur de la slice : {}", slice.len()); // Affiche 3 } ``` Ce que je ne comprends pas : comment Rust sait-il que la longueur de la slice est 3, si je ne passe qu'une référence au premier élément ? Un pointeur ordinaire en C/C++ ne stocke que l'adresse, et la longueur doit être passée séparément. Il s'avère que `&[i32]` n'est pas simplement une adresse ? J'ai aussi entendu parler des trait objects, comme `Box`. On dit qu'ils sont aussi des fat pointers. Mais en quoi consiste leur "graisse" ? Car un `Box` ordinaire est simplement un pointeur vers le tas. Qu'y a-t-il de si spécial dans `Box` ? Expliquez, s'il vous plaît.