Andrew Shitov wrote:
Австрийцы придумали новый формат для встреч своей PM-группы. До этого
у них были TechSocialMeetings, - технические встречи, перетекающие в
социальную часть. А теперь иногда будут проводиться еще и хаковстречи.
На встрече 1 декабря в планах стояло хаченье OpenID на основе PAUSE.

Кстати, интересно: если технические встречи - это воркшопы в
миниатюре, то хаковстречи - это миниатюрные хакатоны. Для нас это пока
единственный незаполненный пункт из списка мероприятий, который
проводятся в мире. Конференция была, воркшопы были, хакатонов не было.
Ну ... мы ... в тяпницу ... в ответ на вопрос нафига вообще нужен xs ....
провели.
В результате, если научится распознавать ABI, или, что легче, сделать кучу сигнатур.
Если привинтить парсилку сишных классов и страктов ....
Завернуть это в нормальный интерфейс типа
my $perl_alloc=DLL::Function->new(DLL::Library->new('libperl.so'), 'perl_alloc');
my $externalevaluator=$perl_alloc->call(class=>'PerlInterpreter');
$externalevaluator->perl_parse();
$externalevaluator->perl_run();
Получится мегамодуль. =)
см аттач.
Кста, на маке запускается ?


--
Ivan B. Serezhkin
Spamooborona, Yandex. http://so.yandex.ru/

Attachment: DLL.pm
Description: Perl program

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include <dlfcn.h>

MODULE = DLL         PACKAGE = DLL

SV * dlerror()
     CODE:
     RETVAL=newSVpv(dlerror(),0);


void * dlopen(const char *path, int mode)
     PREINIT:
        void * handle;
     CODE:
        handle=dlopen(path, mode);
        if (!handle) {
           fputs (dlerror(), stderr);
           exit(1);
        }
        RETVAL=handle;
     OUTPUT:
        RETVAL


void * dlsym(void * handle, const char * symbol)
     PREINIT:
        void * shandle;
     CODE:
        shandle=dlsym(handle, symbol);
        if (!shandle) {
           fputs (dlerror(), stderr);
           exit(1);
        }
        RETVAL=shandle;
     OUTPUT:
        RETVAL


int int_func_pchar(void * handle, char * arg1)
    CODE:
        int (*func)(char*)=handle;
        int retval;
        retval=(*func)(arg1);
        RETVAL=retval;
    OUTPUT:
        RETVAL


int RTLD_LAZY()
    CODE:
    RETVAL=RTLD_LAZY;

int RTLD_NOW()
    CODE:
    RETVAL=RTLD_NOW;

int RTLD_LOCAL()
    CODE:
    RETVAL=RTLD_LOCAL;

int RTLD_GLOBAL()
    CODE:
    RETVAL=RTLD_GLOBAL;

int RTLD_TRACE()
    CODE:
    RETVAL=RTLD_TRACE;

Attachment: Makefile.PL
Description: Perl program

Attachment: test.pl
Description: Perl program

--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить