Vec::into_boxed_slice
no-excess guarantee regressed in 1.77.0 #125941
Description
#36284 asked for clarity about how to use Box<[T]>::into_raw
. The core issue was that the documentation for Vec::into_boxed_slice
said it reduced excess capacity in a way that was equivalent to calling Vec::shrink_to_fit
. However, the latter makes no guarantees about there being no excess capacity afterwards. The resolution of #36284 (specifically in #36284 (comment)) was for Vec::into_boxed_slice
to itself guarantee that it results in an exact allocation with no excess capacity, and to decouple it from Vec::shrink_to_fit
. The documentation was updated to reflect this guarantee in #44960.
#120110 reintroduced the equivalence to Vec::shrink_to_fit
, and removed the guarantee by removing this language:
/// If `v` has excess capacity, its items will be moved into a
/// newly-allocated buffer with exactly the right capacity.
I note however that the PR did not update the example, which still appears to encode the intention of the guarantee (it checks the post-shrinking capacity is exactly the length, vs the corresponding example in Vec::shrink_to_fit
which checks the post-shrinking capacity is at least the length).
As such, it is unclear whether this guarantee regression was intentional or not. But as things currently stand, we are back in a position where Box<[T]>::into_raw
is functionally useless.
Version with regression
#120110 was merged during the 1.77.0 cycle.
Activity