W Haskell, Iteratee based I/O wydaje się bardzo atrakcyjny. Iteratees to składane, bezpieczne i szybkie sposoby na wykonywanie operacji wejścia/wyjścia inspirowane funkcją "fold" a.k.a. "reduce" w językach funkcjonalnych. Zasadniczo, jeśli masz ruch, chodzi o enkapsulację stanu przejścia do tak zwanego "modułu wyliczającego", który wywołuje "iteratee", który z kolei jest funkcją zwracającą wartość lub żądanie więcej danych wraz z kontynuacją aby moduł wyszukujący mógł zadzwonić. Tak więc tylko moduł wyliczający zna stan przejścia, a iteratee wie, co zrobić z danymi i buduje z nich wartości. Zaletą jest to, że iteraty są automatycznie kompozycyjne, gdzie wyjście jednego iteratee jest przekazywane do drugiego, aby zrobić większy.Czy iteratee I/O ma sens w niefunkcjonalnych językach?
Więc dwa pytania:
- Czy pojęcie nawet zrobić sence w innych językach, jak zwykły językach obiektowych czy jest to przydatne tylko dla przezwyciężenia braków Haskell za leniwa I/O?
- Czy są jakieś rzeczywiste implementacje dla innych języków, szczególnie C# (jak to jest to, czego używa moja firma)? (W wyszukiwarce Google pojawia się jedna wzmianka o iteratach w Scali, cóż, nie jestem teraz zainteresowany Scalą).
Czy to w zasadzie nie jest przeznaczone dla nowych elementów asynchronicznych w C# 5.0? Mechanizm jest inny, ale podstawowa implementacja jest w zasadzie kontynuacją. –
Dzięki za wskazanie tego - jeszcze nie wiedziałem o tym, i to na pewno wygląda ekscytująco, więc muszę się w to zagłębić, choć nie widzę zbyt wiele, by miało to coś wspólnego z iteratami. ;-) – firefrorefiddle