Description
We should evaluate removing the Alloc::alloc_array
and Alloc::dealloc_array
APIs.
The main issue I have with these APIs is that they too easily allow creating zero-sized allocations if either T is a ZST, or the array length is zero. They also feel redundant and confusing for the Alloc
trait, which is already quite complicated, e.g., Do I have to allocate / deallocate arrays with these? Can I mix match, e.g., Alloc::alloc_array
with Alloc::dealloc
and vice-versa? etc..
Ideally, Alloc
and GlobalAlloc
would "converge" some day, e.g., such that you can just implement Alloc
for a #[global_allocator]
and that's it, instead of having to implement multiple traits. Having generic methods in Alloc
does make that a bit harder due to how #[global_allocator]
is implemented internally and the constraints on that.
Layout
already has an unstable Layout::array<T>(n: usize)
method that can be used instead, and that feels like a much better place to put this functionality anyways. So just removing them, at least for the time being, sounds appealing to me. We could always add these later in a backwards compatible way anyways, but we don't have to have them now.
EDIT: as @TimDiekmann mentions all of this applies to alloc_one
/dealloc_one
as well.