Un Functor, c'est pas une classe, c'est au niveau d'abstraction d'une classe "template" en C++. Ça permet de lier n'importe quel type "d'entrée" qui respecte certaines propriétés à un type de sortie qui maintient certaines de ces propriétés de manière générique.
Du coup pour ce qui est des passes d'optimisation ça permet de les écrire de manière générique et de les chaîner un peu comme tu veux. Dans les articles, ils disent que ce niveau de généricité permet de rendre le système de type content, ce qui serait très compliqué à faire avec des simples classes à ce niveau de généricité - mais j'avoue que ça reste un peu flou pour moi et que je suis pas capable d'expliquer en quoi exactement :) Notamment au niveau de la réutilisation de langage pour en faire des extensions : admettons qu'on ait un langage qui soit complètement implémenté, pour rajouter des constructions sans duplication de code, c'était pas possible jusqu'à présent. La il s'agit simplement d'étendre le module. Mais ... pour poser ces questions tu as lu les articles non ?
[^] # Re: chaud
Posté par thoasm . En réponse au journal Tagless-final ou l'art de l'interprétation modulaire.. Évalué à 2.
Un Functor, c'est pas une classe, c'est au niveau d'abstraction d'une classe "template" en C++. Ça permet de lier n'importe quel type "d'entrée" qui respecte certaines propriétés à un type de sortie qui maintient certaines de ces propriétés de manière générique.
Du coup pour ce qui est des passes d'optimisation ça permet de les écrire de manière générique et de les chaîner un peu comme tu veux. Dans les articles, ils disent que ce niveau de généricité permet de rendre le système de type content, ce qui serait très compliqué à faire avec des simples classes à ce niveau de généricité - mais j'avoue que ça reste un peu flou pour moi et que je suis pas capable d'expliquer en quoi exactement :) Notamment au niveau de la réutilisation de langage pour en faire des extensions : admettons qu'on ait un langage qui soit complètement implémenté, pour rajouter des constructions sans duplication de code, c'était pas possible jusqu'à présent. La il s'agit simplement d'étendre le module. Mais ... pour poser ces questions tu as lu les articles non ?