use Devel::GlobalDestruction;

sub DESTROY {

    return if in_global_destruction;
    AE::io...
}

В GD поработать нормальн овам уже не дадут. там можн обудет выполнить только синхронные операции. поэтому логика вызова AE в этом случае не совсем корректна.


On 21.01.2012 7:53, Ivan Petrov wrote:
Это уже мем, который популяризирует dk и остальные, которым не нравится жёсткие
ответы автора.
Если автор холит своё детище и оберегает от глупостей, на его взгляд, то это
нужно понимать :)
Автор-то — гений.
он иногда довольно жестко отвечает даже в довольно спорных случаях.

например имеем код на AE

package Object;

sub method {
     my ($self) = @_;
     AE::что-то sub {
         $self->что-то..
     }
}

у нас все прекрасно.

Но вот если сюда приписать какую-то фигатень вида:

package Object;

sub method {
     my ($self) = @_;
     AE::что-то sub {
         $self->что-то..
     }
}

sub DESTROY {
     my ($self) = @_;;
     ...
     AE::что-то =>  sub {
         что-то там...
     };
}

То начинаем огребать проблемы с глобальным деструктором если EV в
бакенде используется. то есть упомянутый DESTROY может еще быть вызван
вне глобального деструктора, а падать в core dump оно будет в EV.

Отписался Леману на эту тему. Он сказал знаю мол, бага. Но из
соображения производительности фиксить не буду. Фигня мол, ну и что
что в глобальном деструкторе оно у вас падает? Даже опцию компиляции
вводить не буду, это никому не нужно. А в итоге есть случаи в которых
тесты написать сложно. В итоге тесты приходится писать с Perl
имплементатором AE. а он в общем и целом ведет себя по другому чем EV.

И это всего один из множества случаев общения с ML.

Хотя временами он очень даже оперативно на баги реагирует, а самое
главное он их хорошо пишет. С патчами и коментариями и итп :)


--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить