Ciao, e benvenuto nella quarta puntata della ventesima stagione. Nelle scorse puntate abbiamo scoperto il traduttore, lo strumento che converte ciò che scriviamo nella lingua della macchina. Oggi ci fermiamo su questo traduttore, perché esistono due modi profondamente diversi di svolgere questa traduzione, due filosofie che dividono il mondo dei linguaggi e che hanno conseguenze pratiche importanti. Sono il traduttore anticipato e l'interprete dal vivo. Oggi capiamo la differenza tra i due, e perché entrambi sopravvivono, ciascuno con i suoi pregi.
Partiamo dal primo modo, quello di tradurre tutto in anticipo. In questo approccio, prendi l'intero programma che hai scritto nel linguaggio umano, e lo dai a un traduttore che lo converte tutto, dall'inizio alla fine, nella lingua numerica della macchina, producendo una versione già completamente tradotta. Solo dopo, quando la traduzione è finita, quella versione tradotta viene eseguita dalla macchina. Prima si traduce tutto, poi si esegue. È come tradurre un intero libro da una lingua all'altra prima di pubblicarlo: fai tutto il lavoro di traduzione in anticipo, e poi il lettore legge la versione già tradotta, senza doverla tradurre mentre legge.
Il secondo modo è radicalmente diverso: tradurre ed eseguire mano a mano, un pezzo alla volta. In questo approccio, non traduci tutto in anticipo. C'è invece un programma speciale che prende il tuo programma e lo esegue leggendolo un pezzetto alla volta: legge un'istruzione nel linguaggio umano, la traduce e la esegue subito, poi passa alla successiva, la traduce e la esegue, e così via, procedendo mentre il programma gira. Traduzione ed esecuzione avvengono insieme, passo dopo passo. È come avere un interprete dal vivo a una conferenza, che traduce le frasi dell'oratore una per una, in tempo reale, mentre vengono pronunciate, invece di tradurre tutto il discorso in anticipo.
Vediamo i pregi e i difetti di ciascun modo, perché è qui che sta la scelta, e sono compromessi istruttivi. Il traduttore anticipato ha un grande vantaggio: siccome tutto il lavoro di traduzione è già stato fatto prima, l'esecuzione è molto veloce, la macchina esegue direttamente la versione già tradotta, senza perdere tempo a tradurre mentre va. Lo svantaggio è che c'è un passaggio di preparazione, la traduzione completa, da fare prima di poter eseguire, e ogni volta che modifichi il programma devi ritradurlo. È veloce all'esecuzione, ma richiede quel passo di preparazione anticipata.
L'interprete dal vivo ha i pregi e i difetti opposti, ed è utile vederli in specchio. Il suo vantaggio è la flessibilità e l'immediatezza: non c'è un passo di traduzione anticipata, puoi eseguire il programma subito, provarlo, modificarlo e riprovarlo all'istante, in un dialogo continuo e interattivo. È comodissimo per sperimentare e per correggere. Lo svantaggio è la velocità: siccome traduce mentre esegue, ogni volta, l'esecuzione è più lenta rispetto a quella già tradotta in anticipo, perché una parte del lavoro si ripete durante l'esecuzione. È flessibile e immediato, ma più lento nell'esecuzione.
Voglio farti capire perché entrambi questi approcci sopravvivono e prosperano, invece che uno solo vincere, perché la ragione è illuminante. La scelta dipende da cosa ti serve. Se hai bisogno della massima velocità di esecuzione, per un programma che gira intensamente, il traduttore anticipato è preferibile: paghi il passo di preparazione una volta, e guadagni velocità a ogni esecuzione. Se invece privilegi la comodità, la sperimentazione rapida, l'interattività, la facilità di modificare e riprovare al volo, l'interprete dal vivo è più adatto. Sono due punti diversi in quel compromesso eterno tra prestazioni e comodità che percorre tutta la stagione. Nessuno dei due è migliore in assoluto: sono adatti a esigenze diverse.
Voglio aggiungere una nota che riflette la realtà moderna, perché la distinzione, oggi, si è fatta più sfumata e interessante. Con il tempo, sono nate soluzioni astute che mescolano i due approcci, per prendere il meglio di entrambi: per esempio, tradurre il programma in una forma intermedia, non ancora i numeri della macchina finale ma qualcosa di più vicino, e poi far intervenire un esecutore che, dal vivo, completa il lavoro, magari accelerando le parti usate più spesso. Molti linguaggi moderni vivono in questa zona ibrida, combinando la velocità della traduzione anticipata con la flessibilità di quella dal vivo. La realtà, come spesso accade, è più ricca della divisione netta in due categorie: le idee si mescolano per catturare i vantaggi di entrambe.
Per oggi ci fermiamo qui. La traduzione da linguaggio umano a lingua della macchina può avvenire in due modi. Il traduttore anticipato converte tutto il programma prima di eseguirlo, come tradurre un libro prima di pubblicarlo: veloce all'esecuzione, ma con un passo di preparazione. L'interprete dal vivo traduce ed esegue un pezzo alla volta, come un interprete a una conferenza: flessibile e immediato, ottimo per sperimentare, ma più lento. Entrambi sopravvivono perché servono esigenze diverse, in quel compromesso tra prestazioni e comodità; e oggi molti linguaggi mescolano astutamente i due. Nella prossima puntata vediamo come si è messo ordine nel modo di scrivere programmi: dallo spaghetti alla struttura. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.