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 !

La version 1.99 du langage de programmation Rust est disponible, apportant la prise en charge des arguments variadiques avec « extern "C" » et des informations de disposition à partir de pointeurs bruts

Le , par Jade Emy

0PARTAGES

4  0 
L’équipe de développement de Rust a officiellement publié la version 1.99, qui apporte des améliorations significatives à ce langage de programmation système. Cette version introduit une prise en charge stabilisée des fonctions variadiques C-ABI avec les ABI « C » et « C-unwind », permettant désormais aux développeurs d’écrire des fonctions variadiques directement en Rust plutôt que de se contenter d’appeler des fonctions définies en externe, comme celles de la bibliothèque libc. Au-delà de la prise en charge des fonctions à arguments variables, cette version apporte des améliorations concrètes en matière de gestion de la mémoire et de code non sécurisé.

Rust est un langage de programmation polyvalent qui met l’accent sur les performances, la sécurité des types, la concurrence et la sécurité de la mémoire. Rust prend en charge plusieurs paradigmes de programmation. Il s’inspire de concepts issus de la programmation fonctionnelle, notamment l’immuabilité, les fonctions d’ordre supérieur, les types de données algébriques et la correspondance de motifs.

Il prend également en charge la programmation orientée objet via les structs, les énumérations, les traits et les méthodes. Rust garantit la sécurité de la mémoire (c’est-à-dire que toutes les références pointent vers de la mémoire valide) sans recourir à un ramasse-miettes classique ; à la place, les erreurs de sécurité de la mémoire et les conflits d’accès sont évités par le « vérificateur d’emprunt », qui suit la durée de vie des objets référencés lors de la compilation.

L’équipe de développement de Rust a officiellement publié la version 1.99, qui apporte des améliorations significatives à ce langage de programmation système. Cette version introduit une prise en charge stabilisée des fonctions variadiques C-ABI avec les ABI « C » et « C-unwind », permettant désormais aux développeurs d’écrire des fonctions variadiques directement en Rust plutôt que de se contenter d’appeler des fonctions définies en externe, comme celles de la bibliothèque libc. Cette fonctionnalité comble une lacune de longue date pour les applications faisant un usage intensif de l’interface FFI et nécessitant une compatibilité avec les listes d’arguments variables de style C.

Au-delà de la prise en charge des fonctions à arguments variables, cette version apporte des améliorations concrètes en matière de gestion de la mémoire et de code non sécurisé. Trois nouvelles fonctions, Layout::for_value_raw, mem::size_of_val_raw et mem::align_of_val_raw, permettent désormais de récupérer des informations de taille et d’alignement à partir de pointeurs bruts vers des types avec ou sans taille définie.

L’équipe a également mis à jour la documentation pour déconseiller les schémas impliquant un « round-trip unleaking » après l’appel à Box::leak, en invoquant des interactions problématiques avec les optimisations du compilateur et la stabilisation prochaine des allocateurs personnalisés. Plusieurs autres API ont atteint le statut « stable », notamment les implémentations d’IntoIterator pour les tableaux boxés, VecDeque::retain_back et String::from_utf8_lossy_owned.

Les développeurs ayant installé rustup peuvent effectuer la mise à jour immédiatement à l’aide de la commande rustup update stable. Alors que Rust approche de son jalon symbolique de la version 2.0, cette version s’inscrit dans le rythme méthodique du projet visant à stabiliser les fonctionnalités qui ont mûri dans les builds « nightly ». Les remerciements aux contributeurs rendent hommage à des dizaines de membres de la communauté qui ont participé à la réalisation de la version 1.99, reflétant ainsi le modèle de développement collaboratif qui caractérise la croissance de Rust depuis son lancement initial.


Voici les nouveautés de la version stable 1.99.0 :

Fonctions variadiques « extern "C" »

Rust 1.99.0 stabilise la définition de fonctions variadiques C-ABI avec les ABI « C » et « C-unwind ». Les fonctions variadiques définies de cette manière utilisent une liste d’arguments variable (...) et acceptent un nombre arbitraire d’arguments. Rust pouvait déjà appeler des fonctions variadiques définies en externe (par exemple, libc::printf). Avec Rust 1.99, ces fonctions peuvent désormais être écrites en Rust même :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
/// SAFETY: must be called with (at least) 2 i32 arguments.
unsafe extern "C" fn sum(mut args: ...) -> i32 {
    // SAFETY: guaranteed by the caller.
    let a = unsafe { args.next_arg::<i32>() };
    let b = unsafe { args.next_arg::<i32>() };
    a + b
}
 
fn foo() -> i32 {
    unsafe { sum(0i32, 2i32) }
}


Le type de ... est VaList, qui est compatible ABI avec le type C va_list sur toutes les cibles. Les types pouvant être lus à partir d’une VaList sont contrôlés par le trait VaArgSafe.

Informations de disposition à partir de pointeurs bruts

Cette version définit les exigences de sécurité pour la récupération de la taille et de l’alignement sur des pointeurs bruts pointant à la fois vers des types Sized (trivialement sûrs, déjà possibles dans la version stable) et vers des types non Sized.

Cela est réalisé en stabilisant trois fonctions :

- Layout::for_value_raw,
- mem::size_of_val_raw,
- mem::align_of_val_raw.

Déconseiller la suppression des fuites après l’appel de Box::leak.

Bien qu’il n’y ait pas de modifications de la sémantique du langage dans Rust 1.99, nous avons mis à jour la documentation relative à Box::leak afin de déconseiller les schémas qui désallouent ultérieurement cette mémoire. Cette décision a été prise car il a été constaté que ce type de code présentait des interactions problématiques avec les optimisations actuelles et futures du compilateur, et qu’il posait des problèmes particuliers avec la stabilisation prochaine des allocateurs personnalisés. Il est préférable d’utiliser à la place Box::into_non_null ou Box::into_raw.

Cette recommandation s’applique également aux autres fonctions de fuite de la bibliothèque standard.

Source : Rust 1.99

Et vous ?

Pensez-vous que cette version est crédible ou pertinente ?
Quel est votre avis sur le sujet ?

Voir aussi :

La version 1.98 de Rust introduit des méthodes algébriques pour les nombres à virgule flottante, le formatage des entiers avec mise en mémoire tampon et améliore la documentation de ManuallyDrop

Canonical finance une thèse de doctorat visant à automatiser la conversion d'anciennes bases de code C vers le langage Rust en utilisant l'intelligence artificielle

Microsoft élève Rust au rang de langage de premier plan pour ses équipes. La décision s'appuie sur des avantages de sécurisation des accès à la mémoire reconnus à Rust et contestés par le créateur du C++
Vous avez lu gratuitement 730 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

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