AccueilActualités informatiqueLangage de programmation : Rust 2021 est plus flexible avec les fonctions...

Langage de programmation : Rust 2021 est plus flexible avec les fonctions anonymes

Table des matières

L’équipe Rust a publié la version 1.56 du langage de programmation dans les délais prévus, annonçant ainsi le début de la nouvelle édition Rust 2021. Les innovations les plus importantes sont la modification de la capture des variables dans les fermetures et une itération propre sous le capot via les valeurs des tableaux au lieu des références.

Sommaire

La version portant l’insignifiant numéro 1.56, qui sort toutes les six semaines par rotation, lance la troisième édition du langage de programmation après Rust 2015 et 2018, annoncée pour la première fois en mai. Les nouvelles éditions introduisent des fonctionnalités supplémentaires qui peuvent entraîner des incompatibilités avec les éditions précédentes. Toutefois, la mise à jour devrait apporter le moins de changements de rupture possible. À l’époque, Rust 2018 intégrait le motif Async-Await, ce qui avait pour effet secondaire d’introduire les nouveaux mots clés async et await ont été amenés avec eux. Cela pourrait devenir un problème si le code utilisait les termes précédemment non réservés comme noms de variables, par exemple, mais cela était probablement rarement le cas.

Comme les changements globaux d’une édition à l’autre sont plutôt modérés, l’équipe Rust a déjà argumenté contre le saut à une nouvelle version majeure lors du premier saut d’édition en 2018. Les différences entre les éditions et les versions majeures sont expliquées dans un article sur les Mozilla Hacks de 2018.

Les développeurs précisent l’édition pour chaque caisse. Par conséquent, ils ne doivent pas apporter de modifications à l’ancien code pour l’utiliser avec le code source de la dernière édition. Enfin, sous le capot, le compilateur crée une représentation interne uniforme pour le code mixte.

L’une des principales nouveautés de Rust 2021 concerne les fermetures, un concept de fonctions anonymes en Rust qui fonctionne de manière similaire aux expressions lambda en Kotlin, Java et C# ou aux fonctions fléchées en JavaScript. Les fermetures obtiennent une référence aux objets utilisés à partir du contexte avant le traitement. La liaison des variables est appelée capture.

À partir de Rust 2021, ils ne récupèrent que les sous-objets qui sont effectivement utilisés, par exemple dans la construction || a.x + 1 seulement le champ demandé a.x au lieu de la structure complète a au lieu de lier la structure complète. Cela signifie que l’accès est toujours possible même si un autre champ a été précédemment lié, par exemple, par le biais de l’option drop (a.y) a été supprimé. Jusqu’à présent, cela conduisait à une erreur, car Rust n’utilise plus le Struct complet a qui n’est pas nécessaire pour la fermeture dans ce cas.

Lire aussi

La nouvelle approche ne s’applique que lorsque les développeurs activent l’édition 2021, car elle peut casser le code existant dans certains cas : Il modifie potentiellement l’ordre dans lequel les champs sont supprimés (drop) sont supprimés. Pour forcer l’ancien comportement dans la nouvelle édition et lier toute la structure, on peut utiliser le trait de soulignement : let _ = &a;.

Une autre innovation s’est déjà glissée dans Rust au cours des dernières versions : l’itération sur les tableaux par valeur avec son propre trait. Rust 1.51 avait initialement l’API std::array::IntoIter a été introduit. Depuis la version 1.53, les tableaux implémentent le trait IntoIteratorqui permet l’itération directe sur des tableaux par valeur sous la forme suivante :

for i in [1, 2, 3] {
    ..
}

L’innovation de Rust 2021 se trouve sous le capot : dans les anciennes éditions de Rust, une solution de contournement est nécessaire pour la mise en œuvre, ce qui n’est plus le cas avec la version actuelle. L’appel de array.into_iter() Les rouilles 2015 et 2018 continuent de résoudre l’appel via la référence comme (&array).into_iter() résoudre

Plus d'articles