Rust 1.19 est disponible en version stable
Et devient la première version à supporter union

Le , par Stéphane le calme, Chroniqueur Actualités
Sur Windows, Rust s'appuie sur link.exe pour la liaison, que vous pouvez obtenir via Microsoft Visual C ++ Build Tools. Avec la publication récente de Visual Studio 2017, la structure de répertoire de ces outils a changé. En tant que tel, pour utiliser Rust, vous deviez rester sur les outils de 2015 ou utiliser une solution de contournement (comme l'exécution de vcvars.bat). Avec la version 1.19.0, rustc sait maintenant comment trouver les outils 2017, et ils fonctionnent sans solution de contournement.

Parmi les nouvelles fonctionnalités annoncées par l’équipe, Rust 1.19.0 est la première version qui supporte union :

Code Rust : Sélectionner tout
1
2
3
4
union MyUnion {
    f1: u32,
    f2: f32,
}

Les union sont comme enum, mais ils sont « non étiquetés ». Les enum disposent d’étiquette qui stocke la variante appropriée à l'exécution; Les union élident cette étiquette.

Puisque nous pouvons interpréter les données détenues dans l'union en utilisant la mauvaise variante et que Rust ne peut pas vérifier cela pour nous, cela signifie que la lecture ou l'écriture d'un champ d'union n'est pas sécurisée :

Code Rust : Sélectionner tout
1
2
3
4
5
let u = MyUnion { f1: 1 };
 
unsafe { u.f1 = 5 };
 
let value = unsafe { u.f1 };

Le pattern matching fonctionne également:

Code Rust : Sélectionner tout
1
2
3
4
5
6
7
8
fn f(u: MyUnion) {
    unsafe {
        match u {
            MyUnion { f1: 10 } => { println!("ten"); }
            MyUnion { f2 } => { println!("{}", f2); }
        }
    }
}

Quand est-ce que les union peuvent s’avérer utiles ? Un cas d'utilisation majeur est l'interopérabilité avec C. Les API de C peuvent exposer les unions, ce qui facilite l’écriture des API qui vont intégrer ces bibliothèques.

Cette fonctionnalité a longtemps été attendue et, bien entendu, des améliorations sont prévues. Pour le moment, les union n’intègrent que les types copy et ne pourraient ne pas encore implémenter drop. « Nous prévoyons de lever ces restrictions à l'avenir », a assuré l’équipe.

Il est désormais possible de sortir (break) des boucles loop avec une valeur :

Code Rust : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
// ancien code
let x;
 
loop {
    x = 7;
    break;
}
 
// nouveau code
let x = loop { break 7; };

Parmi les fonctionnalités mineures, l’équipe note par exemple qu’il est possible de produire des tarballs compressés xz et qu’elle les préfère par défaut, ce qui rend le transfert de données plus petit et plus rapide. Les tarballs Gzip sont encore produits dans le cas où vous ne pouvez pas utiliser xz pour une raison quelconque.

Le compilateur peut maintenant démarrer sur Android. « Nous avons supporté depuis longtemps Android de différentes façons, ce qui continue d'améliorer notre support », a commenté l’équipe.

Côté compatibilité, l’équipe indique que « Lorsque nous allions vers Rust 1.0, nous avons fait une énorme pression pour vérifier tout ce qui était marqué comme stable et aussi instable. Nous avons négligé une chose, cependant : les drapeaux -Z. Le drapeau -Z permet au compilateur d’utiliser des drapeaux instables. Contrairement au reste de notre histoire de stabilité, vous pouvez toujours utiliser -Z sur une version stable de Rust. En avril 2016, dans Rust 1.8, nous avons émis un avertissement lors de l’usage de -Z sur la version stable ou bêta. Plus d'un an plus tard, nous résolvons ce trou dans notre histoire de stabilité en refusant -Z sur les versions stable et bêta. »

Stabilisations au niveau de la bibliothèque

La plus grande fonctionnalité de la nouvelle bibliothèque est l’ajout des macros eprint! et eprintln!. Elles fonctionnent exactement comme print! et println!, mais écrivent plutôt sur une erreur standard, par opposition à la sortie standard.

Autres nouvelles fonctionnalités :
  • String implémente désormais FromIterator<Cow<'a, str>> et Extend<Cow<'a, str>> ;
  • Vec implémente désormais From<&mut [T]> ;
  • Box <[u8]> implémente désormais From<Box<str>> ;
  • SplitWhitespace implémente désormais Clone.

Rust s'est traditionnellement positionné comme un « langage orienté vers l'expression », c'est-à-dire que la plupart des choses sont des expressions qui évaluent une valeur plutôt que des déclarations qui évaluent une valeur.

Source : annonce de Rust 1.19

Et vous ?

Utilisez-vous Rust ? Pour quel type de développement ? Qu'en pensez-vous ?
Quelle est la nouveauté qui vous a le plus intéressé ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :
Offres d'emploi IT
Expert technique WEB (H/F)
Atos Technology Services - Provence Alpes Côte d'Azur - Aix en Provence
Administrateur systèmes et réseaux H/F
SOFEDIS - Ile de France - Paris (75005)
Développeur Back-End (H/F)
Dolmen Tech - Bretagne - Rennes

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil