Viene detto linguaggio di programmazione un linguaggio destinato a descrivere l'insieme di azioni consecutive che un computer deve eseguire. Questo tipo di linguaggio è anche un modo pratico, per noi umani, di dare delle istruzioni a un computer. Un linguaggio di programmazione si distingue dal linguaggio naturale, il che racchiude le codifiche di espressione condivise da un gruppo di individui (le lingue, l'inglese o l'italiano sono linguaggi naturali).
I linguaggi che servono ai computer per comunicare fra loro non hanno niente a che vedere con gli altri linguaggi di programmazione, infatti in questo caso si parla di protocolli di comunicazione, due nozioni totalmente diverse. Un linguaggio di programmazione è rigoroso: ad ogni istruzione corrisponde un'azione del processore .
Il linguaggio usato dal processore è detto codice macchina. Si tratta di dati come quelli che arrivano al processore, costituiti da una serie di 0 e di 1 (codici binari). Il linguaggio macchina non comprensibile all'uomo è intramezzato da linguaggi intermedi messi a punto per essere compresi dall'uomo. Il codice scritto in questo tipo di linguaggio è poi trasformato in linguaggio macchina per essere utilizzabile dal processore.
L'Assembly è il primo linguaggio informatico che è stato utilizzato. Questo è molto simile al linguaggio macchina ma resta comprensibile agli sviluppatori. Tuttavia, un linguaggio simile assomiglia talmente al linguaggio macchina che dipende strettamente dal tipo di processore usato (ciascun tipo d processore può avere il proprio linguaggio macchina). Così, un programma sviluppato per una macchina non potrà essere portato su un altro tipo di macchina. Il termine «portabilità» designa l'attitudine di un programma informatico ad essere utilizzato su macchine di tipo diverso. Per usare un programma informatico scritto in Assembly su un altro tipo di macchina, sarà talvolta necessario riscrivere completamente il programma. Un linguaggio informatico ha quindi più vantaggi:
È più comprensibile rispetto ad un linguaggio macchina;
Permette una maggiore portabilità, cioè una maggiore facilità di adattamento su macchine di tipo diverso.
Distinguiamo solitamente due grandi famiglie di linguaggi di programmazione, secondo il modo in cui le istruzioni vengono trattate: una appartenente ai linguaggi imperativi; l'altra appartenente ai linguaggi funzionali.
Un linguaggio imperativo organizza il programma come una serie di istruzioni, raggruppate in blocchi e comprendenti dei salti condizionali che permettono di ritornare ad un blocco di istruzioni se la condizione è realizzata. Si tratta storicamente dei primi linguaggi, anche se molti linguaggi moderni usano ancora questo principio di funzionamento. I linguaggi imperativi strutturati soffrono tuttavia di una mancanza di flessibilità dato il carattere sequenziale delle istruzioni.
Un Linguaggio funzionale (detto talvolta linguaggio procedurale) è un linguaggio nel quale il programma è costruito per funzioni, rinviando un nuovo stato in uscita e prendendo in entrata l'uscita di altre funzioni. Se la funzione si chiama da sola, allora si parla di periodicità.
I linguaggi informatici possono grossomodo essere classificati in due categorie: Linguaggi interpretati e Linguaggi compilati.
Un linguaggio informatico è per definizione diverso dal linguaggio macchina. Bisogna quindi tradurlo per renderlo leggibile dal punto di vista del processore. Un programma scritto in un linguaggio interpretato ha bisogno di un programma ausiliario (l'interprete) per tradurre man mano le istruzioni de programma.
Un programma scritto in un linguaggio detto «compilato» sarà tradotto una volta per tutte da un programma specifico, detto compilatore, per creare un nuovo file che sarà autonomo, cioè che non avrà bisogno di un altro programma per essere eseguito; si dice allora che il file è eseguibile.
Un programma scritto in un linguaggio compilato ha come vantaggio di non aver più bisogno, una volta compilato, del programma specifico per essere eseguito. Inoltre, essendo la traduzione fatta una volta per tutte, sarà di più rapida esecuzione. Tuttavia esso è meno flessibile rispetto ad un programma scritto con un linguaggio interpretato dato che ad ogni modifica del file sorgente (file intellegibile dall'uomo: quelle che deve essere compilato) bisognerà ricompilare il programma affinché le modifiche diventino effettive.
D'altra parte, un programma compilato ha come vantaggio di garantire la sicurezza del codice sorgente. In effetti, un linguaggio interpretato, essendo direttamente leggibile, permette a chiunque di conoscere i segreti di fabbricazione di un programma e quindi di copiare il codice o anche di modificarlo. Vi è dunque il rischio del non-rispetto dei diritti di autore. Così, alcune applicazioni sicure necessitano della confidenzialità del codice per evitare la pirateria (transazioni bancarie, pagamento in linea, comunicazioni sicure, ecc.).
Alcuni linguaggi appartengono in qualche modo alle due categorie (LISP, Java, Python, ecc.) dato che il programma scritto con questi linguaggi può in alcune condizioni subire una fase di compilazione intermedia verso un file scritto in un linguaggio che non è leggibile (quindi diversi dal file sorgente) e non eseguibili (necessità di un interprete). Gli applet Java, piccoli programmi inseriti a volte nelle pagine web, sono dei file che sono compilati ma che si possono eseguire solo partendo da un navigatore internet (sono dei file con estensione est .class).
Qui di seguito una lista non esaustiva di linguaggi informatici esistenti:
Linguaggio | Dominio di applicazione principale | Compilato/interpretato |
---|---|---|
ADA | Il tempo reale | Linguaggio compilato |
BASIC | Programmazione di base a scopo educativo | Linguaggio interpretato |
C | Programmazione di sistema | Linguaggio compilato |
C++ | Programmazione di sistema oggetto | Linguaggio compilato |
Cobol | Gestione | Linguaggio compilato |
Fortran | Calcolo | Linguaggio compilato |
Java | Programmazione orientata internet | Linguaggio intermedio |
MATLAB | Calcolo matematico | Linguaggio interpretato |
Mathematica | Calcolo matematico | Linguaggio interpretato |
LISP | Intelligenza artificiale | Linguaggio intermedio |
Pascal | Insegnamento | Linguaggio compilato |
PHP | Sviluppo di siti web dinamici | linguaggi interpretati |
Prolog | Intelligenza artificiale | Linguaggio interpretato |
Perl | Trattamento di stringhe di caratteri | Linguaggio interpretato |
Foto: © Pixabay.