[Moscow.pm] AnyEvent::Pg

Ivan Petrov i.petro.77.00 на gmail.com
Вт Май 1 12:57:29 PDT 2012


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

> Тут вообще нечего отлаживать, простой тест покрывает все комбинации,
> т.к. результат зависит только от входных данных.

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

> Откуда такая проблема? Забытый return абсолютно ни к чему не приведет
> и скорее всего и нужен никогда не будет, пример:

как откуда? если возврат значения - всегда вызов каллбека, то пропуск
вызова каллбека приводит к тому что кто-то ждет результата и никогда
не дождется.

и эти вещи в большом проекте КРАЙНЕ сложно отлаживаются. даже с
хорошим набором тестов бывает сложновато уследить за этой проблемой.

мы как раз игрались с гуардами на эту тему.

то есть делаешь например RPC некий. он тебе в ответ на удаленный
каллбек рождает одну - десять цепочек. в какой-то при каких-то
обстоятельствах забыт return. в хорошем случае клиенты отваливаются по
таймауту. в плохом начинаются утечки памяти.

вот если фреймворк забубенить чтобы такие вещи контроллил

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

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

> И тогда это начнет превращаться в сложный, ненадежный код. Хотя куда
> еще сложнее, в AnyEvent и так что попало.

AE да, местами что и как попало. но лучшего пока нет ничего. есть
попытки но к ним приписывать еще надо кучу модулей.
AE еще силен тем что много уже вещей для него есть


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

в CPS тебе ошибки тоже надо как-то обрабатывать. по мере возрастания
сложности захочется два каллбека: результатов и ошибок. и начнется та
же фигня "где-то так, где-то сяк"
ведь ошибку не выявишь в первоначальной функции. ошибки как правило
выясняются в каком-то глубоком месте.


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