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.

🔍 Approfondimento – Astrazione e produttività

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++):

  1. il compilatore traduce l’intero programma in codice macchina;
  2. viene prodotto un file eseguibile;
  3. 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:

  1. il file sorgente .py viene compilato internamente in un codice intermedio chiamato bytecode;
  2. 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”.

⚠️ Errore concettuale comune

“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

  1. Che differenza c’è tra compilazione e interpretazione?
  2. Cos’è il bytecode Python e quale ruolo ha la PVM?
  3. Perché Python è definito un linguaggio ad alto livello?
  4. In che senso Python è multi-paradigma?
  5. Confronta il modello di esecuzione di Python con quello del C (evidenziando almeno due differenze).

1.11 Esercizi

Esercizi di comprensione

  1. Spiega perché Python non produce un file eseguibile nativo come un programma C.
  2. Elenca due vantaggi e due svantaggi dei linguaggi interpretati.

Esercizi concettuali

  1. Descrivi, in forma di schema, il percorso completo di esecuzione di un programma Python (sorgente → bytecode → PVM).
  2. Confronta Python e Java dal punto di vista della gestione della memoria e del modello di esecuzione.