Newsgroup: it.comp.programmare
Titolo: Racconti dall'inferno(Python)

Buongiorno a tutti.
Nell'aspettativa di superare l'esame di Informatica generale nella
gloriosa università bicocca di Milano, ho avuto la brutta idea di
mettermi a studiare le dispense del nostro prof di Info. Nella prima
sezione, "Uso del PC" mi sono imbattuto nel capitolo riguardante i
linguaggi di programmazione e i loro applicativi:
"""
Compilatore/Linker: genera un nuovo file contenente il codice eseguibile
del programma(linguaggio macchina)
- Segnala eventuali errori di sintassi
- linguaggi: Cobol, Pascal, Ada, C, C++
- vantaggi: efficienza
Interprete: esegue il programma interpretando (uno per uno) le
istruzioni del programma in versione testuale
- linguaggi: Basic, Python, Perl, Lisp
- vantaggi: sviluppo prototipale
"""
Al quel punto mi dico:"oibo! un prof universitario che si degna di
nominare il Python, che bella cosa...Poi continuo a leggere:
"""
Compilatore/supporto runtime: il compilatore genera codice in un
linguaggio intermedio di più basso livello, e il supporto runtime
(macchina virtuale) esegue il programma a partire dal linguaggio
intermedio
- linguaggi: Java, C#
- vantaggi: partabilità
"""
E allora mi chiedo, il Python non genera byte-code? non è portabile?
Secondo quel poco che ne so io dovrebbe trovarsi nella terza sezione
insieme al Kiava, o sbaglio?
ciao
-- 
We are just like a sandglass, 
a life inserted by someone else into a glass, 
the time that has been given us it's brief, we can't stay shut in here, 
even at the cost of breaking the glass, we must go out.

 insieme al Kiava, o sbaglio?
Non sbagli.  Pare che il tuo professore sia confuso perche` Python
invoca _automaticamente_ il compilatore per generare il file di bytecode
se e quando occorre (cioe` se il sorgente e` piu` recente del bytecode,
o se il bytecode non esiste).
Comunque e` un po' tutta sbagliata la parte sui linguaggi elencati
come "interprete".  Il Perl funziona in modo simile a Python, eccetto
che il compilatore e` invocato ogni volta e genera il bytecode in
memoria, non su disco; il Lisp, poi, dispone di ottimi compilatori
che generano codice macchina ottimizzato.  "Interpretare (una per
una) le istruzioni del programma in versione testuale" e` una
*vecchissima* tecnologia di interpretazione: in pratica oggi tutti
gli interpreti hanno prima un passo di compilazione, che genera
una forma intermedia (se non bytecode, allora una qualche forma
di alberi-sintattici, almeno in memoria), POI eseguono, non la
versione testuale, bensi` la forma intermedia.
Anche sul primo paragrafo che citi c'e` da ridire!  Il Pascal si
impose soprattutto, nei suoi primi anni, nella versione UCSD
(University of California, San Diego), in cui il compilatore
generava bytecode portatile che poi il "supporto runtime"
eseguiva -- esattamente come e` oggi per Java, ad esempio.
Il punto fondmentale che causa tutto questo e` che c'e` un
errore di fondo: non sono I LINGUAGGI a poter essere classificati
come compilati o interpretati o altro; ogni linguaggio puo` essere
soggetto a varie IMPLEMENTAZIONI, che avranno tipicamente dei mix
di compilazione, interpretazione, supporto runtime, con diverse
caratteristiche di portabilita`, ecc ecc.  Gli esempi di Pascal,
Lisp, e anche Java (per cui esistono "compilatori che generano
direttamente codice nativo", sia pure non ancora molto maturi,
tipo ad esempio il gcc 3.*), dovrebbero bastare ampiamente a sfatare
l'erroraccio di pensare che compilato/intepretato/ecc siano
caratteristiche del LINGUAGGIO...!!!
Alex

 insieme al Kiava, o sbaglio?
Il linguaggio si chiama Java e comunque teoricamente è justo
perchè lui presuppone che Java e C# siano JIT-compiled, cioè che vengano
compilati al volo al momento dell'esecuzione (C# lo è di default, Java
dipende dall'implementazione e dalla configurazione della VM)
-- 
Rhymes
rhy...@NOSPAMmyself.com

 o se il bytecode non esiste).
Infatti quello che ho cercato di fargli notare, cioč che:
python esempio.py
ed
javac Esempio.java
java Esempio
Secondo lui nel caso del Python avveniva un'interpretazione totale, perchč al
contrario del Java caso non esisteva una compilazione esplicita.
La compilazione automatica secondo lui era "impossibile", bah!


 dipende dall'implementazione e dalla configurazione della VM)
La compilazione al momento dell'esecuzione non è ciò che viene fatto
anche dall'interprete Python? In ogni caso come dice Martelli non credo
che abbia un senso definire come "interpretato" o "compilato" un
linguaggio, visto che nessuno mi vieta di realizzare compilatori o
interpreti per un qualsiasi linguaggio


 interpreti per un qualsiasi linguaggio
Non oserei nemmeno obiettare :)
-- 
Rhymes
rhy...@NOSPAMmyself.com