Имеет ли смысл итерационный ввод-вывод в нефункциональных языках?

В Haskell Iteratee-based I / O кажется очень привлекательным. Итеративы - это составные, безопасные и быстрые способы выполнения операций ввода-вывода, вдохновленные функцией «сворачивания», известной как «сокращение» в функциональных языках. По сути, если у вас есть обход, идея состоит в том, чтобы инкапсулировать состояние обхода в так называемый «перечислитель», который вызывает «итерацию», которая, в свою очередь, является функцией, возвращающей значение или запрос дополнительных данных вместе с продолжением для перечислитель для вызова. Таким образом, только перечислитель знает состояние обхода, в то время как итератор знает, что делать с данными, и строит на их основе значения. Самое приятное в этом то, что итераторы автоматически компонуются, когда вывод одного итератора передается другому, чтобы сделать больший.

Итак, два вопроса:

  • Имеет ли эта концепция смысл в других языках, например, в простых объектно-ориентированные языки или это полезно только для преодоления недостатков ленивого ввода-вывода Haskell?
  • Существуют ли какие-либо фактические реализации для других языков, особенно C # (поскольку это то, что использует моя компания)? (Поиск в Google обнаруживает одно упоминание об итерациях в Scala; ну, сейчас я не очень заинтересован в Scala).

17
задан Bart Kiers 22 July 2011 в 20:06
поделиться