Foi lançado o seguinte release estável do compilador e do padrão da linguagem Rust.
Atualização da biblioteca incorporada musl para a versão 1.2.5
Várias plataformas de destino *-linux-musl agora são fornecidas com musl 1.2.5. Isso se aplica principalmente a compilações estáticas musl para x86_64, aarch64 e powerpc64le, que anteriormente utilizavam a versão 1.2.3. Esta atualização inclui diversas correções e melhorias, bem como uma alteração "quebratória" que afeta o ecossistema Rust.
A principal motivação para esta atualização foram as melhorias significativas no resolvedor DNS do musl, que surgiram na versão 1.2.4 e foram aprimoradas na 1.2.5. Ao usar musl para linkagem estática, isso deve aumentar a confiabilidade das funções de rede dos binários Linux portáveis, especialmente ao lidar com grandes registros DNS e servidores de nomes recursivos.
No entanto, a versão 1.2.4 também contém uma alteração crítica: remoção de vários símbolos de compatibilidade obsoletos que eram utilizados pelo crate libc no GitHub. A correção para isso foi lançada no libc 0.2.146 já em junho de 2023 (há 2,5 anos), e consideramos que ela se espalhou amplamente o suficiente para que pudéssemos fazer alterações nas plataformas de destino do Rust.
Permitir que o alocador global use TLS
Rust 1.93 corrige os mecanismos internos da biblioteca padrão, permitindo que alocadores globais escritos em Rust usem std::thread_local! e std::thread::current sem o risco de re-entrância ao utilizar o alocador do sistema. Mais detalhes podem ser encontrados na documentação da biblioteca padrão do Rust.
Atributos cfg em linhas asm!
Anteriormente, se partes individuais da seção de montagem incorporada exigissem compilação condicional cfg, era necessário duplicar todo o bloco asm! completamente. Na versão 1.93, o atributo cfg pode ser aplicado a instruções individuais dentro do bloco:
asm!( // ou global_asm! ou naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // … #[cfg(target_feature = "sse2")] a = const 123, // usado apenas em sse2 );
Foi transferido para a categoria de API estável:
<[MaybeUninit]>::assume_init_drop <[MaybeUninit]>::assume_init_ref` <[MaybeUninit]>::assume_init_mut` <[MaybeUninit]>::write_copy_of_slice` <[MaybeUninit]>::write_clone_of_slice` String::into_raw_parts` Vec::into_raw_parts` ::unchecked_neg` ::unchecked_shl` ::unchecked_shr` ::unchecked_shl` ::unchecked_shr` ::as_array` ::as_array_mut` ::as_array` ::as_array_mut` VecDeque::pop_front_if` VecDeque::pop_back_if` Duration::from_nanos_u128` char::MAX_LEN_UTF8` char::MAX_LEN_UTF16` std::fmt::from_fn` std::fmt::FromFn`
Fonte: linux.org.ru
