3 ms·
The reason for randomized hash is most probably to mitigate DOS attacks based on users knowing which hash function is used (Go is open source, after all) and fi
by BoingBoomTschak 2y ago
The reason for randomized hash is most probably to mitigate DOS attacks based on users knowing which hash function is used (Go is open source, after all) and finding a way to fill a map - any map - with untouched tokens.
- materielle 2y agoThat’s definitely part of it. The other half is hyrum’s law. There’s a lot of situations in reasonable unordered map implementations where the elements, by chance, do happen to be ordered. Just due to arbitrary implementation decisions. But the Go spec says that maps are unordered, and library writers want to reserve the right to change the implementation in the future. So always ransoming the dict prevents code from accidentally depending on some specific map implementation detail.
- jhgg 2y agohttps://go.dev/doc/go1#iteration https://go.dev/doc/go1#iteration > The old language specification did not define the order of iteration for maps, and in practice it differed across hardware platforms. This caused tests that iterated over maps to be fragile and non-portable, with the unpleasant property that a test might always pass on one machine but break on another. > In Go 1, the order in which elements are visited when iterating over a map using a for range statement is defined to be unpredictable, even if the same loop is run multiple times with the same map. Code should not assume that the elements are visited in any particular order. > This change means that code that depends on iteration order is very likely to break early and be fixed long before it becomes a problem. Just as important, it allows the map implementation to ensure better map balancing even when programs are using range loops to select an element from a mapl.