Ferrugem 1.96.0

O comunicado foi publicado. Ferrugem 1.96.0 — a versão estável mais recente da linguagem de programação Rust. A atualização já foi lançada. 28 Maio 2026 anosEle pode ser instalado usando o comando padrão `rustup update stable`. As principais mudanças incluem novos tipos de intervalo em `core::range`, estabilização de macros de correspondência de padrões, aprimoramento do comportamento de compilação do WebAssembly e correções para duas vulnerabilidades no Cargo.

Mudanças importantes

  • Novos tipos de intervalo core::range::Range*.
    Novos tipos de intervalo foram estabilizados na biblioteca padrão: `core::range::Range`, `RangeFrom`, `RangeInclusive` e seus iteradores associados. Ao contrário dos tipos antigos de `core::ops`, os novos intervalos não implementam `Iterator` diretamente, mas são convertidos em um iterador por meio de `IntoIterator`. Isso permite que esses intervalos sejam copiáveis, o que é conveniente, por exemplo, ao armazenar um intervalo como um campo de estrutura. A sintaxe `0..1` atualmente cria os tipos de intervalo antigos, mas está previsto migrá-la para os novos tipos em uma versão futura da linguagem.

  • Adicionadas as funções assert_matches! e debug_assert_matches!.
    Novas macros permitem verificar se um valor corresponde a um determinado padrão. O conceito é semelhante ao de `assert!(matches!(…))`, mas, em caso de erro, uma representação de depuração do valor é impressa, simplificando o diagnóstico. Essas macros não foram adicionadas ao Prelude para evitar conflitos com crates populares de terceiros, portanto, devem ser importadas explicitamente do núcleo (core) ou da biblioteca padrão (std).

  • Alterou o comportamento dos destinos WebAssembly.
    O Rust não passa mais a opção `--allow-undefined` para o linker em compilações WebAssembly. Símbolos indefinidos agora são tratados como erros durante a vinculação, em vez de serem convertidos automaticamente em importações do módulo "env". Isso deve detectar erros de compilação e nomes de símbolos inválidos mais cedo. O comportamento antigo pode ser revertido, se necessário, usando `RUSTFLAGS=-Clink-arg=--allow-undefined` ou especificando explicitamente o módulo wasm importado usando `#[link(wasm_import_module = "env")]`.

  • O Cargo recebeu correções de segurança.
    O Rust 1.96.0 corrige duas vulnerabilidades que afetam usuários de registros de terceiros. CVE-2026-5223 Relacionado ao tratamento de links simbólicos em arquivos tar de crates: um pacote malicioso de um registro de terceiros poderia sobrescrever o cache de outro pacote do mesmo registro. A partir do Rust 1.96.0, o Cargo rejeita arquivos de crates que contenham links simbólicos. CVE-2026-5222 Este problema está relacionado à normalização de URLs no registro esparso e, em raras circunstâncias, pode resultar no envio de um token Cargo para um registro malicioso. De acordo com a equipe do Rust, os usuários do crates.io não são afetados por esses problemas.

  • Mudanças na linguagem.
    O lançamento inclui: Diversas correções e melhorias menores: Permitido passar metavariáveis ​​expr de macros para cfg, corrigido o erro de conversão de tipo em expressões de tupla, corrigidos casos raros de dicas de inferência de tipo incorretas para argumentos de função, adicionado suporte para registradores vetoriais s390x em assembly inline e reativada a permissão para constantes ManuallyDrop como templates — isso corrige uma regressão introduzida no Rust 1.94.0.

  • Alterações no compilador e nas plataformas.
    Para LinuxO suporte para relaxamento de links foi habilitado para alvos LoongArch — uma otimização de vinculação que simplifica algumas transições e chamadas após a implantação do código. Para riscv64gc-unknown-fuchsia, a configuração base foi atualizada para o perfil RVA22 com suporte para extensões vetoriais.

  • Atualizações da biblioteca padrão.
    Foi adicionado suporte para iteração em intervalos de inteiros não nulos. O tratamento preguiçoso de endereços de host em SGX via ToSocketAddr também foi corrigido, e a definição de memória "legível/gravável" foi esclarecida na documentação e nos contratos internos: o ponteiro nulo foi removido da definição geral e as exceções agora são especificadas separadamente para métodos específicos.

  • APIs estabilizadas.
    Entre as interfaces estabilizadas estão assert_matches!, debug_assert_matches!, implementações de From para AssertUnwindSafe , LazyCell e LazyLock , bem como novos tipos de intervalo e iteradores de core::range, incluindo Range, RangeFrom, RangeToInclusive e seus iteradores.

  • Carga: Alterações nas dependências e na documentação.
    Agora, uma dependência pode especificar tanto um repositório Git quanto um registro alternativo: a versão do Git será usada localmente e a versão do registro será usada durante a publicação, de forma semelhante ao comportamento com o crates.io. Também foi adicionado suporte para target.'cfg(..)'.rustdocflags na configuração do Cargo.

  • O Rustdoc agora lida com a documentação de forma mais precisa.
    As notas de API obsoletas agora são exibidas como documentação normal, sem o processamento especial anterior por meio de `white-space: pre-wrap`. Além disso, o rustdoc não verifica mais a presença de exemplos de código em `missing_doc_code_examples` dentro de `impl`, e os métodos e funções associadas agora são separados na barra lateral da documentação.

  • Possíveis incompatibilidades.
    Esta versão contém diversas alterações que podem aparecer em código não padrão: o layout de alguns enums #[repr(Int)] foi corrigido em casos extremos e algumas conversões de tamanho desnecessárias em Pin foram desativadas. Agora, as compilações WebAssembly falham em símbolos indefinidos, o atributo #![reexport_test_harness_main], que havia sido estabilizado acidentalmente, foi novamente implementado de forma restritiva, a opção -Csoft-float foi removida e a versão mínima do LLVM externo foi aumentada para 21. Para AVR, o tipo c_double foi alterado para f32, já que os doubles em C são de 32 bits por padrão nesses sistemas.

Fonte: linux.org.ru

Compre hospedagem confiável para sites com proteção DDoS, servidores VPS VDS 🔥 Compre hospedagem de sites confiável com proteção contra DDoS, servidores VPS/VDS | ProHoster