En muchos lenguajes de tipado dinámico como Python, Ruby y JavaScript, los objetos parecen mapeos de nombres de atributos a valores. Esta flexibilidad anima a los implementadores de runtimes a modelar los atributos con una tabla hash, lo que parece una opción natural, ya que las tablas hash son buenas para asociar nombres con valores.
Sin embargo, el enfoque de tabla hash tiene inconvenientes. El hashing y el sondeo son lentos para una operación muy común. La tabla hash también añade una indirección, obligando a saltar del objeto a una estructura de almacenamiento separada. Como resultado, un acceso simple a un atributo como a.b puede requerir cientos o miles de instrucciones de CPU, incluidas múltiples cargas de memoria dependientes. Como los atributos se acceden con frecuencia, almacenarlos directamente en el objeto sería mucho más eficiente.
Para resolver esto, los runtimes utilizan estructuras conocidas como mapas, layouts, shapes o clases ocultas. Estas optimizan la lectura, la escritura y el almacenamiento de atributos. Muchos runtimes de producción contienen casos extremos complejos y específicos del dominio, mientras que muchas entradas de blog ofrecen descripciones generales sin detalles de implementación.
El autor se basa en A Simple Object Model, de CF Bolz-Tereick, que modela Python con una fidelidad razonable. En lugar de cubrir la maquinaria de clases y métodos, el autor se centra en los atributos de instancia y en la parte de mapas, extrayendo un sistema de mapas reducido y limpio de menos de 500 líneas de código que el lector puede tener en mente de una sola vez.
Fuente: Hacker News · Resumido por HeadlinesBriefing