Здравствуйте, ·, Вы писали:
·>Map.of("a", 1, "b", 2) — это неупорядоченный hash map, у тебя будет либо b2a1 либо a1b2 в зависимости от фазы луны.
Офигеть! А почему этот код зависит от фазы луны? Там внутри рандомизатор стоит?
Если авторы стандартной библиотеки сделали так намеренно, — надо бить их сапогами. На ровном месте превратить шрёдинбаги в гейзенбаги.
Баг Шрёдингера — существует скрытно до наступления какого-то события (например, смены версии компилятора), после чего вылезает и гарантированно воспроизводится.
Например, пользователь закладывается на какой-то конкретный порядок следования элементов в нестабильной сортировке или, тем более, в хеш-таблице.
Можно обмазать код проверками-допущениями, и эти проверки начнут стрелять. После чего высокоуровневое допущение становится очевидно неправильным, бери и переделывай.
Баг Гейзенберга — существует скрытно, воспроизводится не гарантированно.
Например, в алгоритм сортировки добавлен рандомизатор "для улучшения времени работы в среднем".
И до кучи, один и тот же набор данных обычно сортируется за логлинейное время, но в зависимости от фазы луны иногда убегает в квадратное.
И ещё до кучи, это меняет состояние глобального рандомизатора, то есть, якобы чистый код перестаёт быть идемпотентным: программа в самых отдалённых уголках будет вести себя по-разному, в зависимости от того, отсортируешь ты один массив единожды или дважды.