1 pontos por GN⁺ 4 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • 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

Changelogs relacionados

1 comentários

 
GN⁺ 4 시간 전
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 com CARGO_BUILD_WARNINGS=deny. Se usado junto com --keep-going, é possível reunir todos os erros e avisos sem parar no primeiro pacote que falhar

  • Talvez seja melhor adiar o upgrade por enquanto. Parece haver um bug de miscompilation
    https://github.com/rust-lang/rust/issues/159035

    • Curiosamente, essa miscompilation já existia havia 10 releases, mas antes fazia uma leitura ligeiramente fora dos limites, e agora parece ler muito mais além, causando um segfault
    • Era um bug do LLVM. Felizmente, a correção parece ser bastante direta
      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

    • A piada de que “o never type recebeu esse nome por causa da data de estabilização” já está quase perdendo a graça
    • Um dos membros da equipe do compilador apresentou sobre o never type na RustWeek. Pode valer a pena assistir para ter uma noção melhor das perspectivas de estabilização: https://www.youtube.com/watch?v=3jM4cnEVrLc