Linguaggio di programmazione

In informatica, qualsiasi linguaggio artificiale utilizzabile per definire una sequenza di istruzioni in modo che un computer possa elaborarla ed eseguirla. Definire esattamente che cosa sia un linguaggio di programmazione può essere delicato, ma il suo uso implica che la trasposizione delle istruzioni scritte in tale linguaggio in codici comprensibili al computer possa avvenire con un processo completamente sistematico. Infatti, tale trasposizione è svolta normalmente da un computer.

Linguaggi di basso livello

Al livello di descrizione più basso, i microprocessori trattano esclusivamente segnali elettronici binari. Fornire un'istruzione a un microprocessore significa, in realtà, inviargli, con temporizzazione accurata, un insieme di segnali a due livelli. Questo insieme di segnali è detto un "codice macchina". Ogni codice può rappresentare un numero o un altro dato, o un'istruzione per manipolare tali numeri e dati. Per rendere più comprensibili i codici macchina, si assegna a ciascuno di essi un nome mnemonico (in inglese), come STORE, ADD o JUMP. L'insieme delle istruzioni mnemoniche è detto linguaggio assembly: un linguaggio di livello molto basso, specifico di un particolare microprocessore.

La programmazione con linguaggi assembly porta a programmi assai veloci, ma questa tecnica è di difficile apprendimento. Altro limite più importante dei programmi scritti con linguaggi a basso livello è il legame con lo specifico processore, che costringe alla riscrittura se si vuol trasferire il programma su un'altra macchina.

Linguaggi di alto livello

Normalmente si pensa ai computer come a macchine in grado di svolgere funzioni come calcoli o elaborazioni di testi. Questo punto di vista, rispetto a quello descritto sopra, è un punto di vista di alto livello. C'è un alto livello di astrazione tra le azioni che noi attribuiamo al computer e ciò che esso realmente "capisce". In modo simile, vi sono relazioni complesse tra i linguaggi di programmazione di alto livello e i codici macchina.

I linguaggi di alto livello sono normalmente facili da imparare, poiché sono composti con espressioni vicine a un linguaggio parlato, come l'inglese. Nel BASIC, il più familiare dei linguaggi di alto livello, un comando del tipo "IF COUNT = 10 THEN STOP" può essere usato per chiedere al computer di arrestarsi quando la variabile COUNT è uguale a 10. Sfortunatamente, molte persone trovano frustranti i computer, poiché questi, mentre pare che capiscano l'inglese, in realtà obbediscono solo a frasi standard in un modo rigido, schematico e letteralmente inumano.

Interpreti e compilatori

Trasporre una sequenza di istruzioni in linguaggio assembly (codice sorgente) nella corrispondente sequenza di codici macchina (codice oggetto) è un procedimento semplice, svolto di solito da un tipo di programma detto compilatore. La trasposizione analoga a partire da un codice sorgente di alto livello può essere ottenuta con un compilatore più complesso o con un "interprete".

Un compilatore letteralmente compila una sequenza di istruzioni in codice macchina, in base al codice sorgente. Il codice oggetto risultante è un programma pronto per l'elaborazione, che risulta molto veloce ma che può bloccare il computer. Gli interpreti, d'altra parte, sono molto più lenti dei compilatori, poiché non producono un codice oggetto. Infatti essi scandiscono il codice sorgente istruzione per istruzione. Ogni istruzione viene tradotta singolarmente e i relativi codici macchina vengono eseguiti, e ciò avviene anche per i cicli ripetitivi, in cui la stessa successione di istruzioni viene ripercorsa più volte. Ne risulta un'esecuzione che, benché lenta, è meno soggetta a guasti che non un programma compilato.