Ciao,<div><br></div><div>    di sicuro un approccio modulare è quello da preferire. Non credo di capire benissimo i problemi che stai ponendo:</div><div><br></div><div>* gestione delle variabili sintattiche</div><div>* inizializzazione delle variabili</div>

<div>* gestione degli argomenti</div><div><br></div><div>Puoi fare un esempio più preciso dei tre tipi di problemi? In particolare, il terzo problema non mi sembra "reale", ci sono dei modi per impostare lo stack dell'interprete perl in modo che la chiamata alla funzione "veda" dei parametri in ingresso dentro @_ come se fosse stata chiamata da un'altra sub perl.</div>

<div><br></div><div>Ciao,</div><div><br></div><div>    Flavio.</div><div><br><br><div class="gmail_quote">2011/3/21 Leo Cacciari <span dir="ltr"><<a href="mailto:leo.cacciari@gmail.com">leo.cacciari@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Il 03/21/2011 07:40 PM, Flavio Poletti ha scritto:<br>
<div class="im">> Ciao Leo,<br>
><br>
>     se capisco bene (ma è molto probabile che non sia così!) tu stai<br>
> realizzando un sistema che al suo interno deve dare la possibilità di<br>
> inserire delle estensioni scritte in Perl.<br>
><br>
</div>Esattamente :)<br>
<div class="im">> Parlando di compilazione, ecc. immagino che il sistema sia scritto in<br>
> C o C++ o altro linguaggio che alla fine genera un eseguibile di<br>
> qualche tipo, nel quale viene anche inclusa la libreria<br>
</div>C++<br>
<div class="im">> libperlxxx del caso che gestisce l'interprete perl. Nel tuo flusso di<br>
> programma ci sarà ad un certo punto (o in vari punti) una chiamata<br>
> verso un gestore che si occupa di caricare le estensioni e di<br>
> eseguirle sui dati di interesse<br>
</div>L'idea era di avere un interprete perl embedded i comandi a quel punto<br>
possono ridursi a "load" e "run", più eventualmente un sistema di<br>
scheduling come suggerito da Fabio.<br>
<br>
<br>
><br>
> Stiamo parlando di questo?<br>
><br>
<br>
Come vedi sì :)<br>
<br>
Quando parlo di "compilazione" intendo la compilazione Perl. In altre<br>
parole: se inizializzo un interprete ogni volta che eseguo uno script lo<br>
script stesso deve essere analizzato e compilato in bytecode ogni volta<br>
(senza contare l'overhead dovuto all'inizializzazione stessa<br>
dell'interprete!). L'alternativa è inizializzare un interprete al primo<br>
caricamento di uno script ed usarlo per tutti gli script successivamente<br>
caricati.<br>
<br>
Questo secondo approccio, però, pone due problemi. Il primo è quello di<br>
evitare collisioni di nomi in script diversi. Il secondo è quello di<br>
avere un unico entry point per eseguire uno script dopo averlo caricato.<br>
Stavo pensando di trasformare lo script<br>
<br>
#!/usr/bin/perl -w<br>
# script foo/bar/<a href="http://foobar.pl" target="_blank">foobar.pl</a><br>
<br>
use vars qw($a);<br>
<br>
sub foo() {<br>
}<br>
<br>
sub bar() {<br>
<br>
}<br>
<br>
$a = 42;<br>
$b = foo($a);<br>
<br>
# etc...<br>
<br>
in qualcosa come<br>
<br>
package Foo::Bar::Foobar;<br>
<br>
use vars qw($a);<br>
<br>
sub foo() {<br>
}<br>
<br>
sub bar() {<br>
<br>
}<br>
<br>
<br>
sub main() {<br>
  $a = 42;<br>
  $b = foo($a);<br>
   # etc<br>
}<br>
<br>
cosicché, per eseguire lo script basta invocare Foo::Bar::Foobar::main<br>
<br>
Ovviamente ci sono molti problemi in questo approccio, tra quelli che mi<br>
saltano immediatamente agli occhi sono la gestione delle variabili<br>
sintattiche, l'inizializzazione delle variabili che andrebbe ripetuta ad<br>
ogni esecuzione dello script e infine la gestione degli argomenti dello<br>
script...<br>
<br>
> Ciao,<br>
><br>
>     Flavio.<br>
><br>
><br>
><br>
<font color="#888888"><br>
--<br>
Leo Cacciari<br>
Aliae nationes servitutem pati possunt populi romani est propria libertas<br>
</font><div><div></div><div class="h5"><br>
_______________________________________________<br>
Roma mailing list<br>
<a href="mailto:Roma@pm.org">Roma@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/roma" target="_blank">http://mail.pm.org/mailman/listinfo/roma</a><br>
</div></div></blockquote></div><br></div>