URL: https://linuxfr.org/news/annonce-de-perl-7 Title: Annonce de Perl 7 Authors: contra-sh Lawless, Ysabeau, Davy Defaud, theojouedubanjo, ZeroHeure, Bruno Ethvignot, Alcyone et palm123 Date: 2020-06-30T13:23:05+02:00 License: CC By-SA Tags: Score: 4 C’est officiel, Sawyer X a annoncé Perl 7. C’est une révolution pour Perl, clairement. Cependant, Perl 7 ne sera pas une révolution en termes de fonctionnalités mais une étape de modernisation pour activer un grand nombre de fonctionnalités par défaut, qui étaient jusque‑là activables à la demande, ainsi que changer de paradigme de développement, puisqu’on va faire avancer le langage plutôt que de systématiquement privilégier la rétrocompatibilité. ![Perl 7](https://i.imgur.com/mMfH65w.png) _Diapo explicative de Sawyer X_ ---- [Vidéos de la conférence Perl](https://www.youtube.com/c/YAPCNA/videos) [Liste de diffusion p5p](https://www.nntp.perl.org/group/perl.perl5.porters/) [Perl](https://www.perl.org/) [Code source de Perl](https://github.com/Perl/perl5) ---- # YAPC Il y a quelques jours s’est tenue la [plus grande conférence annuelle](https://www.youtube.com/yapcna) autour du langage [Perl](https://www.perl.org/). 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](https://mojolicious.org/) et [Dancer](http://perldancer.org/), ou sur la [promotion de Perl](https://www.perlfoundation.org/) ; - des _keynotes_ par des personnalités majeures de Perl ou Raku ([Sawyer X](https://twitter.com/perlsawyer), [Damian Conway](https://fr.wikipedia.org/wiki/Damian_Conway) et [Johnathan Worthington](https://www.jnthn.net/)) ; - des conférences sur de nombreux sujets comme les tests (Perl <3 tests…), la fonctionnalité [_async_ de Mojolicious](https://mojolicious.io/blog/2019/12/26/announcing-core-async-await/), comment faire tourner [Perl en WebAssembly](https://webperl.zero-g.net/), l’[intégration continue](https://fr.wikipedia.org/wiki/Int%C3%A9gration_continue) avec Perl, le débogueur, l’analyseur, le YAML, etc. ; - des discussions éclairs (_lightning talks_), par exemple sur [OpenQA](http://open.qa/) ou sur [l’interfaçage avec d’autres langages](https://metacpan.org/pod/Alien::FFI) (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](https://www.youtube.com/c/YAPCNA/videos). :) # Annonce de Perl 7 Lors de la [_keynote_ d’introduction](https://www.youtube.com/watch?v=6wPMh-3qYJM), Sawyer X, l’actuel mainteneur en chef de Perl, a surpris tout le monde en annonçant que la prochaine version de [Perl 5](https://github.com/Perl/perl5) serait [Perl 7](https://www.perl.com/article/announcing-perl-7/). ![Surprised](https://live.staticflickr.com/6024/5888927678_9b2c9b8e14_b.jpg) _[Monkey surprise](https://www.flickr.com/photos/29468339@N02/5888927678), par [@Doug88888](https://www.flickr.com/photos/29468339@N02) — licence [CC BY‐NC‐SA 2.0](https://creativecommons.org/licenses/by-nc-sa/2.0/?ref=ccsearch&atype=rich)._ Dans la foulée, [brian d foy](https://en.wikipedia.org/wiki/Brian_d_foy) a annoncé la sortie de son livre qui explique comment se [préparer à Perl 7](https://perlschool.com/books/preparing-for-perl-7/). # Pourquoi Perl 7 ? Tout simplement parce que Perl 6 est devenu un autre langage et a été renommé [**Raku**](https://www.raku.org/). ![why7](https://i.imgur.com/gUuXLXE.png) # « 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](https://linuxfr.org/news/sortie-de-perl-5100), en 2007 ; - [Sortie de Perl 5.12](https://linuxfr.org/news/perl-512-une-constante-jeunesse), en 2010 ; - [Sortie de Perl 5.14](https://linuxfr.org/users/jbbourgoin/journaux/sortie-de-perl-5140), en 2011 ; - [Sortie de Perl 5.16](https://linuxfr.org/news/perl-5-16-0), en 2012 ; - [Sortie de Perl 5.18, 5.20 et 5.22](https://linuxfr.org/news/sortie-de-perl-5-22-0) (5.18 en 2013, 5.20 en 2014, 5.22 en 2015) ; - [Sortie de Perl 5.30](https://linuxfr.org/news/sortie-de-perl-5-30-0) (5.24 en 2016, 5.26 en 2017, 5.28 en 2018, 5.30 en 2020) ; - [Sortie de Perl 5.32](https://linuxfr.org/news/sortie-de-perl-5-32-0), 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](https://perldoc.pl/feature.html)_ ». 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](https://perldoc.pl/feature.html#The-'fc'-feature)). 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](https://perldoc.pl/perlhist). ![retro](https://i.imgur.com/NjaJNVu.png) 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 » **[de quel fardeau parlent‑ils ?]** et d’activer un bon nombre de ces « défauts » qui sont quasi‑incontestables. ![evolve](https://i.imgur.com/MAnauKV.png) 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](https://github.com/Perl/perl5/wiki/The-Proposal-for-Perl-7). 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](https://github.com/Perl/perl5/issues), le canal IRC _#p5p_ ainsi que la [liste de diffusion](https://www.nntp.perl.org/group/perl.perl5.porters/) (en particulier le fil de discussion « _[Announcing Perl 7](https://www.nntp.perl.org/group/perl.perl5.porters/2020/06/msg257565.html)_ ») se sont transformés en forum : ![p5p](https://i.imgur.com/fR9iSfw.png) _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](https://www.nntp.perl.org/group/perl.perl5.porters/2020/07/msg257817.html). 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](https://metacpan.org/). 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](https://fr.wikipedia.org/wiki/Sigil_(informatique)) », 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](https://www.cpantesters.org/) qui va devoir tourner à plein régime pour migrer, tester et corriger les [modules CPAN](https://metacpan.org/) (presque [200 000 modules](https://www.cpan.org/)) ! En attendant, à très bientôt Perl 7, je l’espère !