Go 1.24 reemplaza el mapa integrado con Swiss Tables
How Swiss tables work in Go built-in map

Go 1.24 ha sustituido la implementación interna del mapa por un diseño basado en Swiss Tables, mejorando el rendimiento. Este artículo explica de forma visual y gradual cómo funciona el nuevo runtime: desde la estructura `Map` y los grupos de 8 ranuras, hasta el uso de bytes de control, hashing con semilla y comparación SIMD. También detalla la transición de un grupo pequeño a una tabla con múltiples grupos, la redistribución de claves y el manejo de eliminaciones con tombstones.
Go utiliza instrucciones SIMD para comparar H2 42 con esos 8 bytes de control a la vez, en lugar de visitar las 8 ranuras una por una.
- nasso_dev
Las swiss tables fueron inventadas por ingenieros que trabajaban en la oficina de Google en Zúrich, de ahí el nombre. Me sorprende que Go, un lenguaje de programación también de Google, ¡no las estuviera usando! Para una excelente charla sobre el desarrollo de las swiss tables, recomiendo encarecidamente esta charla de Matt Kulukundis en CppCon 2017: "Designing a fast, efficient, cache-friendly hash table, step by step" https://youtu.be/ncHmEUmJZf4
- bruce343434
Siento que este artículo hace una búsqueda en profundidad sobre qué son las swiss tables, saltando de cabeza a los detalles de implementación más pequeños, pero me falta la búsqueda en amplitud. ¿Cuál es el `struct` de nivel superior de una swiss table? ¿Un array de grupos? ¿Por qué no simplificar todo en direccionamiento abierto lineal, con un stride de 8 para SIMD? ¿Por qué los saltos triangulares? ¿Qué problemas resuelve este diseño?
- Surac
Go tiene la misma enfermedad que Rust. Primero el nombre de la variable y luego el tipo. Eso ya lo teníamos en Basic y lo odio. Algunos argumentan que sería mejor si declaras más de una variable en la misma línea. Yo nunca hago eso. ¿Por qué no podemos tener cosas buenas?