Closed craff closed 4 years ago
I actually cleaned up the whole module at some point, including fixing this function. It is NOT correct in the version you currently have for several reasons (that I discovered but not remember). I don't know why my work has been thrown away.
You can recover it here: https://github.com/craff/pacomb/blob/meta/lib/hashtbl_eq.ml (commit 4c1ed550a7a7bd83f0f115635cf4cb07dbbfb8d9).
By the way, we use eq_closure
in several projects, it would probably be a good idea to use the new version everywhere.
OK, merci. Je la prend déjà pour pml. En fait j'avais utilisé marshall .... et ça ne marche pas, il donne false sur des trucs physiquement égaux!!!! Et je suis revenu sur la mauvaise version.
En fait, il faudrait que eq_done utilise une table de hash, celle du code de marshall dans le C runtime d'OCaml. On rate aussi les custom_tags ... Ptet qu'il faudrait du C ...
En fait maintenant marshall utilise une couleur ... Caml_blue...
J'ai essayé une table de hash caml sur l'adresse, avec l'idée que si le GC déplace les objets, on détecte le cycle plus tard, c'est tout. Mais c'et très bof. Je clos.
Ptet qu'il faudrait du C ...
J'avais considéré copier le code d'égalité du runtime C et de l'adapter, mais bon c'est dégueulasse comme ça va devoir dépendre des versions de Caml (surtout qu'il va y avoir des changements à cause de multicore). Le mieux serait que Caml fournisse cette primitive.
See comment in lib/hashtbl_eq.ml