Ta solution, bien que résolvant ta problématique, rajoute une indirection en mémoire.
Je pense qu'il est souvent prématuré de se poser des questions de représentation mémoire quand on écrit un programme—à moins de savoir d'avance que le type sera impliqué dans les parties les plus coûteuses en performance.
Par ailleurs, comme Permhmâd l'a mentionné, un constructeur à plusieurs argument
type t = Foo of bar * baz * foobar a la même représentation qu'un type (bar * baz * foobar). Du coup on a une indirection seulement avec un constructeur à un seul argument
type t = Foo of bar et depuis OCaml 4.04 (Novembre 2016), on peut écrire
type t = Foo of bar [@@unboxed] pour supprimer l'indirection dans ce cas. (C'est utile pour packer des existentiels sans indirection.)
[^] # Re: Module et type abstrait
Posté par gasche . En réponse au journal Une petite histoire d'utilisation type fort dans Ocaml. Évalué à 3.
Je pense qu'il est souvent prématuré de se poser des questions de représentation mémoire quand on écrit un programme—à moins de savoir d'avance que le type sera impliqué dans les parties les plus coûteuses en performance.
Par ailleurs, comme Permhmâd l'a mentionné, un constructeur à plusieurs argument
a la même représentation qu'un typetype t = Foo of bar * baz * foobar
(bar * baz * foobar). Du coup on a une indirection seulement avec un constructeur à un seul argument
et depuis OCaml 4.04 (Novembre 2016), on peut écriretype t = Foo of bar
pour supprimer l'indirection dans ce cas. (C'est utile pour packer des existentiels sans indirection.)type t = Foo of bar [@@unboxed]