Newsgroup: it.comp.lang.perl
Titolo: Studio XS

Salve ragazzi,
ho l'esigenza di implementare delle funzioni in maniera abbastanza
efficiente. Sono quindi "costretto" a rifugiarmi in Perl-XS. Devo
partire da 0, devo quindi studiare il funzionamento. Da quello che ho
capito devo studiare almeno: perlxs, perlxstut, perlguts e perlapi
(tutto questo non è semplice)...
Volevo solo sapere se mi consigliate anche qualche altra cosa (magari
qualcosina in italiano) di supporto...
Grazie anticipatamente. Daniele.

 efficiente. Sono quindi "costretto" a rifugiarmi in Perl-XS. 
Ti suggerirei di valutare l'uso di SWIG (
http://www.swig.org
), che ti
permette di ottenere risultati analoghi (ad es., implementazione di moduli
Perl in C/C++), a un costo inferiore, in termini di complessità d'uso e
tempo di apprendimento, rispetto a XS.
Max

Daniele wrote:

Allora, nel tuo caso c'è un'alternativa validissima ad XS, molto più 
semplice e che dà comunque gli stessi risultati: Inline::C
http://search.cpan.org/~ingy/Inline-0.44/C/C.pod
Come dice testualmente il Perl Cookbook:
PROBLEM
You'd like to write functions in C that you can call from Perl. You may 
already have tried XS and found it harmful to your mental health.
SOLUTION
Use the Inline::C module available from CPAN.
;-)
Ciao,
Emanuele.

 
http://search.cpan.org/~ingy/Inline-0.44/C/C.pod
Prima di tutto grazie a entrambi.
Emanuele l'idea mi era passata per la mente, ma avrei una domanda da
farti, da quello che ho capito con XS io compilo il codice e dò solo
il codice già compilato...
Poniamo io uso Inlice C, dò lo script che scrivo a un pinco pallino
qualsiasi che non ha un compilatore C sulla sua macchina, come va a
finire?
Grazie e scusa se ho sbagliato qualcosa...

 finire?
Nessun problema: in questo caso puoi distribuire il tuo script Perl che 
utilizza Inline::C assieme ai binari precompilati (e ai file .inl).
Infatti se Inline trova il codice già compilato (cosa che gli viene 
segnalata dalla presenza di un file con estensione .inl contenente la 
fingerprint MD5 del codice sorgente) non effettua la ricompilazione dei 
sorgenti e carica direttamente la libreria compilata.
In pratica la compilazione viene effettuata soltanto la prima volta che 
lo script contenente codice Inline viene eseguito, mentre le volte 
successive viene (ri)utilizzato direttamente il codice binario generato 
in precedenza (a meno che non venga forzata la ricompilazione, cosa che 
pure si può fare - mediante l'opzione FORCE_BUILD - ma che a noi 
ovviamente non interessa).
Per ogni dettaglio sulle directory dove Inline genera, installa e 
ricerca i file binari, consulta:
http://search.cpan.org/~ingy/Inline-0.44/Inline.pod#The_Inline_DIRECTORY
http://search.cpan.org/~ingy/Inline-0.44/Inline.pod#DIRECTORY
http://search.cpan.org/~ingy/Inline-0.44/Inline.pod#How_Inline_Works
Fin qui la teoria, per la pratica c'è addirittura una FAQ che mostra 
passo-passo come creare un package ppm binario usando Inline:
http://search.cpan.org/~ingy/Inline-0.44/Inline-FAQ.pod
#How_do_I_create_a_binary_distribution_using_Inline%3F
Infine, benché sia possibile installare sulla macchina target tutti i 
file necessari a manella, se vuoi crearti package più professionali, 
consulta la documentazione di PAR, di Module::Install o del già citato 
PPM (con PAR puoi crearti package che contengono perfino l'interprete 
Perl, in modo tale da non imporre *alcun* prerequisito sull'ambiente 
target).
Ciao,
Emanuele.