Prima di Giava e apparvero i linguaggi di programmazione C #, i programmi per computer erano solo compilato o interpretato. Lingue come Assembly Language, C, C ++, Fortran, Pascal venivano quasi sempre compilate in codice macchina. Lingue come Basic, VbScript e JavaScript venivano generalmente interpretate.
Quindi qual è la differenza tra un programma compilato e uno interpretato?
compilazione
Per scrivere un programma procedi come segue:
- Modifica il programma
- Compilare il programma in file di codice macchina.
- Collegare i file di codice macchina in un programma eseguibile (noto anche come exe).
- Eseguire il debug o eseguire il programma
Con alcune lingue come Turbo Pascal e Delphi i passaggi 2 e 3 sono combinati.
I file di codice macchina sono moduli autonomi di codice macchina che richiedono un collegamento per creare il programma finale. Il motivo per avere file di codice macchina separati è l'efficienza; i compilatori devono solo ricompilare codice sorgente che sono cambiati. I file di codice macchina dai moduli invariati vengono riutilizzati. Questo è noto come fare l'applicazione. Se si desidera ricompilare e ricostruire tutto il codice sorgente, questo è noto come Build.
Il collegamento è un processo tecnicamente complicato in cui tutte le chiamate di funzione tra diversi moduli sono collegate tra loro, per cui vengono allocate le posizioni di memoria variabili e tutto il codice viene disposto in memoria, quindi scritto su disco come programma completo. Questo è spesso un passo più lento della compilazione poiché tutti i file di codice macchina devono essere letti in memoria e collegati tra loro.
Interpretazione
I passaggi per eseguire un programma tramite un interprete sono
- Modifica il programma
- Eseguire il debug o eseguire il programma
Questo è un processo molto più veloce e aiuta i programmatori principianti a modificare e testare il loro codice più velocemente rispetto all'utilizzo di un compilatore. Lo svantaggio è che i programmi interpretati funzionano molto più lentamente dei programmi compilati. Fino a 5-10 volte più lento di ogni riga di codice deve essere riletta, quindi rielaborata.
Inserisci Java e C #
Entrambe queste lingue sono semi-compilate. Generano un codice intermedio ottimizzato per l'interpretazione. Questo linguaggio intermedio è indipendente dall'hardware sottostante e questo semplifica il porting programmi scritti in altri processori, purché sia stato scritto un interprete per quello hardware.
Java, una volta compilato, produce un bytecode che viene interpretato in fase di esecuzione da una Java Virtual Machine (JVM). Molte JVM utilizzano un compilatore Just-In-Time che converte bytecode in codice macchina nativo e quindi esegue quel codice per aumentare la velocità di interpretazione. In effetti, il codice sorgente Java viene compilato in un processo in due fasi.
C # è compilato in Common Intermediate Language (CIL, precedentemente noto come Microsoft Intermediate Language MSIL. Questo è gestito da Common Language Runtime (CLR), parte del framework .NET, un ambiente che fornisce servizi di supporto come garbage collection e compilazione Just-In-Time.
Sia Java che C # utilizzano tecniche di speedup, quindi la velocità effettiva è quasi altrettanto veloce di un linguaggio compilato puro. Se l'applicazione impiega molto tempo a fare input e output come leggere o eseguire file su disco Banca dati interroga quindi la differenza di velocità è appena percettibile.
Cosa significa questo per me?
A meno che tu non abbia un'esigenza molto specifica di velocità e debba aumentare la frequenza dei fotogrammi di un paio di fotogrammi al secondo, puoi dimenticare la velocità. Qualsiasi C, C ++ o C # fornirà una velocità sufficiente per giochi, compilatori e sistemi operativi.