Newsgroup: it.comp.java
Titolo: Compilazione a run-time ?

Ciao a tutti,
ultimamente mi si è presentato il problema di generare a run-time del
sorgente....o almeno penso che questa sia la migliore soluzione...ma prima
di intrapendere questa strada voglio chiedervi un vostro parere.
Supponendo che il mi problema sia quello, inserita una stringa che
rappresenta la funzione ("y=3x+cos(x)"), di calcolare il valore della
funzione in un intervallo.
Le soluzione possibili:
1)
{
 Effettuare il parsing della stringa con una funzione del genere:
 float parsing(String funz, float x)
 per ogni valore dell'intervallo...
}
2)
{
Effettuare il parsing della stringa all'inizio e creare una funzione
in base alla stringa; in questo caso
float funz(float x)
{
return(3*x+Math.cos(x));
}
Come fare a creare la funzione a run-time senza dover ricorrere a
ricompilare la funzione?
Grazie a tutti
Ciao
Saman
www.sheol.cjb.net



dato che l'argomento mi interessa,
accetteresti una collaborazione purche' il prodotto sia free ?
si puo' scrivere del codice che genera un sorgente 
java a partire dalla formula data come stringa
(una classe con una data interfaccia), invoca 
javac per compilarla e la carica con forName()
la soluzione al punto 1 esiste gia' in giro (cioe' esistono dei parser)
dovresti fare una ricerca...
non credo esistano altre vie oltre a quelle che elenchi
ciao_O
http://digilander.iol.it/schiele


http://digilander.iol.it/schiele
Sono completamente favorevole alla soluzione free;
ma preferisco reimplementare il parser (anche perchè in questo modo la
soluzione sarebbe disponibile anche per diverse tipologie di
interpretazioni).
Per il resto tutto ok...
ma ho ancora un dubbio:
il jre può essere distribuito assieme al programma...non il jdk (quindi il
compilatore)...
come fare ?
Aspetto una tua risposta
Ciao
Saman
www.sheol.cjb.net

come fare ?
giusta osservazione, me ne ero dimenticato
per linux esistono compilatori free 
se non ricordo male esiste ad esempio guavac che e' il compilatore java della gnu
per windows non so
proseguiamo via mail?
ciao_O
http://digilander.iol.it/schiele

> come fare ?
Si utilizza un  linguaggio diverso da Java ? Per  Java esite Jthon, un
interprete  Python scritto  in puro  Java  che può  essere usato  come
scripting language per una applicazione Java...
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: sierra alfa india november tango AT echo november golf DOT india tango

Le soluzione possibili:
Be', ma scusa, a che ti serve creare codice Java e compilarlo per far
questo? E' come sparare ad una zanzara con un cannone. :)
Tutto quel che devi fare e' creare un linguaggino per espressioni matematiche 
e un parser Java che sia in grado di valutare le tue espressioni ed eseguirle 
a runtime -  il che e' poi uno dei tipici esercizi iniziali quando si impara
ad usare un compiler-compiler.
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun

scripting language per una applicazione Java...
giusto, questo renderebbe inutile scriversi un parser
ma per avere maggiori prestazioni penso occorra
compilare runtime o sbaglio?
ciao_O
http://digilander.iol.it/schiele

Ah ecco! Allora non ero solo io a farmi questa domanda! :-) Ad ogni modo la
discussione mi interessa... per quando dovrò usare il cannone e fra poco forse
mi toccherà....
ciao a tutto il thread...
Marco

-- 
         \\|//
        ( @ @ )
+----oOO--(_)--OOo----------[Dott. Marco Azzalini]-----------+
|                                                            |
|            Consulente Sviluppo Software & Networking       |
|            Sun Certified Programmer (Java 2 Platf.)        |
|               mailto:
marco.a...@libero.it
              |
+------------------------------------------------------------+
|Legge di Hofstadter:                                        |
|         ci vuole sempre piu' tempo di quanto si pensi,     |
|         anche tenendo conto della Legge di Hofstadter.     |
+-----------Oooo.--------------------------------------------+
     .oooO  (   )
     (   )   ) /
      \ (   (_/
       \_)

Be sto realizzando un monitor per circuiti elettrici,
e in base alla funzione che mi "passano" dovrei farne i grafici,
scala logaritmica .....etc etc etc
I calcoli sono tantissimi lunghi, e soprattutto ci sono tante funzioni in un
solo circuito.... per cui reinterpretarle ogni volta non č proprio un
capolavoro....
Grazie cmq dell'interessamento
Saman
www.sheol.cjb.net
Cristiano Sadun ha scritto nel messaggio ...


 writes:
S> Be sto realizzando un monitor per circuiti elettrici,
S> e in base alla funzione che mi "passano" dovrei farne i grafici,
S> scala logaritmica .....etc etc etc
S> I calcoli sono tantissimi lunghi, e soprattutto ci sono tante funzioni in un
S> solo circuito.... per cui reinterpretarle ogni volta non è proprio un
S> capolavoro....
Utilizzare un linguaggio di scripting anche se diverso da Java ?


> scripting language per una applicazione Java...
AM> giusto, questo renderebbe inutile scriversi un parser
AM> ma per avere maggiori prestazioni penso occorra
Java e Python hanno tutti e due una compilazione in bytecode se non erro...


 writes:
GUL> Utilizzare un linguaggio di scripting anche se diverso da Java ?
Sorry, la febbre di questi giorni mi ha fuso l'unico neurone rimasto...


 writes:
GUL>> Utilizzare un linguaggio di scripting anche se diverso da Java ?
GUL> Sorry, la febbre di questi giorni mi ha fuso l'unico neurone
GUL> rimasto...
Te ne presto un paio io :-):
 
http://tigereye.cs.brandeis.edu/Applets/IAsolver.html
 
 
http://homepage.usask.ca/~njf472/jep/main.htm
Sono link ad un paio di package (il primo piu` completo) per il parsing,
la valutazione e (forse) il plotting di funzioni in Java. Freeware.
Ma... che fine ha fatto X-Attribution ?
Luca.
-- 
 /Luca Polo : 
Luca...@gest.unipd.it
 || Dipartimento di Tecnica e       \
| System & network administrator      || Gestione dei Sistemi Industriali |
 \
http://www.gest.unipd.it/~jake
      || Universita` di Padova -- Italy  /

 writes:
GUL> Sorry, la febbre di questi giorni mi ha fuso l'unico neurone
GUL> rimasto...
LP> Te ne presto un paio io :-):
No poverini,  ricordati che io  ho avuto una esposizione  prolungata a
Windows NT...
LP>  
http://tigereye.cs.brandeis.edu/Applets/IAsolver.html
 
LP>  
http://homepage.usask.ca/~njf472/jep/main.htm
Credo che faranno molto piacere all'autore originale della domanda...
LP> Sono link ad un paio di package (il primo piu` completo) per il parsing,
LP> la valutazione e (forse) il plotting di funzioni in Java. Freeware.
LP> Ma... che fine ha fatto X-Attribution ?
Cavoli!!!


                         David Korn, 1987 ioccc best one liner
Scusa, ma è del codice C che dovrebbe compilare o è un qualche tipo di
scherzo ?
Confesso di aver provato a compilarlo, ma non ci pensa nemmeno... ovviamente
dice che "unix" è un undeclared identifier.
Massimo

> main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
M> Scusa, ma è del codice C che dovrebbe compilare o è un qualche tipo
M> di scherzo ?
Si compila, e ti dice "unix". 
M> Confesso di aver provato a compilarlo, ma non ci pensa
M> nemmeno... ovviamente dice che "unix" è un undeclared identifier.
Non ce la farai mai sotto Windows: ha bisogno di strutture e definizioni
di UNIX.
Saluti,
Luca Polo.


>> main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
M> Scusa, ma è del codice C che dovrebbe compilare o è un qualche tipo
M> di scherzo ?
LP> Si compila, e ti dice "unix". 
E come  spiegato nella  signature è stato  premiato come  migliore one
liner   (programma  di  una   sola  riga)   nell'ioccc  (International
Obfuscated  C  Code Contest)  del  1987. Non  è  il  mio preferito  in
assoluto, ma il mio preferito in assoluto è troppo lungo per finire in
una signature :).
M> Confesso di aver provato a compilarlo, ma non ci pensa
M> nemmeno... ovviamente dice che "unix" è un undeclared identifier.
LP> Non ce la farai mai sotto Windows: ha bisogno di strutture e definizioni
LP> di UNIX.
Mi trovo a doverti contraddire, Moby Jake.
L'unica cosa di cui ha  bisogno è il simbolo "unix", nessuna struttura
è richiesta. E si compila anche sotto Windows... col gcc della cygwin:
{MERCURIO_115}14:27:01
~ >cat > korn.c
 main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);
{MERCURIO_115}14:27:21
~ >gcc -o korn.exe korn.c
korn.c: In function `main':
korn.c:2: parse error at end of input
{MERCURIO_115}14:27:36
~ >vim korn.c
{MERCURIO_115}14:28:08
~ >gcc -o korn.exe korn.c
{MERCURIO_115}14:28:17
~ >./korn.exe
unix
(evidentemente si bara, ma di solito si usa Cygwin per dimenticarsi di
 essere esiliati su NT...)


 di UNIX.
...senza includere alcun header file ? Difficile che li trovi ;-)
Massimo
P.S.
Per curiosità, l'identifier "unix" cosa diavolo rappresenta sotto un sistema
UNIX, appunto ? :-)


sotto linux:
$ echo "main(){printf(&unix[\"\\021\%six\\012\\0\"],(unix)[\"have\"]+\"fun\"-0x60);}" \
   >/tmp/korn.c
$ gcc -o /tmp/korn /tmp/korn.c
$ /tmp/korn
unix
..cos'hai da includere? :)
sotto win basta usare il porting della cygnus.
...non vorrai mica compilarlo con VC++?? :P
cmq questa, come si dice, e` un'altra storia... ;)
-- 
Ciao,  |  I play Russian roulette everyday, a man's sport,
Matteo |  With a bullet called life, yeah called life, (SUGAR)

 ..cos'hai da includere? :)
Se il GCC prende la keyword "unix" da qualche parte senza che sia stato
incluso alcunché, mi spiace dirlo, ma è il GCC ad essere pesantemente fuori
standard... stando alla lettera della definizione del C, se qualcosa non è
stato dichiarato *NON PUOI* usarlo :-)
Massimo

 writes:
M> Tutto quel casino solo per scrivere "unix" ? Mi aspettavo di più ;-)
Lo scopo non era l'output, lo scopo era il sorgente. Fare il programma
di una riga  più duro da leggere e nello stesso  tempo con la migliore
vena d'ironia.
M> Per curiosità, l'identifier "unix" cosa diavolo rappresenta sotto un sistema
M> UNIX, appunto ? :-)
Rappresenta il fatto  che sei sotto Unix. E' la  cosa che veramente mi
manca  in Java,  la compilazione  condizionale, anche  se ho  visto un
articolo che  parlava di un modo per  aggiungere funzionalità analoghe
almeno per  la generazione  di codice di  debug con un  overhead tutto
sommato accettabile.
Vero che in Java non hai bisogno di una cosa del genere
#if unix
/*
 * At least we are in a Unix like environment here
 */
...
#if linux
/*
 * Linux looks like Unix, but is not Unix.
 */
...
#endif
#if BSD
/*
 * Berzerkeley Heresy Ad Hoc Code
 */
...
#endif
#endif
#if VMS
/*
 * Oh, dear...
 */
#endif
in  quanto lo  stesso codice  gira su  Unix (BSD,  SYSV,  HPsUX, AIdX,
SlOwLARIS, Linux) VMS, OS/2, Mac OsX, Windows... :)
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

manca  in Java,  la compilazione  condizionale.
Eh si, per certe cose si sente proprio la sua mancanza. Stavo giust'appunto 
pensando di scrivere un preprocessor che capisca #define&c, se nessuno l'ha 
gia' fatto. Mica hai qualche notizia in proposito?


 gia' fatto. Mica hai qualche notizia in proposito?
Mai provato a usare il preprocessor del C? A me sembra che funzioni.
Ciao, Cris
-- 
Cristian Veronesi ><((((º> 
http://www.crpa.it
Chi utilizza a fini di comunicazione politica, senza il consenso degli 
interessati, indirizzi e-mail reperiti in rete viola la privacy.

Mai provato a usare il preprocessor del C? A me sembra che funzioni.
... non si possa fare cosě, non ci avevo mai pensato...
Ciao.
Ale

Mai provato a usare il preprocessor del C? A me sembra che funzioni.
Hai perfettamente ragione: ho bisogno di piu' caffe'. :)
Devo ammettere che il fatto che il solo compilatore installato
al momento sulla mia macchina sia VC++ mi stava causando un 
blocco creativo. :)


 blocco creativo. :)
"With a PC, I always felt limited by the software available. On Unix, I
am only limited by my knowledge." (Peter J. Schoenster)
$ cc -E Test.java
Ciao, Cris ;)


 Rappresenta il fatto  che sei sotto Unix.
Non hai capito la mia domanda. Chiedevo com'è definito, insomma come
dichiararlo per farlo compilare senza UNIX, e magari anche per capirci
qualcosa ;-)
Massimo