Well, I think I've recreated all the original tests already, except I've left out the COW HashMap. The cljs-maps-assoc-* series indicate PHMs trounce other map types on assoc as soundly as they appeared to in the original tests. Or have I missed something?
The lookup performance issue seems weird to me, since I really don't see any obvious methodological errors in either the old or the new tests. Clearly that's something still in need of attention.
As for ObjMap changing type based on the number of updates – that's an interesting idea, though at large sizes it could result in a sudden pretty significant road bump at conversion time; perhaps too much of a surprise for regular code? Also, this would basically result in switching at some size in range [updates-threshold, compiler-obj-map-emit-threshold + updates-threshold] unless the compiler always emits ObjMaps for the simple keys case with no size thresholding, which seems problematic. Of course the "switch in size range" behaviour might be a good idea – I wonder how to benchmark that though...
Conversion-preventing constructor – that's what I meant by requesting a particular map type. We could use just the one constructor by adding an extra field with a flag (to be checked only when a conversion would occur with the current arrangements) – clearly that's an extra minor hit at every assoc to a implicit-conversion-free map, but those should probably not be updated anyway! (Except as transients, see below.)
Transient support – I've got TransientObjMap already implemented (with no implicit conversions), I'll tidy it up a bit for possible inclusion.
NB. folks who need top lookup perf for strings can already use objects directly or call cljs.core.ObjMap/fromObject (which always constructs an OM – no risk of implicit conversion).
About PAMs – they seem to offer a significant lookup speed boost at small sizes and no particular gains (even the opposite) at larger sizes. That's about the same effect as that on the JVM, so maybe it makes sense to keep them around for very small sizes only (~10)? I've no particularly strong opinion on this one for now, to be honest; I'd love to know if yoklov's speed gains had anything to do with PAMs or was it just the ObjMaps at small sizes (note the report was about the patches with both conversion thresholds set to 16).
Sorry for the chaotic writing, I need to think about this some more...