[toulouse-pm] TPC 6

Michel Rodriguez mrodrigu at ieee.org
Wed Jul 24 14:22:39 CDT 2002


Perl 6: where is it? (Damian et Larry)

Qu'est-ce qui est deja fait: structures de controles, regexps,
fonctions...

Architecture: voir Dan (Sugalski) et son talk sur Parrot vendredi.

Ce qui change:

 -> devient . (j'espere que tout le monde est au courant) mais la plupart
du temps on peut s'en passer completement $ref->(@args) devient en fait
$ref(@args) (le dereferencement se fait automagiquement).

$@% sont invariant: $toto[$index] devient @toto[$index] (de toute facon le
systeme de perl5 est complique avec des donnees complexes
@hash{@keys}=@values
par exemple). D'apres Damian "as soon as ou move to Perl 6, all your buggy
code is fixed"

' _ ' pour la concatenation ("you don't have to like it", "yes we tried
everything else"

attributs (appeles properties en Perl 6): ce sont des "post-it" notes
attachees a une variable (ou une fonction). On peut meme retourner "0 but
true". Si vous avez pas regarde ces trucs faites-le, c'est vraiment tres
cool. C'est disponible avec Perl 5, c'est meme dans le core de 5.8.0:
http://search.cpan.org/doc/JHI/perl-5.8.0/lib/attributes.pm .

if( 1 < $x < 10) { ... } va marcher (y compris avec plus de 3 termes)

=~ teste l'egalite "au mieux", numerique si il faut, string, objet,
en fait il y a 35 cas

// (prononcer eur), j'ai deja du en parler, equivalent a || mais faux si
le terme de gauche est undef, la version equivalente a or et and est err

Parameter lists: sub( $value, $from, $to, @except) marche attention, ici
@except doit etre un tableau ou une reference a un tableau, pas une liste,
mais sub( $value, $from, $to, *@except marche avec une liste.

:= vole a Pascal (au moins la syntaxe) cree un alias
$toto:= @arr[7]; maintenant modifier $toto modifie @arr[7]
(@a, @b):=(@b, @a); marche et echange les tableaux (en fait les noms des
tableaux, donc c'est tres rapide)

Tout bloc est une sub/closure. Normalement le bloc est juste execute.
Entre autre ca permet de passer des blocs en parametres (pour ecrire
des fonctions avec la meme syntaxe que sort, map et grep)

Hyperoperateurs: ^<operateur> fait marcher l'operateur sur une liste:
@result= @x ^- @y

Currying: on peut appeler toute fonction avec - d'arguments que declares
et on recupere une fonction qu'on peut appeler avec le reste des
arguments. Damian plaisante que personne n'y comprends rieng mais que
c'est cool quand meme.

Switch:
  given $val { when 1 { print "number 1" }
               when [1..10, 42] { print "number in list" and continue}
               when @array { print "number in list" and break}
               do_something_here();
               when &sub { print "argument to subroutine" }
             }
ca utilise le meme "smart equal"que =~

Il n'y a plus besoin d'avoir des parentheses autour des tests.

Topics: une boucle for (il n'y a plus de foreach) cree un "topic", en gros
l'equivalent de $_. Une fonction cree un topic: son premier argument (ca
permet d'ecrire de l'objet plus naturellement) La syntaxe de for est
maintenant for LIST BLOCK Plus de parametres, Chip Salzenberg proteste
;--). Mais comme le block est une fonction il peut prendre des parametres.
Du coup il existe un autre syntaxe pour declarer les parametres:
for @data -> $next { print $next } (le block n'a pas de nom mais il a un
parametre quand meme!). Du coup on peut rajouter des parametres et boucler
plusieurs elements a la fois: for @data -> $x, $y { ... }
On peut meme boucler sur plusieurs tableaux en //:
for @arr1; @arr2 -> $v1; $v2 { ... }

Exceptions

try { block } remplace eval { block }
On peut mettre CATCH dans le block (pour avoir acces aux variables du
bloc)
pour choper les exceptions. Je vous passe les details sur les types
d'exceptions. Ya meme pas besoin de mettre try en fait.

Bon, je dois changer la batterie de mon portable, je vais donc sauter le
passage sur les regexps, mais de toute facon ca doit etre dans le CR de
YAPC.

Je suis de retour pour les questions.

Dates? On va prendre notre temps, on veut que ca soit "Right, not Right
Now"
Un idiot demande si les nouvelles regexps (qui utilisent < et >) vont
l'obliger a backslasher tous ses < et >. Ca se resoud en donnant un nom a
une regexp. (NdM: ou en utilisant un parser XML, creting!).
Une question sur la lisibilite de Perl 6: Damian dit que en fait Perl 6
est plus lisible, voir son talk de cet apres-midi (qu'il avait fait a
YAPC)  sur des programmes Perl 5 portes sous Perl 6.
Une question sur "les livres sur Perl 6": il y en aura plein, OO Perl 6
sera plus court ;--)
Une question sur les modules: Perl 6 ne devrait inclure que tres peu de
modules dans le core.

En general le but du design de Perl 6 est de trouver des principes simples
qui permettent d'avoir un langage plus puissant.

C'est fini!

Michel Rodriguez
Perl &amp; XML
http://www.xmltwig.com





More information about the Toulouse-pm mailing list