For what it’s worth, I would expect a function to be able to take &out [T], initialize part of it, and return a (&mut [T], &out [T]) pair representing the initialized and uninitialized parts…
Except it wouldn’t be obvious that they form a continuous slice, so you still need something like Vec to properly manage a buffer.
Hmm, my &move T design (which isn’t really public anywhere because it’s too complex to describe or finalize easily. it has also fluctuated a lot) allows for some generalization:
&'a move T = Own<T, Stack<'a>>
Box<T> = Own<T, Heap>
Box<T, A> = Own<T, A>
Vec<T, A> = Own<[T], WithCapacity<A>>
Vec<T, Stack<'a>> = Own<[T], WithCapacity<Stack<'a>>>
That last type, a “stack vector” with fixed capacity (but really, it could be borrowed from anywhere, including a &'a mut Vec) is what OutBuf seems to be aiming for.
It should be possible to create one of those from an &'a out [T] (which I like to call Slot<[T], Stack<'a>>) - assuming the respective language features were in place.