Сравнение пакета enumerator и iteratee

В настоящее время существует два популярных варианта реализации шаблона повторения:

Каковы их относительные преимущества? Лучше ли одно, чем другое, или это зависит от варианта использования (и если да, то каковы критерии, чтобы решить, какой из них использовать)?


person hvr    schedule 06.10.2011    source источник


Ответы (1)


Есть как минимум три итерируемых библиотеки:

  • нумератор
  • итерация
  • iterIO

Я считаю, что библиотека enumerator в настоящее время предпочтительнее из-за ее простоты. Это также тот, который я использую для своих проектов, если вам не все равно. Два других пакета более гибкие и могут быть в разы быстрее, но они и сложнее. Если вы хотите изучить итерации, я предлагаю начать с перечислителя. Это самое прямое воплощение оригинальной идеи Олега.

Если у вас есть конкретный вариант использования и вам нужно много функций со стандартным подходом iteratee, вы можете рассмотреть возможность использования пакета iteratee. В более сложных сценариях вы также можете попробовать пакет iterIO, который имеет немного другую и более гибкую концепцию. В частности, итерации могут взаимодействовать с перечислителем, что невозможно в двух других пакетах.

Если все три пакета недостаточно гибкие, вы, вероятно, захотите написать свои сопрограммы самостоятельно с помощью пакета monad-coroutine. Итерации и перечислители — это особый тип сопрограмм, которые могут быть составлены определенным образом. Пакет monad-coroutine дает вам общий тип и позволяет использовать вашу собственную концепцию взаимодействия.

person ertes    schedule 06.10.2011
comment
Одна незначительная гнида: iteratee итерации также могут общаться с перечислителем. Например, так реализовано seek. Однако он не такой сложный, как механизм iterIO. - person John L; 06.10.2011
comment
@ertes, а как насчет других свойств, таких как, например. эффективность/производительность? Можно ли объединить библиотеки, не использующие одну и ту же итерируемую библиотеку? - person hvr; 06.10.2011
comment
Вообще нет, библиотеки не совместимы друг с другом. - person ertes; 11.10.2011
comment
Действительно ли iterIO сложнее? Я думал, что вся его цель состояла в том, чтобы упростить концепцию итерации и перечислителя. - person Greg Weber; 13.10.2011