From arnaud.assad at free.fr Wed Jul 30 02:39:23 2003 From: arnaud.assad at free.fr (arnaud.assad@free.fr) Date: Mon Aug 2 21:32:15 2004 Subject: [Marseille-pm] Re: [ppm] YAPC::Europe::2003 (3) In-Reply-To: <8803D172-C227-11D7-B3BA-000502F3279F@free.fr> References: <20030729193603.GA20027@stefp.dyndns.org> <8803D172-C227-11D7-B3BA-000502F3279F@free.fr> Message-ID: <20030730073923.GB1032@underlands.org> On Wed, Jul 30, 2003 at 02:48:27AM +0200, S?bastien Aperghis-Tramoni wrote: > ? ce propos si toi (ou quelqu'un d'autre) pouvait fournir une > explication de ce que sont ces fameuses continuations et autres > coroutines, car pour le moment j'en ai beaucoup entendu parl?, mais je > n'ai aucune id?e de ce que c'est. > Comme moi aussi, ca commencait ? me tarabuster je me suis renseign? en rentrant. Voici donc l'avis d'un NEWBIE en ce domaine pour d'autres newbies : I) Continuation 1.1) D?finition courte (et naive) Une continuation est une esp?ce de closure (fonction qui "capture" son environement lexical) qui contient AUSSI sa chaine de controle (la chaine de controle repr?sente la pile d'appel, souvent repr?sent?e par ue liste chain?e) 1.2) D?veleppement D'abord sur le pourquoi de la chose : Cela permet de faire des optimisation sympa (tail calls/tail recursion) simplement et rapidement, parce que cela peut etre la base d'un systeme d'exception. De part la d?finition donn?e plus haut, on comprend ais?ment que les continuations sont un surensemble des closures. Mais je crois que que Dan a envie de faire d'autres trucs vraiment plus "tordues" avec (dans son talk il parlait par exemple de reprendre l'ex?cution de la continuation a un autre endroit que celui sauvegard? lors de la capture de l'environnement ! Et la beaucoup de gens ont trouv? ?a "evil" ;-) Bon pour faire ca il s'appuie sur une nouvelle facon d'appeller les fonctions : CPS (Continuaton Passing Style) 1.3) Pointeurs Le site de Dan (tant qu'a faire) : http://www.sidhe.org/~dan/blog/ II) Co-routines 2.1) D?finition courte (et naive) Une coroutine est une fonction qui peut retourner a nimporte quel moment, et lors de son invocation suivante reprendre son ex?cution A PARTIR de cet endroit. 2.2) D?veloppement Un exemple simple sub lacoroutine { # code A yeld 1; # retourne 1; # code B yeld 2; # retourne 2; # code C yeld 3; # retourne 3; } lacoroutine(); lacoroutine(); lacoroutine(); lacoroutine(); retournera 1, puis 2, puis 3, puis 1. Lors du premier appel le code A sera ex?cut? ainsi que le yeld 1 Lors du second appel le code B sera ex?cut? ainsi que le yeld 2 Lors du troisieme appel le code C sera ex?cut? ainsi que le yeld 3 Lors du quatrieme appel le code A sera ex?cut? ainsi que le yeld 1 ... A noter plusieurs comportement sont possibles quand on passe des param?tres (prendre les param?tres de l'appel, pr?c?dent, continuer l'ex?cution avec les nouveaux parametres... 2.3) Pointeurs Le site de Dan : http://www.sidhe.org/~dan/blog/ Tout ce qui dit Damian sur le sujet en particulier : http://archive.develooper.com/perl6-language@perl.org/msg15348.html N'h?sitez pas ? corriger, annoter, commenter. Arnaud. From arnaud.assad at free.fr Wed Jul 30 04:33:01 2003 From: arnaud.assad at free.fr (arnaud.assad@free.fr) Date: Mon Aug 2 21:32:15 2004 Subject: [Marseille-pm] Re: [ ppm ] YAPC: ; Europe: ; 3 <2003> In-Reply-To: References: <20030730073923.GB1032@underlands.org> Message-ID: <20030730093301.GA1126@underlands.org> On Wed, Jul 30, 2003 at 10:00:51AM +0200, Michel Rodriguez wrote: >>On Wed, 30 Jul 2003 arnaud.assad@free.fr wrote: >>[une excellente explication des continuations et co-routines] >Oaouh! Je commence a comprendre les coroutines. Pour les continuations il >va falloir que je m'accroche encore un peu (je crois comprendre le >principe, mais je vois pas trop l'utilite). >Ceci dit l'impression que j'ai c'est que c'est plutot utilise comme >mechanismes de bas niveau: c'est surtout necessaire au niveau de Parrot >pour pouvoir traiter les interruptions, faire du multi-threading et que >sais-je encore. Ca pourra etre utilise dans Perl pour faire des modules >hyper-ruses, mais je suis pas sur que le clamping moyen qui fait du XML >(au hasard ;--) aura trop a s'en servir. Je pense aussi. Les continuations ont un int?r?t surtout (uniquement?) pour l'impl?mentation. J'avais ?voqu? les tail calls et la tail recursion, optimisations pouvant ?tre mises en oeuvre facilement et efficacement si on a des continuation. Comme l'explication est le meilleur moyen de tester ses connaissances, voici un petit topo (toujours orient? newbie (tricks of the wizard on attendra un peu ;-)) sur les tail calls et la tail recursion : Commencons par les tail calls (appels finaux ? appels finauds ? ;-) Un "tail call" c'est quand une fonction retourne le r?sultat d'une fonction. sub toto { # code return titi(); } traditionnellement, lors de l'appel et l'ex?cution d'une fonction, pas mal de choses sont empil?es sur la pile. plus pr?cis?ment lors de l'ex?cution d'une fonction : On alloue de l'espace sur la pile (parametres et variables locales) Puis (apres le traitement de traitement) on desalloue cet espace et on positionne sur la pile la valeur retourn?e. soit une nouvelle fonction tata() : sub tata { # code return toto(); } et sub titi { return 1; # ou n'importe quelle valeur } lors de l'execution de tata(), la pile ressemblera ? ?a (au moment ou on se trouvera dans titi() ) : ESPACE ALLOUE POUR tata() ESPACE ALLOUE POUR toto() ESPACE ALLOUE POUR titi() Notez qu'a ce moment on se trouve dans titi et qu'on a PLUS besoin des espaces allou?s pour tata et toto ! quand titi se termine, on d?salloue l'espace pour titi et met la valeur de retour sur la pile (r?sultat de la fonction titi() ) La pile ressemble alors ? ca ESPACE ALLOUE POUR tata() ESPACE ALLOUE POUR toto() VALEUR RETOURNEE PAR titi() toto r?cup?re cette valeur sur la pile, et se termine en la retournant ? son tour. La pile ressemble alors ? : ESPACE ALLOUE POUR tata() VALEUR RETOURNEE PAR toto() tata peut alors se terminer : apr?s avoir r?cup?r? la valeur de toto() sur la pile, on d?salloue l'espace allou? pour tata et retourne la valeur pr?c?demment r?cup?r?e en la mettant sur la pile qui contient alors : VALEUR RETOURNEE PAR tata(). Comme on l'a pr?cis? plus haut, on voit que lors de l'ex?cution de titi la pile contient beaucoup d'informations inutiles (param?tres et variables de tata() et toto(). Ce n'est pas optimal du point de vue de l'espace m?moire (d'autant plus que la pile a une taille limit?e). C'est d'autant plus catastrophique, que les "profondeurs d'appels" sont importantes (comme celle obtenue par exemple par une bonne grosse r?cursivit? bien profonde...) De plus vous noterez la s?quence d'instructions visiblement sous-optimile qui consiste ? passer une m?me valeur en la lisant sur la pile et en la reposant sur la pile, puis en la reprenant puis en la reposant... D'ou l'id?e, d?j? ancienne, de remplacer le 'return quelquechose' par 1) retirer l'espace allou? pour la fonction courante 2) faire un goto (!!!!) vers la fonction dont on retourne la valeur Dans ce cas lors de l'ex?cution de tata() lors de l'ex?cution de titi() la pile ressemble ? : ESPACE ALLOUE POUR titi() quand titi() se termine on d?salloue cet espace et met la valeur de retour sur la pile qui devient VALEUR RETOURNEE PAR titi() et la fonction qui a appell?e tata() n'a plus qu'a r?cup?rer cette valeur sur la pile :-) Gain d'espace ?norme, et rapidit? accrue (pas de push/pop de la valeur de retour inutile...) A noter la tail r?cursion est un sous-cas plus simple du tail call sub fact { my $n = shift; if ($n == 1) { return 1; } return $n * fact($n-1); } se transforme en quelquechose de comparable ? (mais probablement mieux ?crit ;-) sub fact { my $n = shift; my $res = 1; branche: if ($n == 1) { return $res; } $res *= $n; $n = $n -1; goto branche; } Ce cas est plus simple car on connait la fonction appelante, du coup le compilateur peut effectuer ce genre d'optimisations automatiquement. Donc pour en revenir ? l'utilit? des continuation, grace aux continuations on aura les tail calls (et donc la tail recursion) et on pourra utiliser des formes r?cursives qui sont a la fois ?l?gantes (dans leur expression) et efficaces dans leur impl?mentation. Voila. Comme d'hab commentaires/corrections/additifs sont les bienvenus... Arnaud. From arnaud.assad at free.fr Wed Jul 30 06:17:03 2003 From: arnaud.assad at free.fr (Arnaud Arhuman ASSAD) Date: Mon Aug 2 21:32:15 2004 Subject: [Marseille-pm] Exegesis 6 Message-ID: <20030730111703.GA1293@underlands.org> Pour ceux qui ne le sauraient pas encore (y'en a qui vient sur mars ? ;-) Damian a sort son Exegesis 6 : http://www.perl.com/lpt/a/2003/07/29/exegesis6.html Arnaud. From mad at maddingue.org Wed Jul 30 06:56:20 2003 From: mad at maddingue.org (=?ISO-8859-1?Q?S=E9bastien_Aperghis-Tramoni?=) Date: Mon Aug 2 21:32:15 2004 Subject: [Marseille-pm] Re: [ppm] YAPC::Europe::2003 (3) In-Reply-To: <20030730073923.GB1032@underlands.org> Message-ID: On mercredi, juil 30, 2003, at 09:39 Europe/Paris, arnaud.assad@free.fr wrote: > On Wed, Jul 30, 2003 at 02:48:27AM +0200, S?bastien Aperghis-Tramoni > wrote: >> ? ce propos si toi (ou quelqu'un d'autre) pouvait fournir une >> explication de ce que sont ces fameuses continuations et autres >> coroutines, car pour le moment j'en ai beaucoup entendu parl?, mais je >> n'ai aucune id?e de ce que c'est. > > Comme moi aussi, ca commencait ? me tarabuster je me suis renseign? en > rentrant. Voici donc l'avis d'un NEWBIE en ce domaine pour d'autres > newbies : Ah merci beaucoup Arnaud, c'est une tr?s bonne explication :-) > I) Continuation > [...] Ca me donne une id?e de ce que ?a fais, mais je vois pas trop ? quoi ?a sert (ceci dit, j'ai jamais trop vu l'int?r?t des closures non plus). > II) Co-routines > [...] L? par contre je comprends d?j? mieux comment ?a marche, mais j'ai du mal ? consid?rer ce genre de construction comme "propre". J'attends de voir un cas r?el qui n?cessite ?a. S?bastien Aperghis-Tramoni -- - --- -- - -- - --- -- - --- -- - --[ http://maddingue.org ] From maddingue at free.fr Wed Jul 30 08:49:27 2003 From: maddingue at free.fr (=?ISO-8859-1?Q?S=E9bastien_Aperghis-Tramoni?=) Date: Mon Aug 2 21:32:15 2004 Subject: [Marseille-pm] Re: [ppm] YAPC::Europe::2003 (3) In-Reply-To: <20030730093301.GA1126@underlands.org> Message-ID: On mercredi, juil 30, 2003, at 11:33 Europe/Paris, arnaud.assad@free.fr wrote: > On Wed, Jul 30, 2003 at 10:00:51AM +0200, Michel Rodriguez wrote: >> Ceci dit l'impression que j'ai c'est que c'est plutot utilise comme >> mechanismes de bas niveau: c'est surtout necessaire au niveau de >> Parrot >> pour pouvoir traiter les interruptions, faire du multi-threading et >> que >> sais-je encore. Ca pourra etre utilise dans Perl pour faire des >> modules >> hyper-ruses, mais je suis pas sur que le clamping moyen qui fait du >> XML >> (au hasard ;--) aura trop a s'en servir. > > Je pense aussi. Les continuations ont un int?r?t surtout > (uniquement?) pour l'impl?mentation. > > J'avais ?voqu? les tail calls et la tail recursion, optimisations > pouvant > ?tre mises en oeuvre facilement et efficacement si on a des > continuation. > > Comme l'explication est le meilleur moyen de tester ses connaissances, > voici un petit topo (toujours orient? newbie (tricks of the wizard on > attendra un peu ;-)) sur les tail calls et la tail recursion : > > Commencons par les tail calls (appels finaux ? appels finauds ? ;-) > > Un "tail call" c'est quand une fonction retourne le r?sultat d'une > fonction. > [...] > D'ou l'id?e, d?j? ancienne, de remplacer le 'return quelquechose' par > > 1) retirer l'espace allou? pour la fonction courante 2) faire un goto > (!!!!) vers la fonction dont on retourne la valeur Je crois que je vois. En Perl, ce serait ?quivalent ? utiliser la 3e forme du goto (dit "magique") : sub foo { # do things goto &bar } La nuance est qu'ici c'est au compilo ? deviner tout seul quand il peut le faire automatiquement. > A noter la tail r?cursion est un sous-cas plus simple du tail call > [...] > Ce cas est plus simple car on connait la fonction appelante, du coup le > compilateur peut effectuer ce genre d'optimisations automatiquement. Hmm.. Sauf erreur de ma part, la th?orie de la compilation offre d?j? plusieurs m?canismes de d?r?cursion des fonctions. Ah au fait, j'ai retrouv? ce que c'est que la curryfication : c'est une op?ration qui permet d'obtenir une version monadique de toute fonction polyadique... ;-) Exprim? plus clairement, cela permet de transformer une fonction ? plusieurs arguments en une fonction ? un seul argument, plus conforme ? la notation math?matique usuelle. Ces notions proviennent du ?-calcul (lambda-calcul) et de la programmation fonctionnelle, o? on retrouve nos amis Lisp et Scheme, ainsi que Caml et Prolog. S?bastien Aperghis-Tramoni -- - --- -- - -- - --- -- - --- -- - --[ http://maddingue.org ] From mad at maddingue.org Wed Jul 30 10:21:56 2003 From: mad at maddingue.org (=?ISO-8859-1?Q?S=E9bastien_Aperghis-Tramoni?=) Date: Mon Aug 2 21:32:15 2004 Subject: [Marseille-pm] YAPC:Europe::2003 (3) In-Reply-To: <20030730093301.GA1126@underlands.org> Message-ID: <8E6AF330-C2A1-11D7-A8C9-000502F3279F@maddingue.org> On mercredi, juil 30, 2003, at 11:33 Europe/Paris, arnaud.assad@free.fr wrote: > On Wed, Jul 30, 2003 at 10:00:51AM +0200, Michel Rodriguez wrote: >> Ceci dit l'impression que j'ai c'est que c'est plutot utilise comme >> mechanismes de bas niveau: c'est surtout necessaire au niveau de >> Parrot >> pour pouvoir traiter les interruptions, faire du multi-threading et >> que >> sais-je encore. Ca pourra etre utilise dans Perl pour faire des >> modules >> hyper-ruses, mais je suis pas sur que le clamping moyen qui fait du >> XML >> (au hasard ;--) aura trop a s'en servir. > > Je pense aussi. Les continuations ont un int?r?t surtout > (uniquement?) pour l'impl?mentation. > > J'avais ?voqu? les tail calls et la tail recursion, optimisations > pouvant > ?tre mises en oeuvre facilement et efficacement si on a des > continuation. > > Comme l'explication est le meilleur moyen de tester ses connaissances, > voici un petit topo (toujours orient? newbie (tricks of the wizard on > attendra un peu ;-)) sur les tail calls et la tail recursion : > > Commencons par les tail calls (appels finaux ? appels finauds ? ;-) > > Un "tail call" c'est quand une fonction retourne le r?sultat d'une > fonction. > [...] > D'ou l'id?e, d?j? ancienne, de remplacer le 'return quelquechose' par > > 1) retirer l'espace allou? pour la fonction courante 2) faire un goto > (!!!!) vers la fonction dont on retourne la valeur Je crois que je vois. En Perl, ce serait ?quivalent ? utiliser la 3e forme du goto (dit "magique") : sub foo { # do things goto &bar } La nuance est qu'ici c'est au compilo ? deviner tout seul quand il peut le faire automatiquement. > A noter la tail r?cursion est un sous-cas plus simple du tail call > [...] > Ce cas est plus simple car on connait la fonction appelante, du coup le > compilateur peut effectuer ce genre d'optimisations automatiquement. Hmm.. Sauf erreur de ma part, la th?orie de la compilation offre d?j? plusieurs m?canismes de d?r?cursion des fonctions. Ah au fait, j'ai retrouv? ce que c'est que la curryfication : c'est une op?ration qui permet d'obtenir une version monadique de toute fonction polyadique... ;-) Exprim? plus clairement, cela permet de transformer une fonction ? plusieurs arguments en une fonction ? un seul argument, plus conforme ? la notation math?matique usuelle. Ces notions proviennent du ?-calcul (lambda-calcul) et de la programmation fonctionnelle, o? on retrouve nos amis Lisp et Scheme, ainsi que Caml et Prolog. S?bastien Aperghis-Tramoni -- - --- -- - -- - --- -- - --- -- - --[ http://maddingue.org ] From deadcow at free.fr Wed Jul 30 10:52:52 2003 From: deadcow at free.fr (DeadCow) Date: Mon Aug 2 21:32:15 2004 Subject: [Marseille-pm] =?windows-1252?q?bonjour_+_pr=E9sentation?= Message-ID: <001a01c356b5$65f32a10$0101a8c0@nico> Bonjour ? tous, Je suis nicolas repiquet, nouveau sur cette mailling list ( mais pas chez les mongueurs de marseille bien que jamais tr?s actif ). Pour tout dire je ne suis pas r?ellement un fan de perl, mais j'aime bien quand m?me =) Mon principal centre d'interet informatique du moment est la th?orie des language, et les compilateurs. Sinon dans la vie je suis actuellement ( et tr?s momentanement j'esp?re ) intermaire m?canicien dans l'industrie ( aucun rapport avec l'informatique ). Voil?. A bientot. -- Nicolas Repiquet From arnaud.assad at free.fr Thu Jul 31 17:49:02 2003 From: arnaud.assad at free.fr (arnaud.assad@free.fr) Date: Mon Aug 2 21:32:15 2004 Subject: [Marseille-pm] Faire mumuse avec les compilos... Message-ID: <20030731224902.GA3049@underlands.org> Bon ce mail est plus particuli?rement destin? ? Nicolas (gloom est plus valable ? c'est deadcow maintenant ?) Pour les autres, je situe le contexte : Nicolas ?crit un langage, et j'essaie de le convaincre d'utiliser parrot comme machine virtuelle (au moins dans la phase de conception/test) de destination Pourquoi ? : 1) Parce que c'est facile 2) Parce que parrot est d?j? une bonne VM et le sera encore plus au fil du temps 3) Parce que c'est UTILE (y'a plus de 3 personnes qui l'utilisent) 4) parce que comme ca on peut bosser ? plusieurs dessus 5) parce que c'est amusant 6) Pour me faire plaisir ;-) 7) Parce qu'une bonne partie des fonctionnalit?s est d?j? pr?sente dans la VM, permettant un test du langage plus rapide/facile 8) et SURTOUT parce que cette VM existe d?j? !!! Nicolas ?tant r?ticent, je lui ai expliqu?, que grace ? parrot il n'aurait pas ? se pr?occupper de pas mal de taches (interpr?tation, gestion de la m?moire...) et qu'?crire un compilo vers parrot ne pouvait pas ?tre plus dur qu'?crire un compilo classique (Un compilo ?crit du code pour un CPU, une VM n'est jamais qu'un "CPU virtuel") Comme il n'?tait pas convaincu, un petit "d?fi" m'a ?t? lanc?, ?crire un petit langage qui fasse les 4 op?rations de bases le branchement et l'affichage. Nico, tu trouveras ci joint le compilo 'minil' (mini langage ;-) Soyons clair : Il est hideux ! Mais il fait le boulot (la d?couverte des bug est laiss? comme exercice au lecteur ;-) et ?a ne m'a pas prit plus de 3 heures pour le faire... (m?me si la syntaxe ressemble beaucoup ? la syntaxe de l'assembleur parrot, tu m'accorderas que c'est trivial a r?gler dans la grammaire...) Pour Info je suis nul en ?criture de compilo (je ne l'ai jamais fait) ma grammaire est vraiment pas optimale et je ne maitrise pas l'outil Parse::RecDescent (d'ou un usage abusif de la pile...) Toutefois je crois que tu ne pourras que constater que le principe marche... tu peux tester le code produit en installant parrot (je suis trop rus?) Maintenant, pour ceux qui seraient int?ress?s, j'aimerais ?crire un langage correctement (en utilisant Parse::Yapp ?) pour les pr?sentation (affichage de texte/images, temporisation, saisie d'?v?nement clavier, passage au slide suivant/pr?c?dent...) le but est de se familiariser avec l'?criture des compilos et parrot. (Comment ?a le talk de Leo m'a marqu? ? ;-) C'est pourquoi je poste sur la liste, j'esp?re bien que parmi vous certaines personnes seront int?ress?es et me rejoindront... Dans tous les cas je compte sur tes bon conseils nico (et m?me sur ta participation pour ?tre honn?te ;-) Alors nico ? ok pour bosser sur parrot ? (ton langage-objet et mon langage-jouet) Arnaud. PS: Nico ne t'inqui?tes pas si tu ne trouves pas de Lexer ni de Parser, Parse::RecDescent combine les deux fonctions, je suis persuad? que tu va voir cela comme du bricolage ? la Perl, mais la th?orie sous jacente et ?prouv?e : C'est un parser r?cursif (sous classe particuli?re des "top down" parsers ou LL parsers) avec une tokenization "context-sensitive"... Plus d'info ? : http://search.cpan.org/src/DCONWAY/Parse-RecDescent-1.94/tutorial/tutorial.html -------------- next part -------------- A non-text attachment was scrubbed... Name: Minil_P_RD.pl Type: application/x-perl Size: 1723 bytes Desc: not available Url : http://mail.pm.org/pipermail/marseille-pm/attachments/20030801/cfc1fe72/Minil_P_RD.bin From deadcow at free.fr Thu Jul 31 18:33:22 2003 From: deadcow at free.fr (DeadCow) Date: Mon Aug 2 21:32:15 2004 Subject: [Marseille-pm] Faire mumuse avec les compilos... References: <20030731224902.GA3049@underlands.org> Message-ID: <004401c357bc$220dbe20$0101a8c0@nico> ----- Original Message ----- From: To: Sent: Friday, August 01, 2003 12:49 AM Subject: [Marseille-pm] Faire mumuse avec les compilos... Hello tout le monde. > Bon ce mail est plus particuli?rement destin? ? Nicolas > (gloom est plus valable ? c'est deadcow maintenant ?) bof pourquoi pas Nico ? > Pour les autres, je situe le contexte : > Nicolas ?crit un langage, et j'essaie de le convaincre > d'utiliser parrot comme machine virtuelle (au moins dans la > phase de conception/test) de destination > > Pourquoi ? : > > 1) Parce que c'est facile > 2) Parce que parrot est d?j? une bonne VM et le sera encore plus au > fil du temps > 3) Parce que c'est UTILE (y'a plus de 3 personnes qui l'utilisent) > 4) parce que comme ca on peut bosser ? plusieurs dessus > 5) parce que c'est amusant > 6) Pour me faire plaisir ;-) C'est la seule raison valable =) > 7) Parce qu'une bonne partie des fonctionnalit?s est d?j? pr?sente dans > la VM, permettant un test du langage plus rapide/facile > 8) et SURTOUT parce que cette VM existe d?j? !!! J'ai rien contre parrot ? la base, mais c'est quand m?me chiant quand tu fait un programme de 2ko d'?tre obliger de filer 50mo d'interpreteur avec =) > Nicolas ?tant r?ticent, je lui ai expliqu?, que grace ? parrot il n'aurait > pas ? se pr?occupper de pas mal de taches (interpr?tation, gestion de la > m?moire...) et qu'?crire un compilo vers parrot ne pouvait pas ?tre plus dur > qu'?crire un compilo classique > > (Un compilo ?crit du code pour un CPU, une VM n'est jamais qu'un "CPU virtuel") > Comme il n'?tait pas convaincu, un petit "d?fi" m'a ?t? lanc?, ?crire un > petit langage qui fasse les 4 op?rations de bases le branchement et > l'affichage. > > Nico, tu trouveras ci joint le compilo 'minil' (mini langage ;-) Ben j'ai mis le miens en fichier joint, il s'appel ARHUMAN pour "ARithmetic & HUMoristic ANalyser" > Soyons clair : Il est hideux ! Oui t'as pas trop jou? le jeu ! > Mais il fait le boulot (la d?couverte des bug est laiss? comme exercice au > lecteur ;-) et ?a ne m'a pas prit plus de 3 heures pour le faire... > (m?me si la syntaxe ressemble beaucoup ? la syntaxe de l'assembleur parrot, > tu m'accorderas que c'est trivial a r?gler dans la grammaire...) T'es sur ? > Pour Info je suis nul en ?criture de compilo (je ne l'ai jamais fait) ma > grammaire est vraiment pas optimale et je ne maitrise pas l'outil > Parse::RecDescent (d'ou un usage abusif de la pile...) > > > Toutefois je crois que tu ne pourras que constater que le principe marche... Certe > tu peux tester le code produit en installant parrot (je suis trop rus?) H?h? c bien vrai > Maintenant, pour ceux qui seraient int?ress?s, j'aimerais ?crire un langage > correctement (en utilisant Parse::Yapp ?) pour les pr?sentation > (affichage de texte/images, temporisation, saisie d'?v?nement clavier, > passage au slide suivant/pr?c?dent...) le but est de se familiariser avec > l'?criture des compilos et parrot. Bof je pr?faire savoir ?crire un compilo ? la main que de savoir me servire de Parse::Yapp. Ce module est peut ?tre tr?s bien mais ca m'interesse moyennement. > (Comment ?a le talk de Leo m'a marqu? ? ;-) > > C'est pourquoi je poste sur la liste, j'esp?re bien que parmi vous certaines > personnes seront int?ress?es et me rejoindront... > Dans tous les cas je compte sur tes bon conseils nico (et m?me sur ta > participation pour ?tre honn?te ;-) > Alors nico ? ok pour bosser sur parrot ? > (ton langage-objet et mon langage-jouet) Ca peut toujours ?tre interessant =) > Arnaud. > > PS: Nico ne t'inqui?tes pas si tu ne trouves pas de Lexer ni de Parser, > Parse::RecDescent combine les deux fonctions, je suis persuad? que tu va voir > cela comme du bricolage ? la Perl, mais la th?orie sous jacente et ?prouv?e : C'est pas le fait que ca fasse bricolage qui me g?ne, c'est que t'as pas vraiment la main sur le truc, ducoup, y a plein de choses que tu pourra pas faire. D'un autre cot? ?a s'?crit plus vite .. tout d?pend de ce qu'on cherche ? faire comme d'hab =) > C'est un parser r?cursif (sous classe particuli?re des "top down" parsers ou > LL parsers) avec une tokenization "context-sensitive"... > Plus d'info ? : > http://search.cpan.org/src/DCONWAY/Parse-RecDescent-1.94/tutorial/tutorial.h tml T'as pas eu des probl?me de recursivit? ? gauche toi ? Sinon je me demandais, un projet ou tout le monde pourrait participer. Faire un wiki marseille-pm avec des articles divers ?a vous dirait pas ? Je connais pas trop wiki mais le principe me plait, c'est la mode en plus =) -- Nicolas -------------- next part -------------- A non-text attachment was scrubbed... Name: arhuman.zip Type: application/x-zip-compressed Size: 70625 bytes Desc: not available Url : http://mail.pm.org/pipermail/marseille-pm/attachments/20030801/5dc0758a/arhuman.bin From maddingue at free.fr Thu Jul 31 20:53:30 2003 From: maddingue at free.fr (=?ISO-8859-1?Q?S=E9bastien_Aperghis-Tramoni?=) Date: Mon Aug 2 21:32:15 2004 Subject: [Marseille-pm] Faire mumuse avec les compilos... In-Reply-To: <20030731224902.GA3049@underlands.org> Message-ID: On vendredi, ao? 1, 2003, at 00:49 Europe/Paris, arnaud.assad@free.fr wrote: > Nicolas ?crit un langage, et j'essaie de le convaincre > d'utiliser parrot comme machine virtuelle (au moins dans la > phase de conception/test) de destination C'est une bonne id?e. > Pourquoi ? : > 1) Parce que c'est facile > 2) Parce que parrot est d?j? une bonne VM et le sera encore plus au > fil du temps > 3) Parce que c'est UTILE (y'a plus de 3 personnes qui l'utilisent) > 4) parce que comme ca on peut bosser ? plusieurs dessus > 5) parce que c'est amusant > 6) Pour me faire plaisir ;-) > 7) Parce qu'une bonne partie des fonctionnalit?s est d?j? pr?sente > dans > la VM, permettant un test du langage plus rapide/facile > 8) et SURTOUT parce que cette VM existe d?j? !!! Je suis d'accord avec tous ces points. > Nicolas ?tant r?ticent, je lui ai expliqu?, que grace ? parrot il > n'aurait > pas ? se pr?occupper de pas mal de taches (interpr?tation, gestion de > la > m?moire...) et qu'?crire un compilo vers parrot ne pouvait pas ?tre > plus dur > qu'?crire un compilo classique Ca va surtout ?tre plus facile que d'?crire un compilo vers une archi r?elle comme le x86 car cette derni?re est peu recommandable. D?j?, en cas de probl?me, c'est beaucoup plus facile de regarder l'int?rieur des registres ou de la m?moire :-) > (Un compilo ?crit du code pour un CPU, une VM n'est jamais qu'un "CPU > virtuel") Exact. Et Parrot a fait le bon choix d'utiliser une machine virtuelle ? registres (similaire ? la JVM) avec des specs proches de celles des CPU RISC. (D?sol? si j'ai l'air de me r?p?ter, mais entre l'assembleur MIPS et l'assembleur Intel, ya pas photo, l'Intel est ? se flinguer). > Maintenant, pour ceux qui seraient int?ress?s, j'aimerais ?crire un > langage > correctement (en utilisant Parse::Yapp ?) pour les pr?sentation > (affichage de texte/images, temporisation, saisie d'?v?nement clavier, > passage au slide suivant/pr?c?dent...) le but est de se familiariser > avec > l'?criture des compilos et parrot. > (Comment ?a le talk de Leo m'a marqu? ? ;-) L'id?e est int?ressante, mais tu pourrais pr?ciser ? Tu veux ?crire ton truc au-dessus de Parrot ou au-dessus de Perl ? Parce que Parrot ne dispose ? ma connaissance d'aucun module permettant de traiter des images ou de faire du graphisme. Son domaine est pour le moment celui de la console texte. S?bastien Aperghis-Tramoni -- - --- -- - -- - --- -- - --- -- - --[ http://maddingue.org ] From maddingue at free.fr Thu Jul 31 20:53:30 2003 From: maddingue at free.fr (=?ISO-8859-1?Q?S=E9bastien_Aperghis-Tramoni?=) Date: Mon Aug 2 21:32:15 2004 Subject: [Marseille-pm] Faire mumuse avec les compilos... In-Reply-To: <20030731224902.GA3049@underlands.org> Message-ID: On vendredi, ao? 1, 2003, at 00:49 Europe/Paris, arnaud.assad@free.fr wrote: > Nicolas ?crit un langage, et j'essaie de le convaincre > d'utiliser parrot comme machine virtuelle (au moins dans la > phase de conception/test) de destination C'est une bonne id?e. > Pourquoi ? : > 1) Parce que c'est facile > 2) Parce que parrot est d?j? une bonne VM et le sera encore plus au > fil du temps > 3) Parce que c'est UTILE (y'a plus de 3 personnes qui l'utilisent) > 4) parce que comme ca on peut bosser ? plusieurs dessus > 5) parce que c'est amusant > 6) Pour me faire plaisir ;-) > 7) Parce qu'une bonne partie des fonctionnalit?s est d?j? pr?sente > dans > la VM, permettant un test du langage plus rapide/facile > 8) et SURTOUT parce que cette VM existe d?j? !!! Je suis d'accord avec tous ces points. > Nicolas ?tant r?ticent, je lui ai expliqu?, que grace ? parrot il > n'aurait > pas ? se pr?occupper de pas mal de taches (interpr?tation, gestion de > la > m?moire...) et qu'?crire un compilo vers parrot ne pouvait pas ?tre > plus dur > qu'?crire un compilo classique Ca va surtout ?tre plus facile que d'?crire un compilo vers une archi r?elle comme le x86 car cette derni?re est peu recommandable. D?j?, en cas de probl?me, c'est beaucoup plus facile de regarder l'int?rieur des registres ou de la m?moire :-) > (Un compilo ?crit du code pour un CPU, une VM n'est jamais qu'un "CPU > virtuel") Exact. Et Parrot a fait le bon choix d'utiliser une machine virtuelle ? registres (similaire ? la JVM) avec des specs proches de celles des CPU RISC. (D?sol? si j'ai l'air de me r?p?ter, mais entre l'assembleur MIPS et l'assembleur Intel, ya pas photo, l'Intel est ? se flinguer). > Maintenant, pour ceux qui seraient int?ress?s, j'aimerais ?crire un > langage > correctement (en utilisant Parse::Yapp ?) pour les pr?sentation > (affichage de texte/images, temporisation, saisie d'?v?nement clavier, > passage au slide suivant/pr?c?dent...) le but est de se familiariser > avec > l'?criture des compilos et parrot. > (Comment ?a le talk de Leo m'a marqu? ? ;-) L'id?e est int?ressante, mais tu pourrais pr?ciser ? Tu veux ?crire ton truc au-dessus de Parrot ou au-dessus de Perl ? Parce que Parrot ne dispose ? ma connaissance d'aucun module permettant de traiter des images ou de faire du graphisme. Son domaine est pour le moment celui de la console texte. S?bastien Aperghis-Tramoni -- - --- -- - -- - --- -- - --- -- - --[ http://maddingue.org ] From maddingue at free.fr Thu Jul 31 20:53:44 2003 From: maddingue at free.fr (=?ISO-8859-1?Q?S=E9bastien_Aperghis-Tramoni?=) Date: Mon Aug 2 21:32:15 2004 Subject: [Marseille-pm] Faire mumuse avec les compilos... In-Reply-To: <004401c357bc$220dbe20$0101a8c0@nico> Message-ID: On vendredi, ao? 1, 2003, at 01:33 Europe/Paris, DeadCow wrote: > From: > To: > Sent: Friday, August 01, 2003 12:49 AM > Subject: [Marseille-pm] Faire mumuse avec les compilos... > >> Nicolas ?crit un langage, et j'essaie de le convaincre >> d'utiliser parrot comme machine virtuelle (au moins dans la >> phase de conception/test) de destination >> >> Pourquoi ? : >> >> 1) Parce que c'est facile >> 2) Parce que parrot est d?j? une bonne VM et le sera encore plus au >> fil du temps >> 3) Parce que c'est UTILE (y'a plus de 3 personnes qui l'utilisent) >> 4) parce que comme ca on peut bosser ? plusieurs dessus >> 5) parce que c'est amusant >> 6) Pour me faire plaisir ;-) > > C'est la seule raison valable =) On vous laisse r?gler ?a entre vous :-) >> 7) Parce qu'une bonne partie des fonctionnalit?s est d?j? pr?sente >> dans >> la VM, permettant un test du langage plus rapide/facile >> 8) et SURTOUT parce que cette VM existe d?j? !!! > > J'ai rien contre parrot ? la base, mais c'est quand m?me chiant quand > tu > fait un programme de 2ko d'?tre obliger de filer 50mo d'interpreteur > avec =) $ l parrot -rwxr-xr-x 1 maddingu staff 1741140 Aug 1 03:42 parrot* C'est vrai qu'il est trop gros pour le moment mais il est encore en d?veloppement et est compil? avec les options -g -Larry -Wall et sans optimisations. >> Maintenant, pour ceux qui seraient int?ress?s, j'aimerais ?crire un > langage >> correctement (en utilisant Parse::Yapp ?) pour les pr?sentation >> (affichage de texte/images, temporisation, saisie d'?v?nement clavier, >> passage au slide suivant/pr?c?dent...) le but est de se familiariser >> avec >> l'?criture des compilos et parrot. > > Bof je pr?faire savoir ?crire un compilo ? la main que de savoir me > servire > de Parse::Yapp. Ce module est peut ?tre tr?s bien mais ca m'interesse > moyennement. Dans mes ?tudes d'ing?nieur j'ai ?cris des analyseurs syntaxiques, un assembleur MIPS et un compilateur Pascal. Comprendre les principes de base est int?ressant mais la programmation compl?te est quand m?me rapidement emmerdant. Utiliser un parser de bonne qualit? pour se retirer du travail chiant n'a rien de "d?shonorant". C'est g?n?ralement consid?r? comme une bonne utilisation des outils disponibles. Perl utilise lex pour cette raison d'ailleurs >> PS: Nico ne t'inqui?tes pas si tu ne trouves pas de Lexer ni de >> Parser, >> Parse::RecDescent combine les deux fonctions, je suis persuad? que tu >> va > voir >> cela comme du bricolage ? la Perl, mais la th?orie sous jacente et > ?prouv?e : > > C'est pas le fait que ca fasse bricolage qui me g?ne, c'est que t'as > pas > vraiment la main sur le truc, ducoup, y a plein de choses que tu > pourra pas > faire. D'un autre cot? ?a s'?crit plus vite .. tout d?pend de ce qu'on > cherche ? faire comme d'hab =) Exactement :-) Mais l? encore je tiens ? rappeler que si lex et yacc (et les modules remplissant des fonctions similaires en Perl) existent, c'est parce qu'?crire des parsers lexicaux et syntaxiques est une op?rations tr?s m?canique : une fois que tu as la grammaire BNF de ton langage, tu peux passer ?a ? lex et yacc et ils te font le boulot. Sinon il faut se frapper d'?crire autant de fonctions que tu as de lex?mes, toutes sur le m?me mod?le. C'est int?ressant ? faire une fois, mais so?lant la seconde fois. Mais bon, ?videmment, ?a d?pend du niveau auquel on a envie de travailler, mais je ne trouve pas que ce niveau-ci soit le plus attrayant; personnellement je pr?f?re visiter les machines au sous-sol (kernel) et m'amuser sur le toit (Perl) :-) S?bastien Aperghis-Tramoni -- - --- -- - -- - --- -- - --- -- - --[ http://maddingue.org ]