Domanda [RISOLTO]Differenza tra linguaggi compilati e linguaggi interpratati?

Stato
Discussione chiusa ad ulteriori risposte.
Ultima modifica:
Re: Differenza tra linguaggi compilati e linguaggi interpratati?

La differenza è banale, ma gli effetti che porta sui linguaggi sono rilevanti :)

Un linguaggio di programmazione è compilato quando un compilatore traduce il codice sorgente in linguaggio macchina. In questa situazione il compilatore deve inserire nel programma compilato tutta la complessità (indirizzamenti, trasferimenti di controllo, riferimenti, ecc.) che caratterizza la struttura interna del programma. Quando l'eseguibile viene avviato, il codice del programma viene direttamente caricato in memoria e immediatamente può iniziare l'esecuzione.
Un linguaggio di programmazione è interpretato quando non esiste un compilatore e il codice sorgente viene tradotto da un interprete in linguaggio macchina al momento dell'esecuzione. In questa situazione tutta la complessità (indirizzamenti, trasferimenti di controllo, riferimenti, ecc.) che caratterizza la struttura interna del programma deve essere gestita dall'interprete. L'interprete è quel software che all'avvio del programma prende un'istruzione alla volta (istruzioni scritte nel linguaggio di alto livello) e la traduce in linguaggio macchina prima di passarla alla CPU. Solitamente questo provoca un rallentamento generale del software e l'obbligo di dover rilasciare l'intero codice sorgente insieme al programma (anche se, si può ricorrere a metodi di criptazione e offuscamento).
Un caso particolare è costituito dai linguaggi .NET. Questi linguaggi sono interpretati, però il compilatore è presente! Il compilatore .NET traduce il codice sorgente in MSIL (MicroSoft Intermediate Language). Come suggerisce il nome, questo è un linguaggio intermedio tra il linguaggio di alto livello (in questo caso, il linguaggio .NET) e il linguaggio macchina (un po' come l'assembly). Il linguaggio MSIL viene, al momento dell'esecuzione, tradotto in linguaggio macchina dal CLR (Common Language Runtime) del Framework .NET e dato in pasto alla CPU. La potente struttura del Framework .NET e del CLR fanno sì che le prestazioni dei programmi .NET siano alte come quelle dei linguaggi compilati :)
 
Re: Differenza tra linguaggi compilati e linguaggi interpratati?

Capito. Quindi, ad esempio, il Python o il Java sono linguaggi interpretati, giusto? O almeno io non ho mai sentito parlare di compilatori per Python o Java.
 
Re: Differenza tra linguaggi compilati e linguaggi interpratati?

Capito. Quindi, ad esempio, il Python o il Java sono linguaggi interpretati, giusto? O almeno io non ho mai sentito parlare di compilatori per Python o Java.

Il java lavora come il .NET ma con la differenza che le prestazioni sono comunque ridicole.

Per il python la situazione è particolare: di ufficiale c'è solo l'interprete, poi ci sono interpreti non ufficiali (come PyPy) che compilano all'esecuzione come il .NET o il Java o compilatori veri e propri come CPython.
 
Re: Differenza tra linguaggi compilati e linguaggi interpratati?

Ora non esegeriamo... il Java ha di sicuro problemi di performance, ma questo è dovuto dal fatto che il GC attualmente, non è integrato per bene nella VM, se uno vuole una performance alta si deve buttare sui linguaggi compilati, come il C\C++, che ti permettono di avere anche più controllo sulla gestione della memoria etc. In Java ci hanno fatto e ci stanno facendo grandi giochi, vedi anche l'engine: jMonkeyEngine, le sue demo girano sulla mia scheda video senza problemi che è una: Intel G41.... dipende molto anche da come il programmatore gestisce le cose.
 
Re: Differenza tra linguaggi compilati e linguaggi interpratati?

se uno vuole una performance alta si deve buttare sui linguaggi compilati, come il C\C++
Il .NET ha performance pienamente comparabili a quelle del C/C++ :) In certi casi le applicazioni .NET sono anche più veloci dei programmi in codice nativo.
 
Re: Differenza tra linguaggi compilati e linguaggi interpratati?

Nelle applicazioni non ce dubbio...

Anche i videogiochi sono applicazioni, qualsiasi tipo di eseguibile è un'applicazione...

E no, in java non sono stati fatti grandi giochi. Al contrario ci sono parecchi titoli fatti in .NET (Li si trova anche su steam, vedi bastion, magicka, ecc...)
 
  • Mi piace
Reazioni: SpeedJack
Ultima modifica:
Re: Differenza tra linguaggi compilati e linguaggi interpratati?

Nei videogiochi la cosa è molto differente, testare per vedere le differenze. Il discorso del Java era rivolto alla performance :), non a chi ha fatto di più :)
 
Re: Differenza tra linguaggi compilati e linguaggi interpratati?

Nei videogiochi la cosa è molto differente, testare per vedere le differenze. Il discorso del Java era rivolto alla performance :), non a chi ha fatto di più :)

E' la stessa cosa, minecraft ne è l'esempio lampante, con meno di 2 gb di ram ti scatta
 
Re: Differenza tra linguaggi compilati e linguaggi interpratati?

Infatti, come già ho detto, Java confronto al C#\C++ & Co. ha di sicuro più problemi di performance... ma ciò non significa che non puoi farci un gioco, che poi Minecraft.... Minecraft genera i mondi in real time, come anche Manic Digger scritto in C# e tutti i due i giochi, sulla mia scheda video scattano.... a volte Manic Digger mi si impalla proprio. Mentre se prendo un remake di Minecraft scritto in FreeBasic (sul forum ufficiale ce), non mi scatta per nulla... FreeBasic è un linguaggio compilato. Come già ho detto, nei giochi la cosa è etremamente differente, il C++ domina per ovvi motivi, e te lo dice uno che odia il C++ LOL.
 
Stato
Discussione chiusa ad ulteriori risposte.