>> не явно видно что твой &$cb действительно вызывается во всех возможных >> комбинациях.
> Тут вообще нечего отлаживать, простой тест покрывает все комбинации, > т.к. результат зависит только от входных данных. >> То есть основная проблема (вернее основная ошибка) не решается >> средствами языка (фреймворка): забытый так называемый return. > Откуда такая проблема? Забытый return абсолютно ни к чему не приведет > и скорее всего и нужен никогда не будет, пример: как откуда? если возврат значения - всегда вызов каллбека, то пропуск вызова каллбека приводит к тому что кто-то ждет результата и никогда не дождется. и эти вещи в большом проекте КРАЙНЕ сложно отлаживаются. даже с хорошим набором тестов бывает сложновато уследить за этой проблемой. мы как раз игрались с гуардами на эту тему. то есть делаешь например RPC некий. он тебе в ответ на удаленный каллбек рождает одну - десять цепочек. в какой-то при каких-то обстоятельствах забыт return. в хорошем случае клиенты отваливаются по таймауту. в плохом начинаются утечки памяти. вот если фреймворк забубенить чтобы такие вещи контроллил >> и вот с guard'ами эти "забытые" return'ы как раз и можно >> контроллировать. >> то есть если ты объект передашь вместо каллбека функции, который будет >> содержать в себе каллбек, а в деструкторе если тот каллбек не был >> вызван - вызывать каллбек с ошибкой, вот тогда это начнет превращаться >> в фреймворк, но это еще надо универсально написать > И тогда это начнет превращаться в сложный, ненадежный код. Хотя куда > еще сложнее, в AnyEvent и так что попало. AE да, местами что и как попало. но лучшего пока нет ничего. есть попытки но к ним приписывать еще надо кучу модулей. AE еще силен тем что много уже вещей для него есть > CPS, в отличии от такой каши из объектов с колбэками, помогает заметно > уменьшить сложность кода, чтобы создавать надежные работающие системы, > как впрочем и многие концепции из функционального программирования. > Попробуйте. в CPS тебе ошибки тоже надо как-то обрабатывать. по мере возрастания сложности захочется два каллбека: результатов и ошибок. и начнется та же фигня "где-то так, где-то сяк" ведь ошибку не выявишь в первоначальной функции. ошибки как правило выясняются в каком-то глубоком месте. -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
