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
Il modello di esecuzione Python descrive il processo con cui il codice sorgente viene tradotto in bytecode ed eseguito dalla Python Virtual Machine.
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 Modello di esecuzione Python: bytecode e PVM
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”.
print("Ciao Python")
Questo semplice programma viene prima tradotto in bytecode e poi eseguito dalla Python Virtual Machine.
“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) |
1.8 Ambiti di utilizzo di Python
- didattica e formazione;
- data science e machine learning;
- intelligenza artificiale;
- automazione e scripting;
- sviluppo web;
- calcolo scientifico.
1.9 Riepilogo
- Python usa bytecode e PVM.
- È multi-paradigma.
- È orientato alla leggibilità.
- Comprendere il modello di esecuzione migliora la qualità del codice.
1.10 Domande tipiche d’esame
- Che differenza c’è tra compilazione e interpretazione?
- Cos’è il bytecode Python?
- Qual è il ruolo della PVM?
- Perché Python è multi-paradigma?
1.11 Esercizi
- Descrivi il percorso sorgente → bytecode → PVM.
- Confronta Python e C nel modello di esecuzione.
Nel prossimo capitolo analizzeremo l’ambiente di sviluppo Python, la struttura di un programma e i primi strumenti fondamentali per iniziare a scrivere codice in modo professionale.
Per approfondire il funzionamento interno del bytecode puoi consultare la
documentazione ufficiale Python.
➡️ Prosegui con il capitolo successivo:
Capitolo 2 – Ambiente di sviluppo e struttura di un programma Python