Publicada a versão Rust 1.96.0 — da mais recente versão estável da linguagem de programação Rust. A atualização foi lançada 28 de maio de 2026; você pode instalá-la com o comando padrão rustup update stable. As principais mudanças incluem novos tipos de intervalos em core::range, estabilização de macros para verificação de correspondência de padrões, rigidez no comportamento de compilações WebAssembly e correções de duas vulnerabilidades no Cargo.
Principais mudanças
Novos tipos de intervalos core::range::Range*.
Na biblioteca padrão, novas variações de intervalos foram estabilizadas: core::range::Range, RangeFrom, RangeInclusive e iteradores relacionados. Diferente dos tipos antigos de core::ops, os novos intervalos não implementam Iterator diretamente, mas são convertidos em iteradores através de IntoIterator. Isso permite que tais intervalos sejam Copy, o que é conveniente, por exemplo, ao armazenar um intervalo como um campo de estrutura. A sintaxe como 0..1 ainda cria os tipos antigos de intervalos, mas em uma futura versão da linguagem, está planejado que seja convertida para os novos tipos.Adicionados assert_matches! e debug_assert_matches!.
As novas macros permitem verificar se um valor corresponde a um determinado padrão. Em essência, isso é semelhante a assert!(matches!(…)), mas em caso de erro, a representação de depuração do valor é exibida, facilitando o diagnóstico. As macros não foram adicionadas ao prelude para evitar conflitos com crates populares de terceiros, portanto, precisam ser importadas explicitamente de core ou std.Comportamento das metas WebAssembly foi alterado.
Rust não transmite mais ao linker —allow-undefined para compilações WebAssembly. Agora, símbolos indefinidos durante a vinculação são considerados um erro, em vez de serem automaticamente convertidos em importações do módulo "env". Isso deve identificar erros de compilação e nomes de símbolos incorretos mais cedo. O comportamento antigo pode ser restaurado, se necessário, através de RUSTFLAGS=-Clink-arg=—allow-undefined ou especificando explicitamente o módulo wasm importado através de #[link(wasm_import_module = "env")].O Cargo recebeu correções de segurança.
Mudanças na linguagem.
A versão inclui diversas correções pontuais e expansões: agora é permitida a passagem de variáveis meta-expressões expr em cfg, a conversão do tipo never em expressões-tuplas foi ajustada, corrigidos casos raros de sugestões incorretas de tipos de saída para argumentos de funções, suporte adicionado a registradores vetoriais s390x em assembly inline, além de permitir novamente o uso de constantes do tipo ManuallyDrop como templates — isso corrige uma regressão que surgiu no Rust 1.94.0.Mudanças no compilador e nas plataformas.
Para alvos Linux no LoongArch, suporte à relaxação de links foi incluído — uma otimização de vinculação que simplifica algumas transições e chamadas após a colocação do código. Para riscv64gc-unknown-fuchsia, a configuração básica foi atualizada para o perfil RVA22 com suporte para extensões vetoriais.Atualizações da biblioteca padrão.
Adicionado suporte à iteração sobre intervalos de números inteiros NonZero. A manipulação de endereços de host em SGX via ToSocketAddr foi corrigida, e na documentação e contratos internos a definição de memória "permitida para leitura/escrita" foi especificada: ponteiro nulo excluído da definição geral, enquanto exceções 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, além de novos tipos e iteradores de intervalos de core::range, incluindo Range, RangeFrom, RangeToInclusive e seus iteradores.Cargo: alterações para dependências e documentação.
Agora, uma dependência pode indicar simultaneamente um repositório Git e um registro alternativo: a versão Git será usada localmente, enquanto na publicação, será usada a versão do registro, semelhante ao comportamento com crates.io. Também foi adicionado suporte para target.’cfg(..)’.rustdocflags na configuração do Cargo.Rustdoc passou a processar a documentação com mais cuidado.
Notas sobre API deprecated agora são renderizadas como documentação normal, sem o tratamento especial anterior através de white-space: pre-wrap. Além disso, rustdoc não emite mais o lint missing_doc_code_examples para elementos dentro de impl, e na barra lateral da documentação, métodos e funções associadas são separados.Possíveis incompatibilidades.
A versão traz diversas alterações que podem se manifestar em código não convencional: a disposição de alguns enums #[repr(Int)] foi corrigida em casos extremos, algumas conversões unsize inúteis em Pin foram proibidas, as compilações de WebAssembly agora falham com símbolos indefinidos, o atributo estabilizado por acidente #![reexport_test_harness_main] foi novamente fechado por uma feature gate, o parâmetro -Csoft-float foi removido e a versão mínima do LLVM externo foi elevada para 21. Para AVR, o tipo c_double foi alterado para f32, já que para esses alvos, C double é, por padrão, 32 bits.
Fonte: linux.org.ru
