Publication de Rust 1.91

La version du langage de programmation Rust 1.91 a été publiée, initialement développé par le projet Mozilla, mais désormais maintenu par la Rust Foundation, une organisation indépendante à but non lucratif. Ce langage est axé sur la sécurité de la mémoire et offre des moyens d’atteindre un haut niveau de parallélisme d’exécution sans avoir besoin d’un ramasse-miettes ni d’un temps d'exécution (le runtime se limite à l'initialisation de base et au support de la bibliothèque standard).

Les méthodes de gestion de la mémoire en Rust éliminent les erreurs lors de la manipulation des pointeurs et protègent contre les problèmes liés à la gestion bas niveau de la mémoire, tels que l'accès à une zone mémoire après sa libération, la déréférence de pointeurs nuls, le dépassement de tampon, etc. Pour faciliter la diffusion des bibliothèques, assurer la compilation et gérer les dépendances, un gestionnaire de paquets nommé Cargo est en développement. Un dépôt pour le déploiement des bibliothèques, crates.io, est également supporté.

La sécurité de la mémoire dans Rust est assurée au moment de la compilation grâce à la vérification des références, au suivi de la propriété des objets, à la prise en compte de la durée de vie des objets (portée) et à l'évaluation de l'accès mémoire pendant l'exécution du code. Rust offre également des outils pour se protéger contre les débordements d'entiers, exige l'initialisation obligatoire des valeurs des variables avant leur utilisation, gère mieux les erreurs dans la bibliothèque standard, applique le concept d'immuabilité (immutable) pour les références et les variables par défaut, et propose une forte typage statique pour minimiser les erreurs logiques.

Les principales nouveautés :

  • Amélioration du support des systèmes ARM 64 bits sous Windows. La plateforme cible « aarch64-pc-windows-msvc » a été élevée au premier niveau de support. Le deuxième niveau de support a été assuré pour les architectures aarch64-pc-windows-gnullvm et x86_64-pc-windows-gnullvm. Le premier niveau de support implique la création de binaires, des tests approfondis et la garantie la plus élevée de soutien à la plateforme — chaque modification dans le compilateur est vérifiée par l'exécution d'un ensemble complet de tests. Le deuxième niveau de support inclut la création de binaires et la garantie de construction, mais ne garantit pas le passage de l'ensemble des tests. Le troisième niveau couvre un support de base, sans test automatisé, publication de versions officielles et vérification de la possibilité de compilation du code.
  • Ajout d'un avertissement de lint « dangling_pointers_from_locals » pour détecter le retour de pointeurs bruts pendants (dangling raw pointer) par des fonctions, pointant vers des données stockées dans des variables locales définies dans la fonction appelée. De telles variables sont supprimées après la fin de la fonction, et les pointeurs bruts vers les données liées à ces variables deviennent pendants, c’est-à-dire pointant vers une mémoire libérée. La désindirection ultérieure d’un tel pointeur entraîne un comportement indéfini. fn f() -> *const u8 { let x = 0; &x // avertissement : un pointeur pendu sera produit car la variable locale « x » sera supprimée }
  • Ajout d'un avertissement de lint « integer_to_ptr_transmutes », signalant la conversion d'entiers en pointeurs à l'aide de la fonction std::mem::transmute.
  • Le gestionnaire de paquets Cargo a stabilisé le support du paramètre « build.build-dir », définissant le répertoire pour stocker les artefacts de construction temporaires créés par cargo et rustc durant le processus de compilation.
  • Pour ABI sysv64, win64, efiapi et aapcs, le support pour la déclaration de fonctions avec un nombre variable d'arguments au style C a été stabilisé.
  • Le support de l'assembleur en ligne pour l'architecture LoongArch32 a été stabilisé.
  • Une nouvelle série d'API a été stabilisée dans la catégorie des API stables, notamment des méthodes et des implémentations de traits stabilisées :
    • Path::file_prefix
    • AtomicPtr::fetch_ptr_add
    • AtomicPtr::fetch_ptr_sub
    • AtomicPtr::fetch_byte_add
    • AtomicPtr::fetch_byte_sub
    • AtomicPtr::fetch_or
    • AtomicPtr::fetch_and
    • AtomicPtr::fetch_xor
    • {integer}::strict_add
    • {integer}::strict_sub
    • {integer}::strict_mul
    • {integer}::strict_div
    • {integer}::strict_div_euclid
    • {integer}::strict_rem
    • {integer}::strict_rem_euclid
    • {integer}::strict_neg
    • {integer}::strict_shl
    • {integer}::strict_shr
    • {integer}::strict_pow
    • i{N}::strict_add_unsigned
    • i{N}::strict_sub_unsigned
    • i{N}::strict_abs
    • u{N}::strict_add_signed
    • u{N}::strict_sub_signed
    • PanicHookInfo::payload_as_str
    • core::iter::chain
    • u{N}::checked_signed_diff
    • core::array::repeat
    • PathBuf::add_extension
    • PathBuf::with_added_extension
    • Duration::from_mins
    • Duration::from_hours
    • impl PartialEq<str> for PathBuf
    • impl PartialEq<String> for PathBuf
    • impl PartialEq<str> for Path
    • impl PartialEq<String> for Path
    • impl PartialEq<PathBuf> for String
    • impl PartialEq<Path> for String
    • impl PartialEq<PathBuf> for str
    • impl PartialEq<Path> for str
    • Ipv4Addr::from_octets
    • Ipv6Addr::from_octets
    • Ipv6Addr::from_segments
    • impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized
    • impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized
    • impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized
    • Cell::as_array_of_cells
    • u{N}::carrying_add
    • u{N}::borrowing_sub
    • u{N}::carrying_mul
    • u{N}::carrying_mul_add
    • BTreeMap::extract_if
    • BTreeSet::extract_if
    • impl Debug for windows::ffi::EncodeWide<‘_>
    • str::ceil_char_boundary
    • str::floor_char_boundary
    • impl Sum for Saturating<u{N}>
    • impl Sum<&Self> for Saturating<u{N}>
    • impl Product for Saturating<u{N}>
    • impl Product<&Self> for Saturating<u{N}>
  • L'attribut «const» est appliqué dans les fonctions :
    • <[T; N]>::each_ref
    • <[T; N]>::each_mut
    • OsString::new
    • PathBuf::new
    • TypeId::of
    • ptr::with_exposed_provenance
    • ptr::with_exposed_provenance_mut
  • Le compilateur a été mis à jour vers la branche LLVM 21.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster