Rappelons que Rust est un langage de programmation compilé multiparadigme, conçu par Graydon Hore alors employé chez Mozilla Research, avec la contribution du créateur de JavaScript Brendan Eich. Utilisé par plusieurs grandes entreprises et par de nombreux développeurs dans le monde, Rust est devenu le langage de base pour certaines des fonctionnalités fondamentales du navigateur Firefox et de son moteur Gecko, ainsi que pour le moteur Servo de Mozilla.
Codes exit personnalisés de main
Au début, les fonctions main de Rust ne pouvaient retourner que le type d'unité () (implicitement ou explicitement), indiquant toujours le succès dans le statut de sortie, et si l’utilisateur voulait autre chose, il devait appeler process::exit(code). Depuis Rust 1.26, la fonction main() est autorisée à retourner un Result, où Ok se traduit par un EXIT_SUCCESS en C et Err par un EXIT_FAILURE (avec également une impression de débogage de l'erreur). En dessous, ces types de retour alternatifs étaient unifiés par un trait de terminaison instable.
Dans cette version, ce trait Termination est enfin stable, ainsi qu'un type ExitCode plus général qui englobe les types de retour spécifiques à la plateforme. Il possède les constantes SUCCESS et FAILURE, et implémente également From<u8> pour des valeurs plus arbitraires. Le trait Termination peut également être implémenté pour les types propres à l’utilisateur, permettant de personnaliser n'importe quel type de rapport avant de le convertir en ExitCode.
Par exemple, voici une façon sûre du point de vue du type d'écrire des codes de sortie pour un script d'exécution de git bisect :
Code Rust : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | use std::process::{ExitCode, Termination}; #[repr(u8)] pub enum GitBisectResult { Good = 0, Bad = 1, Skip = 125, Abort = 255, } impl Termination for GitBisectResult { fn report(self) -> ExitCode { // Maybe print a message here ExitCode::from(self as u8) } } fn main() -> GitBisectResult { std::panic::catch_unwind(|| { todo!("test the commit") }).unwrap_or(GitBisectResult::Abort) } |
Plus de possibilités pour les const fn
Plusieurs fonctionnalités incrémentales ont été stabilisées dans cette version pour permettre plus de fonctionnalités dans les fonctions const. Gestion de base des pointeurs fn : il est maintenant possible de créer, passer et caster des pointeurs de fonction dans un const fn. Par exemple, cela pourrait être utile pour construire des tables de fonctions à la compilation pour un interpréteur. Cependant, il n'est toujours pas permis d'appeler les pointeurs fn. Il est également possible d’écrire des limites de traits sur les paramètres génériques des const fn, comme T : Copy, alors qu'auparavant seul Sized était autorisé.
De la même manière, const fn peut maintenant traiter des objets Trait, dyn Trait. Les arguments et les valeurs de retour de const fn peuvent désormais être des types impl Trait opaques. Notons que les caractéristiques des traits ne supportent pas encore l'appel de méthodes de ces traits dans un const fn.
Manipulations statiques pour stdio verrouillé
Les trois flux d'E/S standard -- Stdin, Stdout, et Stderr -- ont chacun un lock(&self) pour permettre plus de contrôle sur la synchronisation des lectures et des écritures. Cependant, ils retournaient des gardes de verrou avec une durée de vie empruntée à &self, de sorte qu'ils étaient limités à la portée du handle original. Il a été déterminé qu'il s'agissait d'une limitation inutile, puisque les verrous sous-jacents étaient en fait stockés de manière statique.
Par exemple, une erreur fréquente consistait à essayer d'obtenir un handle et de le verrouiller en une seule instruction :
Code : | Sélectionner tout |
1 2 3 4 5 | error[E0716]: temporary value dropped while borrowed let out = std::io::stdout().lock(); // ^^^^^^^^^^^^^^^^^ - temporary value is freed at the end of this statement // | // creates a temporary which is freed while still in use |
Microsoft a annoncé Rust preview pour Windows en avril de l’année dernière, elle permettra la création d'applications Rust pour le célèbre système d’exploitation de Microsoft en utilisant n'importe quelle API Windows. Avec Rust pour Windows, les développeurs peuvent désormais non seulement utiliser Rust sur Windows, mais aussi développer des applications pour Windows en utilisant Rust. Cependant, s’il y a une question qui revient dans la communauté des développeurs, c’est celle de savoir pourquoi les entreprises et les scientifiques se tournent vers le langage Rust.
La comparaison entre Rust et C++ reste un sujet d'actualité, car ces langages de programmation sont en concurrence dans des domaines comme le développement système et l'embarqué. Du point de vue technique, les deux langages partagent de nombreuses similitudes dans leur syntaxe. Cependant, Rust et C++ présentent des différences significatives. Pour certains analystes, le C++ possède des bases plus solides en ce qui concerne la communauté et les informations générales sur ses principes. En outre, par rapport au C++, Rust est un nouveau venu dans le monde de la programmation, et de nombreux développeurs hésitent à s'y intéresser.
L'année dernière, AWS, Huawei, Google, Microsoft et Mozilla se sont associées pour lancer la fondation Rust et se sont engagées à lui consacrer un budget d'un million de dollars pour deux ans. Ce budget permettra au projet de développer des services, des programmes et des événements qui aideront les responsables du projet Rust à développer le meilleur Rust possible. Google a également annoncé que l'Android Open Source Project (AOSP) prendra désormais en charge le langage Rust pour le développement de son système d’exploitation mobile. « Outre les langages à mémoire sécurisée comme Kotlin et Java, nous sommes heureux d'annoncer que le projet Android Open Source prend désormais en charge le langage de programmation Rust pour le développement du système d'exploitation Android », a déclaré Google sur son blog.
Google a récemment déclaré que : « les défauts de sécurité de la mémoire menacent fréquemment la sécurité des appareils, en particulier pour les applications et les systèmes d'exploitation. Par exemple, sur le système d'exploitation mobile Android, Google dit avoir constaté que plus de la moitié des vulnérabilités de sécurité traitées en 2019 résultaient de bogues de sécurité de la mémoire. Et ce, malgré les efforts considérables déployés par l'entreprise et d'autres contributeurs au projet Open Source Android, pour investir ou inventer diverses technologies, notamment l'AddressSanitizer, des allocateurs de mémoire améliorés et de nombreux fuzzers et autres outils de vérification du code ».
Pour Ashley Williams, Directeur exécutif par intérim de la fondation Rust, le langage « donne du pouvoir » à tout le monde, mais surtout aux gens qui pensent que la programmation système n'est pas pour eux. « L'une des forces motrices les plus puissantes du projet Rust est la croyance simultanée dans le pouvoir de la programmation système et l'engagement à faire en sorte que ce pouvoir soit utilisable par tous », a-t-il déclaré lors de son discours d’ouverture de la RustConf 2020.
Dans une prochaine version, l’équipe Rust prévoit d'augmenter les exigences de base pour le noyau Linux à la version 3.2, et pour la glibc à la version 2.17.
Source : Rust
Et vous ?
Quel est votre avis sur le sujet ?
Voir aussi :
Facebook rejoint AWS, Huawei, Google, Microsoft et Mozilla dans la Fondation Rust et renforce son équipe Rust par des nouveaux talents
Microsoft annonce Rust preview pour Windows, alors que la comparaison entre Rust et C++ reste un sujet d'actualité
Microsoft, Google, AWS, Huawei et Mozilla s'associent pour créer la Fondation Rust, une organisation à but non lucratif chargée de gérer le langage de programmation
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"