IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Rust 1.53.0 est disponible et s'accompagne de IntoIterator pour les tableaux
Cargo prend désormais en charge les référentiels git où la branche HEAD par défaut n'est pas "master"

Le , par Stéphane le calme

75PARTAGES

13  0 
L'équipe Rust a annoncé la disponibilité de Rust 1.53.0. Passons en revue les améliorations.

IntoIterator pour les tableaux

Il s'agit de la première version de Rust dans laquelle les tableaux implémentent le trait IntoIterator. Cela signifie que vous pouvez maintenant parcourir les tableaux par valeur*:

Code Rust : Sélectionner tout
1
2
3
for i in [1, 2, 3] { 
    .. 
}

Auparavant, cela n'était possible que par référence, en utilisant &[1, 2, 3] ou [1, 2, 3].iter().

De même, vous pouvez maintenant passer des tableaux aux méthodes qui attendent un T: IntoIterator :

Code Rust : Sélectionner tout
let set = BTreeSet::from_iter([1, 2, 3]);
Code Rust : Sélectionner tout
1
2
3
for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { 
    .. 
}

Cela n'a pas été implémenté auparavant, en raison de problèmes de compatibilité descendante. Étant donné qu'IntoIterator était déjà implémenté pour les références aux tableaux, array.into_iter() déjà compilé dans les versions antérieures, se résolvant en (&array).into_iter().

À partir de cette version, les tableaux implémentent IntoIterator avec une petite solution de contournement pour éviter de casser le code. Le compilateur continuera à résoudre array.into_iter() en (&array).into_iter(), comme si l'implémentation de trait n'existait pas. Cela s'applique uniquement à la syntaxe d'appel de méthode .into_iter() et n'affecte aucune autre syntaxe telle que for e in [1, 2, 3], iter.zip([1, 2, 3]) ou IntoIterator::into_iter ([1, 2, 3]), qui se compilent tous correctement.

Étant donné que ce cas spécial pour .into_iter() n'est requis que pour éviter de casser le code existant, il est supprimé dans la nouvelle édition, Rust 2021, qui sortira plus tard cette année.

Motifs |

La syntaxe du modèle a été étendue pour prendre en charge | imbriqué n'importe où dans le motif. Cela vous permet d'écrire Some(1 | 2) au lieu de Some(1) | Some(2).

Code Rust : Sélectionner tout
1
2
3
4
5
match result { 
     Ok(Some(1 | 2)) => { .. } 
     Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } 
     _ => { .. } 
}

Identifiants Unicode

Les identifiants peuvent désormais contenir des caractères non ASCII. Tous les caractères d'identification valides en Unicode tels que définis dans UAX #31 peuvent désormais être utilisés. Cela inclut les caractères de nombreux scripts et langages différents, mais n'inclut pas les emoji.

Par exemple :


Le compilateur vous avertira des situations potentiellement déroutantes impliquant différents scripts. Par exemple, l'utilisation d'identifiants très similaires entraînera un avertissement.

Code Rust : Sélectionner tout
warning: identifier pair considered confusable between `s` and `s`

Prise en charge du nom de la branche HEAD dans Cargo

Cargo ne suppose plus que le HEAD par défaut des référentiels git est nommé master. Cela signifie que vous n'avez plus besoin de spécifier branch = "main" pour les dépendances git à partir d'un référentiel où la branche par défaut est appelée main.

La compilation incrémentielle reste désactivée par défaut

La compilation incrémentielle a été désactivée par défaut sur le canal de publication stable de Rust. La fonctionnalité reste disponible sur les canaux de version bêta et nightly. Pour la version stable 1.53.0, la méthode de réactivation incrémentielle est inchangée par rapport à 1.52.1.

API stabilisées

Les méthodes et implémentations de traits suivantes ont été stabilisées :
  • array::from_ref
  • array::from_mut
  • AtomicBool::fetch_update
  • AtomicPtr::fetch_update
  • BTreeSet::retain
  • BTreeMap::retain
  • BufReader::seek_relative
  • cmp::min_by
  • cmp::min_by_key
  • cmp::max_by
  • cmp::max_by_key
  • DebugStruct::finish_non_exhaustive
  • Duration::ZERO
  • Duration::MAX
  • Duration::is_zero
  • Duration::saturating_add
  • Duration::saturating_sub
  • Duration::saturating_mul
  • f32::is_subnormal
  • f64::is_subnormal
  • IntoIterator for array
  • {integer}::BITS
  • io::Error::Unsupported
  • NonZero*::leading_zeros
  • NonZero*::trailing_zeros
  • Option::insert
  • Ordering::is_eq
  • Ordering::is_ne
  • Ordering::is_lt
  • Ordering::is_gt
  • Ordering::is_le
  • Ordering::is_ge
  • OsStr::make_ascii_lowercase
  • OsStr::make_ascii_uppercase
  • OsStr::to_ascii_lowercase
  • OsStr::to_ascii_uppercase
  • OsStr::is_ascii
  • OsStr::eq_ignore_ascii_case
  • Peekable::peek_mut
  • Rc::increment_strong_count
  • Rc::decrement_strong_count
  • slice::IterMut::as_slice
  • AsRef<[T]> for slice::IterMut
  • impl SliceIndex for (Bound<usize>, Bound<usize>)
  • Vec::extend_from_within

Source : blog Rust

Une erreur dans cette actualité ? Signalez-le nous !