Also, indexing an array defers to indexing a slice, which uses this implementation that returns another slice.
You would need const generics that could do math and monomorphized independently for every combination of usizes to support it (at least naively/without more magic).
Yes, that's basically the case. In particular, there's only one type that represents 𝓍..𝓎, regardless of the values of 𝓍 and 𝓎: Range<usize>.
Because this doesn't contain any type-level length information, the index operation can't return a type with an embedded length, such as [u8;0], [u8;1], [u8;2], etc. Instead, it uses [u8] which requires the length to be checked at runtime (or at least inside the optimizer).