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.61.0 est disponible, elle apporte de nouvelles fonctionnalités et améliorations,
Plus de possibilités pour les const fn et les manipulations statiques pour stdio verrouillé

Le , par Bruno

35PARTAGES

4  0 
L'équipe Rust a annoncé la disponibilité de Rust 1.61.0, elle apporte un code Codes exit personnalisés de main, plus de possibilités pour les const fn et Manipulations statiques pour stdio verrouillé, « L'équipe Rust est heureuse d'annoncer une nouvelle version de Rust, 1.61.0. Rust est un langage de programmation qui permet à chacun de construire des logiciels fiables et efficaces », a déclaré l’équipe Rust.


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"

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

Avatar de Pyramidev
Expert éminent https://www.developpez.com
Le 20/05/2022 à 19:17
Citation Envoyé par Astraya Voir le message
Une autre chose que je n'aime pas dans Rust c'est que les static n'ont pas de Drop ( a.k.a destructor appelé ) [...] je trouve que c'est un problème personnellement, car j'apprécie ne pas dépendre de l'OS pour le comportement de mon programme.
Par curiosité, quelles variables statiques aurais-tu souhaité créer en Rust, si drop était appelé à la fin du programme ?
0  0 
Avatar de Astraya
Membre émérite https://www.developpez.com
Le 21/05/2022 à 10:54
Citation Envoyé par Pyramidev Voir le message
Par curiosité, quelles variables statiques aurais-tu souhaité créer en Rust, si drop était appelé à la fin du programme ?

Une hash table custom thread safe servant a l'implémentation de string id ( FName sur Unreal Engine).
Je sais que l'OS le récupère sans problème, et que ca peut être dangereux car n'importe quoi peut accédé car l'ordre de destruction des statiques n'est pas garanti, mais dans ca cas rust l'interdit complément car rien n'est exécuté avant ou après le main.
Hors dans mon cas, je sais que l'acces est safe même si la memoire est free. Il faudrait un drop unsafe.
Par principe, et dans certains cas ou demande spécifique de client, la non libération n'est pas acceptable
0  0 
Avatar de Astraya
Membre émérite https://www.developpez.com
Le 20/05/2022 à 11:23
Personnellement, je jongle en C++ et Rust.

J'avoue que Rust est super, mais actuellement, il y a des retards par rapport a C++.
Typiquement, en C++ on peut actuellement faire beaucoup à la compilation avec les constexpr, en Rust ce n'est autant développé avec ses const.
A l'inverse, les modules de Rust sont top alors que C++ est en retard la dessus. Mais sur le long terme, ce retard sera rattrapé et ce ne sera plus un argument.

Une autre chose que je n'aime pas dans Rust c'est que les static n'ont pas de Drop ( a.k.a destructor appelé ) car il considère les fuites mémoires comme safe... Ok c'est safe car appelé les destructeurs sur des variables globales pose d'autres problème, mais ça reste une fuite mémoire, je trouve que c'est un problème personnellement, car j'apprécie ne pas dépendre de l'OS pour le comportement de mon programme.

Rust est bien, il muri, mais n'est pas encore assez mature pour être utilisé sur des grands projets professionnel. Et j'attends que ça mais C++ restera une valeur sure.
1  2