HeadlinesBriefing HeadlinesBriefing.com

Objektkarten, Shapes und versteckte Klassen erklärt

Hacker News •
×

In vielen dynamisch typisierten Sprachen wie Python, Ruby und JavaScript wirken Objekte wie Zuordnungen von Attributnamen zu Werten. Diese Flexibilität verleitet Laufzeitimplementierer dazu, Attribute mit einer Hash-Tabelle zu modellieren, was naheliegend erscheint, da Hash-Tabellen gut darin sind, Namen auf Werte abzubilden.

Der Hash-Tabellen-Ansatz hat jedoch Nachteile. Hashing und Sondierung sind für eine sehr häufige Operation langsam. Die Hash-Tabelle fügt außerdem eine Indirektion hinzu und zwingt dazu, vom Objekt zu einer separaten Speicherstruktur zu springen. Ein einfacher Attributzugriff wie a.b kann dadurch Hunderte oder Tausende CPU-Befehle benötigen, darunter mehrere abhängige Speicherzugriffe. Da auf Attribute häufig zugegriffen wird, wäre es weit effizienter, sie direkt im Objekt zu speichern.

Um dies zu lösen, verwenden Laufzeitumgebungen Strukturen, die unter verschiedenen Namen bekannt sind: Maps, Layouts, Shapes oder versteckte Klassen. Sie optimieren das Lesen, Schreiben und Speichern von Attributen. Viele produktive Laufzeitumgebungen enthalten komplexe, domänenspezifische Sonderfälle, und viele Blogbeiträge bieten nur grobe Überblicke ohne Implementierungsdetails.

Der Autor baut auf CF Bolz-Tereicks A Simple Object Model auf, das Python mit angemessener Genauigkeit modelliert. Statt die Mechanik von Klassen und Methoden zu behandeln, konzentriert sich der Autor auf die Instanzattribute und den Map-Teil und entwickelt ein reduziertes, übersichtliches Map-System mit weniger als 500 Codezeilen, das Leser auf einmal im Kopf behalten können.

Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing