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» типа (на данный момент возвращается кортеж из двух элементов).