Voici la présentation de la PEP 762 pour remplacer la REPL par défaut. La nouvelle REPL vise à fournir des fonctionnalités telles que l'édition multi-lignes, la coloration syntaxique, les commandes personnalisées et une expérience interactive globalement améliorée. Cette proposition offrirait plusieurs avantages, notamment l'écriture de tests plus simple et plus directe, accélérer le développement des fonctionnalités et la correction des bogues, ainsi qu'une meilleure flexibilité des développeurs.Une boucle de lecture-évaluation-impression (Read-Eval-Print Loop - REPL), également appelée shell interactif de premier niveau ou de langage, est un environnement de programmation informatique interactif simple qui prend des entrées utilisateur uniques, les exécute et renvoie le résultat à l'utilisateur. Un programme écrit dans un environnement REPL est exécuté de manière fragmentaire. Les exemples courants comprennent les shells de ligne de commande et les environnements similaires pour les langages de programmation, et la technique est très caractéristique des langages de script.
L'une des principales forces de Python est son mode interactif, également connu sous le nom de boucle de lecture, d'évaluation et d'impression (REPL), de console Python ou d'interpréteur de commandes Python. La PEP 762 (PEP pour Proposition d'amélioration de Python) décrit une nouvelle implémentation de cette fonctionnalité écrite en Python. La nouvelle REPL publiée dans Python 3.13 vise à fournir des fonctionnalités modernes attendues par les utilisateurs, telles que l'édition multi-lignes, la coloration syntaxique, les commandes personnalisées et une expérience interactive globalement améliorée.
Pourquoi un nouveau REPL ?
Jusqu'à Python 3.12, le shell interactif de CPython était écrit en C comme un mode spécial de l'analyseur. Il était donc difficile à maintenir et à étendre. Il dépendait de l'existence de GNU readline (ou d'un équivalent) pour des fonctionnalités de base comme le déplacement du curseur et le suivi de l'historique. Python compilé sans cette bibliothèque fournissait un mode interactif aux capacités très limitées. D'autre part, Python compilé avec readline externalisait les décisions et la configuration autour de l'entrée de l'utilisateur d'une manière qui rendait son extension difficile.
Cette complexité a découragé les contributions et a rendu difficile la mise en œuvre de nouvelles fonctionnalités. En conséquence, l'interpréteur de commandes interactif CPython n'a connu que des changements minimes, restant en deçà des attentes des utilisateurs pour des équivalents modernes.
De nombreuses fonctionnalités que les utilisateurs sont en droit d'attendre d'un shell interactif moderne étaient absentes de la version précédente. Parmi ces fonctionnalités, on peut citer l'édition multi-lignes et l'historique, les commandes personnalisées, la coloration syntaxique ou la gestion ergonomique du copier-coller. L'absence de ces fonctionnalités a un impact sur l'expérience de nombreux groupes d'utilisateurs de CPython, en particulier dans les environnements où les utilisateurs ne contrôlent pas les dépendances et ne peuvent pas installer leurs propres paquets. Ceci est particulièrement fréquent pour les utilisateurs qui apprennent le langage et les éducateurs.
La résolution de ces problèmes avec l'implémentation en C nécessiterait des solutions de contournement complexes, telles que la correspondance AST des commandes, ce qui ajouterait une complexité prohibitive à la base de code.
Le nouveau REPL écrit en Python répond donc à ces limitations tout en rendant l'expérience interactive de CPython plus conforme aux attentes et aux capacités modernes.
Les développeurs du noyau de Python commentent :
[QUOTE]
L'implémentation de la nouvelle REPL en Python, plutôt qu'en C, a considérablement réduit la barrière à l'entrée pour les contributeurs. Ce changement a facilité le test, la validation et la modification de la REPL, ce qui a permis d'accroître l'implication de la communauté et d'accélérer le développement des fonctionnalités. L'amélioration de l'accessibilité de la base de code devrait se traduire par une évolution plus rapide de la REPL et une plus grande réactivité de la part des utilisateurs.
Au lieu d'écrire un REPL Python à partir de zéro, nous avons décidé de baser l'implémentation du nouveau REPL sur PyREPL. Cette décision a été motivée par plusieurs facteurs clés. Tout d'abord, le développement d'une application de terminal qui fonctionne de manière cohérente sur différents systèmes d'exploitation et émulateurs de terminal est une entreprise complexe. En adoptant PyREPL, qui a été testé dans le cadre du projet PyPy, nous pouvons tirer parti d'un code existant et éprouvé plutôt que de partir de zéro.
Le partage d'une base de code avec PyPy pour l'implémentation de la REPL offre des avantages mutuels aux deux projets. Cela permet de partager les efforts de maintenance, de corriger plus rapidement les bogues et d'améliorer les fonctionnalités, ce qui peut profiter aux utilisateurs de CPython et de PyPy. Cette collaboration peut conduire à un REPL plus robuste et plus riche en fonctionnalités pour l'ensemble de l'écosystème Python.
La précédente REPL écrite en C s'appuyait sur les bibliothèques readline ou editline pour permettre certaines fonctionnalités telles que la navigation, la conservation et le rappel de l'historique, l'autocomplétion et le comportement configurable du clavier. PyREPL n'utilise pas ces bibliothèques, implémentant la...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.

Pensez-vous que cette PEP est crédible ou pertinente ?