What the OP’s request for .0-like tuple-field-access notation for arrays shows is that there should be a way to view an array as a struct (and maybe also the other way around, when the tuple is obviously homogeneous but also with the good #[repr].
I’d imagine an (ideally no-op) function/macro to transform a [T; n] into a (T, ..., T) (with the right #[repr]) so that statically disjoint mutable access is possible, only to change ot back afterwards to enable array-only patterns like iteration.
Another option/pattern would be to have the following method for [T; n] forall n [e.g. n=3]:
fn with_tuple_view<R> (
self: &mut [T; 3],
f: impl FnOnce(&mut (T, T, T)) -> R,
) -> R;
The idea being that, provided that transmuting &mut [T; 3] into a &mut (T, T, T) is sound (I don’t know the #[repr] stuff or what the compiler constraints are regarding tuples (c.f. above comment about tuple’s order being not having to be well-defined (e.g. when optimizing for size))), this API would allow to do such cheap transmutation wihtin a safe API that allows to go back and forth.
EDIT: forall n being, at the moment, something like forall n < 128, since we don’t yet have type-level integers