part_02_pair - grossho/billow GitHub Wiki

Тип для хранения и работы с парными элементами — «pair»

Введение.

Объект является неизменяемым элементом, рассчитанным для хранения всего двух значений. К вложенным элементам можно обращаться либо как в последовательности, либо как через атрибуты «k» и «v». Объект является заменителем двуместных кортежей в ряде случаев. Основное преимущество, что проверив тип не надо проверять длину кортежа — он всегда равен двум.

Порождаемый итератор обладает рядом свойств:

  • копирует содержимое родительского элемента;
  • итерируемый тип не удерживает указателя на изначальный элемент пары;
  • на низком уровне представлен той же структурой, что и pair элемент.

Потребление памяти.

Сравнивая размер структур «tuple» и «pair» видно, что последняя не всегда легче своего прототипа. Для 32-ух битной архитектуры разница не заметна (из-за 8-ми байтового выравнивания). Однако для 64-ех битных архитектур экономия уже значительна и может достигать 20%.

Скорость работы.

Скорость работы не отличается из-за оптимизаций работы объектов стандартного типа. Выигрыш бывает заметным лишь при превышении использования какого-то лимита памяти.

Поскольку стандартный tuple выполняет кеширование выделения коротких последовательностей, чтобы оптимизировать большинство операций, аргументами к которым служат именно двузначные кортежи, то возврат памяти tuple осуществляется более неохотно.

Приемственность и завершенность.

Тип «pair» не может быть унаследован от «tuple», поскольку у них не совпадают начала структур. Работа с данным типом в целом более проста, по сравнению с «tuple». Код готов к применению.

XXX: TODO

Для более тесной интеграции компонент возможно стоило бы сделать возврат функции «rangowe_at» и «rangowe_it» в контейнере именно «pair» типа (на данный момент возвращается кортеж из двух элементов).