Manuale completo: vai all’indice del corso
Capitolo 1 – Linguaggi di programmazione e modello di esecuzione di Python
Materiale originale a cura di Alfredo Di Fiore – megistone.it
1.1 Obiettivi formativi
Al termine di questo capitolo lo studente sarà in grado di:
- comprendere cosa sia un linguaggio di programmazione e il suo ruolo nei sistemi di calcolo;
- distinguere tra linguaggi compilati, interpretati e ibridi;
- descrivere il modello di esecuzione di Python;
- collocare Python nel panorama dei linguaggi moderni;
- confrontare Python con linguaggi come C e Java dal punto di vista concettuale.
1.2 Cos’è un linguaggio di programmazione
Un linguaggio di programmazione è un linguaggio formale utilizzato per descrivere algoritmi, cioè
procedure finite e non ambigue che consentono di risolvere un problema computazionale.
Un linguaggio di programmazione è caratterizzato da:
- sintassi: insieme delle regole che stabiliscono come scrivere correttamente le istruzioni;
- semantica: significato delle istruzioni, ovvero cosa esse fanno durante l’esecuzione;
- pragmatica: modalità con cui il linguaggio viene utilizzato per risolvere problemi reali.
Il calcolatore, tuttavia, non comprende direttamente i linguaggi di programmazione: esso esegue esclusivamente
codice macchina, costituito da sequenze binarie.
1.3 Livelli di astrazione dei linguaggi
I linguaggi di programmazione possono essere classificati in base al livello di astrazione rispetto all’hardware.
-
Linguaggi a basso livello (linguaggio macchina, assembly): consentono un controllo diretto dell’hardware,
ma sono difficili da usare e poco portabili. - Linguaggi ad alto livello (C, C++, Java, Python): offrono costrutti più vicini al ragionamento umano e maggiore portabilità.
Python è un linguaggio ad alto livello, progettato per ridurre la distanza tra il problema da risolvere e il codice che lo descrive.
Un maggiore livello di astrazione comporta in genere:
- aumento della produttività del programmatore;
- riduzione degli errori;
- minore controllo diretto sull’hardware.
Python privilegia leggibilità e chiarezza rispetto all’ottimizzazione a basso livello.
1.4 Compilazione e interpretazione
Per eseguire un programma è necessario tradurre il codice sorgente in una forma comprensibile dalla CPU.
Esistono tre modelli principali: compilazione, interpretazione e modelli ibridi.
1.4.1 Linguaggi compilati
Nei linguaggi compilati (es. C, C++):
- il compilatore traduce l’intero programma in codice macchina;
- viene prodotto un file eseguibile;
- l’eseguibile può essere eseguito più volte senza ricompilazione.
Vantaggi: esecuzione veloce, controllo fine delle risorse.
Svantaggi: minore flessibilità, maggiore complessità di sviluppo.
1.4.2 Linguaggi interpretati
Nei linguaggi interpretati il codice sorgente viene tradotto ed eseguito istruzione per istruzione da un interprete,
senza generare un eseguibile autonomo.
Vantaggi: semplicità, facilità di debug.
Svantaggi: prestazioni inferiori rispetto ai compilati.
1.5 Il modello di esecuzione di Python
Python utilizza un modello ibrido. Il codice Python segue tipicamente questo percorso:
- il file sorgente
.pyviene compilato internamente in un codice intermedio chiamato bytecode; - il bytecode viene eseguito dalla Python Virtual Machine (PVM).
Il bytecode è indipendente dall’hardware, può essere memorizzato (ad esempio in file .pyc)
e permette prestazioni migliori rispetto a una pura interpretazione “riga per riga”.
“Python non è compilato”.
Falso: Python compila il sorgente in bytecode, ma non produce un eseguibile nativo come C o C++.
1.6 Python come linguaggio multi-paradigma
Python supporta più paradigmi di programmazione, tra cui:
- programmazione procedurale;
- programmazione orientata agli oggetti;
- programmazione funzionale (in parte).
Questa flessibilità rende Python adatto sia all’insegnamento sia allo sviluppo professionale.
1.7 Confronto concettuale: Python, C, Java
| Caratteristica | C | Java | Python |
|---|---|---|---|
| Livello | Medio-basso | Alto | Alto |
| Modello di esecuzione | Compilato nativo | Bytecode + VM | Bytecode + PVM |
| Tipizzazione | Statica | Statica | Dinamica (forte) |
| Gestione memoria | Manuale | Automatica (GC) | Automatica (GC) |
| Sintassi | Più verbosa | Strutturata | Essenziale e leggibile |
1.8 Ambiti di utilizzo di Python
Python è utilizzato in numerosi contesti, tra cui:
- didattica e formazione;
- data science e machine learning;
- intelligenza artificiale;
- automazione e scripting;
- sviluppo web;
- calcolo scientifico.
La sua diffusione è legata alla combinazione di una sintassi chiara, un ecosistema di librerie ampio e una comunità molto attiva.
1.9 Riepilogo
- Un linguaggio di programmazione è un linguaggio formale per descrivere algoritmi.
- Python è un linguaggio ad alto livello che esegue codice tramite bytecode e PVM.
- Il suo modello di esecuzione è ibrido: compilazione interna + interpretazione del bytecode.
- Python è multi-paradigma e orientato alla leggibilità.
- Comprendere come Python esegue il codice aiuta a programmare in modo più consapevole.
1.10 Domande tipiche d’esame
- Che differenza c’è tra compilazione e interpretazione?
- Cos’è il bytecode Python e quale ruolo ha la PVM?
- Perché Python è definito un linguaggio ad alto livello?
- In che senso Python è multi-paradigma?
- Confronta il modello di esecuzione di Python con quello del C (evidenziando almeno due differenze).
1.11 Esercizi
Esercizi di comprensione
- Spiega perché Python non produce un file eseguibile nativo come un programma C.
- Elenca due vantaggi e due svantaggi dei linguaggi interpretati.
Esercizi concettuali
- Descrivi, in forma di schema, il percorso completo di esecuzione di un programma Python (sorgente → bytecode → PVM).
- Confronta Python e Java dal punto di vista della gestione della memoria e del modello di esecuzione.