Sortie de Rust 1.50.0

Par:
fredericmazue

mar, 16/02/2021 - 15:56

L'équipe Rust a annoncé une nouvelle version du langage : Rust 1.50.0. Cette nouvelle version améliore notamment l'indexation des tableaux et étend l'accès sécurisé aux champs d'union

Rust 1.50.0 ajoute des implémentations de ops::Index et IndexMut pour les tableaux [T; N] pour n'importe quelle longueur de const N. L'équipe Rust souligne : L'opérateur d'indexation [] travaillait déjà sur les tableaux grâce à la magie du compilateur intégré, mais au niveau du type, les tableaux n'ont pas implémenté les caractéristiques de la bibliothèque jusqu'à présent. Voici un exemple de code mettant en valeur cette amélioration :

fn second<C>(container: &C) -> &C::Output
where
    C: std::ops::Index<usize> + ?Sized,
{
    &container[1]
}

fn main() {
    let array: [i32; 3] = [1, 2, 3];
    assert_eq!(second(&array[..]), &2); // slices worked before
    assert_eq!(second(&array), &2); // now it also works directly
}

En ce qui concerne les affectations sécurisées aux champs d'union, Rust 1.49 a rendu possible l'ajout de champs ManuallyDrop<T> à une union dans le cadre de l'autorisation Drop des unions. Cependant, les unions ne suppriment pas les anciennes valeurs lorsqu'un champ est assigné, car elles ne savent pas quelle variante était auparavant valide, donc Rust limitait auparavant cela aux types Copy uniquement, qui ne sont jamais Drop. Bien sûr,  ManuallyDrop<T>n'a pa snon pku sbesoin de Drop, donc maintenant Rust 1.50 permet également des affectations sûres à ces champs.

A remarquer encore, Rust enrichit sa bibliothèque de 9 fonctions stables :

  • bool::then
  • btree_map::Entry::or_insert_with_key
  • f32::clamp
  • f64::clamp
  • hash_map::Entry::or_insert_with_key
  • Ord::clamp
  • RefCell::take
  • slice::fill
  • UnsafeCell::get_mut