En effet, le travail demandé est plutôt trivial (conversion d'un ast déjà généré en code machine valide) : Le journal n'était pas pour demander de l'aide (ça serait plutôt dans un forum que je demanderais ce genre de choses) mais pour dire que mon code caml était plutôt répétitif (chaque appel de fonction demande un contexte, qui change parfois, mais peu souvent) et que la méthode pour « cacher » cet argument, qui marcherait bien en haskell, était bien trop pénible à mettre en place en caml par rapport aux gains (retirer un argument des fonctions).
Bien sûr, si on propose une solution élégante, je suis preneur (même si j'ai déjà rendu le projet, ça peut toujours servir !).
PS: Un camarade a trouvé une solution plutôt élégante, en remarquant que la création d'un nouveau contexte ne se fait que quand on déclare des variables locales à un bloc, et que donc on peut utiliser une variable globale, qui est modifiée quand on entre dans ce bloc, fait un appel récursif pour les différents calculs d'expression (qui utiliseront la variable globale, donc le nouveau contexte), puis la remet « comme avant » à la fin de la compilation du bloc. C'est doublement élégant parce que cela utilise moins de mémoire (enfin, j'en ai l'impression) en plus de virer les contextes dans les appels de fonctions.
Bien sûr, si on propose une solution élégante, je suis preneur (même si j'ai déjà rendu le projet, ça peut toujours servir !).
PS: Un camarade a trouvé une solution plutôt élégante, en remarquant que la création d'un nouveau contexte ne se fait que quand on déclare des variables locales à un bloc, et que donc on peut utiliser une variable globale, qui est modifiée quand on entre dans ce bloc, fait un appel récursif pour les différents calculs d'expression (qui utiliseront la variable globale, donc le nouveau contexte), puis la remet « comme avant » à la fin de la compilation du bloc. C'est doublement élégant parce que cela utilise moins de mémoire (enfin, j'en ai l'impression) en plus de virer les contextes dans les appels de fonctions.
[^] # Re: Méconnaissance
Posté par Aluminium95 . En réponse au journal Compilateur et Monad Reader. Évalué à 1.
En effet, le travail demandé est plutôt trivial (conversion d'un ast déjà généré en code machine valide) : Le journal n'était pas pour demander de l'aide (ça serait plutôt dans un forum que je demanderais ce genre de choses) mais pour dire que mon code caml était plutôt répétitif (chaque appel de fonction demande un contexte, qui change parfois, mais peu souvent) et que la méthode pour « cacher » cet argument, qui marcherait bien en haskell, était bien trop pénible à mettre en place en caml par rapport aux gains (retirer un argument des fonctions).
Bien sûr, si on propose une solution élégante, je suis preneur (même si j'ai déjà rendu le projet, ça peut toujours servir !).
PS: Un camarade a trouvé une solution plutôt élégante, en remarquant que la création d'un nouveau contexte ne se fait que quand on déclare des variables locales à un bloc, et que donc on peut utiliser une variable globale, qui est modifiée quand on entre dans ce bloc, fait un appel récursif pour les différents calculs d'expression (qui utiliseront la variable globale, donc le nouveau contexte), puis la remet « comme avant » à la fin de la compilation du bloc. C'est doublement élégant parce que cela utilise moins de mémoire (enfin, j'en ai l'impression) en plus de virer les contextes dans les appels de fonctions.
Bien sûr, si on propose une solution élégante, je suis preneur (même si j'ai déjà rendu le projet, ça peut toujours servir !).
PS: Un camarade a trouvé une solution plutôt élégante, en remarquant que la création d'un nouveau contexte ne se fait que quand on déclare des variables locales à un bloc, et que donc on peut utiliser une variable globale, qui est modifiée quand on entre dans ce bloc, fait un appel récursif pour les différents calculs d'expression (qui utiliseront la variable globale, donc le nouveau contexte), puis la remet « comme avant » à la fin de la compilation du bloc. C'est doublement élégant parce que cela utilise moins de mémoire (enfin, j'en ai l'impression) en plus de virer les contextes dans les appels de fonctions.