Differenza inteprete e compilatore?

di il
13 risposte

Differenza inteprete e compilatore?

Ciao ragazzi non mi è ben chiara la distinzione, so che il compilatore dopo che hai scritto il programma dal codice sorgente crea il codice oggetto, l'interprete invece lo fa real-time,passo per passo (o almeno così mi pare di aver capito), ma che vuol dire? che mentre scrivo il programma me lo traduce? che linguaggi usano l'interprete?

13 Risposte

  • Re: Differenza inteprete e compilatore?

    Ok mi sn risposto
  • Re: Differenza inteprete e compilatore?

    Se può servirti a capire qualcosa in più di quello che hai già capito rispondendoti...
    Esistono gli interattivi (quello che scrivi viene immediatamente interpretato), gli interpretati (interpreta un insieme di istruzioni) e i pre-compilati (esegue un'interpretazione intermedia).
    In generale sono interpretati quasi tutti i linguaggi di scripting e/o applicazioni specifiche. Dalla Shell al Python, dall'HTML al PHP. La lista è lunga.
    In teoria per ogni linguaggio interpretato si potrebbe avere un compilatore oppure un convertitore di codice come per esempio HipHop che trasforma il PHP in C++ potendolo poi compilare.
  • Re: Differenza inteprete e compilatore?

    Ciao ixamit grazie di aver risposto,

    io ho sempre da capire e imparare dato che so MOLTO poco

    dato che non lo faccio per l'uni o lavoro ma per semplice passione mi piace cercare di rendere le cose semplici, magari con esempi pratici, cerco di scarnire i concetti. Capita la base c'è sempre tempo per complicarsi la vita.

    Da quello che ho letto ( cm hai scritto anche tu mi pare alla fine) in teoria ogni linguaggio può essere sia compilato che interpretato, dipende dall'implementazione del linguaggio ( non ho mai capito bene che si intenda con questo termine, rendere operativo? trasformare il linguaggio in impulsi elettrici?).
    Di solito linguaggi CPU bound quindi la cui esecuzione dipende essenzialmente dal processore, programmi che sono eseguiti molte volte e che necessitano di rapidità sono compilati.

    Vengono interpretati linguaggi I/O bound,dipendenti non tanto dalla velocità di elaborazione quanto dalla velocità di input (mi puoi fare un esempio? programmi che chiedono all'utente di immettere valori?), o quelli da eseguire una sola volta.

    Poi ci sono gli pseudo compilati che credo siano quelli che tu hai chiamato semi-compilati, la compilazione crea uno pseudo-codice,permettimi il termine improprio, che poi viene interpretato.

    Degli esempi che mi hai fatto conosco solo il linguaggio di formattazione testi HTML, so cos'è la shell ma non ho idea di come operi idem per il PHP, così magari come esempio prendiamo l'HTML, potremmo dire che questo rientra nella categoria dei linguaggi eseguiti una sola volta?

    Spero di aver capito e non aver fatto troppa confusione nel caso spero in tue delucidazioni.

    Questa domanda mi è venuta perchè ieri ho iniziato a leggere architettura dei calcolatori di Tanenbaum il fisico famoso per la discussione con torvalds sui kernel monolitici, e parlando della storia dei calcolatori faceva l'analogia software-hardware, ossia si capì come l'hardware potesse essere emulato a livello software "interpretando" appunto istruzioni e risparmiando (riprodurre software è molto più economico di produrre molti pezzi hardware). Mi chiedo così come sia possibile questo, cioè sempre in termini terra terra, agli albori facevano "chip" che programmavano a eseguire un tot di istruzioni, invece dopo hanno capito che non c'era bisogno di programmare il singolo chip ma bastava un programma per fargli svolgere determinati compiti?

    spero di essere stato chiaro se no riporto il pezzo originale
  • Re: Differenza inteprete e compilatore?

    Terra-terra ogni chip è fatto di transistor che a seconda del drogaggio li troviamo indue stadi, drogaggio pnp e npn, Combinandoli tra loro si creano le porte logiche e quindi possiamo applicare l'algebra di Boole. Siccome la stressa algebrasi applica anche via software ecco che un qualsiasi hardware può essere emulato in software.
  • Re: Differenza inteprete e compilatore?

    Grazie ma è troppo terra terra! Conosco l'algebra di boole e le porte logiche, e ovviamente so cosa sono i transistor, ho seguito delle videolezioni sul sito della nettuno dove il tutto è spiegato molto bene. Forse non mi sono spiegato bene, apparte poi che la parte superiore della domanda quella che chiedeva esempi è stata trascurata. Comunque per quanto riguarda la storia non mi sono spiegato bene probabilmente, quello che mi chiedo è:
    i PIC per funzionare vanno progettati, o nel caso dei computer vanno scritti dei programmi che saranno poi interpretati dalla macchina.

    Fatta questa premessa sia nel caso del programmare un PIC sia nel caso di fare un programma ci vuole un programmatore. Ora lasciando stare che probabilmente i PIC vengono più spesso programmati in assembler (quindi può risultare più difficile), il porting rimane lo stesso. Cioè io pago il programmatore un tot, una volta scritto il programma non costerà niente metterlo su tutti i PIC, così come se pago un programmatore per scrivermi un prog che sarà interpretato, lo pagherò una sola volta. Dov'è il vantaggio e dov'è l'innovazione?

    La frase che mi genera confusione è la seguente:
    "Dato che un interprete scompone le istruzioni della propria macchina obiettivo in piccoli
    passi, il calcolatore sul quale viene eseguito può essere molto più semplice e meno costoso
    rispetto a quanto Io sarebbe un processore hardware appositamente progettato per la
    macchina obiettivo. 'Pale convenienza risulta ancor più significativa se la macchina obiettivo
    possiede molte istruzioni e se queste sono particolarmente complesse e caratterizzate da
    molte opzioni. Il vantaggio deriva essenzialmente dal fatto che si sostituisce parte dell'hardware
    con il software (l'interprete), molto meno costoso da riprodurre.

    Quindi,se ho capito bene
    essendo l'inteprete in grado di "spezzettare" istruzioni complesse in istruzioni semplici riduce la complessità del processore e quindi i costi di progettazione (o almeno così intepreto la prima parte), questo vale ancor più in processori complessi che devono eseguire istruzioni complesse nei quali non solo sale il costo di progettazione, ma anche quello dei componenti (probabilmente perchè sono di più è collegati in maniera particolare).

    Insomma in conclusione il vantaggio di interpretare è solo economico e precisamente:
    - risparmio sulla progettazione
    -risparmio sui componenti

    siete daccordo?
  • Re: Differenza inteprete e compilatore?

    L'unità centrale di un personal computer è la CPU il cui compito è quello di eseguire una serie di operazioni ed il suo SET di istruzioni è alquanto limitato.
    Quando abbiamo necessità computazionali più complicate dobbiamo ricorrere a degli ALGORITMI o dei particolari giri per ottenerla. Ecco che una divisione o una moltiplica con valori particolari potrebbe richiedere una scrittura di CODICE MACCHINA esageratamente lunga e complicata e un programma, nella sua complessità, diventerebbe troppo oneroso in termini di tempo.
    La CPU capisce solo il PROPRIO CODICE MACCHINA, dipendente dalla propria architettura. Una 8502 non capisce le istruzioni di una 8088 o di processore RISC.
    Il linguaggi compilati, interpretati o misti si interpongono tra l'uomo e la MACCHINA utilizzando una scrittura più consona all'utente. Ecco che possiamo trovare terminologie inglesi intuitive come SET, PRINT, INPUT, CLEAR ecc..
    La successiva transcodifica da LINGUAGGIO GENERICO a LINGUAGGIO MACCHINA può essere indifferentemente eseguita runtime con i costi relativi al tempo di interpretazione oppure compilando, cioè generando un CODICE MACCHINA (una tantum), più o meno efficiente, ma già pronto per essere eseguito. E' necessario sottolineare l'importanza del SISTEMA OPERATIVO, il quale deve fornire tutte le FUNZIONI NECESSARIE all'esecuzione del programma.

    In sintesi, la diffusione e la scelta fatta dai linguaggi interpretati o bytecode (semi-compilati) ricade essenzialmente sulla portabilità, cioè che possono girare su CPU o SISTEMI OPERATIVI differenti. La scelta dei compilati ricade sulla velocità a discapito dell' architettura.
  • Re: Differenza inteprete e compilatore?

    A certo un altro vantaggio è la compatibilità tra calcolatori che a questo punto adottano la stessa architettura
  • Re: Differenza inteprete e compilatore?

    Ok allora,scusa se sono di coccio, la prima cosa che mi sfuggiva era che ogni CPU avesse un proprio codice macchina, pensavo che essendo binario, sbalzi di tensione, acceso o spento, fosse uguale per tutte le macchine!! a questo punto mi chiedo se vi sono solo due possibili valori come ciò sia possibile! illuminami ti prego!

    Poi se ogni CPU ha il suo linguaggio macchina come fa l'interprete a tradurlo in quelli di tutte le CPU e perchè il compilatore non può?

    Quindi posso scrivere programmi in C per windows e per mac nonostante il C sia compilato perchè hanno un'architettura in comune, mentre posso scrivere in objective-C solo per MAC perchè le CPU di windows non sono in grado di leggerlo? e non ci potrebbe essere un compilatore che traduce l'objective-c anche per windows?

    Sono più confuso di prima , è peggio di quando avevo sentito dei neutrini!
  • Re: Differenza inteprete e compilatore?

    La CPU non è solo un insieme di mini-transistor, ma ha anche una unità di controllo, una gestione aritmetica/logica, i registri... e probabilmente altre cose a seconda della FAMIGLIA di appartenenza. Questo spiega perché le CPU non sono compatibili tra loro.
    Poi se ogni CPU ha il suo linguaggio macchina come fa l'interprete a tradurlo in quelli di tutte le CPU e perchè il compilatore non può?
    Ma, la cosa è praticamente simile, solo che il compilatore dovrebbe prima produrre il suo eseguibile nel proprio ambiente perché possa funzionare . Equivale ad un'auto-compilazione.
    Quindi posso scrivere programmi in C per windows e per mac nonostante il C sia compilato perchè hanno un'architettura in comune, mentre posso scrivere in objective-C solo per MAC perchè le CPU di windows non sono in grado di leggerlo? e non ci potrebbe essere un compilatore che traduce l'objective-c anche per windows?
    I compilatori sono evoluti ed hanno la possibilità di impostare il target di destinazione. Si può compilare sotto ambienti diversi per architetture differenti, per CPU differenti. Su Linux si posso compilare programmi che sfruttano le API di Window o Cocoa. o Objective-C. Le compili, ma non le puoi eseguire.


    peggio di quando avevo sentito dei neutrini!
  • Re: Differenza inteprete e compilatore?

    ixamit ha scritto:


    Ma, la cosa è praticamente simile, solo che il compilatore dovrebbe prima produrre il suo eseguibile nel proprio ambiente perché possa funzionare . Equivale ad un'auto-compilazione.
    non ho capito non avevamo detto che il compilatore era a discapito dell'architettura? cioè che per la portabilità usavamo gli interpreti? se è possibile farlo con il compilatore allora tanto vale usare questo dato che come esecuzione è più veloce. Il compilatore che si autotraduce? sto provando a immaginarmelo

    Ultima domanda da un milione di dollari poi vinci una statua e la possibiltà di darmi un calcio nel sedere se faccio un altra domanda

    zazi77 ha scritto:


    I compilatori sono evoluti ed hanno la possibilità di impostare il target di destinazione. Si può compilare sotto ambienti diversi per architetture differenti, per CPU differenti. Su Linux si posso compilare programmi che sfruttano le API di Window o Cocoa. o Objective-C. Le compili, ma non le puoi eseguire.
    perchè non le posso esguire?

    Comunque credo che continuando nella lettura del libro queste cose mi saranno più chiare, o forse nn capirò niente e userò il libro per scaldarmi nella mia fredda casa universitaria dato che con quei soldi mi pagavo la bolletta della luce di un mese (lo so il paragone gas luce non sta in piedi è per impietosire )

    La smetto di fare il cretino,grazie
  • Re: Differenza inteprete e compilatore?

    non ho capito non avevamo detto che il compilatore era a discapito dell'architettura? cioè che per la portabilità usavamo gli interpreti? se è possibile farlo con il compilatore allora tanto vale usare questo dato che come esecuzione è più veloce. Il compilatore che si autotraduce? sto provando a immaginarmelo
    Si, la cosa sarebbe possibilissima. Possiamo avere il compilatore che compila se stesso ed alla fine killa il padre che lo ha creato. Non sto scherzando, questo è quello che succede compilando un kernel con un compilatore pre-compilato.
    perchè non le posso eseguire?
    Per i discorsi fatti precedentemente. Il codice compilato non funziona su CPU o sistemi operativi differenti. Per eseguirlo occorre una virtualizzazione software.
  • Re: Differenza inteprete e compilatore?

    Compilatori killer? Me ne vado a dormire
  • Re: Differenza inteprete e compilatore?

    'notte, non sognare troppo i compilatori
Devi accedere o registrarti per scrivere nel forum
13 risposte