[Moscow.pm] AnyEvent::Pg
Alexandr Gomoliako
zzz на zzz.org.ua
Вт Май 1 12:44:41 PDT 2012
> а вот это та самая лапша. которая очень плохо отлаживается поскольку
> не явно видно что твой &$cb действительно вызывается во всех возможных
> комбинациях.
Тут вообще нечего отлаживать, простой тест покрывает все комбинации,
т.к. результат зависит только от входных данных.
> То есть основная проблема (вернее основная ошибка) не решается
> средствами языка (фреймворка): забытый так называемый return.
Откуда такая проблема? Забытый return абсолютно ни к чему не приведет
и скорее всего и нужен никогда не будет, пример:
sub baz (&) {
my ($cb) = @_;
foo 1, 2, sub {
if (!$!) {
bar 3, 4, sub {
if (!$!) {
&$cb(@_);
} else {
&$cb();
}
};
} else {
&$cb();
}
};
}
> и вот с guard'ами эти "забытые" return'ы как раз и можно
> контроллировать.
> то есть если ты объект передашь вместо каллбека функции, который будет
> содержать в себе каллбек, а в деструкторе если тот каллбек не был
> вызван - вызывать каллбек с ошибкой, вот тогда это начнет превращаться
> в фреймворк, но это еще надо универсально написать
И тогда это начнет превращаться в сложный, ненадежный код. Хотя куда
еще сложнее, в AnyEvent и так что попало. Где-то есть гард объекты,
где-то нет, где-то их нужно сохранять, где-то нет, где-то ошибки
возвращаются в тот же колбэк, где-то в другой, иногда с пустым @_, а
иногда с $!, который где-то очищается потом, а где-то нет, где-то еще
есть колбэки для инициализации, где-то еще для чего-то. Иногда даже
удивляет, что этим кто-то пользуется.
CPS, в отличии от такой каши из объектов с колбэками, помогает заметно
уменьшить сложность кода, чтобы создавать надежные работающие системы,
как впрочем и многие концепции из функционального программирования.
Попробуйте.
Подробная информация о списке рассылки Moscow-pm