Salta al contenuto
Note per Studenti Paradigmi di programmazione e linguaggi

Paradigmi di programmazione e linguaggi

In questa pagina 6

Algoritmo e programma

  • Algoritmo: sequenza finita di passi non ambigui che risolve un problema (trasforma un input in un output) e termina.
  • Programma: algoritmo scritto in un linguaggio di programmazione, eseguibile da un calcolatore.
  • Un linguaggio ha una sintassi (quali testi sono programmi validi) e una semantica (che cosa fa un programma valido).

Paradigmi

Un paradigma è un modo di strutturare il programma. Molti linguaggi ne supportano più di uno.

Paradigma Idea Esempi
Imperativo sequenza di istruzioni che modificano lo stato (variabili) C, Python, assembly
Procedurale imperativo organizzato in procedure/funzioni C, Python
A oggetti dati e operazioni raggruppati in oggetti; classi, incapsulamento, ereditarietà Python, Java, C++
Funzionale il programma è composizione di funzioni senza effetti collaterali; niente assegnamenti Haskell; in parte Python (lambda, map, comprensioni)
Dichiarativo / logico si descrive che cosa si vuole, non come ottenerlo SQL, Prolog

Lo stesso calcolo (somma dei quadrati dei pari) in stile imperativo e funzionale:

python
nums = [3, 4, 7, 10]

# imperativo
tot = 0
for x in nums:
    if x % 2 == 0:
        tot += x * x

# funzionale (espressione, nessuna variabile modificata)
tot = sum(x * x for x in nums if x % 2 == 0)   # 116

Livello del linguaggio

  • Basso livello: linguaggio macchina, assembly. Legati al processore, controllo totale.
  • Alto livello: astrazioni (variabili con nome, strutture di controllo, funzioni, tipi), indipendenti dall'hardware. Il C è considerato di "medio" livello perché dà accesso diretto alla memoria (puntatori).

Compilazione e interpretazione

Compilatore Interprete
Quando traduce tutto il sorgente prima dell'esecuzione istruzione per istruzione durante l'esecuzione
Prodotto file eseguibile in linguaggio macchina nessun eseguibile separato
Errori di tipo/sintassi segnalati in compilazione molti emergono solo quando la riga viene eseguita
Velocità alta più bassa
Esempio gcc per il C python

CPython (l'implementazione standard di Python) è ibrida: compila il sorgente in bytecode (file .pyc in __pycache__) che poi una macchina virtuale interpreta.

Python e C a confronto

Aspetto Python C
Esecuzione interpretato (bytecode) compilato in codice macchina
Tipi dinamici: il tipo è dell'oggetto, una variabile può riferirsi a oggetti di tipi diversi statici: ogni variabile ha un tipo dichiarato e fisso
Memoria gestita automaticamente (garbage collection) gestita dal programmatore (malloc/free)
Blocchi indentazione parentesi graffe
Interi precisione arbitraria dimensione fissa, overflow possibile
Strutture dati incorporate liste, dizionari, insiemi, stringhe Unicode array di dimensione fissa, struct
Uso tipico prototipazione, scripting, analisi dati sistemi operativi, embedded, codice ad alte prestazioni

Nel corso si parte da Python per i concetti di base (tipi, controllo del flusso, funzioni, sequenze, algoritmi) e si passa al C per vedere come gli stessi concetti si realizzano più vicino alla macchina: vedi Dal Python al CStruttura di un programma C, compilazione con gcc (preprocessore, compilatore, linker), main e valore di ritorno, dichiarazioni con tipo statico, printf di base; corrispondenze con Python.Dal Python al C →.

Errori tipici

  • Credere che "interpretato" significhi "senza traduzione": anche Python traduce, in bytecode.
  • Confondere tipizzazione dinamica (Python: il tipo si controlla a run-time) con tipizzazione debole: Python è dinamico ma forte ("3" + 4 dà errore, non converte da solo).

Teoria collegata