[Moscow.pm] Perl/XS Create closure

Dmitry Karasik dmitry на karasik.eu.org
Пн Ноя 26 23:56:06 PST 2012


Я вставлю своих ретроградских пять копеек. С моей точки зрения, если чтото не
описано в perlxs/perlguts etc то безопаснее это не использовать, т.к. перл
развивается, api меняется. Как раз захват переменных видимых изнутри кложи
через padlist'ы помоему относительно часто менялся, там много багов было одно
время. Возможно это уже в прошлом и неактуально, но так, на всякий случай.

/dk

On Tue, Nov 27, 2012 at 04:06:27AM +0400, Mons Anderson wrote:
> 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

> -- 
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org


-- 
Sincerely,
	Dmitry Karasik



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