la liste y est transformée en deux constantes 4::* et 5::*.
Le problème réside plutôt au niveau du flot d'instruction: si on tient à ce que la compilation se termine toujours, il devient nécessaire de pouvoir prouver qu'un code se termine avant de pouvoir l'évaluer durant la phase de compilation. Ce n'est pas possible en général sur un langage Turing-complet.
La voie alternative suivie par MetaOCaml est d'être très explicite sur les phases de la compilation.
De son côté le C++ a fait le choix de laisser le choix aux compilateurs la taille de la pile de récursion lors des calcul templates.
[^] # Re: optimisation et propagation de constante
Posté par octachron . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 3.
Le problème n'est pas tellement sur le type de donnée: Flambda n'a aucun mal à transformer
en une constante globale
[| 2.; 2. |], pareillement dans le cas suivantla liste
yest transformée en deux constantes4::*et5::*.Le problème réside plutôt au niveau du flot d'instruction: si on tient à ce que la compilation se termine toujours, il devient nécessaire de pouvoir prouver qu'un code se termine avant de pouvoir l'évaluer durant la phase de compilation. Ce n'est pas possible en général sur un langage Turing-complet.
La voie alternative suivie par MetaOCaml est d'être très explicite sur les phases de la compilation.
De son côté le C++ a fait le choix de laisser le choix aux compilateurs la taille de la pile de récursion lors des calcul templates.