Slide da Universitas Studiorum Tergestum su Programmazione Informatica. La Pdf esplora i concetti fondamentali dei linguaggi di programmazione, la loro classificazione e i paradigmi, con un focus sul linguaggio macchina. Questo materiale di Informatica per l'Università è utile per comprendere i principi base dell'informatica.
Mostra di più18 pagine
Visualizza gratis il Pdf completo
Registrati per accedere all’intero documento e trasformarlo con l’AI.
Un linguaggio di programmazione è un insieme strutturato di regole e simboli che permettono ai programmatori di scrivere istruzioni comprensibili da una macchina, ovvero il computer. L'obiettivo di questi linguaggi è rendere più facile e intuitivo il processo di creazione di programmi che realizzano operazioni specifiche. Le istruzioni sono tradotte in linguaggio macchina, il quale può essere eseguito direttamente dalla CPU. Tuttavia, senza un linguaggio di programmazione, i programmatori dovrebbero scrivere i programmi usando solo sequenze di 0 e 1, rendendo il compito estremamente complesso.
Modello di sviluppo software che definisce come i problemi dovrebbero essere risolti e come i programmi dovrebbero essere strutturati. Esistono diversi paradigmi che influenzano la sintassi e la semantica dei linguaggi di programmazione.
Il linguaggio macchina è la forma più elementare di linguaggio di programmazione. È composto esclusivamente da sequenze binarie di 0 e 1 (bit), che rappresentano istruzioni comprensibili ed eseguibili direttamente dalla CPU. Ogni processore ha il suo set di istruzioni, chiamato Instruction Set Architecture (ISA), che specifica le operazioni che può eseguire, come sommare numeri, caricare dati in memoria o saltare a un'altra istruzione. Il linguaggio macchina è strettamente legato all'hardware e ogni tipo di processore ha il suo specifico linguaggio macchina. Ad esempio, un programma scritto per un processore Intel non funzionerà direttamente su un processore ARM, poiché utilizzano ISA differenti.
Supponiamo di voler sommare due numeri interi (ad esempio 5 e 3). La CPU eseguirebbe una serie di istruzioni binarie come le seguenti: - Caricamento del numero 5 in un registro: 10110000 00000101 Questo codice potrebbe significare "carica il valore 5 nel registro A". - Caricamento del numero 3 in un altro registro: 10110001 00000011 Questo codice potrebbe significare "carica il valore 3 nel registro B". - Somma dei due registri: 00000011 11000010 Questo codice potrebbe significare "somma i valori dei registri A e B".
Il linguaggio assembly è una rappresentazione testuale e mnemonica del linguaggio macchina. Permette ai programmatori di scrivere codice in una forma più leggibile rispetto al codice binario, ma rimane comunque molto vicino all'hardware. Ogni istruzione in assembly corrisponde direttamente a un'istruzione in linguaggio macchina. In assembly, invece di lavorare con numeri binari, si utilizzano abbreviazioni chiamate mnemonici che rappresentano operazioni di base. Per esempio, l'istruzione "ADD" potrebbe rappresentare un'operazione di somma, e "MOV" potrebbe rappresentare lo spostamento di dati da una locazione a un'altra.
Supponiamo di voler sommare due numeri interi, come nel caso del linguaggio macchina: - Caricamento del numero 5 in un registro: MOV AX, 5 - Caricamento del numero 3 in un altro registro: MOV BX, 3 - Somma dei valori nei registri AX e BX: ADD AX, BX - Risultato: Dopo l'istruzione ADD, il registro AX conterrà il valore 8, che è la somma di 5 e 3.
Caratteristica Linguaggio Macchina Linguaggio Assembly Rappresentazione Codice binario (sequenze di 0 e 1) Mnemonici (abbreviazioni testuali) Leggibilità Molto difficile per gli esseri umani Relativamente più leggibile Esecuzione diretta Eseguibile direttamente dalla CPU Deve essere tradotto in linguaggio macchina dall'assemblatore Astrazione Nessuna astrazione, massimo controllo sull'hardware Bassa astrazione, ma più leggibile rispetto al linguaggio macchina Mantenibilità del codice Molto difficile da mantenere Più semplice rispetto al linguaggio macchina, ma comunque complesso
Per tradurre il codice sorgente (scritto dal programmatore) in codice eseguibile dalla CPU, sono necessari strumenti che eseguano questa traduzione. Qui entrano in gioco compilatori e interpreti, che sono due modi differenti di trasformare il codice sorgente in codice macchina. Un compilatore è un programma che prende in ingresso il codice sorgente di un programma e lo traduce completamente in linguaggio macchina prima che il programma venga eseguito. Questa traduzione crea un file eseguibile, che può essere lanciato in un secondo momento senza la necessità di ritradurre il codice. Un interprete è un programma che legge e interpreta il codice sorgente linea per linea o istruzione per istruzione, traducendo ed eseguendo il codice in tempo reale senza produrre un file eseguibile separato.
Caratteristica Compilatore Interprete Modalità di traduzione Traduce l'intero programma in linguaggio macchina prima dell'esecuzione. Traduce ed esegue il programma istruzione per istruzione. Tempo di esecuzione Il codice tradotto viene eseguito in modo indipendente dal compilatore, quindi l'esecuzione è molto veloce. L'esecuzione è generalmente più lenta, perché ogni istruzione deve essere tradotta al momento dell'esecuzione. File eseguibile Genera un file eseguibile Non genera un file eseguibile. L'interprete deve essere presente ogni volta che si esegue il programma. Diagnosi di errori Gli errori vengono rilevati prima dell'esecuzione, durante la fase di compilazione. Gli errori vengono rilevati durante l'esecuzione, istruzione per istruzione. Efficienza Poiché tutto il codice è tradotto in un'unica volta, i programmi compilati tendono a essere più efficienti in fase di esecuzione. L'esecuzione può essere più lenta, poiché ogni istruzione viene interpretata al volo. Esempi di linguaggi C, C++, Java Python, Ruby, JavaScript, R