Skip to topic | Skip to bottom
Home
Minfo03
Minfo03.PagePersoJulienCharlesr1.19 - 09 Jun 2004 - 17:56 - JulienCharlestopic end

Start of topic | Skip to actions

Suivi de JulienCharles

SpecialK-tr.gif

Du 7 au 10 mai

Réunion du 7 mai
Alors voici un résumé de ce que nous avons fait avec Pierre le 7mai: on a principalement mis au clair des éléments syntaxiques afin de faire la sémantique (au moins une partie) aujourd'hui. Un résumé plus détaillé se trouve sur la page de Pierre.

Réunion du 10 mai (avec pierre)

L'enjeu était principalement de mieux définir la génération de code. Après quelques réflexions; nous avons décidé la manière de générer les entêtes des fonctions et comment gérer les mécanismes de surcharges et redéfinitions. La conclusion du 7 mai avait été de rassembler les clauses d'une même fonction afin de permettre les redéfinitions comme en Scheme. Nous avons suggéré d'utiliser un mécanisme de surcharge s'appuyant sur le nombre d'arguments et non sur les types d'arguments.

La question qui restait en suspens était la suivante: Comment gérer la surcharge dans le code SpecialK généré?

Pierre a suggéré d'utiliser un système de définition lié. L'idée est de générer des redéfinitions des fonctions stockant dans une variable l'ancienne fonction; si la nouvelle fonction n'arrive pas à utiliser les arguments alors elle appelle l'ancienne fonction qu'elle surcharge. Dans ce mécanisme, la redéfinition est possible pour les fonctions ayant le même nombre d'arguments. Si le nombre d'arguments est le bon; si la fonction ne s'unifie pas avec les arguments on envoie une erreur. On obtiendrait le code suivant (approximatif) pour une fonction foo qui prend 3 arguments:

(let ((old-foo foo))
   (define (foo . L) 
        (if (= (length L) 3)
            (match ....
                ....)
            (apply old-foo L)))
En générant ce genre de code, cela permet la redéfinition en SpecialK; ainsi qu'une certaine forme de surcharge. Un avis différent serait d'abandonner toute forme de redéfinition en exécutant old-foo aussi dans le cas où match échouait. Mais nous pensons que les redéfintions sont un mécanisme intéressant. Donc on optera a priori pour la première solution.

-- JulienCharles - 10 May 2004

Du 11 au 14 mai

Réunion du 11 mai
Une autre réunion avec Pierre. Nous avons essayé encore une fois de normaliser un peu plus la syntaxe de SpecialK.
Réunion du 12 mai
Réunion avec Jean-Paul Roy pour savoir où on en est. Il nous a suggéré une 'optimisation' qui empèche la redéfinition dynamique de code. Enfin. Elle est très rapide à mettre en oeuvre.
Du 13 au 14 mai
A partir de la base donnée par Pierre je me suis mis à coder le traducteur. Cyril n'a toujours pas fini de coder les tableaux a priori. J'arrive à traduire l'arbre décoré. Mon code n'est qu'une première version; je ne gère pas les tableaux (Cyril!!!!!); je ne gère pas la complétude; et il n'y a pas encore l'optimisation au niveau des gardes. Sinon ça produit du code Scheme exécutable.

Dans une des réunions qui précédait on avait décider de faire des fonctions de la forme

(let ((old-foo foo))
   (define (foo . L) 
        (if (= (length L) 3)
            (match ....
                ....)
            (apply old-foo L)))
maintenant c devenu:
(define the-thing-that-shouldnt-be-in-special-k-funs '?)
 (let ((g148
        (with-handlers ((exn:variable? (lambda (ex) (lambda l (raise ex))))) (eval 'foo))))
   (set! the-thing-that-shouldnt-be-in-special-k-funs
     (lambda g150
       (define g149
         (match-lambda
           ((args) (=> g151) (if #t (+ 5 (g149 (list 5))) (g151)))
           (((9 . a)) (=> g152) (if (eq? (and (not (foo 5 a)) #t) b) (+ a b) (g152)))))
       (if (= (length g150) 1) (g149 g150) (apply g148 g150)))))
 (define foo the-thing-that-shouldnt-be-in-special-k-funs)
Le nom de la variable pompeuse est juste pour tester. Si elle ne convient pas on la remplacera par un vrai nom: par exemple specialk-fun ce qui serait sympa.

-- JulienCharles - 14 May 2004

Du 15 au 19 mai

Du 15 au 17 mai
J'ai principalement avancé la génération de code. Pas grand choses à dire. Je génère du code à peu près correct (les tableaux ne sont pas encore codés).
Réunion du 18 mai
Sylvain m'a orienté vers une solution pour le problème précédent (celui de la variable en trop). La solution est donc la suivante:
(define fac
   (with-handlers ((exn:variable? (lambda (ex) (lambda l (raise ex))))) (eval 'fac)))
 (let ((g1163 fac))
   (set! fac
     (lambda g1165
       (define g1164
         (match-lambda ((n) (=> g1166) (if (not (eq? n 0)) (* n (g1164 (list (- n 1)))) 1))))
       (if (= (length g1165) 1) (g1164 g1165) (apply g1163 g1165)))))
Maintenant la grammaire de Cyril fonctionne; j'ai pu faire des testes de traductions SpecialK vers Scheme. Mon gros travail a été d'adapter les deux; et modifier certains aspects de la traduction de la structure intermédiaire qui n'étaient pas clairement définis. J'ai traduit les tableaux.

Avec Pierre on a discuter de sémantique; et notamment au niveau de la sémantique des fonctions en SpecialK.

Réunion du 19 mai
J'ai commencé à faire quelques optimisations; notamment celle du 'not'. J'ai essayé de faire l'optimisation de la complétude des clauses. J'hésite à la faire réellement; le code produit par la traduction devient gros et rapidement illisible. Je mets la dernière version du traducteur sur ma page...

Pendant la réunion on a réglé 2 3 trucs sur la sémantique de Pierre; Cyril devrait finir sa grammaire pour le week-end. J'ai décider de m'arréter de faire les optimisations de la traduction pour le moment. Je commence l'inclusion dans DrScheme ce soir; pour ensuite effectuer la gestion des exceptions.

-- JulienCharles - 19 May 2004

Du 20 au 25 mai

Du 20 au 21 mai
J'ai effectué l'inclusion... bon maintenant ça marche à peu près; il reste à voir les exceptions; terminer la syntaxe de la fonction produite en SpecialK (le call/cc n'y figure pas encore).
Du 22 au 23 mai
Week-end... j'ai pas fait des tonnes de choses.
Du 24 au 25 mai
Pierre m'a donné son optimisation que je lui avait demandé; nouveau module special-k-opt.ss. J'ai fignolé un peu tout ça. C'est stable. Reste à trouver les comportements non voulus (surtout les mauvais reports d'exceptions). En incluant la nouvelle version de Cyril; j'ai modifié ses expressions réguliaires pour les commentaires (...); j'arrive toujours pas à bien inclure ses exceptions frown . Sinon c'est stable; on peut programmer etc. ...
-on s'approche de la fin-

-- JulienCharles - 25 May 2004

Du 26 au 28 mai

Le 26 mai
Finalement je suis arrivé à inclure les exceptions hier soir....

Aujourd'hui j'ai fait le syntax highlighting; la vérification ne fonctionne pas bien encore; et j'ai perdu le tabbing au passage. Mais c'est pas mal sinon....

-- JulienCharles - 26 May 2004

Le 27, 28 mai
J'ai corrigé les bugs que Cyril m'avait indiqué... j'ai trouvé le moyen d'ajouter le tabbing. Et ça marche. Il reste à faire la distribution sic.

- JulienCharles - 28 May 2004

Du 29 mai au 1 juin

J'ai enfin terminé le tabbing; j'ai ajouté des trucs au top level; j'ai réécris plusieurs regexp pour que la coloration se fasse mieux; j'ai commencé à réorganisé/commenter le code; maintenant je fignole tout ça; et la partie sera terminée d'ici à demain matin.

J'ai mis plus de temps que prévu parce que la fonction pregexp-replace* est buggée. Et le temps de s'en apercevoir...

Il reste l'inclusion des bibliothèque de Pierre (faut que je vois ça avec lui).

-- JulienCharles - 01 Jun 2004

Du 2 au 3 juin

Le langage normal était vraiment trop lent (sur un exemple réel). J'ai inclus la partie de Pierre. Maintenant on a 2 niveaux de langages. J'ai inclus mod et div; affectation d'une variable renvoie une valeur. J'ai changé la fun. d'affichage.

-- JulienCharles - 03 Jun 2004

Du 4 juin au 10 juin

Du 4 juin au 7 juin
J'ai essayé autant que de faire ce peu de terminer ma partie... Mettre les commentaires + corriger les derniers petits bugs. J'ai commencé à écrire ma partie du rapport + Hacking

Le 8 juin
J'ai fini la sémantique avec Pierre....

Les 9 et 10 juin
Je finis ma partie de rapport ainsi que le Hacking... en vue qu'on le rende demain.

-- JulienCharles - 09 Jun 2004
to top

I Attachment sort Action Size Date Who Comment
specialk.zip manage 55.9 K 09 Jun 2004 - 17:51 JulienCharles une dernière version
twelve-ways.html manage 10.7 K 30 May 2004 - 16:38 JulienCharles 12 ways to fool people
etos.pdf manage 448.0 K 03 Jun 2004 - 20:25 JulienCharles etos - juste pour la citation

You are here: Minfo03 > TerRo1 > PagePersoJulienCharles

to top

Copyright © 1999-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WIKIDeptinfo? Send feedback