Linguaggi

Cos’è un linguaggio di programmazione?

Un linguaggio di programmazione è un linguaggio informatico formato e caratterizzato da un insieme di regole. Un linguaggio di programmazione viene utilizzato per descrivere un algoritmo, ossia un procedimento che risolve un determinato problema attraverso un numero finito di passi elementari.

In un linguaggio di programmazione si possono distinguere:

  • le parole chiavi;
  • i caratteri speciali;
  • un insieme di regole sintattiche.

Le parole chiavi descrivono l’insieme di parole che possono descrivere un’istruzione ben definita. Le parole chiavi sono utilizzate in modo appropriato e preciso, ad esempio non è possibile usare in C++ una variabile con nome include, in quanto risulta essere una parola chiave utilizzata per includere ed agganciare delle librerie al programma principale.

I caratteri speciali sono un insieme di caratteri con significati particolari e ben definiti. Per esempio, in C++, sono caratteri speciali:

  • il carattere (#) che definisce l’inclusione di una libreria;
  • il carattere punto e virgola (;) che viene utilizzato per far terminare un’istruzione;
  • il carattere virgola (,) utilizzato per delimitare i componenti di un elenco.

Un insieme di regole sintattiche, sono regole utilizzate per formare istruzioni complesse.

Tipi di linguaggi di programmazione.

Bisogna precisare che il processore riconosce codice macchina, si tratta quindi di sequenze costituite da una serie di 0 e 1 (bit). Il codice macchina non è un codice comprensibile all’uomo, esso risulta complicato da interpretare ed implementare in quanto più vicino alla macchina. Pertanto, si è pensato di progettare linguaggi intermedi meglio comprensibili all’uomo. Resta inteso che i linguaggi comprensibili all’uomo, linguaggi di programmazione, devono essere trasformati in linguaggio macchina per poi essere utilizzati dal processore.

L’Assembly è un  linguaggio di programmazione a basso livello, con caratteristiche che ne permettono la trasformazione in linguaggio macchina in modo veloce ed univoco, ogni istruzione del programma assembly viene trasformata in uno o più byte, il primo è sempre un byte di codice operativo (byte che contiene l’operazione da eseguire), gli altri byte dell’istruzione possono essere byte dati o byte indirizzo.

E’ chiaro che per programmare in assembly, bisogna conoscere molto bene l’architettura del computer ed in particolare il tipo di processore sul quale si andrà ad eseguire il programma. Ogni processore può avere il proprio linguaggio macchina e le proprie tecniche di indirizzamento sia dei registri sia della memoria. Bisogna, pertanto, sottolineare il fatto che un programma assembly ha il problema della portabilità, ossia non può essere usato su tutte le macchine.

Per i problemi descritti precedentemente, dovuti alla portabilità e alla complessità dei linguaggi di programmazione, si sono evoluti i linguaggi ad alto livello.

Un linguaggio di programmazione ad alto livello è caratterizzato da una significativa astrazione dei dettagli del funzionamento del processore e quindi delle caratteristiche del linguaggio macchina. I linguaggi di programmazione ad alto livello sono stati progettati per consentire al programmatore di utilizzare istruzioni la cui sintassi risulta più vicina al linguaggio naturale.

Linguaggi imperativi e funzionali.

Appartengono alla famiglia dei linguaggi di programmazione ad alto livello due tipologie di linguaggi:

Linguaggi imperativi;

Linguaggi funzionali.

Linguaggio imperativo

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.

Linguaggio funzionale

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à.

Interpretazione e compilazione

I linguaggi informatici possono grossomodo essere classificati in due categorie:

Linguaggi interpretati

Linguaggi compilati.

Linguaggio interpretato

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.

Linguaggio compilato

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.).

Linguaggi intermedi

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).

Alcuni esempi di linguaggio correntemente usati

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