[Toulouse-pm] [ppm] YAPC::Europe::2003 (3) (fwd)

Michel Rodriguez mirod at xmltwig.com
Tue Jul 29 10:29:02 CDT 2003


Cui-la a l'air tres bizarre chez moi...

---------- Forwarded message ----------
Date: Tue, 29 Jul 2003 16:42:15 +0200
From: "[ISO-8859-1] Sébastien Aperghis-Tramoni" <maddingue at free.fr>
To: Paris.pm <paris-pm-list at pm.org>
Subject: [ppm] YAPC::Europe::2003 (3)

Vendredi 25 juillet

* Dan Sugalski - Parrot in a nutshell
     Dan présente Parrot en commençant par expliquer en quoi
     l'interpréteur Perl5 actuel est un vrai merdier. En effet, Perl5
     est le résultat de 9 ans de patches successifs pour ajouter un
     ensemble de fonctionnalités qui n'avaient pas été prévues au
     départ car cela n'existait pas à l'époque : on pense tout
     particulièrement au support des threads et d'Unicode.

     Des tas de personnes ont donc proposé des patches en disant
     "cela ne coûte qu'1% du temps d'exécution". Mais les patches
     étant acceptés, les pourcentages se sont additionnés pour
     ralentir de manière sensible l'interpréteur Perl. (Raison pour
     laquelle Nick Clark indiquait qu'un moyen potentiel d'accélérer
     un programme était d'utiliser une ancienne version de Perl.)

     Perl6 se base sur une machine virtuelle (VM) totalement nouvelle,
     Parrot. Cette machine virtuelle a été conçue en utilisant les
     dernières avancées en matière des techniques de VM, de
     théorie de compilation et de conception des CPUs (ces domaines
     étant liés). Le projet est ambitieux mais on espère ainsi que
     cette VM évoluera de manière plus douce sur la décade à venir.

     L'autre ambition de Parrot est que cette VM soit suffisamment
     générique pour servir de base d'exécution à d'autres langages
     comme Ruby ou Python.

     Dan expose ensuite la véritable raison qui l'a décidé à
     programmer Parrot : jouer à Zork nativement.
     (Si j'ai bien compris Zork était un jeu d'aventures en mode texte).

     En effet, Parrot supportera nativement bon nombre de
     fonctionnalités très intéressantes comme le support de bytecode
     portable (semblable à Java ou Python) et un garbage collector
     natif de bien meilleur qualité que celui de Perl5 (je crois avoir lu
     qu'il allait beaucoup ressembler à celui de Lisp).

     Ce qui nous amène à un point essentiel dans le développement
     de Parrot : le défi que Guido von Rossum a lancé à Dan Sugalski,
     à savoir que selon Guido, Parrot ne sera pas capable d'exécuter
     Python plus rapidement que CPython (l'interpréteur Python écrit
     en C) d'ici le prochain OScon. L'enjeu est le lancer de tarte à la
     figure du perdant, d'où l'orthographe spéciale de Python durant
     tous ces talks, "Pie-thon".

     Dan a expliqué qu'il a toutes les chances de se trouver du bon
     côté de la tarte car Parrot est ou sera bientôt capable de charger
     n'importe quel type de bytecode : Python, Zork et même Java !


* Leopold Tötsch - Of Ops and MOps
     Dans un anglais quelque peu hésitant, Leo nous explique les
     bases de la programmation en Parrot.

     On peut d'ores et déjà programmer en PASM, ou Parrot
     Assembler, qui est un assembleur (en fait c'est plutôt un
     macro-assembleur) dont la syntaxe semble assez facile.
     Lors de l'exécution, l'assembleur est convertit en PIR,
     Parrot Intermediate Representation Language, qui est
     ensuite exécuté.

     Leo présente ensuite quelques points qui permettent à Parrot
     d'être très rapide :

     - Parrot est une machine à registre, c'est-à-dire que tant la VM
       que le langage d'assembleur considère qu'on a beaucoup de
       registres disponibles, ce qui simplifie la vie du programmeur et
       est facile à optimiser en aval (par aliasing de registres par
       exemple). La VM ressemble donc à un processeur RISC (genre
       PowerPC ou Sparc) mais pas à un processeur Intel ou AMD.

     - les PMC (Parrot Magic Cookies) ont une taille de 32 octets
       (là je dois reconnaître qu'il m'a un peu embrouillé et je ne
       pas trop compris ses arguments, mais une comparaison avec
       les vrais CPUs indique qu'une taille fixe égale à un multiple
       entier de mots machine permet de se simplifier la vie lors des
       calculs d'adresses (là encore voir l'opposition entre les CPUs
       RISC et x86)).

     - DOD (Dead Object Detection)

     - COW (Copy-on-Write) est un mécanisme qui permet de retarder
       les opérations d'allocations mémoire au pus tard. L'exemple
       typique est :
           $foo = "hello world";
           $bar = $foo;
       Habituellement, le contenu de $foo est copié dans un nouvel
       espace mémoire qui sera pointé par $bar. Avec COW, $bar
       pointe vers l'espace mémoire de $foo, et ce n'est que si on
       modifie la valeur de l'une ou l'autre des variables qu'une
       nouvel espace mémoire est créé.
       Cette fonctionnalité semblait particulièrement intéresser
       certaines personnes du public qui avait posé la question à
       MJD lors de son talk "Tricks of the Wizard". Le mécanisme
       sera par la suite mis en scène par Nick Clark lors de son
       lightning talk, comme l'a déjà décrit Mirod.

     Leo expose ensuite quelques uns des différents run cores
     disponibles dans Parrot. Si j'ai bien compris, les run cores sont
     les coeur d'exécution de Parrot, mais comme ils n'étaient pas sûr
     de savoir quel mécanisme serait le plus efficace, ils ont développé
     plusieurs run cores : Fast Core, Goto Core, Slow Core, et des
     combinaisons. Leo montre le Fast Core avec du code C :
         while(PC) {
             PC = ((INTERP->op_func_table)[*PC])(PC,INTERP);
         }
     Je crois que la majeure partie de la salle est restée dubitative
     face à ça...

     Leo explique ensuite que Parrot dispose d'un sous-système JIT
     (Just-In-Time) disponible pour plusieurs architectures (x86,
     PowerPC, Sparc, ARM, Alpha).
         Pour rappel, un système JIT (aussi dit de recompilation
         dynamique), permet de transformer le bytecode en code
         natif pour le CPU de la machine hôte. C'est ce qui permet
         à Java d'avoir des vitesses d'exécution à peu près acceptables.
     Leo nous montre le résultat d'un benchmark qu'il avait lancé au
     cours de son talk; c'est un truc calculatoire écrit en Perl et en
     Python. Les temps d'exécution sont lamentables, à peine 2 ops
     par seconde en Perl et 1 op par seconde en Python. "Times are
     rounded up!" précise Leo. Il exécute le même en Parrot : quelques
     secondes, soit presque 800 ops par secondes (son PowerBook
     tourne à 800 MHz..)

     Après cette démonstration, Leo conclut sur le système JIT en
     indiquant que comme a pu le constater, on peut arriver à exécuter
     jusqu'à 1 instruction Parrot par cycle CPU ! Évidemment, c'est
     surtout valable pour les instructions "simples" (ou du moins
     disponibles dans le CPU), mais c'est néanmoins assez
     impressionnant.

     Sa présentation terminée, quelqu'un dans le public demande
     à Leo de montrer qu'est-ce qu'il utilise pour ses "slides" (du
     texte affiché dans un terminal qui efface l'écran et défile quand
     il appuie sur une touche) : "Parrot of course!". Il montre le code
     assembleur Parrot qu'il a utilisé pour son talk, qui doit faire
     moins d'une cinquantaine de lignes. Nouvelle salve
     d'applaudissements.


* Leon Brocard - Little languages in Parrot
     Le talk de Leon est consacré aux petits langages déjà disponibles
     au-dessus de Parrot.

     Il commence par expliquer ce qu'il entend par "petit langage".
     Sa définition est que c'est un langage spécialisé pour une tâche
     donnée dont la syntaxe est compacte jusqu'à la rendre
     complètement hermétique pour qui ne "parle" pas ce langage.
     En clair, un petit langage est "insane".

     Il donne des exemples pour montrer qu'on est entourés de petits
     langages : regexp, awk, sed, bc, nroff, pic...

     Il parle ensuite des langages qui ont été implémentés au-dessus
     de Parrot.

     o BrainFuck; il en parle un peu, montre un ou deux exemples et
     rappelle que c'est Jérôme Quelin qui a écrit l'implémentation (je
     ne dis pas de bêtises Jérôme ?)

     o Befunge; il explique que c'est un langage très particulier car il
     est basé sur un espace de @$#%?X&!! (j'ai pas retenu les noms
     mais on aurait aussi bien pu me dire que c'était un espace pré-
     hilbertien, pour moi c'est juste un espace à topologie torique), ce
     qui en fait donc un langage bidimensionnel : les instructions sont
     des instructions de directions qui indiquent où on doit aller pour
     continuer l'exécution. Leon montre un exemple et explique à
     l'assemblée comment il s'exécute. Celle-ci est un chouia morte
     de rire :-)

     Bon, je laisse à Jérôme le soin de compléter et corriger tout ce qui
     concerne ces deux langages car je n'ai toujours pas compris à
     quoi ça sert :-)

     Quelqu'un demande si on peut exécuter deux instances sur un
     même "source" pour faire un bot-war. Leon répond que non car
     c'est compliqué mais pas impossible. Il précise que Jérôme est
     là encore le responsable de l'implémentation de ce langage.

     o BASIC; car oui, Parrot est capable d'exécuter le GW-BASIC et
     le QuickBASIC 4.5 de Microsoft. Leon ne montre pas d'exemple
     mais assure que ça marche.

     o Lua, qui est un autre langage de script.


* Marty Pauley - Perl6 ideas stolen from Japanese
     Marty commence par nous dire お早うございます [ohayô gozaimasu],
     c'est-à-dire "bonjour" ^_^

     Le titre de son talk est 混合語. Par bonté d'âme il nous donne
     l'écriture en furigana こんごうご [kongôgo] et explique le sens
     de ce mot : il désigne la création d'un nouveau langage par
     mélange et contamination de deux ou plusieurs autres langages.
     Selon lui, c'est l'idée fondamentale derrière Perl6.

     Il explique que Matz (diminutif de Yukihiro Matsumoto) voulait
     créer le meilleur langage de programmation. Il a donc volé un
     grand nombre de fonctionnalités à Perl afin d'écrire Ruby.

     Marty insiste (comme avant lui Dan Sugalski) que Perl6 a
     démarré dans le but de contrecarrer le concurrence que Ruby
     risquait de faire à Perl. Larry a d'ailleurs déclaré à plusieurs
     reprises l'admiration qu'il a envers Ruby. Mais cette admiration
     ne l'a pas empêché de chercher un moyen de renouveler Perl
     afin qu'il reste supérieur à Ruby (et évidemment à Python...).

     La première solution a été de voler à Ruby les fonctionnalités
     qui risquait d'attirer les programmeurs :
      - -> s'écrit maintenant .
      - tout chose est un objet
      - support des coroutines et des continuations

     Mais cela signifiait malgré tout rester derrière Ruby en terme
     d'innovation, ce qui aurait été insuffisant. Larry a donc décidé
     de voler les fonctionnalités de la langue maternelle de Matz,
     le japonais, grâce à ses talents de linguiste.

     Marty commence alors à étayer sa théorie en montrant que
     Larry a commencé à apprendre le japonais il y a deux ans,
     peu de temps avant de lancer le projet Perl6. On sait aussi
     que Larry a fait quelques voyages au Japon et qu'il chante
     la musique de Totoro ! Par ailleurs Simon Cozens parle
     couramment japonais et Marty ajoute que plusieurs hackers
     de Perl6 sont en train d'apprendre le japonais ou du moins
     de s'y intéresser de près.

     Il apporte comme preuve le fait qu'on puisse dès maintenant
     écrire du Perl en japonais dans le source (depuis 5.8 et le
     support d'Unicode) :
         my $封 = "お早う";
         print $封, "ヲルヅ";
     Vous aurez reconnu (!) le code :
         my $foo = "ohayô";
         print $foo, "world";

     (ok, je sors... :-)

     Marty essaye ensuite de nous présenter les fonctionnalités
     du japonais que Larry a décidé de reprendre pour Perl6 comme
     la concision et l'utilisation intensive du contexte. Pour nous
     convaincre il fait répéter à la salle des phrases en japonais :
     "les deux canards sont dans le jardin", puis "le crocodile a
     mangé les deux canards dans le jardin".

     Puis il nous raconte quelques anecdotes de son périple en tant
     que 外人 [gaijin] au Japon où il s'est laissé abusé par la notion
     de contexte différente de la notre.

     Enfin il conclut en nous recommandant de faire une recherche
     sur le web sur "Larry Wall" et "Japanese" et de prendre peur.
     Peut-être fait-il allusion à l'un de ces articles ?

     Larry Wall sur la religion quantique (2002.09.10)
     <http://joi.ito.com/archives/2002/09/10/larry_wall_on_god.html>

     Interview de Larry sur /.
     <http://interviews.slashdot.org/article.pl?sid=02/09/06/1343222>

     Où Larry admet être un otaku (et chante Totoro) (2001.01.17)
     <http://lwn.net/2001/features/LarryWall/>

     Larry sur la culture postmoderne de Perl (1999.05.01)
     <http://www.linuxjournal.com/article.php?sid=3394>


* Dan Sugalski - The state of Parrot
     Je n'ai pas pris de notes pour ce talk mais Dan nous a en gros
     exposé l'état actuel de Parrot, ce qui marche, ce qui ne marche
     pas. Il est globalement content et reste de toute façon motivé
     pour avancer rapidement car 1) il veut jouer à Zork, 2) il veut
     lancer la tarte sur Guido (et pas l'inverse) !


* Arthur Bergman - Ponie: when the old camel rides the Parrot
     Mirod a déjà mieux résumé que ce que je pourrait en dire car
     je n'ai pas non plus pris de notes pour ce talk.


* Greg McCarroll - Why I am not giving a talk this year
     Greg nous explique pourquoi il n'a pas voulu faire de talk cette
     année : il faut choisir un sujet, c'est compliqué, il n'arrive pas à
     se décider de quoi parler, et même quand il sait de quoi parler
     il faut qu'il prépare le talk mais alors il n'arrive pas à se
concentrer
     et doit quitter son ordinateur (malheur !). Il a donc décidé de nous
     parler de trucs cools qu'il a découvert.

     Jabber - Il aime bien Jabber car il peut s'envoyer des messages
     instantanés ou des messages à durée de vie plus longue pour
     savoir s'il a du mail ou monitorer d'autres trucs.

     CVS - Il a découvert qu'on pouvait ajouter des trucs dans un
     serveur CVS pour qu'il envoie des mails automatiquement
     quand quelqu'un committe quelque chose, et a découvert
     encore mieux : comment envoyer des messages Jabber lors
     d'un commit; comme ça sa boîte aux lettres n'est pas remplies
     de mails dont il n'a que faire mais il est quand même averti
     quand quelqu'un a touché au code pendant qu'il s'est absenté.

     Il parle encore de quelques autres trucs (désolé, j'ai pas pris de
     notes là non plus) puis on lui annonce que son temps est écoulé
     et il est surpris d'avoir terminé son talk qui n'en était pas un.


Mirod a assez bien résumé les lightning talks et la vente aux enchères,
même s'il semble très partial vis-à-vis des Mac :-)

À ce propos, le vi de Mac OS X est un authentique vi BSD, tandis que le
vi qu'on trouve sur la plupart des distributions GNU/Linux est en
réalité Vim. De fait :
  - sur Mac OS X 10.2.6 : Version 1.79 (10/23/96) The CSRG, University
of California, Berkeley
  - sur Mandrake GNU/Linux 9.0 : VIM - Vi IMproved 6.1.302
La Debian est une des rares distro (la seule ?) à utiliser un autre
éditeur que Vim comme commande vi, à savoir Nvi, qui est un clone
"bug-for-bug compatible" du vi BSD.

^_^

Sébastien Aperghis-Tramoni
  -- - --- -- - -- - --- -- - --- -- - --[ http://maddingue.org ]
-
Paris Perl Mongueu(r|se)s  => http://paris.mongueurs.net/mail.html





More information about the Toulouse-pm mailing list