Polymorphisme des opérations sur les signaux modifications réalisées dans le fichier TML6b.ml C. Deleuze, novembre 2009 ---- résumé des pbs Si l'on veut que le type signal_t soit paramétré le type coop le devient aussi, du coup process (qui renvoie coop) aussi, d'où problème avec runq, pauseq, ... De même la liste used_signals ne peut plus exister. Finalement, context_element devient paramétré, ors un contexte est défini comme un contextelement list * int. La liste n'est plus possible. ---- resumé des modifs On rend le type des signal paramétrique sur le type de valeur 'a signal_t L'idée de base à la plupart des modifications est de "cacher" le polymorphisme dans des fermetures. 1) Le type coop est modifié. Les opérations await etc font elles même les opérations de mise en file au lieu de retourner le signal (maintenant paramétré) et laisser sched faire le travail. * à la limite on devrait supprimer le type coop et déplacer tout le travail de sched vers les opérations. 2) La liste used_signal est maintenant une liste des actions (une pour chaque signal) à effectuer en fin d'instant. Cela a pour conséquence de placer les fonctions de fin d'instant beaucoup plus tôt dans le code. De plus la réinsertion des instructions await etc dans la continuation des processus implique de définir des fonctions mutuellement récursives. 3) Cas des constructions de contrôle Trois de ces constructions (When, Control et Until) n'utilisent pas la valeur du signal. On peut donc leur faire utiliser le type unit signal_t et _caster_ (avec Obj.magic) le signal vers ce type pour construire ces éléments de contexte. When Control Until utilisent unit signal_t La dernière construction (Untilv) a besoin de la valeur du signal, si le signal est émis, la fonction e2 est appliquée à sa valeur, puis la continuation est lancée. On donne à Untilv une fonction qui fait le test de préemption et renvoie : - None si elle n'a pas lieu, et - Some de la continuation (qui comprend la lecture de la valeur du signal, l'exécution de e2, puis de k) si elle a lieu. seuls active_eoi et unactive_eoi en ont besoin. ---- autres idées serait-il possible d'utiliser du sous-typage objet, au lieu du Obj.magic ? un type signal valué héritant d'un type signal non valué. Un signal valué pourrait être traité par When, Control et Until comme un signal non valué.