[Moscow.pm] Perl/XS Create closure

Mons Anderson mons на cpan.org
Пн Ноя 26 16:06:27 PST 2012


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'шку, чтобы было
понятно, что за коллбэк был вызван.

т.е., грубо говоря, я хочу получить 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
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20121127/e9217a31/attachment.html>


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