Avatar ·

¿Qué es un "fat pointer" (puntero graso) en Rust y para qué sirve?

¡Hola, colegas! Empecé a estudiar Rust recientemente y me encontré con el término "fat pointer" (puntero graso). En la documentación oficial y en los foros aparece esta palabra, pero las definiciones son vagas. Entiendo que en Rust hay punteros normales (por ejemplo, `*const T` o referencias `&T`), que simplemente almacenan una dirección en memoria. Pero, ¿qué es un puntero "graso"? ¿En qué se diferencia de uno normal? He oído que está relacionado con traits (`dyn Trait`) y slices (`&[u8]`). Por ejemplo, cuando escribo: ```rust let slice: &[i32] = &[1, 2, 3]; ``` Sé que `slice` es una referencia a un array. Pero dicen que es un fat pointer. ¿Por qué? ¿Acaso no es solo una referencia? O cuando uso un trait object: ```rust fn print_debug(item: &dyn Debug) { println!("{:?}", item); } ``` Aquí `item` ¿también es un fat pointer? ¿Cuánta memoria ocupa? ¿Y cómo sabe Rust qué método llamar si el tipo solo se conoce en tiempo de ejecución? Explíquenme, por favor, de forma sencilla, con ejemplos. Me parece que me perdí algo.