I was about to change backend.cmod to use power of two hashtables, aswell. Its using hash_svalue anyhow, and it seems a little unnecessary to use mod prime hashtables there. Anyhow, while doing so and putting some benchmarks together I noticed that the code in backend.cmod:990 ff assumes that is_eq has side effets. Because of that it does alot of extra work. Its especially bad if one has alot of callouts to the same function since the buckets get very large.
If a call to remove_call_out/call_out is the only thing that could change the hash tables, we might aswell do some kind of recursion detection and error instead (in case someone does call_outs from `==).
Any thoughts?
arne