[Moscow.pm] HTTPD на короутинах

Alexandr Gomoliako zzz на zzz.org.ua
Пт Май 25 15:57:58 PDT 2012


> А на счет коро, то мне никаким образом в голову не ложится, как
> 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