Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Panoramica sui linguaggi di programmazione

Breve analisi sul significato di linguaggio di programmazione, programma e traduttore
Breve analisi sul significato di linguaggio di programmazione, programma e traduttore
Link copiato negli appunti

In informatica, un linguaggio di programmazione può essere descritto come un insieme di regole
, che caratterizzano sintassi, semantica e lessico ben definiti. Tali formalismi sono indispensabili per l'implementazione di un canale di comunicazione tra uomo e computer.

Il linguaggio macchina è quello a più basso livello, fatto di sequenze binare (uno e zero) che compongono le istruzioni per il microprocessore.

Subito sopra questo livello abbiamo i linguaggi detti Assembly o Assembler con una impropria confusione tra linguaggio e traduttore (che vedremo a breve). L'Assembly fa una mappatura praticamente 1:1 con il linguaggio macchina, permettendoci di scrivere in forma mnemonica quelle istruzioni binarie, molto più complicate da decifrare.

Esempio di codice realizzato con il linguaggio Assembler

Esempio di codice realizzato con il 
linguaggio Assembler

Tra i suoi pro vi sono lo stretto legame con l'architettura del computer, la velocità e la potenza, mentre tra i contro si annoverano la lunghezza dei programmi, unitamente alla loro difficoltà di definizione e messa a punto.

Programmi e algoritmi

Un programma altro non è che una implementazione di un certo algoritmo (descritto da un diagramma di flusso), tramite un linguaggio eseguibile appunto su un computer.

Esempio di diagramma di flusso


Esempio di diagramma di flusso

Un linguaggio di programmazione è quindi un tramite fra linguaggio macchina e linguaggio naturale. Sua
peculiarità principale è perciò di essere privo di ambiguità e di descrivere la soluzione di un problema secondo criteri rigorosi.

Traduttori e compilatori

Il linguaggio macchina è l'unico direttamente interpretabile dal microprocessore, mentre qualsiasi altro linguaggio di programmazione più evoluto necessita di un traduttore.

Ulteriore distinzione può essere fatta tra programma sorgente, realizzato con un linguaggio di programmazione, e programma oggetto , realizzato invece in linguaggio macchina.

Il ruolo principale del traduttore


Il ruolo principale del traduttore

Il traduttore riveste pertanto il ruolo di software che deve tradurre un programma sorgente in un programma oggetto per renderlo interpretabile dal microprocessore. Sono individuabili tre tipi di traduttore: assemblatori, compilatori e interpreti.

Gli assemblatori hanno a che fare con i linguaggi a basso livello orientati alla macchina (Assembler), mentre compilatori e interpreti concernono i linguaggi ad alto livello orientati all'uomo. Tutti hanno il compito di fornire in
uscita istruzioni in linguaggio macchina
adatte ad essere coerentemente eseguite dall'unità centrale di elaborazione (CPU).

Nel linguaggio Assembler ogni istruzione corrisponde in modo quasi biunivoco a una sola istruzione nel linguaggio macchina. In un linguaggio ad alto livello a una istruzione corrispondono invece tipicamente moltissime istruzioni-macchina, rendendo pertanto il lavoro di traduzione più articolato.

Le caratteristiche principali di un linguaggio ad alto livello sono:

  • Migliore comprensione per un programmatore in quanto più vicino a quello naturale
  • Indipendenza dall'architettura del computer, senza dover conoscere le specifiche del processore
  • Individuazione di un linguaggio secondo determinati parametri

Un medesimo programma è eseguibile su computer diversi (e diverse CPU), utilizzando un compilatore dedicato.

Compilatori e interpreti sono software forzatamente più complessi rispetto agli assemblatori e le loro specifiche sono importanti per migliorare l'efficienza del programma finale.

Il compilatore riceve in ingresso (input) il codice sorgente del programma (file) e ha il compito di restituire in uscita (output) il cosiddetto programma oggetto composto da diversi elementi.

Un ulteriore strumento, il linker, ha poi il compito di collegare tra loro i vari moduli prodotti dal compilatore per ottenere un solo programma eseguibile, pronto per essere lanciato dall'utente.

Esempio di compilatore


Esempio di compilatore

Gli interpreti

L'interprete analizza invece una determinata parte del sorgente e la trasforma direttamente in una sequenza di istruzioni in linguaggio macchina, pronte per essere immediatamente eseguite. I compilatori offrono il vantaggio di riuscire a ottimizzare il codice e di realizzare programmi più veloci in esecuzione, mentre gli interpreti facilitano la fase di individuazione di errori (bug) presenti nel software.

Tra i linguaggi compilati si possono ricordare il Pascal e il C, mentre tra quelli interpretati vi sono ad esempio Visual Basic, HTML, Python e PHP, ciononostante per alcuni di essi esistono anche compilatori.

Esiste inoltre un modello ibrido, in cui il codice sorgente viene compilato in un linguaggio intermedio e quindi interpretato da una macchina virtuale (VM), la quale ha il ruolo di emulare a basso livello il comportamento di una macchina fisica, nel caso specifico la CPU. Viene pertanto favorita la portabilità del software, in quanto è sufficiente
avere a disponibile la Virtual Machine associata a un determinato microprocessore.Esempi di linguaggi di questo tipo sono C# e Java.

Affinché un traduttore sia in grado di operare correttamente è necessario che sia pienamente capace di interpretare il codice sorgente in base al linguaggio scelto. In questo senso assumono un significato determinante i concetti di sintassi e semantica che abbiamo già nominato.

La sintassi è in pratica costituita dalle regole necessarie a stabilire se un codice sia adeguatamente strutturato. La semantica è rappresentata dall'insieme di regole necessarie a fornire un corretto significato alle istruzioni del linguaggio. Per concludere si può affermare che per realizzare in modo coerente un programma occorre stabilire,
rispetto ai dati, le specifiche, i metodi di accesso, le operazioni da eseguire e il loro ordine di esecuzione.

Ciascun dato deve quindi essere accompagnato da un tipo e da una struttura. Il tipo serve a individuare l'elenco delle operazioni che possono essere eseguite, mentre la struttura deve fissare le relazioni tra i valori
associati ai dati.

Infine, per ogni linguaggio è previsto un sistema per lasciare commenti, ovvero delle annotazioni che gli sviluppatori possono lasciare sul codice e che vengono ignorate dal compilatore. Sono molto utili per mantenerne la leggibilità nel tempo da parte dei programmatori.

Ti consigliamo anche