Rust as a fundamental component is to provide tools that are secure and as zero cost as possible, and to communicate that well so that if there is a cost, that cost is very easy to know about, that's what good design looks like. Rust should not make assumptions about what performance the user will make, that's not Rust's business, Rust's focus is only to provide the best as possible and communicate it clearly and easily, let the user choose based on their use case after knowing from the information
No, assuming the user will profile their application to find the overhead is very unrealistic from a language perspective, overhead can come from small accumulations that pile up when it becomes 1 big app but originally each was small and frequent. HashMap is a fundamental data type, if you often read Rust code in the wild, objectively you can say 98% of code does not change the default hasher algorithm when processing input that comes from internal. They might not know that the HashMap they use to process internal input is much slower than C++ unordered_map, also slower than Go map, slower than Zig map. Even the Rust compiler itself says it's slow and doesn't use it. In 1 project, HashMap is used over and over and over again, not just once, because it's a fundamental component. 1 project uses 10 libraries, those libraries could also use HashMap a lot, because that's the std component for O(1) operations, what if the libraries used by those libraries also use HashMap? A fundamental component very easily scales to being used many times over. Even popular libraries still use the default hasher even though it's clearly processing data from internal, this is what was said earlier about reading documentation being enough, but in reality it's not
Tokio uses default hasher even though if you read the code there it's clearly internal data not from user input:
Rust Analyzer, read it here:
Regex, please read the code, it processes internal input:
https://github.com/search?q=repo%3Arust-lang%2Fregex+hashmap&type=code
Polars, many actually process internal data:
https://github.com/search?q=repo%3Apola-rs%2Fpolars+hashmap&type=code
Lighthouse, many process internal data too:
https://github.com/search?q=repo%3Asigp%2Flighthouse+hashmap&type=code
Diesel, the popular SQL library, unfortunately uses the slow default hasher to process data that is clearly isolated and not user input:
https://github.com/search?q=repo%3Adiesel-rs%2Fdiesel+hashmap&type=code
SQLx, another popular SQL library other than Diesel suffers from the same unoptimized code:
https://github.com/search?q=repo%3Atransact-rs%2Fsqlx+hashmap&type=code
Oxigraph, a database library, contains the same unnecessary overhead:
https://github.com/search?q=repo%3Aoxigraph%2Foxigraph+hashmap&type=code
And many much more. I could say with very high confidence that 98% of all Rust code in the world does not change the default hasher even though the data being processed is internal or isolated and not user input. Because it is very very very rare that I see anyone modify the hash algorithm. They assume it's already faster than HashMap in other languages, when in fact it's not