Les nouveautés de Perl 5.24

Sébastien Aperghis-Tramoni
sebastien@aperghis.net

Présentation

  • condensé de perldelta (66 Ko)

  • seulement les changements les plus marquants

Cycles de publication

  • planification des versions

    • une version majeure par an (Q2)

    • des versions mineures tous les 2-3 mois

  • cycle de dépréciation court

    • avertissement pendant une ou deux versions majeures

    • suppression effective à la version majeure suivante

    • modules retirés envoyés sur le CPAN

Précédentes versions majeures

  • 5.12.0 le 12 avril 2010

  • 5.14.0 le 14 mai 2011

  • 5.16.0 le 12 mai 2012

  • 5.18.0 le 18 mai 2013

Perl 5.20

  • 5.20.0 le 16 mai 2014

    • 5.16 n'est plus officiellement supportée

  • principales nouveautés :

    • signatures de fonctions

    • déréférencement postfixé

    • tranche de hash

Perl 5.22

  • 5.22.0 le 1er juin 2015

    • 5.18 n'est plus officiellement supportée

  • principales nouveautés :

    • opérateurs : bitwise ; double diamant <<>>

    • regexps : use re "strict" ; nouvelles frontières de mot \b ; option de non-capture /n

    • fonctionnalités : refaliasing ; :const

Perl 5.24

  • 5.24.0 le 9 mai 2016

    • 5.20 n'est plus officiellement supportée

  • 5.24.1 probablement vers septembre 2016

  • 5.24.2 probablement vers mars 2017

Résumé

  • peu de nouveautés, des retraits de certaines choses

  • version de stabilisation

  • et bien sûr des correctifs et des optimisations

Confirmation - déréférencement postfixé

  • n'est plus une fonctionnalité expérimentale

  • use feature "postderef" maintenant sans effet

  • use v5.24 active postderef_qq

  •     $r = [ 1, [ 2, 3 ], 4 ];
        $r->[1]->@*;    # équivalent à @{ $r->[1] }

Regexps

  • nouvelles frontières de mot \b (UAX #29: Unicode Text Segmentation)

  • \b{gcb}, \b{wb} et \b{sb} introduits avec 5.22

  • \b{lb}Line Break, aussi disponible avec Unicode::LineBreak

  • \b{wb} — plus proche de ce qui est attendu en Perl

Regexps

  • erreurs à l'exécution maintenant détectées à la compilation

    • propriétés Unicode \p{} et \P{}

  • \N{} maintenant une erreur sous use re "strict"

  • qr/(?[ ])/ fonctionne maintenant avec les locales UTF-8

Unicode

  • Unicode 8.0.0

  • ajout de 7 716 caractères, dont 6 nouveaux systèmes d'écriture

    • nombreuses syllabes minuscules Cherokee, appariées avec les caractères existants

    • 5 771 idéographes CJK unifiés

    • nouveaux symboles emoji pour supporter la diversité dans la couleur de peau

    • caractères pour des langues africaines (Ik en Ouganda, Kulango en Côte d'Ivoire)

Nouveautés diverses

  • décalages binaires (<< et >>) ne dépendent plus de l'implémentation C du système

  • printf et sprintf supportent des arguments de précision réagençables

        sprintf '|%.*2$d|', 2, 3    # "|002|"
  • plus de champs passés au callback de sigaction configuré avec SA_SIGINFO

  • redirection de shebang vers Perl 6

Changements incompatibles

  • autoderef a été retiré

        push $arrayref, @values;
  • my $_ a été retiré

    • introduit dans 5.10 (2007), rendu expérimental dans 5.18 (2013)

  • caractères ASCII non graphiques interdits dans les noms de variables

Changements incompatibles

  • déclarations imbriquées interdites

        my ($x, my($y));
        our (my $x);
  • \C retirée

  • chdir('') ou chdir(undef) maintenant sans effet

     maddingue@Landroval:/tmp $ perl5.22.0 -E 'chdir(""); say `pwd`'
     Use of chdir('') or chdir(undef) as chdir() is deprecated at -e line 1.
     /Users/maddingue
     
     maddingue@Landroval:/tmp $ perl5.24.0 -E 'chdir(""); say `pwd`'
     /tmp

Changements internes

  • implémentation de la pile de contexte et son API interne

  • pas de gros changements sur l'API publique

  • mais assez pour casser certains modules CPAN

    • Algorithm::Permute, Coro, Data::Alias, RPerl, Scope::Upper, TryCatch, mod_perl

Dépréciations

  • utilisation de code points au dessus du IV_MAX de la plate-forme

  • opérations de bits sur les chaînes avec des code points au dessus de 0xFF

  • sysread(), syswrite(), recv() et send() sur des descripteurs en mode :utf8

Optimisations

  • entrée et sortie de portée lexicale plus rapides

  • opérations de casse (ucfirst(), qr//i) plus rapides sur les langages sans casse

  • /string/ potentiellement beaucoup plus rapide (dépend de memchr())

  • addition, soustraction et multiplication plus rapides

  • pré-/post- incrément / décrément plus rapides

Support de plates-formes

  • plates-formes à nouveau fonctionnelles

    • AmigaOS

  • nombreux correctifs

    • Win32, VMS, EBCDIC

Questions ?

Merci