[Moscow.pm] AnyEvent::Pg

Ivan Petrov i.petro.77.00 на gmail.com
Вт Май 1 10:54:48 PDT 2012


>>> Обязательно нужен подход, а то получится лапша. Не
>>> раз о CPS (continuation passing style) говорил, но что-то пока
>>> бесполезно.
>> 
>> кто бы фреймворк CPS бы написал чтобы удобный был итп и
>> производительность чтобы не страдала.

> Вот весь фреймворк :)

> sub foo ($$&) {
> my ($one, $two, $cb) = @_;
> ...
> bar 1, sub {
>    baz 2, 3, sub {
>      &$cb(shift, ...)
>    };
>  };
> }

а вот это та самая лапша. которая очень плохо отлаживается поскольку
не явно видно что твой &$cb действительно вызывается во всех возможных
комбинациях.

То есть основная проблема (вернее основная ошибка) не решается
средствами языка (фреймворка): забытый так называемый return.


> Тут главное что: это только функции, они не возвращают guard объектов,
> никогда не умирают и результат возвращают только в колбэк.

и вот с guard'ами эти "забытые" return'ы как раз и можно
контроллировать.

то есть если ты объект передашь вместо каллбека функции, который будет
содержать в себе каллбек, а в деструкторе если тот каллбек не был
вызван - вызывать каллбек с ошибкой, вот тогда это начнет превращаться
в фреймворк, но это еще надо универсально написать

> Для обработки ошибок можно устанавливать $! и очищать, когда все ок, а
> в @_ ложить подробности.

ну и с AE тоже можно не использовать guard'ы. я кстати на эту тему в
свое время Марку писал багу: у него не везде в VOID-контексте ватчер
можно поставить, он обещался пофиксить. Если что можно свою обертку
сделать.

я кстати тоже считаю что в событийно ориентированном программировании
ватчеры надо ставить общесистемные. просто иногда его пытаются
соеденить с ООП и получается лажа.


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