craff / pacomb

A parsing library that compiles grammars to combinators using elimination of left recursion
MIT License
18 stars 2 forks source link

Do better for infix_tag in eq_closure #22

Closed craff closed 4 years ago

craff commented 4 years ago

See comment in lib/hashtbl_eq.ml

rlepigre commented 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).

rlepigre commented 4 years ago

By the way, we use eq_closure in several projects, it would probably be a good idea to use the new version everywhere.

craff commented 4 years ago

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 ...

craff commented 4 years ago

En fait maintenant marshall utilise une couleur ... Caml_blue...

craff commented 4 years ago

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.

rlepigre commented 4 years ago

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.