Boas Práticas de Strings
Como Usar Esta Lista
- Revise APIs que aceitam
Stringem todos os lugares. - Audite suposições de UTF-8 antes de trabalhar com Windows/caminhos.
A - Tipos de API
- Aceite
&str(ouimpl AsRef<str>) para entradas somente leitura. Flexibilidade para o chamador. - Retorne
Stringquando o chamador for o proprietário do resultado. Empreste apenas quando estiver vinculado ao tempo de vida da entrada. - Use
Cow<str>quando a mutação for rara. Evite alocações forçadas. - Use
Path/PathBufpara caminhos do sistema de arquivos. Não caminhosString. - Use
OsStringao preservar bytes do SO não-UTF-8. Variáveis de ambiente do Windows.
B - Correção UTF-8
- Nunca indexe
strpor byte semis_char_boundary. Previne pânicos. - Use
chars()para escalares Unicode; grafemas para UI.unicode-segmentation. - Valide bytes externos com
from_utf8. Não useunwrapem produção. - Não assuma que
len()é a contagem de caracteres. Documente o comprimento em bytes. - Normalize ao comparar texto do usuário (NFC).
unicode-normalizationse necessário.
C - Desempenho
- Pré-aloque com
with_capacityquando o tamanho for conhecido. Loops de junção/construção. - Prefira
push_strem vez de+em loops.+move o operando esquerdo. - Reutilize buffers
Stringcomclear. Caminhos de formatação "quentes". - Compile regex uma vez (
LazyLock). Não por linha. - Evite
to_string/cloneem loops apertados. Perfis comdhat.
D - FFI e Segurança
-
CStringrejeita NUL interno. Valide antes do FFI. - Documente o tempo de vida dos ponteiros passados para C. Quem libera?
- Redija segredos em logs
Display/Debug. Implementações personalizadas. - Valide a entrada de análise; não use
unwrapem dados do usuário. RetorneResult. - Sanitize antes da invocação do shell. Não apenas regex.
FAQs
Parâmetro String vs &str?
&str é o padrão; String quando se assume a propriedade.Arc?
Texto imutável compartilhado.API de bytes?
Protocolo binário, não str.serde pular vazio?
skip_serializing_if str is_empty.clippy to_string?
unnecessary_to_owned.strings inline?
smallstr para chaves de cache.tempo de compilação fmt?
format_args! às vezes.i18n?
Gettext externo - std não tem locais.sqlx strings?
vincule referências str.próximo?
Organização de módulos e crates.Relacionado
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+.