Lazi

compute et strictness

Contexte

Le calcul d'une formule permet d'obtenir des formules égales. Il existe beaucoup de manière d'obtenir des formules égales par calcul. La forme de calcul que l'on utilise dépend de notre objectif.

Question

Quels forme d'évaluation implémenter dans l'interpréteur et comment le faire ?

Étude

Situation actuelle

Seule l'évaluation lazy est implémentée. Le partage des calculs dupliqués permet d'optimiser cette évaluation.

Implémentation des formes d'évaluation

La forme d'évaluation n'a rien à voir avec la valeur de la formule. C'est pourquoi l'utilisation de mots clés (voir l'étude sur ce sujet) est une mauvaise solution. Il vaut mieux utiliser des types particuliers de formules pour ajouter les informations d'évaluation.

Par exemple pour l'évaluation strict, on peut utiliser $Comp[ f ] pour indiquer de calculer f avant la formule entière.

On peut avoir plusieurs types d'informations attachées aux formules et sans rapport avec le contenu :

  • gestion du calcul (comme la strictness)
  • commentaire
  • gestion du rendu

Donc un bon système est d'ajouter un système d'anotation pour chaque formule. Cela permet d'ajouter diverses informations. Ce peut-être par exemple un pointeur vers un objet anotation quand il y en a et sinon il pointe vers NULL.

Voir aussi : "Quand un compute doit-il être réalisé ?" dans l'étude sur compute.

Besoin d'autres formes d'évaluation ?

La forme strict parait indispensable pour certains calculs, mais pour l'instant je pense que ce n'est pas encore nécessaire.

Réponse

Plus tard la forme stricte, avec un système de marquage des formules par $Comp[ f ]. Voir l'étude.