Clippy lints / Performance
Clippy lint · Performance · checked with Clippy 0.1.99
clippy::box_collection: Checks for usage of Box<T> where T is a collection such as Vec anywhere in the code. Check the Box documentation for more information
What it meansChecks for usage of Box<T> where T is a collection such as Vec anywhere in the code. Check the Box documentation for more information. It is in the performance group and warns by default.
Does it matter?
Collections already keeps their contents in a separate area on the heap. So if you Box them, you just add another level of indirection without any benefit whatsoever.
Code that could be written to run faster. Warns by default.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
struct X {
values: Box<Vec<Foo>>,
}
Write this instead
struct X {
values: Vec<Foo>,
}
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::box_collection)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
box_collection = "allow"One run
cargo clippy -- -A clippy::box-collectionThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Settings in clippy.toml
avoid-breaking-exported-api: Suppress lints whenever the suggested change would cause breakage for other crates.
Clippy's own documentation
What it does
Checks for usage of Box<T> where T is a collection such as Vec anywhere in the code.
Check the Box documentation for more information.
Why is this bad?
Collections already keeps their contents in a separate area on
the heap. So if you Box them, you just add another level of indirection
without any benefit whatsoever.
Example
struct X {
values: Box<Vec<Foo>>,
}
Better:
struct X {
values: Vec<Foo>,
}
Past names
- box_vec
Configuration
-
avoid-breaking-exported-api: Suppress lints whenever the suggested change would cause breakage for other crates.(default:
true)
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- large_enum_variantlarge size difference between variants
- boxed_locallocal variable doesn't need to be boxed here
- cloned_ref_to_slice_refsChecks for slice references with cloned references such as &[f.clone()]
- cmp_ownedChecks for conversions to owned values just for the sake of a comparison
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::large_enum_variantlarge size difference between variantsRead it next →Did this answer your question?