Il premio Turing 2020 a Aho e Ullman
Come probabilmente sapete, io non sono solamente un matematico (non praticante), ma anche un informatico (sempre non praticante: quando ho mai tempo di fare qualcosa?) Informatico teorico, per la precisione: non che io non sappia programmare, se serve, ma i miei studi sono stati sul versante teorico dell’informatica, che si era stabilizzato nella dozzina di anni precedenti alla mia laurea. Quando ho saputo che il premio Turing 2020 era stato assegnato ad Aho e Ullman, il mio primo pensiero è stato “come? non ce l’avevano già?”
Il premio Turing è per gli informatici quello che il premio Abel è per i matematici: l’equivalente di un Nobel. È ovvio che Alfred Nobel non avrebbe potuto immaginare di creare un premio per una branca della scienza che sarebbe nata più di mezzo secolo dopo la sua morte; ma in ogni caso immagino che – un po’ come per la matematica – avrebbe trovato l’informatica troppo poco pratica da meritare di essere nobilitata. Eppure non è proprio così! Alfred Aho e Jeffrey Ullman hanno cominciato a lavorare insieme nel posto più bello possibile negli anni ’60 per chi amava i computer: i Bell Labs. Nella loro collaborazione pluridecennale hanno stabilito una volta per tutte come dobbiamo misurare la validità di un algoritmo, nel loro testo del 1974 ‘The Design and Analysis of Computer Algorithms scritto con John Hopcroft, ma soprattutto nel 1977 hanno scritto “l’Aho-Ullman”: Principles of Compiler Design, il “libro del drago”.
Oggi la situazione è molto diversa dagli anni ’60 e ’70. La potenza dei computer attuali è tale da permettere spesso di scrivere la maggior parte dei programmi in un linguaggio interpretato (il computer traduce una riga per volta il codice sorgente in linguaggio macchina), salvo per le routine più critiche; allora non era così, e si costruivano i compilatori per tradurre e ottimizzare il codice sorgente e farlo girare più veloce. Solo che non era affatto facile scrivere un compilatore; ed ecco che Aho e Ullman tirano fuori un certo tipo di struttura per un linguaggio di programmazione che poteva essere trasformata senza grossi problemi in un compilatore, e spiegano nel libro come usare lex e yacc (se preferite le versioni GNU, flex e bison) per farti in casa il tuo compilatorino. Il corso di LFC – Linguaggi formali e compilatori – era praticamente una parafrasi di quel libro, per la precisione della seconda edizione in cui Ravi Sethi si era unito al duo. In pratica, almeno vent’anni di sviluppo dell’informatica sono merito o colpa loro.