[Moscow.pm] Perl/XS Create closure

Ruslan Zakirov ruz на bestpractical.com
Пн Ноя 26 17:04:39 PST 2012


2012/11/27 Mons Anderson <mons на cpan.org>:
>
> 2012/11/26 Ruslan Zakirov <ruz на bestpractical.com>
>>
>> 2012/11/26 Mons Anderson <mons на cpan.org>:
>>
>>
>> Я не удивлен, что что-то падает. Прикрепить padlist к XS sub'е - это
>> умно, но скорее всего не жизнеспособно. Просто потому что perl сам
>> этого не делает. Может и заработает, если долго курить сорцы.
>
>
> Ну начнем с того, что прикрепил я весьма криво.
>
>>
>> При определенных условиях можно сделать как в [1]. Смотри
>> xs_make_accessor и соответственно xs_accessor. Там генерируется
>> именованый альяс к XS функции и на этот альяс можно повесить i32
>> значение. Вот только отследить удаление функции не получится. Придется
>> делать пул по значению, если этого достаточно для задачи.
>>
>> [1] http://cpansearch.perl.org/src/RUZ/Class-Accessor-Fast-XS-0.04/XS.xs
>>
>> Ты чего оптимизируешь? Может можно по другому?
>>
>>
>
> Да не то, чтобы оптимизирую. Хочу написать AnyEvent::***::XS
> Т.е. XS'ную реализацию чего-нибудь с использованием AnyEvent.
> А там нужно передавать коллбэки с замыканиями.
>
> Вообще мне, по большому счету, нужно, например следующее:
> 1. есть сишная функция on_event(...)
> 2. Вызвать AE::io( fileno, flag, newXSub(... on_event ...) )
> 3. связать с вызовом on_event какую-либо структуру/SV'шку, чтобы было
> понятно, что за коллбэк был вызван.

Я правильно понял, что ты хочешь сделать одну точку входа on_event и просто
передавать контекст дабы оно там само разбиралось?

А следующее не подходит почему?

AE::io( $fileno, $flag, sub { on_event($fileno, $flag) } );

Накладные расходы вызова сабы?

> т.е., грубо говоря, я хочу получить API, аналогичное EVAPI, только
> реализованое через AnyEvent.
>
> Я предполагал создать PADLIST, запихнуть туда SV'шку, которая будет
> классическим указателем на структуру.
> потом при вызове сабы считать из падлиста SV'шку и получить указатель на
> структуру.
>
> И в общем это работает, но если вызывается в режиме DB, то там как-то
> съезжают PADLIST'ы и мой хардкод крешится.
> Я в общем думаю пока копать на этот предмет разные модули (коих весьма
> немного, к сожалению)
>
> Спасибо за наводку на CAF-XS, там действительно интересная техника.
>
>
> --
> Best wishes,
> Vladimir V. Perepelitsa aka Mons Anderson
> <inthrax на gmail.com>, <mons на cpan.org>
> http://github.com/Mons
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org



-- 
Best regards, Ruslan.


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