Rust est un langage de programmation développé par Mozilla Research. Il est open source et son code est disponible sur GitHub. Ses domaines de prédilection sont la programmation système, les applications en ligne de commande, les applications Web via WebAssembly, les services réseau et les systèmes embarqués. Rust a été conçu pour faciliter le développement rapide et sûr de logiciels au niveau système. Selon ses auteurs, l'approche unique de Rust permet d'obtenir un meilleur code avec moins de compromis que C, C++, Go et les autres langages que vous utilisez probablement.Rust est mis à jour régulièrement, souvent tous les mois. Ainsi, si vous avez déjà installé une version antérieure de Rust via rustup, vous pouvez accéder à la dernière version en tapant la commande suivante :
| Code : | Sélectionner tout |
$ rustup update stable
Implémentation MVP des const generics
Avec l'implémentation MVP des const generics, un outil est ajouté pour les concepteurs de bibliothèques afin de développer des API sûres au moment de la compilation. Fonction très attendue, les const generics sont des arguments génériques qui portent sur des valeurs constantes, plutôt que sur des types ou des durées de vie. Cela permet aux types d'être paramétrés par des entiers, par exemple. L'équipe prévoit d'introduire progressivement les const generics, de sorte que les seuls types qui peuvent être utilisés comme type d'un argument const generic sont actuellement les types d'entiers, y compris size, usize, char et bool.
En effet, avant cette version, Rust vous permettait de paramétrer vos types sur des durées de vie ou des types. Par exemple, si vous vouliez avoir une structure qui soit générique sur le type d'élément d'un tableau, vous écririez ce qui suit :
| Code Rust : | Sélectionner tout |
1 2 3 4 5 | struct FixedArray<T> { // ^^^ Type generic definition list: [T; 32] // ^ Where we're using it. } |
Si vous utilisez ensuite FixedArray<u8>, le compilateur créera une version monomorphe de FixedArray qui ressemblera à ceci :
| Code Rust : | Sélectionner tout |
1 2 3 | struct FixedArray<u8> { list: [u8; 32] } |
Selon l'équipe de Rust, il s'agit d'une fonctionnalité puissante qui vous permet d'écrire du code réutilisable sans frais d'exécution. Cependant, jusqu'à cette version, il n'était pas possible d'être facilement générique sur les valeurs de ces types. Cela était particulièrement vrai pour les tableaux qui incluent leur longueur dans leur définition de type ([T ; N]), sur lesquels il était auparavant impossible d'être générique. Maintenant, avec la version 1.51.0, vous pouvez écrire du code qui est générique sur les valeurs de n'importe quel type integer, bool, ou char (l'utilisation de valeurs struct ou enum est toujours instable).
Ce changement vous permet maintenant d'avoir votre propre structure de tableau qui est générique sur son type et sa longueur. Examinons un exemple de définition et la façon dont elle peut être utilisée.
| Code Rust : | Sélectionner tout |
1 2 3 4 5 | struct Array<T, const LENGTH: usize> { // ^^^^^^^^^^^^^^^^^^^ Const generic definition. list: [T; LENGTH] // ^^^^^^ We use it here. } |
Maintenant si vous utilisez Array<u8, 32>, le compilateur fera une version monomorphe de Array qui ressemble à :
| Code Rust : | Sélectionner tout |
1 2 3 | struct Array<u8, 32> { list: [u8; 32] } |
Stabilisation de array::IntoIter
Avec les const generics, une nouvelle API a été stabilisée qui les utilise, std::array::IntoIter. Intolter permet aux développeurs de créer un itérateur par valeur sur n'importe quel tableau. Auparavant, il n'y avait pas de moyen pratique d'itérer sur les valeurs possédées d'un tableau, seulement sur les références à celles-ci.
| Code Rust : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | fn main() { let array = [1, 2, 3, 4, 5]; // Previously for item in array.iter().copied() { println!("{}", item); } // Now for item in std::array::IntoIter::new(array) { println!("{}", item); } } |
Notez que ceci est ajouté en tant que méthode séparée au lieu de .into_iter() sur les tableaux, car cela introduit actuellement un certain nombre de ruptures. Pour le moment, .into_iter() fait référence à l'itérateur de tranche par référence. L'équipe explore les moyens de rendre cela plus ergonomique à l'avenir.
Resolver : nouvelle fonctionnalité...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.
