Two built-in ways to group values: the tuple (mixed types, fixed count) and the array (one type, fixed count). Both live on the stack, both have a size known at compile time.
Tuples
A tuple bundles a fixed number of values of possibly different types: (i32, f64, char). You destructure it with a let pattern, or reach a field by position with .0, .1. Tuples shine for returning multiple values from a function without inventing a struct for a one-off.
Arrays
An array is a fixed-length run of one type: [i32; 4] is exactly four i32s, stack-allocated, length baked into the type. Indexing is bounds-checked — go past the end and Rust panics rather than reading stray memory (the C buffer-overrun, eliminated). For a sequence that grows, you want a Vec, which the Collections track covers.
[T; N] has a compile-time length and lives on the stack. A Vec grows at runtime and lives on the heap. Use an array when the size is truly fixed and known; reach for Vec the moment it needs to grow.Destructuring is everywhere
Pattern-destructuring a tuple in a let is your first taste of Rust's pattern matching, which runs through the whole language. let (x, y) = point; pulls both values out at once — you'll see this same shape in match, function parameters, and if let later.