Funny Benchmark with Julia (no longer) at the bottom

Not really, no. The reason MVector needed to do those pointer calls is that we don’t have a way of mutating tuples. i.e. it’s a difference between

mutable struct V1{N, T}
    v::NTuple{N, T}
end

and

mutable struct V2{N, T}
    v1::T
    v2::T
    v3::T
    ...
    vN::T
end

With V1 we can only replace the entire Tuple at a time, not the individual elements of tuple without resorting to pointer tricks. We unfortunately can’t make the second one for arbitrary sizes, but if we could that’s how MVector would be implemented.