Le futur de Perl

Sébastien Aperghis-Tramoni, sebastien@aperghis.net

Perl 5 et 6

  • développements en parallèle

  • pas de concurrence au niveau des ressources

Branches de Perl 5

  • 5.5

  • 5.8

  • 5.10

  • 5.12

  • 5.14

Perl 5.5.5

Perl 5.8.9

  • peu de nouveautés fondamentales

  • bénéficie d'une partie du refactoring des internes de 5.10

  • dépréciation de certaines fonctions internes en mathoms

  • (perl589delta pas encore écrit)

  • -DPERL_DONT_CREATE_GVSV

  • permet d'éviter de créer un scalaire vide pour chaque nouveau typeglob

Perl 5.10.1

  • correction des bugs détectés dans 5.10.0

  • passage d'arguments

        sub function {
            my ($self, $key, $value) = @_;
            ...
        }
  • smart match : comportement sur les tableaux

  • smart match : symétrie

  • smart match : objets

Attention

  • pour la plupart, conjecture, idées

  • sauf indiqué, non disponible

Syntaxe - each @array

  • each @array (ainsi que keys et value)

Syntaxe - syntaxe de déréférencement

  • actuellement une horreur

Syntaxe - yada yada yada

  • ..., !!!, ???

Fonctions

  • optimisation tail call

Fonctions

  • paramètres nommées

  • sub func ($x, $y) { ... }

Fonctions

  • fonctions lexicales nommées

  • my sub func { ... }

Fonctions

  • nom de méthode : ${^SUB} ou ${^ROUTINE}

  • Sub::Current

Fonctions

  • "suis-je une méthode ?" : ${^INVOCANT} ou (caller)[11]

Fonctions

  • mot-clé de déclaration de méthode : method run { $self-plonk; ... }>

Modèle objet - SUPER

  • actuellement statique par rapport à la classe de définition de la méthode

  • plus utile : dynamique par rapport à la classe de l'objet

Modèle objet - espaces de noms anonymes

  • déjà faisable avec des modules CPAN

  •       my $anon_pkg = Class::MOP::Class->create_anon_class(
              superclasses => [ 'Some::Base::Class' ],
              methods      => {
                  'foo' => sub { 123 },
                  'baz' => sub { 456 }
              }
          );
  •       my $reaper = Package::Reaper->new(
              Package::Generator->new_package( ... )
          );

Modèle objet

  • modèle d'exception

Internes - Y2038

Internes - Y2038

  •     #define SOLAR_CYCLE_LENGTH 28
        int _safe_year(int year)
        {
            int safe_year = 2016;
            int year_cycle;
        
            year += 1900;
            year_cycle = year % SOLAR_CYCLE_LENGTH;
        
            if (year_cycle <= 21)
                safe_year += year_cycle;
            else
                safe_year =  safe_year - (SOLAR_CYCLE_LENGTH - year_cycle);
        
            return safe_year;
        }
  • seulement 14 types d'années

        bisextiles: 2012, 2016, 2020, 2024, 2028, 2032, 2036
        normales  : 2027, 2030, 2031, 2033, 2034, 2035, 2037  

Internes - infini

  •     while ($n++) {
            ...
        }
  • patch de Jerry Hedden appliqué pour aller jusqu'à IV_MAX

Internes

  • meilleur support DTrace

Internes

  • abstraction du VFS pour support Unicode

Modules - lethal/autodie

  • Fatal.pm en version lexicale

  • peut-être intégré à 5.10.1

Modules - autoboxing

  • autobox, autobox::Core

  • sujet trollesque ;-)

Questions ?

Merci