Sommaire
YAPC
Il y a quelques jours s’est tenue la plus grande conférence annuelle autour du langage Perl. Pendant trois jours se sont succédé :
- de nombreux ateliers (aussi appelés BOF soit « Birds Of a Feather »), par exemple sur les cadriciels Web Mojolicious et Dancer, ou sur la promotion de Perl ;
- des keynotes par des personnalités majeures de Perl ou Raku (Sawyer X, Damian Conway et Johnathan Worthington) ;
- des conférences sur de nombreux sujets comme les tests (Perl <3 tests…), la fonctionnalité async de Mojolicious, comment faire tourner Perl en WebAssembly, l’intégration continue avec Perl, le débogueur, l’analyseur, le YAML, etc. ;
- des discussions éclairs (lightning talks), par exemple sur OpenQA ou sur l’interfaçage avec d’autres langages (FFI).
Toutes les vidéos sont disponibles sur la page YouTube officielle de la conférence Perl & Raku, hébergée par la Fondation Perl. :)
Annonce de Perl 7
Lors de la keynote d’introduction, Sawyer X, l’actuel mainteneur en chef de Perl, a surpris tout le monde en annonçant que la prochaine version de Perl 5 serait Perl 7.
Monkey surprise, par @Doug88888 — licence CC BY‐NC‐SA 2.0.
Dans la foulée, brian d foy a annoncé la sortie de son livre qui explique comment se préparer à Perl 7.
Pourquoi Perl 7 ?
Tout simplement parce que Perl 6 est devenu un autre langage et a été renommé Raku.
« Feature guards »
Toutes ces années, l’interpréteur (et le langage) ont bien continué d’évoluer avec des versions majeures, et ce, de façon très régulière… Mais sur les numéros mineurs… (nous en sommes à la version Perl 5.32.0). Voici les dépêches LinuxFr.org traitant des sorties de Perl :
-
Sortie de Perl 5.10, en 2007 ;
-
Sortie de Perl 5.12, en 2010 ;
-
Sortie de Perl 5.14, en 2011 ;
-
Sortie de Perl 5.16, en 2012 ;
-
Sortie de Perl 5.18, 5.20 et 5.22 (5.18 en 2013, 5.20 en 2014, 5.22 en 2015) ;
-
Sortie de Perl 5.30 (5.24 en 2016, 5.26 en 2017, 5.28 en 2018, 5.30 en 2020) ;
-
Sortie de Perl 5.32, en 2020.
Perl évolue, mais ne casse jamais rien, car, jusque‑là, Perl a fait preuve d’une rétrocompatibilité presque maladive (et tant mieux !). Techniquement, les changements incompatibles sont « cachés » derrière des « feature guard ». Sawyer X a déclaré que « les feature guards sont très intéressants, ils gardent la syntaxe. L’idée est qu’elle ne changera jamais à moins que vous ne le demandiez, ce qui est une très bonne idée car cela offre une bonne protection contre une syntaxe et une sémantique non désirées.
Pour donner un exemple, le comportement du mot clé fc
peut être modifié en activant use feature 'fc'
dans notre programme (doc).
Plusieurs features guards peuvent être utilisés au sein d’un même programme selon les portions (portée lexicale) et l’on peut également supprimer des fonctionnalités avec no feature …
. On peut également activer un ensemble de features guards tout d’un coup avec un use version
.
Par exemple, use v5.32
active le « pack de fonctionnalités Perl 5.32 » et empêchera également, si besoin, l’exécution sur un interpréteur plus ancien :
$ perl -e "use v5.32;"
Perl v5.32.0 required--this is only v5.26.1, stopped at -e line 1.
Perl 5.000 est sorti en 1994 mais, dans la pratique, on peut dire que la rétrocompatibilité s’étend plutôt sans problème jusqu’à 5.10.* (5.10.0 en 2007) ou 5.8.* (5.8.0 en 2002), parfois même un peu plus (5.6.*…). Tous les détails sur les dates de sorties dans l’historique des sorties de Perl.
Si l’on n’essaye pas délibérément d’utiliser des fonctionnalités modernes (activables donc), on peut très facilement écrire du code qui tournera partout, pour longtemps, et même sur Perl 5.8.9 ou 5.10.1.
D’autres « défauts » ne sont pas des fonctionnalités, mais des recommandations comme use strict
et use warnings
qui permettent de protéger le programmeur de lui‑même et sont mises en avant comme bonnes pratiques par la communauté Perl depuis très longtemps.
Les développeurs de Perl ont donc décidé de se débarrasser de ce « fardeau » et d’activer un bon nombre de ces « défauts » qui sont quasi‑incontestables.
Le comportement des « défauts » va changer, mais les Perl porters ne sont pas fous et il sera toujours possible de retrouver le comportement d’avant avec un mode de compatibilité Perl 5…
Tous les détails techniques de la proposition Perl 7 sont disponibles sur cette page de wiki.
La version 7.0.0 est prévue au plus vite (si possible a la place de la 5.34.0).
En plus de la modernisation du langage, Perl 7 sert également de :
- pont vers Perl 8, qui est peut être la véritable révolution (qui verra sûrement de nombreuses nouveautés, ainsi que de nombreuses dépréciations et du nettoyage de code) ;
- communication pour faire parler du langage en donnant une image positive.
Après l’annonce
L’annonce a été très bien accueillie et laisse place maintenant aux discussions d’implémentation et à quelques inquiétudes ou quelques réfractaires. Le GitHub Perl 5, le canal IRC #p5p ainsi que la liste de diffusion (en particulier le fil de discussion « Announcing Perl 7 ») se sont transformés en forum :
Fils de discussion sur la liste de diffusion.
Parmi les remarques, il ressort que certains souhaitent à tout prix utiliser un marqueur de version majeure comme use v7
(sans pour autant s’en servir de « feature guard » à proprement parler), et cette demande a d’ailleurs par la suite été acceptée. Il y aura donc une sorte de « protocole » permettant de définir pour quelle génération de l’interpréteur est écrit le code. Le but étant de faciliter le plus possible une migration douce du CPAN.
L’idée étant « on peut casser, mais pas trop à la fois » et qu’il n’est pas souhaité de « forker » le CPAN. Toutes ces précautions se comprennent tout à fait, car la rétrocompatibilité était un des plus gros points forts de Perl… Mais ce n’est pas le seul !
Il y a également de nombreuses demandes de fonctionnalités (try
‑catch
, les types, le comportement des « sigils », de nouveaux opérateurs…). Mais, là, c’est plutôt hors sujet. Bref la communauté est en pleine ébullition !
Et Perl 5 dans tout ça ?
Il est prévu une période de support étendu de minimum cinq à dix ans pour Perl 5.32. Perl dispose d’une infrastructure d’outils (installateurs très intelligents qui pourraient modifier du code à la volée) et d’une culture du test qui va devoir tourner à plein régime pour migrer, tester et corriger les modules CPAN (presque 200 000 modules) !
En attendant, à très bientôt Perl 7, je l’espère !