[Moscow.pm] Perl/XS Create closure

Ruslan Zakirov ruz на bestpractical.com
Вт Ноя 27 04:04:45 PST 2012


2012/11/27 Mons Anderson <mons на cpan.org>:
> 2012/11/27 Ruslan Zakirov <ruz на bestpractical.com>
>>
>>
>> А следующее не подходит почему?
>>
>> AE::io( $fileno, $flag, sub { on_event($fileno, $flag) } );
>>
>> Накладные расходы вызова сабы?
>>
>>
> потому что on_event - сишная функция. и вот как-раз у меня не получается так
> собрать анонимную функцию, находясь внутри XS.
> т.е. грубо говоря
>
> у меня есть
> void on_event( ... ) { ... }
>
> я могу сделать:
> PUSHMARK(SP);
> EXTEND(SP,3);
> PUSHs( sv_fileno );
> PUSHs( sv_flag );
> PUSHs( ??? );
> PUTBACK;
> call_pv( "AE::io", G_VOID )
>
> А что мне передать как 3й аргумент?

RV на CV :) Все равно придется обернуть on_event или оно работает со стеком?

Вот еще про замыкания в XS:

http://perl-users.jp/articles/advent-calendar/2010/english/3

> --
> 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