Newsgroup: it.comp.programmare
Titolo: linguaggi: Compilati vs Interpretati

Ciao a tutti, da una recente discussione su it.comp.java, mi sono reso conto
che
ho le idee un pochino confuse su quando un programma e' interpretato e
quando e' compilato.
risposta semplice: e' compilato quando c'e' un compilatore ( tipo C++ )
se non c'e', quindi non c'e' il passaggio per [che cosa precisamente?]
allora e'
interpretato ( javascript )
che dire a questo punto di java, che compila[?] in bytecode?
che dire dei cosiddetti JIT, come quello presente in java?
che dire del P-code (mi sembra in VB), che non ho mai capito cosa sia? :-)
come vedete ho un pochetto di confusione! :-(
chi mi illumina? (anche eventualmente solo con link!)
GRAZIE!
--
Ciao by Allanon

che dire del P-code (mi sembra in VB), che non ho mai capito cosa sia? :-)
il p-code di vb é un esempio di codice interpretato, come lo erano le
vecchie distribuzioni di basic, tutti interpretati.
antonio

 che dire a questo punto di java, che compila[?] in bytecode?
e/o in codice macchina, con gcc 3.* (ancora poco maturo, ma col
tempo cresce...).  Quasi invariabilmente Java e` sia compilato sia
interpretato, ma gradualmente e` possibile che venga ad eliminarsi
(senza cambiare nulla sui programmi...) la seconda parte, ad esempio.
Alex

dei linguaggi (anche se molti si ostinano, sbagliando, ad affermarlo)
anche il mio libro di testo di informatica dell'anno scorso
(parlando di Java) fa questo errore... :(
--
Lawrence "Rhymes" Oluyede
rhy...@myself.com

 (parlando di Java) fa questo errore... :(
Ma credo intendano dire che il linguaggio genera software compilato o
interpretato... si capisce che non è riferito al linguaggio stesso o al
compilatore/interprete che di per se è un software di norma compilato.
--
Luigi
Web Site: 
http://web.tiscali.it/luigi_web
E-mail: 
cybe...@email.it
ICQ #46240443

 quando e' compilato.
E' facile: un *programma* è interpretato quando contiene un "motore"
software (interprete) che esegue una serie di metaistruzioni contenute
in una sezione separata del file EXE (che sarebbero il programma che
hai scritto tu).
E' invece compilato quando nell'EXE ci sono solo istruzioni in LM
per il processore, che le esegue direttamente.
Nota che alcuni "programmi" possono essere in formati non direttamente
eseguibili. In questo caso sono *sicuramente* interpretati

 interpretato... si capisce che non è riferito al linguaggio stesso o al
Ma, "il linguaggio genera software" e` un discorso comunque molto
strano, e sembra sottendere una totale confusione fra un dato
LINGUAGGIO e le sue (spesso molteplici) IMPLEMENTAZIONI.
Una data implementazione (diamo per scontato che un qualche
livello di compilazione lo faccia, poiche` gli interpreti "totali" che
eseguono direttamente dai sorgenti senza passi intermedi di
compilazione sono virtualmente spariti) puo` generare codice per
una qualche CPU realmente esistente oppure per una pseudo-CPU,
e in questo vaghissimo e poco importante senso "generare
software" che nelle intenzioni sia o non sia interpretato.  Poi
in realta` quelle nate come pseudo-CPU vengono magari fatte
in hardware (o microcode -- via di mezzo fra HW e SW) e il
codice "pseudo" diviene "vero codice macchina" (senza alcun
cambiamento nel linguaggio ne` nella sua implementazione!) o
al contrario quelle nate come CPU vere diventano pseudo e sono
interpretate da codice che gira su nuove CPU totalmente diverse
e piu` potenti (come e` capitato ai Macintosh) e allora il codice
nato come "vero" diventa "pseudo" e interpretato.  Quindi anche
a questo livello e` una distinzione che non esiste.  Ma "esiste
ancor meno" in termini del LINGUAGGIO -- sono sempre e se
mai le singole IMPLEMENTAZIONI di esso che possono (a non
capire troppo di informatica) SEMBRARE dare adito a questa
inesistente distinzione.
E` veramente gravissimo se esistono libri di testo che continuano
a offuscare ancor di piu` una questione su cui tanta gente e`
chiaramente cosi` confusa.
Alex

 essere eseguito dal processore, che ha bisogno di un emulatore...
e questo "emulatore" sarebbe "l'interprete" del bytecode?
o qualcos'altro ancora?
ciao by allanon

 (senza cambiare nulla sui programmi...) la seconda parte, ad esempio.
scusa, non ho capito molto bene... in questo caso dici che java e':
-interpretato se uso la jvm (ma non dovrebbe esssre compilato &
interpretato?)
-compilato se uso gcc o "qualcosa" che lo compila in forma "binaria"
ok?
Ciao e grazie,
Allanon

 ok?
Anche il bytecode JVM e` una "forma binaria", quindi non e` questa
la caratteristica dirimente.  Diciamo che esistono vari strumenti
che a partire da sorgenti Java o bytecode JVM possono produrre
codice macchina per vari altri computer.
Supponi di produre codice macchina per una CPU Intel 386.  Ora,
se giri il codice risultante su di un Intel 386 o altro chip che
la emuli *in hardware*, il risultato e` una esecuzione priva
di aspetti interpretativi.  Se giri il codice risultante su di
un emulatore software che gira su di un'architettura hardware
del tutto diversa, l'aspetto interpretativo invece ovviamente
e` presente.  Si sprecano poi i casi difficili ed ambigui, dal
microcode in avanti; ad esempio, la CPU Crusoe di Transmeta ha
un'architettura HW diversissima dall'Intel 386 e successori (e`
una macchina VLIW), _MA_ il programma interprete che appunto
interpreta le istruzioni 386 e simili e` (pur essendo programma
a pieno titolo e non microcodice, cosi` spiega Transmeta) su di
una ROM che affianca la CPU e vi e` abbinata.
Piu` chiaro forse il caso in cui, magari sempre con gcc 3, tu
compili il to Java a codice-macchina 68000.  Ora, se lo giri su
di un vecchio Macintosh, gira e basta, senza interpreti.  Se lo
giri su di un Mac prodotto negli ultimi anni, quindi con una
CPU Power e non 68000, entra in gioco un interprete (che e`
un programma come tutti gli altri, sta su disco e viene
caricato in memoria normale, non su ROM, ne` piu` ne` meno di
un interprete per bytecode JVM, per bytecode Python, o altri
ancora).  Quindi lo stesso, identico programma binario (che
un opportuno compilatore ha prodotto a partire in questo caso
da sorgenti Java) e` o meno interpretato a seconda di quale
computer tu scelga di usare per farlo girare.
La distinzione "interpretato o meno" e` dunque esile e sempre
piu` confusa, anche per il singolo dato programma trattato
da specifici strumenti software.  Per il LINGUAGGIO nel suo
complesso, e` sempre stata una distinzione assurda, tanto piu`
lo diventa ogni giorno, dunque, man mano che le piu` varie
implementazioni e le piu` originali piattaforme arrivano sul
mercato o nei laboratori di ricerca.
Alex

 ha scritto:
[un saggio su compilazione/interpretazione da incorniciare!]
che dire? grazie x la tua esauriente spiegazione!
adesso mi e' tutto chiarissimo! (fino al prox dubbio, almeno! :-) )
Ciao by Allanon

 LINGUAGGIO e le sue (spesso molteplici) IMPLEMENTAZIONI.
In questo caso per linguaggio intendo il compilatore/interprete del 
linguaggio
ciao
-- 
Luigi
Email: 
cybe...@email.it

 chiaramente cosi` confusa.
consiglio a tutti quelli confusi sull'argomento l'ottimo "Architettura 
dei computer, un approccio strutturato" di Tanenbaum; trovate una mia 
recensione del libro su Programmazione.it (area "Altri")
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it