Lazi

Cache dans l'interpréteur

Contexte

Pour l'étude d'une liste non orientée j'avais envisagé à un moment d'une solution nécéssitant un cache dans l'interpréteur. Depuis j'ai trouvé une autre solution n'en nécessitant pas. Je garde cette étude car je me suis apperçu qu'un cache pouvait accélérer l'interpréteur. J'écris rapidement l'idée car ne ne pense pas la mettre en place avant longtemps.

Question

Est-ce qu'un système de cache est implémentable dans l'interpréteur ?

Étude

L'idée est de marquer certaines fonctions $F pour que le résultat sur le premier argument soit mis en cache. Cela peut servir dans le cas d'une fonction beaucoup appelée.
Remarquons que le résultat d'un cache peut être une fonction qui utilise aussi un cache, on peut donc gérer plusieurs arguments.
On peut utiliser un arbre équilibré pour rechercher les pointeurs dans le cache.
Il faut une gestion par abonnement pour détruire le cache quand un argument disparait. Par contre on doit garder le résultat (même s'il n'a plus de référence) tant que l'argument existe. Le type Formula, qui a déjà un compteur de référence, me semble adapter pour la gestion des abonnés. Il faut que le cache utilise des PFormula pour que les informations ne soient pas perdues en cas de calcul sur une formule.

Réponse

On dirait que c'est une bonne optimisation. Il faudrait le faire après une étude sur un programme assez gros pour étudier les répétitions de calculs.