- A versão estável Rust 1.97.0 altera a forma como símbolos são gerados nos artefatos de compilação e o fluxo de tratamento de avisos de build, podendo ser atualizada com
rustup update stable
- symbol mangling v0 passa a ser o padrão estável, mudando para um esquema de nomes de símbolos específico do Rust, enquanto o método anterior baseado em Itanium ABI caminha para remoção
- O Cargo agora permite controlar avisos com
CARGO_BUILD_WARNINGS em vez de RUSTFLAGS=-Dwarnings, facilitando separar políticas de CI e builds locais entre allow, warn e deny
- O rustc agora mostra a saída do linker mesmo em links bem-sucedidos como aviso
linker_messages, e esse lint atualmente não é afetado pelo grupo de lint warnings
- A biblioteca padrão inclui
Default para RepeatN, Send para std::fs::File em UEFI, métodos de bits para inteiros e NonZero, e a estabilização de char::is_control em contexto const
Atualização do Rust 1.97.0
- Rust 1.97.0 é uma versão estável, e usuários que já instalaram o Rust com
rustup podem atualizar com o comando abaixo
rustup update stable
- Se você não tiver
rustup, pode obtê-lo na página de instalação do rustup no site do Rust
- As mudanças detalhadas estão reunidas em detailed release notes for 1.97.0
- Para participar dos testes de versões futuras, é possível usar os canais beta/nightly com
rustup default beta ou rustup default nightly, e bugs encontrados podem ser reportados no Rust issue tracker
Mudanças no comportamento de compilação e build no stable
-
Ativação padrão do symbol mangling v0
- Quando o Rust compila para arquivos-objeto ou binários, cada item como função ou static precisa ter um symbol globalmente único
- Para evitar conflitos ao linkar diferentes programas Rust juntos, o Rust faz mangling do nome original do item incluindo contexto como caminho do módulo, crate de definição e genéricos
- O mangling antigo era baseado no Itanium ABI, também usado em alguns casos no C++
- O novo método preserva valores de instanciação de parâmetros genéricos e reduz problemas causados pela inconsistência de usar o Itanium ABI apenas em parte, algo que ainda exigia demangling customizado
- Desde o Rust 1.59, era possível selecionar o esquema de mangling específico do Rust com
-Csymbol-mangling-version=v0, e ele passou a ser o padrão no nightly desde novembro de 2025
- No Rust 1.97, esse método se torna o padrão no Rust estável, e o mangling legado só poderá ser ativado no nightly
- O plano atual é remover completamente o mangling legado
- Mais detalhes podem ser vistos no texto anterior switching to v0 mangling on nightly
-
Controle de avisos no Cargo
- Tratar avisos como falha de build em CI é uma prática comum, e antes isso normalmente era feito com
RUSTFLAGS=-Dwarnings
- A partir do Rust 1.97, o Cargo controla diretamente a relação entre avisos e sucesso do build
allow: oculta os avisos
warn: valor padrão, exibe sem falhar
deny: rejeita avisos e faz o build falhar
- Como essa funcionalidade é definida pela configuração do Cargo, ela não invalida o cache de build padrão
- Se você quiser reduzir temporariamente o ruído de avisos enquanto corrige erros após um refactor, pode executar assim
CARGO_BUILD_WARNINGS=allow cargo check
- Em CI, é possível rejeitar avisos definindo
CARGO_BUILD_WARNINGS=deny
- Quando usado com
--keep-going, é possível coletar todos os erros e avisos sem parar no primeiro package que falhar
- Mais detalhes de configuração estão na
build.warnings documentation do Cargo
-
Exibição padrão da saída do linker
- O rustc chama o linker em nome do usuário, e antes ocultava por padrão a saída do linker quando o link era bem-sucedido
- A partir do Rust 1.97, mensagens do linker passam a ser exibidas por padrão, saindo como o seguinte warning lint
warning: linker stderr: ignoring deprecated linker optimization setting '1'
|
= note: `#[warn(linker_messages)]` on by default
- O rustc filtra mensagens comuns do linker identificadas como falso positivo ou comportamento intencional
- Vários defeitos foram corrigidos depois que essa saída deixou de ser ocultada no nightly
- Atualmente,
linker_messages é um lint especial e não é afetado pelo grupo de lint warnings
- É comum que o rustc não consiga controlar com precisão a saída do linker, e essa saída pode aparecer apenas em algumas plataformas
- Se parecer ser uma saída de falso positivo do linker, você pode abrir uma issue
- Para ocultar o aviso, é possível definir o nível do lint como
allow, adicionando a seguinte seção de lints ao Cargo.toml
[lints.rust]
linker_messages = "allow"
APIs estabilizadas
- No Rust 1.97, as seguintes APIs foram estabilizadas no stable
char::is_control, que já era stable, agora também é stable em contexto const
Changelogs relacionados
- As mudanças completas podem ser consultadas nos changelogs de Rust, Cargo e Clippy
1 comentários
Opiniões no Lobste.rs
No Rust 1.97, é uma ótima novidade que o Cargo agora possa controlar a relação entre avisos e sucesso da build
Se os avisos atrapalharem enquanto você corrige erros depois de um refactor, dá para ocultá-los temporariamente com
CARGO_BUILD_WARNINGS=allow cargo check, e no CI dá para tratar avisos como falha comCARGO_BUILD_WARNINGS=deny. Se usado junto com--keep-going, é possível reunir todos os erros e avisos sem parar no primeiro pacote que falharTalvez seja melhor adiar o upgrade por enquanto. Parece haver um bug de miscompilation
https://github.com/rust-lang/rust/issues/159035
https://github.com/llvm/llvm-project/pull/208683
Legal. Fico curioso se alguém aqui poderia resumir o andamento da implementação de pattern types
Infelizmente, o never type não foi estabilizado desta vez também. Fico no aguardo do próximo release