[Moscow.pm] v2 просьба о ревью модуля DBIx::Struct

PEF Secure pef-secure на yandex.ru
Пт Янв 16 06:14:36 PST 2015


On Friday, January 16, 2015 16:44:56 Warstone на list.ru wrote:
> Ладно, вот вам тест: 
> >http://pastebin.ru/Un6reVrU

for(my $i = 1; $i < $iterations; $i++){
    eval "package Namespace2::${i};\nsub cool_long_method { my \$self = shift; 
print \"This method is loooong\\n\";} 1;";
}

Я чувствую, что либо меня не понять, либо Вы не поняли.

_Зачем_ делать миллион итераций с eval? Это какая то совсем иная проблема. Я 
измерял следующий вариант:

eval {"\$sub_eval = sub {my \$self = shift; print \"This method is 
loooong\\n\";}" }; 

в сравнении с:

$sub_pure = sub {my $self = shift; print "This method is loooong\n" };

и сравнивал соответственно быстродействие $sub_eval->() и $sub_pure->(). 
Разницы почти нет. 

Именно этого случая я пытаюсь добиваться, а не того, что Вы написали.

> Так вы для себя или выложить на
> >cpan? Если для себя - ок. Если на cpan - это проблема. 

Для себя я б тут даже выступать не стал. Сидел бы себе и писал что хотел. 

> >А еще большая
> >проблема, если у вас перед Pg стоит PgBouncer в режиме
> >TRANSACTION_POOLING.>

В чём именно проблема?


>На примере выше. Я могу сделать так: Base::cool_long_method = sub { ... } ,
>будет перехвачено все. В вашем случае, даже с наследованием - не будет
>перехвачено ничего. Чтобы это сработало, надо сделать класс наследник, куда
>запихать сначала меня, потом то что вы нагенерили (По определению работы
>наследования). то есть:

Раз уж нам доступна кодогенерация свыше, всегда можно сделать то, что хочется. 
Например, инъекцию пользовательского кода. Я не говорю, что собираюсь это 
сделать, я говорю, что это _можно_. Я не пытаюсь из данных, выбранных из БД 
сделать полноценный произвольный объект в смысле ООП. Я использую их именно 
как данные, а абстракции у меня в другом слое.

> >Нет, на классе. Название таблицы и прочего засовывается в класс аксессор,
> >а не в объект. И оверхеда копейки. Вы больше своим евалом генерите.>

Название модуля (класса), к которому объект, (в дебрях не копался, но из общих 
соображений) должно быть одним указателем на описание этого модуля, единое для 
всех объектов (экземпляров). 8 байт на 64 бит платформе. Что-то мне кажется, 
Вы уже поплыли...


> Это вредное свойство. Наглядный пример - выше.

Который я не понял как относится к _моему_ коду. 

>  А вы написали что он внутренний? А то у вас
> >внутренние с _ начинаются, а этот - нет... Значит не внутренний.

Да, упустил. Спасибо за багрепорт.
-- 
PEF Developer


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