[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