Re: [PATCH] rust/alloc: add Vec::into_boxed_slice()

From: Danilo Krummrich

Date: Thu Mar 26 2026 - 07:16:26 EST


On Thu Mar 26, 2026 at 10:56 AM CET, David Rheinsberg wrote:
> Add `Vec::into_boxed_slice()` similar to
> `std::vec::Vec::into_boxed_slice()` [1].

Do you have a user for this?

> + /// Converts the vector into [`Box<[T], A>`].
> + ///
> + /// Excess capacity is retained in the allocation, but lost until the box
> + /// is dropped.
> + pub fn into_boxed_slice(self) -> Box<[T], A> {
> + let (buf, len, _cap) = self.into_raw_parts();
> + let slice = ptr::slice_from_raw_parts_mut(buf, len);
> +
> + // SAFETY:
> + // - `slice` has been allocated with `A`
> + // - `slice` is suitably aligned
> + // - `slice` has at least a length of `len`
> + // - all elements within `slice` are initialized values of `T`
> + // - `len` does not exceed `isize::MAX`
> + unsafe { Box::from_raw(slice) }

Box::from_raw() is missing the safety requirement that the allocation made with
A must have been made for Layout::for_value::<T>(), as this is what we assume in
the destructor.

For this function we should call A::realloc() and document that
into_boxed_slice() may shrink the backing allocation.

Additionally, can you please add a doc-test?

Thanks,
Danilo