Swiss Table в Go: что изменилось в map

Wait 5 sec.

Когда я впервые увидел новости про Swiss Table в Go, у меня была простая мысль: "Окей, звучит неплохо, но что это реально меняет для обычного разработчика?" Снаружи почти ничего. Мы всё так же пишем map[string]int, читаем, записываем, удаляем значения и обходим map через range. Но внутри рантайма map теперь устроена иначе, и это как раз тот случай, когда изменение под капотом может заметно повлиять на производительность без переписывания бизнес-логики.Начиная с Go 1.24, встроенная map использует новую реализацию на базе Swiss Table. Это не сторонняя структура данных и не новый синтаксис языка, а замена внутреннего механизма хранения пар "ключ - значение". В релизных материалах команда Go прямо пишет, что новая map стала одной из причин снижения накладных расходов рантайма в среднем на 2-3% на наборе репрезентативных тестов. При этом они отдельно предупреждают: результат зависит от конкретного приложения.Главный тезис статьи такой: Swiss Table - это не новая коллекция для Go, а новая начинка старой map. И чтобы нормально понять, почему вокруг неё столько внимания, нужно разобрать три вещи: как вообще работали старые подходы к хеш-таблицам, в чём сила Swiss Table и почему Go не мог просто взять реализацию из Abseil один в один. Читать далее