Boas Práticas de Ponteiros Inteligentes
Como Usar Esta Lista
- Prefira referências/propriedade; escale para ponteiros inteligentes com justificativa.
- Revise a proliferação de
Arc<Mutex>em código concorrente.
A - Seleção
- Prefira
&T/Tde propriedade antes deRc/Arc. Propriedade mais simples. - Use
Boxpara proprietário único na heap ou objetos de trait. Não é o padrão para todos os dados na heap. -
Rcapenas para single-thread;Arcpara threads. O compilador impõeSendonde necessário. -
RefCellapenas para mutabilidade interior em single-thread.Mutexentre threads. -
Cowpara texto emprestado que pode ser mutado. Evite parâmetrosStringgratuitos.
B - Concorrência
- Prefira canais em vez de
Arc<Mutex>quando possível. Fluxo de dados mais claro. - Use atômicos para contadores simples. Nem sempre
Mutex<u64>. - Não mantenha guardas
Mutexpadrão (std::sync::Mutex) após.await. Usetokio::sync. - Trate mutexes corrompidos explicitamente em produção. Política de log e recuperação.
- Documente a ordem de bloqueio se houver múltiplos mutexes. Prevenção de deadlock.
C - Ciclos e Memória
- Quebre ciclos de
Rccom arestas de retornoWeak. Árvores:Weakpai. - Evite caches
Rcde longa duração sem expurgo. Crescimento de memória. - Analise os caminhos críticos de
Arc::clone. Custo de incremento atômico. - Use
Weak::upgradetratandoNone. O proprietário pode ter sido removido. - Considere arena + índices em vez de grafos
Rc<RefCell>. Desempenho.
D - Design de API
- Exponha
&strnãoRc<str>a menos que o compartilhamento seja necessário. Simplicidade da API. - Oculte
RefCelldentro do tipo; não vaze guardas. Encapsulamento. - Implemente
Derefem vez de herança para newtypes. Acesso transparente. -
Dropcustomizado documenta invariantes de segurança. Especialmente FFI. - Teste a ordem de
drope RAII com flags em testes unitários.
FAQs
Arc sempre para async?
Estado compartilhado sim; não todo valor.Rc em wasm?
Single-thread ok.Pin quando?
Futures autorreferenciais.Erro de Box?
Limite da aplicação ok.lazy_static?
Padrões estáticos `OnceLock`/`Rc`/`Arc`.smallvec com Rc?
Preocupações diferentes.RefCell com miri?
Detecta duplo empréstimo.serde com Rc?
Serializa o interior.perf do upgrade?
Atômico barato em Arc.próximo?
Manipulação de strings e texto.Relacionados
- Noções Básicas de Ponteiros Inteligentes
- Boas Práticas de Propriedade
- Boas Práticas de Concorrência
- Combatendo o Borrow Checker
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+.