Annonce de Perl 7

Posté par  . Édité par Lawless, Ysabeau, Davy Defaud, theojouedubanjo, ZeroHeure, Bruno Ethvignot, Alcyone et palm123. Modéré par ZeroHeure. Licence CC By‑SA.
Étiquettes : aucune
47
12
juil.
2020
Perl

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 7Diapo explicative de Sawyer X

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é :

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.
SurprisedMonkey 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.
why7

« 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 :

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.
retro
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.
evolve
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 :
p5pFils 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 (trycatch, 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 !

Aller plus loin

  • # Une bonne initiative

    Posté par  . Évalué à 7 (+6/-0).

    IMHO : Avoir utilisé le principe "feature guard" pour faire évoluer le langage tout en conservant une rétro-compatibilité ne pouvait pas durer éternellement.

    Ce principe appelait d’emblée à une mise à jour de Perl, car la rendait possible techniquement.

    Il ne manquait plus que la volonté "politique" (merci sawyerX) de faire le premier pas.

    Bien sûr, le plus dur dans cette migration sera le CPAN (dont l’automatisation a été proposée ici).
    Mais les mainteneurs de modules étant responsables de leur code, c’est bien à eux de déterminer ou non la migration à terme de leur modules dans la branche 7 : si en plus, l’équipe du core de Perl leur propose les outils nécessaires pour le faire, les dents vont moins grincer.

    Pour tout le code ≤ 5.8 sans flag strict et warnings qui tourne déjà sur des distrib pas upgradées depuis 10 ans il finira peu à peu dans des containers ou sera remplacé.

    A bien y réfléchir, la fenêtre de temps d’environ 9 mois entre le renommage de Perl6 en Raku a libéré les esprits, pour le mieux.

    Tous mes vœux de réussite aux prochaines versions de Perl (et Raku évidemment) !

  • # Oui, quel fardeau ?

    Posté par  (site Web personnel) . Évalué à 8 (+6/-0).

    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.

    Il semblerait qu'un commentaire datant de l'ébauche de la nouvelle se soit retrouvé publié :)

    Sinon, c'est interessant. Je ne savais pas que « Perl 6 n'était plus Perl » donc j'irai y jeter un œil aussi.

    J'aurais pas été contre un petite liste des fonctionnalités activées de base aussi. use strict et tout.

    • [^] # Re: Oui, quel fardeau ?

      Posté par  (site Web personnel) . Évalué à 4 (+2/-0).

      Corrigé, merci. Le coupable déménagera les serveurs de linuxfr sur son dos.

      "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

    • [^] # Re: Oui, quel fardeau ?

      Posté par  (site Web personnel) . Évalué à 4 (+2/-0).

      J'aurais pas été contre un petite liste des fonctionnalités activées de base aussi. use strict et tout.

      Tu peux jeter un œil sur le wiki de perl pour ça.

      « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

  • # Un coup d'état futile

    Posté par  . Évalué à 1 (+4/-3).

    Ca restera Perl 5 avec des défauts acceptables. Défauts dans les deux sens du mots. Je ne met pas en doute les compétences programmatiques de Sawyer. Mais appeler ça 7.0 est une escroquerie car l'architecture sous jacente reste la même. C'est un coup d'éclat égotique, futile et sans lendemain. La promesse d'une version majeure est d'attirer de nouveaux utilisateurs mais ça n'a aucun sens d'apprendre Perl en 2020.

    Les détails importants sont flous et seront l'objet de guerres de tranchée. Véritable support objet, difficile donc exclu par Sawyer. Même utf-8 par défault n'est pas acquis et ne sera jamais comparable au support par raku.

    Larry Wall, le créateur de Perl, voulait que le futur de Perl soit raku (anciennement Perl 6). Raku devait profiter de la notoriété de Perl. Le coup d'état à consisté à enfumer les gens de Perl 6.0 en leur demander de se renommer en raku. Le coût a été énorme, programmatique et de notoriété. Larry Wall voyait 7.0 comme une version hypothétique et parfaite donc personne n'a vu le coup venir. Mais 6.0 étant dégagé,
    sawyer pouvait utiliser 7.0. Ne jamais faire de concessions à des manipulateurs, c'est le prélude à d'autres concessions.

    Les modes de compatibilités prévus initialement prévus pour raku ne sont pas possible. On peut faire interopérer le moteurs de Perl 5 et de raku mais on ne pourra pas interpréter du Perl 5 ou 7 avec le moteur raku.

    Raku est un excellent langage. Son moteur, MoarVM est excellent. Mais sans support
    académique et corporate, il dépend du bon vouloir d'une core teapm excellente mais peu nombreuse.

    On ne voit plus Larry Wall qui semble maintenant plus s'intéresser à ces petits enfants qu'à Perl. 7.0 ne vas pas le ramener.

    Je fais du Perl depuis plus de 30 ans, ne suis plus guère Perl 5 et connaît les internes de raku. Les mongueurs de Perl qui auraient dû publier ce post mais sont en état de coma avancé.

    • [^] # Re: Un coup d'état futile

      Posté par  . Évalué à 3 (+3/-0). Dernière modification le 16/07/20 à 19:41.

      J'ai dit : Même utf-8 par défault n'est pas acquis et ne sera jamais comparable au support par raku.

      Je précise.
      raku utilise en interne des code synthétiques de longueur constante de 32 bits donc tous les caractère même composites sont de même longueur ce qui facilite l'implémentation
      des routines concernant les chaines. Bien sûr l'utf-8 est supporté mais pas utilisé en interne.

    • [^] # Putsch ou guerre civile ?

      Posté par  . Évalué à 5 (+4/-0).

      Le changement de nom de P6 vers Raku semble autant voulu des deux côtés (pour des raisons différentes) afin d'éviter l’explosion en vol.

      La situation initiale était très toxique pour la communauté et la majorité des bonnes volontés de rapprochement des deux langages est venue des devs de Raku : Avec des portages ad-hoc de modules de Perl5 par Elizabeth Mattijsen et le module Inline::Perl5 (a noter qu’il y a aussi Inline::Python, mais c’est une autre histoire …).

      Le retour de la Perl Fondation a été inexistant même si elle a financé et continue de le faire les travaux d’optimisation de la VM de Raku; la communauté quant à elle s’est montrée inintéressée voire hostile dans sa majorité.

      Le changement de nom, IMHO à fait du bien aux deux parties, laissant certes Raku dans une position de faiblesse au niveau de ses ressources et de sa visibilité, mais a libéré des énergies qui auraient été gâchées par des querelles de chapelles. En optant pour un nouveau nom, Raku est sortit par la grande porte au niveau moral en laissant plus d’écho aux voix du changement dans la communauté Perl (Curtis Poe, Sawyer, et même Damian Conway).

      Si le passage à P7 paraît mineur (il l’est, je ne le nie pas), il ouvre le chemin vers des modifications plus profondes ; modifications que j’espère, mais si le camp des conservateurs l’emporte (Sawyer même si il semble jouer sur du velours, mise gros sur ce coup là) et cela ne résulte que d’un coup d’épée dans l’eau, seule la communauté de Perl aura à s’en mordre les doigts et Camelia (ça aurait pu être un nom sympa, soupirs …) n’aura pas à en souffrir.

      Pour en revenir à Raku, je pense aussi que c’est un excellent langage, compréhensible autant que compréhensif pour l’utilisateur qui offre la possibilité de produire du code clair (voir même naïf) pour des situations simples, et permet la complexification sans charge cognitive trop lourde.

      Note : si Larry semble maintenant plus s'intéresser à ces petits enfants, c’est tout à son honneur.
      Il a toujours insisté sur le côté humain du dev dans ses conférences, son attitude est donc linguistiquement autant pertinente que performative.

  • # enfin!!

    Posté par  . Évalué à 1 (+0/-0).

    Je fut grand amateur de Perl mais je suis toujours consterné de voir des programmes d'autres écrits en comme du shell vaguement amélioré.

    Perl a mon avis de grands avantages mais était plombé par sa sainte rétrocompatibilité qui l'empêchait d'évoluer. Mais rien qu'un use strict; activé par défaut aurait tellement amélioré la qualité de tous les codes et au passage améliorer sa réputation….

    Python a choisi le chemin inverse et malgré quelques difficultés, ça se passe bien!

    Je vais suivre avec attention ce Perl7 !

  • # 21 jours, 12 commentaires.

    Posté par  (site Web personnel) . Évalué à 2 (+1/-0).

    Une nouvelle (supposée) version majeure de Perl, un renoncement en ellipse (Raku), et 12 commentaires en 21 jours. Que les temps ont changé…

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.