Warum Objekte in dynamischen Sprachen Maps brauchen
Objects, attributes, maps, oh my
In dynamisch typisierten Sprachen wie Python, Ruby oder JavaScript werden Objektattribute oft als Hash-Tabellen modelliert – einfach, aber langsam, weil jeder Zugriff Hashing und mehrere Speicherzugriffe erfordert. Der Artikel erklärt, wie Laufzeitumgebungen mit Maps (auch Shapes oder Hidden Classes genannt) die Attribut-speicherung optimieren: Sie ersetzen String-Lookups durch Integer-Indizes, speichern Attribute direkt im Objekt und ermöglichen Inline-Caches, die die Map-Identität prüfen. Anhand einer kompakten Python-Implementierung wird gezeigt, wie solche Maps als persistente Bäume aufgebaut werden und warum die Reihenfolge der Attributzuweisung die Performance beeinflusst.
Die Differenz zwischen einem Cache-Treffer und einem Cache-Fehler auf einem heißen Pfad kann Faktor 2 betragen.