Le conseil de direction de Python a accepté d'ajouter la correspondance de motifs au langage
notamment les PEP 634, 635 et 636

Le conseil de direction de Python a annoncé lundi qu'il acceptait finalement la proposition controversée d'ajouter une primitive de correspondance de motifs au langage. Les créateurs du langage Python ont longuement réfléchi à cette proposition, la PEP 634, qui apporterait enfin une syntaxe de déclaration de correspondance de motifs à Python. Les nouvelles instructions de correspondance donneront aux programmeurs Python des motifs plus expressifs de traiter les données structurées, sans avoir à recourir à des solutions de contournement.

La correspondance de motifs et son utilité pour les développeurs

La correspondance de motifs (Pattern Matching) est une caractéristique commune à de nombreux langages de programmation, tels que switch/case en C. Elle permet d'effectuer une des nombreuses actions possibles en fonction de la valeur d'une variable ou d'une expression donnée. En d'autres termes, c'est un processus qui consiste à vérifier si une séquence spécifique de caractères/objets/données existe parmi les informations renseignées. Elle est également utilisée pour trouver et remplacer un motif de correspondance dans un texte ou un code par un autre texte/code.

Nom : python_pattern.png
Affichages : 49095
Taille : 57,9 Ko

Toute application qui prend en charge la fonctionnalité de recherche utilise d'une manière ou d'une autre la comparaison de formes. Les langages de programmation réguliers quant à eux utilisent des expressions régulières (regex) dans le cadre de la correspondance de motifs. Bien que Python n'ait pas une syntaxe native pour la correspondance de motifs, il a été possible de l'émuler avec des chaînes if/elif/else ou une recherche dans un dictionnaire. Avec l'annonce du lundi, les développeurs Python auront bientôt sous la main une syntaxe dédiée à la correspondance de motifs.

Le conseil de direction de Python a annoncé qu'il a validé la PEP 634, et les PEP 635 et 636 qui l'accompagnent, collectivement connus sous le nom de PEP de correspondance de motifs. « Nous reconnaissons que le Pattern Matching est une modification importante de Python et qu'il est presque impossible d'atteindre un consensus à travers toute la communauté. Différentes personnes ont des réserves ou des préoccupations concernant différents aspects de la sémantique et de la syntaxe (tout comme le Conseil de direction) », a déclaré le Conseil.

« Malgré cela, après de nombreuses délibérations, l'examen de toutes les conversations autour de ces PEP, ainsi que des propositions concurrentes et des résultats des sondages existants, et après plusieurs discussions en personne avec les auteurs des PEP, nous sommes confiants que le Pattern Matching tel que spécifié dans la PEP 634, et al, sera un grand ajout au langage Python », a-t-il ajouté. Outre ces faits, il a également annoncé qu'en raison de l'importance de cet ajout, il doit être accompagné d'une documentation et d'une spécification complètes.

Cela se fera à la fois dans la section tutoriel de la documentation et dans la référence du langage. Ces changements devraient survenir dès la version 3.10 de Python. « Nous considérons que la présence d'une telle documentation de haute qualité doit être présente dans la première version de Python 3.10, et donc son absence doit être considérée comme un bloqueur de version. Nous ne considérons pas les PEP ou toute autre pour être suffisante », a déclaré le conseil de direction.

Aperçu des modifications introduites par les PEP 634, 635 et 636

Les types de correspondance de motifs pris en charge comprennent les littéraux, les noms, les valeurs constantes, les séquences, une correspondance (notamment, la présence d'une paire clé-valeur dans l'expression), une classe, un mélange des éléments précédents, ou toute autre expression conditionnelle. Toute correspondance ambiguë ou impossible à résoudre entraînera une exception au moment de l'exécution. Les objets peuvent gérer les tests de concordance au moyen d'un nouveau protocole appelé "match_".

Nom : 111.png
Affichages : 2106
Taille : 14,5 Ko

Si un objet implémente la méthode "match_", il peut être utilisé pour tester s'il correspond à un motif de classe donné et renvoyer une réponse appropriée. Selon la terminologie provisoire, le processus de correspondance de motifs prend en compte un motif (cas suivant) et une valeur de sujet (correspondance suivante). Les expressions qui décrivent le processus sont les suivantes : "le motif est mis en correspondance avec (ou contre) la valeur du sujet" et "nous mettons en correspondance le motif avec (ou contre) la valeur du sujet".

Le principal résultat de la correspondance de motifs est le succès ou l'échec. En cas de succès, l'on peut dire que "le motif réussit", "la correspondance réussit" ou "le motif correspond à la valeur du sujet". Dans de nombreux cas, un motif contient des sous-motifs, et le succès ou l'échec est déterminé par le succès ou l'échec de la comparaison de ces sous-motifs avec la valeur (par exemple, pour les motifs "OR") ou avec des parties de la valeur (par exemple, pour les motifs de séquences). Ce processus traite généralement les sous-formes de gauche à droite jusqu'à ce que le résultat global soit déterminé.

Par exemple, un motif "OU" réussit au premier sous-motif suivant, tandis qu'un motif de séquence échoue au premier sous-motif défaillant. Un résultat secondaire de la correspondance de motifs peut être une ou plusieurs liaisons de noms. On peut dire que "le motif lie une valeur à un nom". Lorsque des sous-motifs sont essayés jusqu'au premier succès, seules les liaisons dues aux sous-motifs réussis sont valides ; lorsque l'on essaie jusqu'au premier échec, les liaisons sont fusionnées. Notons qu'il y a eu par le passé des propositions de la sorte, mais qui ont toutes été rejetées.

Les précédentes PPE visant à ajouter la correspondance de motifs, les PPE 275 et 3103, proposées respectivement en 2001 et 2006, ont toutes été rejetées en raison du manque de soutien populaire. La PEP 3103 a été rédigée par le créateur de Python Guido van Rossum. La nouvelle proposition, la PEP 634, rédigé par van Rossum et plusieurs autres, vise à fournir des expressions régulières pour la correspondance d'objets, plutôt qu'un simple substitut if/elif/else. Les auteurs notent que de nombreux aspects de cette PEP ont été inspirés par le fonctionnement de la correspondance de motifs dans Rust et Scala.

En marge de l'ajout de la correspondance de motifs, le conseil de direction de Python a également rejeté les PPE 640 et 642. « Les deux PEP ont reçu peu de soutien de la part des principaux développeurs. La syntaxe proposée par la PEP 642 ne semble pas être la bonne façon de résoudre les bords irréguliers de la syntaxe da la PEP 634, bien que le conseil comprenne le désir d'améliorer ces aspects de la proposition de correspondance de motifs », a déclaré le groupe.

Sources : Python Steering Council, PEP 634

Et vous ?

Que pensez-vous de l'ajout de la correspondance de motifs au langage Python ?
En quoi cette fonctionnalité peut-elle améliorer la productivité des développeurs Python ?
Attendiez-vous cette fonctionnalité ? Cela changera-t-il quelque chose dans la façon dont vous utilisez le langage ?

Voir aussi

Intel® Parallel Studio ne sera plus disponible en 2021 et va laisser place à oneAPI, la prochaine génération d'outils de dev Intel® pour la création et le déploiement d'apps hautes performances

Python et C++ sont les langages qui ont connu la plus forte croissance de popularité sur l'année 2020, selon les statistiques de l'index TIOBE

Toutes les versions de Python inférieures à 3.6 sont maintenant en fin de vie. La version 3.9 sera livrée en octobre prochain et la version 3.10 un an après

JetBrains lance l'édition 2021 de son enquête sur l'écosystème des développeurs et vous invite à contribuer afin de recueillir des informations représentatives de la communauté