Posté par benja .
En réponse au journal EDSL et F-algèbres.
Évalué à 1.
Dernière modification le 14 juin 2016 à 11:55.
Je n'ai toujours pas saisi la finalité de la méthode décrite dans le journal
Cette méthode utilise un encoding qui permet de se passer de la récursion.
let rec fold f g e =
raté :p
ce qui s'appelle du higher-kinded polymorphism
Apparemment le higher-kinded polymorphisme serait un autre nom de "type constructor polymorphism". Dans notre cas, on peut parler simplement de higher-order polymorphisme, non ?
OCaml on a tendance à utiliser le système des modules pour cela.
Je ne vois pas en quoi le répèter le rend plus vrai... Avec Obj.magic nous sommes même maintenant à une 4e technique ;-)
D'un autre côte, il semblerait que l'objectif soit aussi d'éviter de construire explicitement l'AST du langage cible pour éviter de l'allocation.
Remarques qu'il semblerait que le language cible soit le language hôte (E-DSL). Aussi que nous construisons un AST directement, ou que nous passions par des constructeurs—sans (val op : expr -> expr -> expr) ou avec (val op : 'a. 'a expr -> 'a expr -> 'a algebre -> 'a) l'encoding illustré dans ce journal --,dans tous les cas nous avons des allocations (en tout cas en ocaml), je ne vois pas comment on pourrait s'en passer ??
(* oh le joli type de fold ;-) *)
val fold : (int -> 'a) -> ('a -> 'a -> 'a) -> expr -> 'a =
C'est simplement du first-order polymorphism, d'une fonction sur un type monomorphique. Le but du journal c'est de se passer de la récursion et utiliser le fameux encoding, et donc passer par un polymorphisme d'un plus grand genre (sic).
Maintenant que tout ça a été re-dit, la question—que nous semblons tous aussi déjà avoir soulevée—c'est de montrer quels sont les avantages une fois qu'on a passé cette étape. Là je botte en touche... (Sans doute faudrait-il partir d'un exemple qui ne soit pas un jouet.)
[^] # Re: C'est bien la peine !
Posté par benja . En réponse au journal EDSL et F-algèbres. Évalué à 1. Dernière modification le 14 juin 2016 à 11:55.
Cette méthode utilise un encoding qui permet de se passer de la récursion.
raté :p
Apparemment le higher-kinded polymorphisme serait un autre nom de "type constructor polymorphism". Dans notre cas, on peut parler simplement de higher-order polymorphisme, non ?
Je ne vois pas en quoi le répèter le rend plus vrai... Avec Obj.magic nous sommes même maintenant à une 4e technique ;-)
Remarques qu'il semblerait que le language cible soit le language hôte (E-DSL). Aussi que nous construisons un AST directement, ou que nous passions par des constructeurs—sans (val op : expr -> expr -> expr) ou avec (val op : 'a. 'a expr -> 'a expr -> 'a algebre -> 'a) l'encoding illustré dans ce journal --,dans tous les cas nous avons des allocations (en tout cas en ocaml), je ne vois pas comment on pourrait s'en passer ??
C'est simplement du first-order polymorphism, d'une fonction sur un type monomorphique. Le but du journal c'est de se passer de la récursion et utiliser le fameux encoding, et donc passer par un polymorphisme d'un plus grand genre (sic).
Maintenant que tout ça a été re-dit, la question—que nous semblons tous aussi déjà avoir soulevée—c'est de montrer quels sont les avantages une fois qu'on a passé cette étape. Là je botte en touche... (Sans doute faudrait-il partir d'un exemple qui ne soit pas un jouet.)