Referência de Problema / Solução
Mapa rápido de problemas recorrentes para soluções idiomáticas em Rust e artigos mais aprofundados.
Receita
| Problema | Solução idiomática |
|---|---|
| Análise de argumentos de linha de comando | clap 4 derive |
| API HTTP | Axum 0.8 + tower |
| Acesso ao banco de dados | sqlx 0.8 com pool |
| JSON | serde 1.0 |
| Runtime assíncrono | Tokio 1.x |
Quando usar isso: "Como faço X em Rust?" durante o design ou revisão de código.
Exemplo de Trabalho
Propriedade e Empréstimos (Ownership and Borrows)
| Problema | Solução | Artigo |
|---|---|---|
| Luta com o borrow checker | Reestruturar, Arc, lifetimes | Combatendo o Borrow Checker |
| Dados compartilhados somente leitura | Arc<T> | Rc e Arc |
| Mutabilidade interna | RefCell / Mutex | Padrões de Mutabilidade Interna |
Async e I/O
| Problema | Solução | Artigo |
|---|---|---|
| Bloqueio em async | spawn_blocking | 30 Regras Async |
| Cliente HTTP | reqwest + cliente compartilhado | Clientes HTTP |
| Timeouts | tokio::time::timeout | Retentativas e Timeouts |
Dados e Performance
| Problema | Solução | Artigo |
|---|---|---|
| Análise de dados tabular | Polars 0.46+ lazy | Polars |
Muitas cópias (clones) | borrow/Cow | Evitando Clones |
| Binário de release lento | LTO, features trim | Ajuste de Release |
Mergulho Profundo
Adicione linhas específicas da equipe à wiki interna: autenticação (crate JWT), configuração (config + serde), observabilidade (tracing + OpenTelemetry).
Armadilhas (Gotchas)
- Copiar padrões Java - Modelos anêmicos com ORM pesado. Correção: tipos de domínio + repositórios explícitos.
- Configuração em string (
Stringly) - use structs de configuração tipadas. - Singletons globais -
OnceLockou estado injetado. - Cultura do
unwrap- veja as regras de erro. - Modelo de concorrência errado - CPU em thread pool, I/O em async.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Esta referência | Roteamento rápido | Substituto para aprendizado profundo |
| ADR | Fork significativo | Cada pequena escolha |
| Busca por IA | Exploração | Autoridade única |
FAQs
Como estender a tabela?
Adicione linhas em um PR quando a mesma pergunta for feita três vezes no chat da equipe.
Escolha de ORM?
sqlx para controle; SeaORM/Diesel conforme preferência da equipe - linkar artigos de banco de dados.
CLI?
clap 4 derive + anyhow no main.
Testes?
nextest + tokio test + sqlx test fixtures.
Autenticação?
Artigos JWT/oauth na seção api-auth-security.
Logging?
tracing JSON estruturado; tracing-subscriber env filter.
Métricas?
Crate metrics + endpoint de scrape Prometheus.
Deploy?
Docker mínimo + cargo build --release estático ou distroless.
FFI?
Artigos bindgen/cbindgen na seção systems-ffi.
WASM?
Fluxo wasm-bindgen + wasm-pack na seção webassembly.
Relacionados
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+.