diff options
author | Aleksey Kladov <[email protected]> | 2020-10-15 11:21:38 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-10-15 11:21:38 +0100 |
commit | dedfaa384408b266c461fea45fee936989bb151b (patch) | |
tree | 626a8f27624110b9de1d75bc3e14c3d9216b5416 | |
parent | 3a38554f86e5e1b41b111ed8ccc688e84a9d5ae4 (diff) |
Cleanup alloc advice
-rw-r--r-- | docs/dev/style.md | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/docs/dev/style.md b/docs/dev/style.md index 435de63e3..20f1b6253 100644 --- a/docs/dev/style.md +++ b/docs/dev/style.md | |||
@@ -248,6 +248,8 @@ fn frbonicate(f: impl AsRef<Path>) { | |||
248 | 248 | ||
249 | # Premature Pessimization | 249 | # Premature Pessimization |
250 | 250 | ||
251 | ## Avoid Allocations | ||
252 | |||
251 | Avoid writing code which is slower than it needs to be. | 253 | Avoid writing code which is slower than it needs to be. |
252 | Don't allocate a `Vec` where an iterator would do, don't allocate strings needlessly. | 254 | Don't allocate a `Vec` where an iterator would do, don't allocate strings needlessly. |
253 | 255 | ||
@@ -267,6 +269,8 @@ if words.len() != 2 { | |||
267 | } | 269 | } |
268 | ``` | 270 | ``` |
269 | 271 | ||
272 | ## Push Allocations to the Call Site | ||
273 | |||
270 | If allocation is inevitable, let the caller allocate the resource: | 274 | If allocation is inevitable, let the caller allocate the resource: |
271 | 275 | ||
272 | ```rust | 276 | ```rust |
@@ -282,6 +286,9 @@ fn frobnicate(s: &str) { | |||
282 | } | 286 | } |
283 | ``` | 287 | ``` |
284 | 288 | ||
289 | This is better because it reveals the costs. | ||
290 | It is also more efficient when the caller already owns the allocation. | ||
291 | |||
285 | ## Collection types | 292 | ## Collection types |
286 | 293 | ||
287 | Prefer `rustc_hash::FxHashMap` and `rustc_hash::FxHashSet` instead of the ones in `std::collections`. | 294 | Prefer `rustc_hash::FxHashMap` and `rustc_hash::FxHashSet` instead of the ones in `std::collections`. |