Retour à l'accueil

Rust 1.95.0 : cfg_select!, gardes if-let et API stables | Aperçu

Aperçu de la sortie de Rust 1.95.0 : nouvelles fonctionnalités pour les développeurs. Macro cfg_select! remplace cfg-if, support des gardes if-let dans les expressions match, stabilisation des API clés. Exemples pratiques et recommandations de migration.

Rust 1.95.0 : Comment les nouvelles fonctionnalités simplifient le développement
Advertisement 728x90

Rust 1.95.0 : Comment les nouvelles fonctionnalités simplifient le développement en Rust

La version stable de Rust 1.95.0 a été publiée, élargissant les capacités du langage pour créer du code sûr et efficace. Les principaux changements se concentrent sur la simplification de la compilation conditionnelle, l'amélioration de la syntaxe d'appariement de motifs, et la stabilisation d'API critiques. Ces mises à jour impactent directement le travail quotidien des développeurs en réduisant la charge cognitive et en minimisant le code boilerplate.

La macro cfg_select! : Une alternative intégrée à cfg-if

La nouvelle macro cfg_select! résout le problème des implémentations dépendantes de la plateforme qui nécessitaient auparavant la crate externe cfg-if. Désormais, la compilation conditionnelle au moment de la construction est intégrée à la bibliothèque standard. La macro fonctionne comme match pour les directives cfg, en sélectionnant la première branche dont le prédicat est vrai. Cela est particulièrement utile pour implémenter des bibliothèques multiplateformes, où du code différent est nécessaire pour Unix, Windows ou des architectures spécifiques.

Exemple d'utilisation :

Google AdInline article slot
cfg_select! {
    unix => {
        fn platform_specific() { /* Sale for Unix */ }
    }
    target_pointer_width = "32" => {
        fn platform_specific() { /* 32-bitnaya realizatsiya */ }
    }
    _ => {
        fn platform_specific() { /* Defolt */ }
    }
}

Avantage clé : aucune dépendance à des crates externes et syntaxe unifiée avec les autres macros Rust. Note : la macro se développe en une seule branche au moment de la compilation, de sorte que les parties de code inutilisées sont complètement exclues du binaire.

Les gardes if-let dans les expressions match : Élargissement des capacités d'appariement de motifs

Rust 1.95.0 stabilise les gardes if-let à l'intérieur des expressions match, permettant de combiner appariement de motifs et vérifications conditionnelles dans une seule branche. Cette fonctionnalité, précédemment disponible uniquement dans les versions nightly, est désormais sur le canal stable. La syntaxe reste concise et lisible, évitant les expressions match imbriquées.

Exemple :

Google AdInline article slot
match data {
    Some(x) if let Ok(y) = process(x) => {
        // Dostupny x and y
        handle(x, y);
    }
    _ => fallback(),
}

Limitation importante : le compilateur ne prend pas en compte les motifs dans les gardes if-let lors de la vérification d'exhaustivité. Cela signifie qu'une branche avec une garde if-let ne garantit pas la gestion de tous les cas possibles, contrairement à un match standard. Les développeurs doivent vérifier explicitement la couverture des scénarios.

API stabilisées : Principaux changements

La sortie stabilise plus de 30 API affectant les opérations de bas niveau et la gestion de la mémoire. Principaux groupes de changements :

  • Gestion de la mémoire non initialisée : Méthodes From, AsRef, AsMut pour MaybeUninit<[T; N]> simplifient le travail avec des buffers bruts.
  • Opérations atomiques : Ajout de update et try_update pour AtomicPtr, AtomicBool, AtomicInt, AtomicUint.
  • Opérations sur les collections : Nouvelles méthodes push_mut, insert_mut pour Vec, VecDeque, LinkedList.
  • Utilitaires de bas niveau : Layout::dangling_ptr, Layout::repeat, cold_path.

D'intérêt particulier est la stabilisation de bool: TryFrom<{integer}>, qui permet de convertir en toute sécurité les types entiers en booléens via TryFrom. Cela élimine le besoin de vérifications manuelles comme value != 0.

Google AdInline article slot

Déprécation des cibles personnalisées : Qu'est-ce qui change

Rust 1.95.0 supprime le support des spécifications de cibles JSON personnalisées dans le canal stable. Cette fonctionnalité, précédemment disponible via l'option --target, nécessitait des outils nightly même pour des constructions basiques de la bibliothèque standard. Désormais, les utilisateurs avec une chaîne d'outils entièrement stable ne rencontreront pas d'erreurs inattendues mais perdront la capacité de personnaliser les cibles.

L'équipe Rust recueille les cas d'utilisation dans l'issue de suivi pour déterminer comment stabiliser cette fonctionnalité à l'avenir. Pour l'instant, passez aux cibles officielles ou utilisez le canal nightly pour les expériences.

Points clés à retenir

  • La macro cfg_select! remplace cfg-if dans la bibliothèque standard, éliminant les dépendances externes.
  • Les gardes if-let dans les expressions match simplifient les vérifications complexes mais n'affectent pas la vérification d'exhaustivité.
  • La stabilisation des opérations atomiques et des méthodes de mémoire est cruciale pour la programmation système.
  • La suppression des cibles personnalisées dans le canal stable nécessite une révision des constructions personnalisées.

La mise à jour vers Rust 1.95.0 est recommandée pour tous les projets où le support des API modernes et la simplification de la compilation conditionnelle comptent. Pour tester les sorties futures, utilisez le canal beta (rustup default beta).

— Editorial Team

Advertisement 728x90

Lire ensuite