PDA

View Full Version : [Ruby] piccolo chiarimento sugli interpreti


anonimizzato
13-08-2010, 12:19
Ciao a tutti,

volevo un piccolo chiarimento circa una cosa che mi sfugge su Ruby (ma varrebbe anche per altri linguaggi di scripting immagino): cosa avviene quando il codice viene eseguito sulla JVM come per JRuby?

Nel senso: cosa ne fà la JVM del codice Ruby che legge? In Java il codice viene prima pseudo-compilato e poi fatto girare sotto la JVM che traduce le istruzioni in linguaggio macchina corretto?

Non è che viene trasformato in codice Java prima vero? :fagiano:

Scusate la confusione mentale. :p

cdimauro
13-08-2010, 13:14
No, il codice di (J)Ruby viene convertito in bytecode Java, ed eseguito dalla JVM.

Dovrebbero essere generati dei file .class per ogni modulo Ruby.

anonimizzato
13-08-2010, 13:22
Ok, quindi che abbia scritto un programma in Java, Ruby o Python poi il codice viene sempre tradotto in bytecode per la JVM ed eseguito corretto?

Tnx.

cdimauro
13-08-2010, 13:31
Esattamente. La "lingua franca" è rappresentata dal bytecode della JVM.

banryu79
13-08-2010, 13:48
Esattamente. La "lingua franca" è rappresentata dal bytecode della JVM.
Yes, bytecode rulez!

anonimizzato
13-08-2010, 14:51
Leggendo un pò ho trovato questo:

Oggi, per migliorare la velocità di esecuzione, anche molti linguaggi interpretati, come Perl, PHP o Python, fanno uso del bytecode. Essi traducono il programma in bytecode e poi lo interpretano tramite una macchina virtuale. Il linguaggio Ruby, invece, non usa il bytecode, ma traduce il codice in una struttura sintattica ad albero che ricorda molto la rappresentazione intermedia che si usa nei compilatori, tale struttura viene poi usata dall'interprete per eseguire il programma.

http://it.wikipedia.org/wiki/Bytecode


Uhm ... in soldoni?

Grazie ancora.

khelidan1980
13-08-2010, 14:56
Leggendo un pò ho trovato questo:



Uhm ... in soldoni?

Grazie ancora.

ma tu hai citato nello specifico jruby

anonimizzato
13-08-2010, 15:01
ma tu hai citato nello specifico jruby

Hai ragione.

Quindi il pezzo che ho riportato sopra sarebbe riferito forse alla VM originale YARV?

Può essere?

anonimizzato
14-08-2010, 08:42
Un altra cosa che mi è poco chiara: quando vedo le varie VM per linguaggi di scripting come appunto Ruby noto che si tratta spesso di interpreti in C/C++ oppure Java nel caso di JRuby ma ... è per una mera questione di prestazioni oppure perchè non è possibile tradurre del codice di scripting direttamente in linguaggio macchina?

Grazie ancora.

Vincenzo1968
14-08-2010, 10:30
Un altra cosa che mi è poco chiara: quando vedo le varie VM per linguaggi di scripting come appunto Ruby noto che si tratta spesso di interpreti in C/C++ oppure Java nel caso di JRuby ma ... è per una mera questione di prestazioni oppure perchè non è possibile tradurre del codice di scripting direttamente in linguaggio macchina?

Grazie ancora.


È solo per le prestazioni. È possibile tradurre il codice di scripting direttamente in linguaggio macchina(ma di solito si traduce in assembly).

I compilatori generalmente traducono il codice in una versione intermedia(si usa spesso il codice a tre indirizzi; vedi il contest 17 (http://www.hwupgrade.it/forum/showthread.php?t=2030843)).

Sul codice intermedio vengono effettuate le ottimizzazioni indipendenti dalla macchina. Il codice intermedio ottimizzato, infine, viene tradotto in assembly per la macchina specifica(o in bytecode Java).

Gli interpreti invece creano l'AST e lo eseguono direttamente(vedi sempre il contest 17 (http://www.hwupgrade.it/forum/showthread.php?t=2030843)).

anonimizzato
14-08-2010, 10:48
Ti ringrazio Vincenzo1968.

khelidan1980
15-08-2010, 09:53
Hai ragione.

Quindi il pezzo che ho riportato sopra sarebbe riferito forse alla VM originale YARV?

Può essere?

si direi proprio di si che si riferisse all'interprete originale!