[Moscow.pm] Coro

Alexandr Gomoliako zzz на zzz.org.ua
Чт Янв 26 10:00:42 PST 2012


>             $w = AE::io $fh, 0, $write;
>
> а оно вызовет $read?

Опечатка, я имел ввиду 1, там где $write:

            $t = AE::timer 15, 0, $write_timeout;
            $w = AE::io $fh, 1, $write;

Т.е. заменит $w на новый, который ждет записи. Получается явный flow
control через AE::io/AE::timer.

> униформным интерфейсом, тогда коллбэки будут кошмаром в коде.

Униформный интерфейс это хорошо, и таймер было бы хорошо иметь внутри
$w, чтобы только в одну точку возвращаться. Но это не самое страшное,
если писать AE::timer и AE::io всегда рядом.

В общем-то кошмар в коде не колбэки создают, а желание хранить их
где-то в объектах и как-то работать с объектами, а не функциями.

Можно абсолютно весь код писать так и без лямбды и без AE::. Это
подход, а не фреймворк.

> Это не считая того что IO::Lambda умеет не только IO, вобщем то - там и
> поллинг, и треды (привет Леману :), и неблокирующий flock как коллбэк, и
> чужеродные лупы типа SNMP которые вообще ни с кем не умеют дружить, и все
> это
> под одним интерфейсом.  И еще куча всего. Да, это надстройка и новый
> синтаксис.
> Ну так что ж, у C тоже был новый синтаксис по сравнению с ассемблером :)

Ну так хорошо, я посмотрел в код в лямбде, выглядит поддерживаемо, но
требует изучения внутренностей лямбды, а это уже плохо.

Но в общем случае это все равно подход и если без лямбды, то он
означает, что результат любой функции должен возвращаться в один
анонимный колбэк. И код станет хорошим и останется чистым перлом.


Подробная информация о списке рассылки Moscow-pm