Ciao, e benvenuto nell'ottava puntata della sessantaquattresima stagione. Finora abbiamo parlato del processore come se ne esistesse un solo tipo. Ma non è così. Esistono famiglie diverse di processori, e ognuna parla la sua lingua, il suo assembly. Oggi scopriamo perché un programma pronto per una macchina non gira su un'altra, e perché questa piccola frizione ha plasmato buona parte della storia dell'informatica. Oggi parliamo di dialetti diversi, le famiglie di processori.
Partiamo dal fatto di base, che sorprende chi non lo sa. Il repertorio di istruzioni di cui abbiamo parlato, quei pochi ordini elementari, non è universale. Ogni famiglia di processori ha il suo insieme di istruzioni, con i suoi numeri, le sue regole, i suoi cassetti. È come se esistessero popoli diversi, ognuno con la sua lingua. L'idea di fondo è la stessa dappertutto: sposta, somma, confronta, salta. Ma le parole concrete, i numeri esatti che significano quelle operazioni, cambiano da famiglia a famiglia. Un ordine scritto nella lingua di una famiglia è puro rumore incomprensibile per un'altra. Non è una differenza di stile: è proprio che gli stessi numeri, dati a due processori diversi, vengono interpretati in modi del tutto scollegati, o non vengono capiti affatto.
Voglio parlarti delle due grandi famiglie di oggi, senza fare nomi. Nel mondo attuale dominano due grandi famiglie. Una è quella storica dei computer da tavolo e dei server: potente, ricca di istruzioni, cresciuta per decenni accumulando funzioni su funzioni, un po' barocca. L'altra è la famiglia che troviamo nei telefoni e, sempre più, nei portatili moderni: nata con una filosofia più snella, con un repertorio essenziale e ordinato, pensata anche per consumare poca energia. Due filosofie opposte: una che dice diamo al processore tanti ordini ricchi e complessi, l'altra che dice diamogli pochi ordini semplici, ma velocissimi e regolari.
Vediamo la conseguenza pratica, che tocchiamo tutti. Se ogni famiglia parla una lingua diversa, un programma tradotto nei numeri di una famiglia non può girare su un'altra: sarebbe come dare istruzioni in una lingua a chi ne capisce un'altra. Ecco perché, quando scarichi un programma, spesso devi scegliere la versione giusta per la tua macchina. E perché chi sviluppa software deve ricompilare, cioè rifare la traduzione, per ogni famiglia che vuole supportare. Quella riga di codice comodo che hai scritto una volta sola, dietro le quinte, diventa numeri diversi per ogni tipo di processore. È un lavoro invisibile ma costante, che pesa su chiunque distribuisca software: più famiglie vuoi raggiungere, più versioni devi preparare e mantenere.
Voglio collegarmi a una stagione precedente, perché il filo è bellissimo. Ti ricordi quando abbiamo parlato di una macchina astratta pensata per il web, quel formato portabile che gira ovunque? Ora puoi apprezzarlo meglio. Il suo scopo era proprio scavalcare questa frammentazione: invece di tradurre per ogni famiglia reale di processori, si traduce una volta sola nella lingua di una macchina finta, uguale ovunque, che poi ogni dispositivo esegue a modo suo. È un tentativo elegante di risolvere il problema dei dialetti: creare una lingua franca, che tutti si impegnano a capire, così da non dover più tradurre per ognuno.
Voglio darti l'immagine che rende chiara questa idea, perché la fissa. Immagina di aver scritto un discorso bellissimo nella tua lingua madre. Per pronunciarlo in vari paesi, devi farlo tradurre in ciascuna lingua locale: una fatica ripetuta per ogni tappa. È il ricompilare per ogni famiglia. La macchina astratta di cui parlavamo è invece come scegliere una lingua franca, capita da tutti gli interpreti del mondo: traduci il discorso una volta sola in quella, e poi ovunque vai c'è chi la converte al volo nella lingua del posto. Non elimini la traduzione, ma la fai una volta sola, e sposti la fatica sugli interpreti locali.
Voglio darti la lezione generale, perché parla di un dilemma eterno. La lezione è che c'è sempre una tensione tra andare vicino a una macchina specifica, sfruttandola al massimo, e restare portabili, girando ovunque ma senza sfruttare a fondo nessuna. L'assembly di una famiglia è il massimo dell'aderenza a quella macchina, ma è prigioniero di essa. Una lingua franca portabile gira dappertutto, ma paga qualcosa in efficienza e immediatezza. È lo stesso dilemma che incontriamo ovunque: specializzarsi e diventare insuperabili in un contesto, o restare generalisti e adattabili a molti. Non c'è una risposta giusta, c'è la scelta adatta al tuo scopo.
Per oggi ci fermiamo qui. Abbiamo scoperto che i processori parlano dialetti diversi. Ogni famiglia ha il suo repertorio di istruzioni: l'idea di fondo è sempre sposta, somma, confronta, salta, ma i numeri concreti cambiano. Oggi dominano due grandi famiglie: quella ricca e barocca dei computer da tavolo e dei server, e quella snella ed essenziale dei telefoni e dei portatili moderni. La conseguenza è che un programma va ricompilato per ogni famiglia, come un discorso da tradurre in ogni lingua. Ed è per scavalcare questo che sono nate le macchine astratte portabili, vere lingue franche. La lezione: c'è sempre una tensione tra aderire a una macchina e restare portabili. Nella prossima puntata: serve ancora imparare l'assembly? Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.