-
Notifications
You must be signed in to change notification settings - Fork 13.5k
Add guarantee that Vec::default() does not alloc #100872
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Conversation
Currently `Vec::new()` is guaranteed to not allocate until elements are pushed onto the `Vec`, but such a guarantee is missing for `Vec`'s implementation of `Default::default`. This adds such a guarantee for `Vec::default()` to the API reference.
Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @joshtriplett (or someone else) soon. Please see the contribution instructions for more information. |
Hey! It looks like you've submitted a new PR for the library teams! If this PR contains changes to any Examples of
|
@rustbot label +T-libs-api -T-libs |
LGTM! Thanks for the PR. I am going to approve this (even though I am a compiler contributor) because I don't believe that such a guarantee would be unwanted as it would be a performance regression if it actually allocated. @bors r+ rollup=always |
Wouldn't it maybe make more sense to just guarantee that it always matches |
I considered that too. It's a slightly stronger guarantee and not sure if it's needed. Maybe |
…=fee1-dead Add guarantee that Vec::default() does not alloc Currently `Vec::new()` is guaranteed to not allocate until elements are pushed onto the `Vec`, but such a guarantee is missing for `Vec`'s implementation of `Default::default`. This adds such a guarantee for `Vec::default()` to the API reference. See also [this discussion on URLO](https://users.rust-lang.org/t/guarantee-that-vec-default-does-not-allocate/79903).
Rollup of 8 pull requests Successful merges: - rust-lang#98200 (Expand potential inner `Or` pattern for THIR) - rust-lang#99770 (Make some const prop mir-opt tests `unit-test`s) - rust-lang#99957 (Rework Ipv6Addr::is_global to check for global reachability rather than global scope - rebase) - rust-lang#100331 (Guarantee `try_reserve` preserves the contents on error) - rust-lang#100336 (Fix two const_trait_impl issues) - rust-lang#100713 (Convert diagnostics in parser/expr to SessionDiagnostic) - rust-lang#100820 (Use pointer `is_aligned*` methods) - rust-lang#100872 (Add guarantee that Vec::default() does not alloc) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
@rust-lang/libs-api I'm confident this is uncontroversial, but technically it's a new guarantee. Are you fine with this going in via just an |
This is fine without FCP, |
Currently
Vec::new()
is guaranteed to not allocate until elements are pushed onto theVec
, but such a guarantee is missing forVec
's implementation ofDefault::default
.This adds such a guarantee for
Vec::default()
to the API reference.See also this discussion on URLO.