スライドに記載しているリンク
P29 拡張後の取得
https://github.com/golang/go/blob/go1.22.4/src/runtime/map.go#L419-L430
P32 拡張後の登録
https://github.com/golang/go/blob/go1.22.4/src/runtime/map.go#L609-L612
https://github.com/golang/go/blob/go1.22.4/src/runtime/map.go#L1140-L1149
P58 議論されているissueでのやり取り抜粋
https://github.com/golang/go/issues/54766
P68 mapの拡張条件
https://github.com/cockroachdb/swiss/blob/main/map.go#L1028-L1057
P70 まとめ
https://github.com/cockroachdb/swiss
P71 ベンチマーク(sec/op)
https://gist.github.com/aclements/9fb32ac0a287d2ff360f1bc166cdf4b8
#参考文献
## SwissTable
- runtime: use SwissTable: https://github.com/golang/go/issues/54766
- CppCon 2017: Matt Kulukundis “Designing a Fast, Efficient, Cache-friendly Hash Table, Step by Step”: https://www.youtube.com/watch?v=ncHmEUmJZf4
- https://github.com/cockroachdb/swiss
- Swiss Tables Design Notes: https://abseil.io/about/design/swisstables
- Swisstable, a Quick and Dirty Description: https://faultlore.com/blah/hashbrown-tldr/
- Extendible hashing: https://en.wikipedia.org/wiki/Extendible_hashing
- Swisstable Hash に使われているビット演算の魔術:https://methane.hatenablog.jp/entry/2022/02/22/Swisstable_Hash_に使われているビット演算の魔術
## 既存実装
- map.go: https://github.com/golang/go/blob/master/src/runtime/map.go
- 【Go】Mapの内部構造とO(1)のメカニズム: https://zenn.dev/smartshopping/articles/5df9c3717e25bd
- How the Go runtime implements maps efficiently (without generics): https://dave.cheney.net/2018/05/29/how-the-go-runtime-implements-maps-efficiently-without-generics