aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
authorFabrice <fabrice@schaub-dev.xyz>2026-04-13 00:05:00 +0200
committerFabrice <fabrice@schaub-dev.xyz>2026-04-13 00:05:00 +0200
commitb748cd62e130ac54e317b284013cac0537ca6c5a (patch)
treeb0d866357286c25d6456c4e55c2a88eed49bf3b0 /README.md
parent59debda75fa78fe816a1cf1a5eeed3a7f68b9356 (diff)
adding d and ada
Diffstat (limited to 'README.md')
-rw-r--r--README.md6
1 files changed, 5 insertions, 1 deletions
diff --git a/README.md b/README.md
index 51740dd..9f9f05c 100644
--- a/README.md
+++ b/README.md
@@ -109,8 +109,10 @@ int main(void) {
| Go map (Swiss table) | ~68 | |
| .NET Dictionary | ~70 | |
| Chromium JS Map | ~102 | |
+| D associative array (LDC) | ~109 | [3] |
| std::unordered_map + mimalloc | ~110 | [2] |
| Node.js Map | ~153 | |
+| Ada Hashed_Maps (GNAT) | ~147 | [4] |
| std::unordered_map | ~176 | |
| Python dict | ~193 | |
@@ -119,7 +121,9 @@ int main(void) {
**Java HashMap is excluded.** `HashMap<Long, Long>` boxes every key and value into heap objects, and the JVM C2 JIT eliminates the miss-lookup loop entirely after warmup (it can prove missing keys are absent, so the loop body is dead code). The resulting numbers are not a fair comparison against native hash maps.
**[1]** abseil is the reference Swiss table implementation.
-**[2]** std::unordered_map is chained; mimalloc recovers ~38% by reducing per-node allocation cost. Without it: ~176 ms.
+**[2]** std::unordered_map is chained; mimalloc recovers ~38% by reducing per-node allocation cost. Without it: ~176 ms.
+**[3]** D's built-in associative array uses per-entry heap allocation; no open-addressing or SIMD.
+**[4]** Ada's `Ada.Containers.Hashed_Maps` is also chained; `Hash_Type` is 32-bit so the mixing hash is truncated, reducing distribution quality slightly.
---