[Moscow.pm] Perl/XS Create closure

Alexandr Alexeev afiskon на gmail.com
Пн Ноя 26 18:23:07 PST 2012


Простите, я не большой знаток XS-ов, но

1. Кажется, в Си по определению нет замыканий, если только не накодить
их самостоятельно, а то, как они реализованы в Perl, вероятно, может
меняться от версии к версии.
2. По-моему, лучшее, что можно придумать, это объявить обычную
процедуру и сделать вокруг нее обертку на Perl.


2012/11/27 Ruslan Zakirov <ruz на bestpractical.com>:
> 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 mailing list
> moscow-pm на pm.org | http://moscow.pm.org



-- 
Best regards,
Alex Alexeev
http://twitter.com/afiskon


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