<div>Эм, где тут видно, что тут куда уходит?</div><div><br></div>Для полноты добавим<div><br></div><div>func1 $x, sub {</div><div>  func2 $y, sub {</div><div>    func3 $z, sub {</div><div>...</div><div><br></div><div>Вот тут уже начинается вложенность коллбэков,  а если ветвей выполнения больше одной, то и полная каша.</div>
<div><br></div><div>Для решения этой проблемы как раз удобнее всего использовать фьючерсы или сопрограммы.</div><div><br><br><div class="gmail_quote">26 мая 2012 г., 2:57 пользователь Alexandr Gomoliako <span dir="ltr"><<a href="mailto:zzz@zzz.org.ua" target="_blank">zzz@zzz.org.ua</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">> А на счет коро, то мне никаким образом в голову не ложится, как<br>
> implicit continuation у корутин может быть проще, чем explicit<br>
<br>
</div>Приведу примеры, вдруг кто-то поймет.<br>
<br>
Корутины, файберы, etc.:<br>
<br>
    my $x = 1;<br>
    my $y = func1($x);<br>
    func2($y);<br>
<br>
Чем отличается func1 от func2? Абсолютно не видно, при этом одна из<br>
них делает yield, а другая нет. Это очень быстро приводит к<br>
неправильным предположениям о работе программы. И не видно даже, что<br>
тестировать. Это те самые последствия сложности кода, которые в итоге<br>
приведут к ошибкам.<br>
<br>
При этом тоже самое с обычным event loop'ом не даст вам сделать<br>
неправильных предположений, потому что continuation задается явно:<br>
<br>
    my $x = 1;<br>
    func1 $x, sub {<br>
        my $y = shift;<br>
        func2($y);<br>
    };<br>
<br>
Т.е. видно, только func1 уходит в event loop. Негде ошибиться. И для<br>
тестирования нужно просто убедиться, что возвращается в колбэк, а<br>
func2 уже должна быть покрыта другим тестом.<br>
<br>
Надеюсь понятно. Можно смело повторять, что корутины это бред и костыль.<br>
<div class="HOEnZb"><div class="h5">--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br></div>