HeadlinesBriefing HeadlinesBriefing.com

Карты объектов, формы и скрытые классы: объяснение

Hacker News •
×

Во многих языках с динамической типизацией, таких как Python, Ruby и JavaScript, объекты выглядят как отображения имён атрибутов в значения. Такая гибкость побуждает разработчиков сред выполнения моделировать атрибуты с помощью хеш-таблицы, что кажется естественным, ведь хеш-таблицы хорошо сопоставляют имена с значениями.

Однако подход на основе хеш-таблицы имеет недостатки. Вычисление хеша и пробирование медленны для очень частой операции. Хеш-таблица также добавляет косвенность, заставляя переходить от объекта к отдельной структуре хранения. В результате простой доступ к атрибуту, например a.b, может требовать сотен или тысяч инструкций процессора, включая несколько зависимых загрузок из памяти. Поскольку к атрибутам обращаются очень часто, хранение их непосредственно в объекте было бы гораздо эффективнее.

Чтобы решить эту задачу, среды выполнения используют структуры, известные как карты, макеты, формы или скрытые классы. Они оптимизируют чтение, запись и хранение атрибутов. Многие промышленные среды выполнения содержат сложные, специфичные для предметной области частные случаи, а многие статьи в блогах дают лишь общее представление без деталей реализации.

Автор опирается на статью CF Bolz-Tereick «A Simple Object Model», которая довольно точно моделирует Python. Вместо механизмов классов и методов автор сосредотачивается на атрибутах экземпляров и части, связанной с картами, и выделяет упрощённую и понятную систему карт объёмом менее 500 строк кода, которую читатель может удержать в голове целиком.

Источник: Hacker News · Сводку подготовил HeadlinesBriefing