HeadlinesBriefing HeadlinesBriefing.com

Cartes d'objets, formes et classes cachées expliquées

Hacker News •
×

Dans de nombreux langages à typage dynamique comme Python, Ruby et JavaScript, les objets ressemblent à des correspondances entre noms d'attributs et valeurs. Cette souplesse incite les concepteurs de runtimes à modéliser les attributs avec une table de hachage, ce qui semble naturel puisque les tables de hachage excellent à associer des noms à des valeurs.

Toutefois, l'approche par table de hachage présente des inconvénients. Le hachage et le sondage sont lents pour une opération très courante. La table de hachage ajoute aussi une indirection, obligeant à passer de l'objet à une structure de stockage distincte. En conséquence, un accès simple à un attribut comme a.b peut nécessiter des centaines, voire des milliers d'instructions processeur, dont plusieurs chargements mémoire dépendants. Les attributs étant accédés fréquemment, les stocker directement dans l'objet serait bien plus efficace.

Pour y remédier, les runtimes utilisent des structures appelées tour à tour cartes, layouts, formes ou classes cachées. Elles optimisent la lecture, l'écriture et le stockage des attributs. De nombreux runtimes de production contiennent des cas particuliers complexes et propres à leur domaine, tandis que beaucoup d'articles de blog ne proposent que des vues d'ensemble sans détails d'implémentation.

L'auteur s'appuie sur A Simple Object Model de CF Bolz-Tereick, qui modélise Python avec une fidélité raisonnable. Plutôt que de couvrir la mécanique des classes et des méthodes, il se concentre sur les attributs d'instance et la partie cartes, et extrait un système de cartes réduit et épuré, en moins de 500 lignes de code que le lecteur peut appréhender d'un seul coup d'œil.

Source: Hacker News · Résumé par HeadlinesBriefing