La prochaine version stable du compilateur et de la norme du langage Rust a été publiée.
Mise à jour de la bibliothèque standard musl vers la version 1.2.5
Différentes plateformes cibles *-linux-musl sont désormais livrées avec musl 1.2.5. Cela concerne principalement les builds statiques musl pour x86_64, aarch64 et powerpc64le, qui utilisaient auparavant la version 1.2.3. Cette mise à jour comprend plusieurs corrections et améliorations, ainsi qu'un changement « cassant » qui affecte l'écosystème Rust.
La principale motivation de cette mise à jour était l'amélioration significative du résolveur DNS musl, introduite dans la version 1.2.4 et perfectionnée dans la 1.2.5. Lors de l'utilisation de musl pour le linkage statique, cela devrait améliorer la fiabilité des fonctions réseau des binaires Linux portables, notamment en travaillant avec de grands enregistrements DNS et des serveurs de noms récursifs.
Cependant, la version 1.2.4 contient également un changement critique: la suppression de plusieurs symboles de compatibilité obsolètes utilisés par le crate libc sur GitHub. Le correctif pour cela a été publié dans libc 0.2.146 dès juin 2023 (il y a 2,5 ans), et nous pensons qu'il s'est suffisamment répandu pour que nous puissions apporter des modifications aux plateformes cibles de Rust.
Autorisation au gestionnaire d'allocation global d'utiliser TLS
Rust 1.93 ajuste les mécanismes internes de la bibliothèque standard, permettant aux gestionnaires d'allocation globaux écrits en Rust d'utiliser std::thread_local! et std::thread::current sans risque de réentrance grâce à l'utilisation du gestionnaire d'allocation système. Des détails peuvent être trouvés dans la documentation de la bibliothèque standard Rust.
Attributs cfg dans les lignes asm!
Auparavant, si des parties individuelles de la section d'assemblage intégré nécessitaient une compilation conditionnelle cfg, il fallait dupliquer tout le bloc asm! dans son intégralité. Dans la version 1.93, l'attribut cfg peut être appliqué à des instructions individuelles dans le bloc :
asm!( // ou global_asm! ou naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // … #[cfg(target_feature = "sse2")] a = const 123, // utilisé uniquement sur sse2 );
Classé dans l'API stable :
<[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`
Source : linux.org.ru
