Was ist ein "Fat Pointer" in Rust und wie unterscheidet er sich von einem normalen?
Hallo Kollegen! Ich habe angefangen, Rust zu lernen und bin auf den Begriff "Fat Pointer" gestoßen. In Büchern steht, dass es sich um einen "Pointer mit zusätzlichen Metainformationen" handelt, aber ich kann nicht verstehen, wozu das dient und wo es verwendet wird.
Ich weiß, dass es in Rust normale Referenzen `&T` gibt, die einfach auf Daten zeigen. Aber zum Beispiel Slices. Ich habe diesen Code geschrieben:
```rust
fn main() {
let arr = [1, 2, 3, 4, 5];
let slice: &[i32] = &arr[1..4];
println!("Länge des Slices: {}", slice.len()); // Gibt 3 aus
}
```
Mir ist unklar: Wie erfährt Rust, dass die Länge des Slices 3 ist, wenn ich nur eine Referenz auf das erste Element übergebe? Ein normaler Pointer in C/C++ speichert nur die Adresse, und die Länge muss separat übergeben werden. Heißt das, dass `&[i32]` nicht einfach eine Adresse ist?
Außerdem habe ich von Trait-Objekten gehört, wie z.B.