Эм, где тут видно, что тут куда уходит?

Для полноты добавим

func1 $x, sub {
  func2 $y, sub {
    func3 $z, sub {
...

Вот тут уже начинается вложенность коллбэков,  а если ветвей выполнения
больше одной, то и полная каша.

Для решения этой проблемы как раз удобнее всего использовать фьючерсы или
сопрограммы.


26 мая 2012 г., 2:57 пользователь Alexandr Gomoliako <[email protected]>написал:

> > А на счет коро, то мне никаким образом в голову не ложится, как
> > implicit continuation у корутин может быть проще, чем explicit
>
> Приведу примеры, вдруг кто-то поймет.
>
> Корутины, файберы, etc.:
>
>    my $x = 1;
>    my $y = func1($x);
>    func2($y);
>
> Чем отличается func1 от func2? Абсолютно не видно, при этом одна из
> них делает yield, а другая нет. Это очень быстро приводит к
> неправильным предположениям о работе программы. И не видно даже, что
> тестировать. Это те самые последствия сложности кода, которые в итоге
> приведут к ошибкам.
>
> При этом тоже самое с обычным event loop'ом не даст вам сделать
> неправильных предположений, потому что continuation задается явно:
>
>    my $x = 1;
>    func1 $x, sub {
>        my $y = shift;
>        func2($y);
>    };
>
> Т.е. видно, только func1 уходит в event loop. Негде ошибиться. И для
> тестирования нужно просто убедиться, что возвращается в колбэк, а
> func2 уже должна быть покрыта другим тестом.
>
> Надеюсь понятно. Можно смело повторять, что корутины это бред и костыль.
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
>
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить