Ci sono molti modi per distinguere i linguaggi di programmazione. Per cominciare, rientrano in diversi paradigmi: funzionale, orientato agli oggetti e altro ancora.
Puoi anche classificare un linguaggio di programmazione in base al suo metodo di traduzione, qualcosa che ha un effetto importante sulle prestazioni di un linguaggio. I linguaggi di programmazione compilati sono generalmente più veloci di quelli interpretati. Quindi, in situazioni come lo sviluppo di giochi che richiedono velocità, gli sviluppatori tendono a utilizzare linguaggi compilati.
Che cos'è la traduzione?
Il processo di traduzione converte il codice scritto da un programmatore in codice macchina che un computer può eseguire. Il codice macchina è un tipo di linguaggio di basso livello, che ha uno e zero. Quindi, ciò che fa il traduttore è convertire il codice di alto livello che crei in un linguaggio di programmazione in codice macchina.
Senza traduttori, dovresti codificare in linguaggio macchina. Ogni linguaggio di programmazione di alto livello che conosci utilizza uno dei tre metodi di traduzione: un compilatore, un interprete o un ibrido dei due.
Che cos'è un compilatore?
Un compilatore è un software che converte il codice sorgente scritto in un linguaggio di alto livello in codice di basso livello per l'esecuzione.
Il diagramma sopra rappresenta un compilatore nella sua forma più elementare. Il compilatore ha diverse fasi. Ogni fase trasforma il codice da uno stato all'altro. L'obiettivo di ogni fase del compilatore è creare un output che sia più facile da manipolare per la fase successiva. La struttura generale di un compilatore è la seguente:
- Scanner: questa fase prende un flusso di caratteri e li raggruppa in token che rappresentano identificatori, stringhe letterali e così via.
- Parser: questa fase raggruppa i token in base alla grammatica del linguaggio di programmazione sorgente. Crea un albero di sintassi astratto che è una raccolta di espressioni che compongono il programma.
- Semantica: questa fase conduce un'analisi semantica sull'albero della sintassi astratta (AST). Utilizza le regole della lingua di partenza per aggiungere significato assegnando tipi alle espressioni AST e verificandone la validità. L'AST diventa quindi una rappresentazione intermedia.
- Rappresentazione Intermedia (IR): questa fase converte il codice sorgente del programma originale in codice macchina. Produce una versione semplificata del codice assembly. L'IR utilizza uno o più ottimizzatori per migliorare il codice IR e raccogliere informazioni per la macchina su cui è in esecuzione. Un ottimizzatore può rendere un programma più efficiente, più veloce o anche più piccolo.
- Code Generator: questa fase consuma il codice IR ottimizzato e lo converte in codice macchina.
Quali linguaggi di programmazione utilizzano i compilatori?
Alcuni popolari linguaggi di programmazione compilati includono:
- C
- C++
- andare
- Ada
- Fortran
- COBOL
- Liscio
- Obiettivo-C
- Veloce
Un vantaggio dell'utilizzo di un linguaggio compilato è che identifica gli errori durante la compilazione. Ciò ti consente di correggere tali bug e quindi di provare a compilare nuovamente il programma. I linguaggi compilati hanno meno probabilità di fallire una volta iniziata l'esecuzione. Queste lingue non genereranno nemmeno un programma da eseguire se il codice sorgente presenta errori di sintassi. Ma gli errori semantici e altre forme di bug di runtime lo supereranno.
Anche i linguaggi compilati vengono eseguiti molto rapidamente dopo la compilazione.
Che cos'è un interprete?
Un interprete è un programma che traduce ed esegue una singola riga di codice alla volta. Questo processo si ripete finché l'interprete non arriva all'ultima riga di codice nel programma o nello script specificato.
Come puoi vedere dal diagramma sopra, un interprete prende due input. Innanzitutto, prende l'intero codice sorgente (programma). Quindi legge la prima riga del programma (come input), la traduce e la esegue. Se quella riga viene eseguita correttamente, passa alla riga successiva nel programma o nello script.
A differenza di un compilatore, un interprete non traduce un intero programma in codice macchina. Al contrario, analizza e analizza una determinata riga di codice prima di eseguirla. Un interprete dovrebbe iniziare a eseguire un programma, specialmente uno più grande, prima ancora che un compilatore abbia finito di tradurlo.
Quali linguaggi di programmazione utilizzano gli interpreti?
Alcuni popolari linguaggi di programmazione interpretati includono:
- Pitone
- JavaScript
- Perl
- MATLAB
- DI BASE
Sebbene un interprete inizi a eseguire il codice più velocemente, non riuscirà comunque se riscontra un errore. Come programmatore, dovresti correggere un tale errore e riavviare il programma. Questo evento si verifica ogni volta che l'interprete rileva un nuovo errore. Alcuni errori possono rimanere dormienti se si riferiscono a una serie rara di circostanze. In tali casi, il test è più importante che mai.
Gli interpreti sono generalmente più facili da sviluppare rispetto ai compilatori e i loro programmi sono più portabili in base alla progettazione.
Che cos'è la traduzione ibrida?
La traduzione ibrida utilizza un compilatore e un interprete. La traduzione ibrida compila il codice sorgente di alto livello in un modulo di livello inferiore, ad esempio bytecode. Quindi utilizza un interprete per eseguire quel bytecode.
La traduzione ibrida può differire da un linguaggio di programmazione all'altro, ma utilizzerà questa struttura generale. Uno dei linguaggi di programmazione più popolari che utilizzano la traduzione ibrida è Java. Il compilatore Java traduce il suo codice sorgente in Codice byte della macchina virtuale Java (JVM).. L'interprete traduce quindi il bytecode JVM in codice macchina.
Quali linguaggi di programmazione utilizzano la traduzione ibrida?
Alcuni popolari linguaggi di programmazione ibrida includono:
- Giava
- C#
- Visual Basic
- Erlang
- F#
Con la traduzione ibrida, ottieni il meglio da entrambi i mondi. La prima compilazione del codice consente di risolvere i bug il prima possibile. Il bytecode creato dai compilatori ibridi è più facile da interpretare rispetto al codice sorgente di un programma di alto livello.
Il valore di conoscere i diversi metodi di traduzione
Dovresti comprendere il metodo di traduzione specifico utilizzato da una lingua, in particolare se lo stai utilizzando per un nuovo progetto. Un metodo di traduzione linguistica è una parte importante dell'identità di un linguaggio di programmazione. Può influenzare il modo in cui distribuisci il tuo programma e come gli utenti lo eseguiranno.
Ogni approccio traduttivo ha i suoi meriti. I principali linguaggi di programmazione come C++, Python e Java utilizzano tutti metodi di traduzione diversi. Accanto al paradigma di una lingua, il suo metodo di traduzione è uno dei tratti più importanti di cui dovresti essere a conoscenza.
Esistono diversi paradigmi che un linguaggio di programmazione può utilizzare. La maggior parte dei principali linguaggi di programmazione sono linguaggi multiparadigma; supportano l'uso di due o più paradigmi distinti. Tre dei paradigmi più popolari sono la programmazione imperativa, orientata agli oggetti e funzionale.