Je ne suis pas certain de comprendre tes questions.
Est-ce le "code" est dupliqué pour chaque functor ?
Un foncteur c'est une fonction qui prend des modules comme paramètres et qui renvoie un module (qui pourrait lui-même être un foncteur d'ailleurs). Le système des modules avec ses foncteurs est au fond un langage fonctionnel mais non turing-complet, il est proche du lambda-calcul simplement typé (en). Qu'entends-tu par le code dupliqué pour chaque foncteur ? Il y aura de l'allocation à chaque application du foncteur, mais tout comme avec n'importe quelle application de fonction. Par exemple :
letfi=i+1leti=f1letj=f2
ici, à chaque fois que l'on applique f on alloue de la mémoire pour stocker le résultat dans i et j. C'est pareil avec les foncteurs.
Mais dans le cas de "génération" d'une expression par lecture d'un fichier par exemple, il faut le faire pour chaque functor ?
Une expression c'est un terme d'un langage. Pour pouvoir l'interpréter, il faut le mettre dans un foncteur paramétré par un module d'interprétation, et en appliquant le foncteur tu obtiendras l'interprétation de ton choix.
Comment partager une expression qui n'est pas statique ?
Via la directive include. Par exemple si tu as un terme t, tu peux faire :
moduleT(I:SYM)=structlett=(* la désérialisation de ton terme *)end
Et si tu veux l'utiliser avec un autre terme t', tu fais :
moduleT'(I:SYM)=structincludeT(I)lett'=(* expression qui comporte t *)end
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: chaud
Posté par kantien . En réponse au journal Tagless-final ou l'art de l'interprétation modulaire.. Évalué à 1.
Je ne suis pas certain de comprendre tes questions.
Un foncteur c'est une fonction qui prend des modules comme paramètres et qui renvoie un module (qui pourrait lui-même être un foncteur d'ailleurs). Le système des modules avec ses foncteurs est au fond un langage fonctionnel mais non turing-complet, il est proche du lambda-calcul simplement typé (en). Qu'entends-tu par le code dupliqué pour chaque foncteur ? Il y aura de l'allocation à chaque application du foncteur, mais tout comme avec n'importe quelle application de fonction. Par exemple :
ici, à chaque fois que l'on applique
fon alloue de la mémoire pour stocker le résultat dansietj. C'est pareil avec les foncteurs.Une expression c'est un terme d'un langage. Pour pouvoir l'interpréter, il faut le mettre dans un foncteur paramétré par un module d'interprétation, et en appliquant le foncteur tu obtiendras l'interprétation de ton choix.
Via la directive
include. Par exemple si tu as un termet, tu peux faire :Et si tu veux l'utiliser avec un autre terme
t', tu fais :Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.