Boas Práticas para Coleções & Iteradores
Como Usar Esta Lista
- Faça o profiling antes de micro-otimizar iteradores.
- Habilite clippy
needless_collecteiter_overeager_cloned.
A - Escolha da Coleção
- Use
Veccomo padrão para sequências. Use contêineres especializados quando medido e necessário. - Use
HashMappara velocidade,BTreeMappara ordem/intervalo. Documente a escolha. - Evite
LinkedLista menos que comprovado.VecDequegeralmente é melhor. - Reserve capacidade quando o tamanho for conhecido.
with_capacityreduz realocações. - Use a API
entrypara atualizações de mapa. Evite busca dupla.
B - Iteradores
- Prefira iteradores a loops de índice manuais. Use
enumeratequando o índice for necessário. - Evite
collectdesnecessário entre adaptadores. Encadeie preguiçosamente. - Use
try_collect/Resultcollect para mapas falíveis. Interrompa erros cedo. - Empreste com
iter()a menos que a propriedade seja necessária.into_iterconsome. - Limite iteradores infinitos com
take. Evite travamentos.
C - Alocação
- Reutilize buffers em loops intensivos. Use
clear+ reutilizeVec. - Prefira chaves
&strapenas quando os tempos de vida permitirem. ChavesStringde propriedade são comuns. - Considere
SmallVecpara listas geralmente pequenas. Menos acessos ao heap. - Faça o profiling do alocador em caminhos intensivos. Use
dhat,heaptrack. - Não use
shrink_to_fitprematuramente em todos os lugares. Apenas após picos.
D - Correção
- Não mutate
vecdurante a iteração não adaptadora. Useretain,drain. - Trate
reduce/foldvazios. Forneça uma semente ouOption. - Documente os requisitos de estabilidade da ordenação.
sortvssort_unstable. - Teste a igualdade independentemente da ordem do mapa. Ordene as chaves ou use
BTreeMapnos testes. - Use
collecttipado explicitamente em cadeias complexas. Ajude a inferência.
FAQs
Quando usar rayon?
Dados grandes e intensivos em CPU para paralelismo.itertools?
Adaptadores extras - considere o custo de dependência.ahash?
Mapas mais rápidos - avalie os trade-offs de segurança.sort em produção?
Unstable é frequentemente mais rápido - documente.smallstr?
Strings inline para chaves de mapa.no_std?
hashbrown + alloc.serde maps?
Objeto vs vetor de pares.bench?
criterion: iterador vs loop.polars?
Colunar quando a análise de dados escala.próximo?
Closures que alimentam iteradores.Relacionados
- Noções Básicas de Coleções
- Adaptadores de Iterador
- API Entry e Atualizações In-Place
- Boas Práticas para Closures
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.