After all of the discussion, I would like to call for a vote on this policy
for hash related containers in ATS 9. This would explicitly *not* apply to
concurrent containers.

The containers in ink_hash_table.h (TCL), List.h, Map.h, and Vec.h are
deprecated. These should be replaced with one of

* std::vector
* IntrusiveDList
* IntrusiveHashMap
* std::map
* std::unordered_map
* IpMap

as seems appropriate for the particular use case.

In particular, if memory for objects is managed elsewhere, favor
IntrusiveHashMap. If memory management is local, then favor
std::unordered_map. For ordered containers, consider if a sorted
std::vector would suffice (see std::binary_search). For searchable
containers with IP address keys, favor IpMap.

As specific examples, if the objects are managed by a ProxyAllocator then
IntrusiveHashMap is the better choice. If the objects are being created
with new or ats_malloc, then std::unordered_map is the better choice (in
which case new/ats_malloc would no longer be used explicitly, memory
management would be done by the container). Testing indicates that in usual
cases the performance differences are not large enough to determine the
choice.

Reply via email to